Преглед на файлове

ref: Styles refactor (#13196)

Move some styles from SCSS to JSS
Remove unnecessary styles
Remove feedback stars animation option
factor2
Robert Pintilii преди 2 години
родител
ревизия
cc91cfe7b5
No account linked to committer's email address

+ 0
- 8
css/_recording.scss Целия файл

@@ -197,14 +197,6 @@
197 197
         padding-bottom: 10px;
198 198
     }
199 199
 
200
-    .helper-link {
201
-        cursor: pointer;
202
-        font-weight: bold;
203
-        display: inline-block;
204
-        flex-shrink: 0;
205
-        margin-left: auto;
206
-    }
207
-
208 200
     .warning-text {
209 201
         color:#FFD740;
210 202
         font-size: 12px;

+ 0
- 101
css/components/_button-control.scss Целия файл

@@ -1,101 +0,0 @@
1
-.button-control {
2
-    box-sizing: border-box;
3
-    display: inline-block;
4
-    border: 1px solid $buttonBorder;
5
-    vertical-align: baseline;
6
-    height: 30px;
7
-    min-width: 60px;
8
-    padding: 4px 10px;
9
-    margin: 0;
10
-    line-height: 1.5em;
11
-    outline: none;
12
-    background-color: transparent;
13
-    float: right;
14
-    font-size: 14px;
15
-    margin-left: 10px;
16
-    color: $buttonColor;
17
-    font-weight: $buttonFontWeight;
18
-    @include transition(background-color .1s ease-out);
19
-
20
-    &[disabled] {
21
-        color: #666;
22
-        cursor: default;
23
-    }
24
-
25
-    &_full-width {
26
-        margin: 0;
27
-        width: 100%;
28
-    }
29
-
30
-    &:hover {
31
-        border: 1px solid $buttonHoverBorder;
32
-        background-color: $buttonHoverBackground;
33
-        @include transition(background-color .1s ease-in);
34
-    }
35
-
36
-    &:active {
37
-        @include box-shadow(0, 0, 1px, $buttonShadowColor, true);
38
-    }
39
-
40
-    &_light {
41
-        color: $defaultDarkColor;
42
-        background-color: $buttonLightBackground;
43
-        border: 1px solid $buttonLightBorder;
44
-
45
-        &:hover {
46
-            border: 1px solid $buttonLightHoverBorder;
47
-            background-color: $buttonLightHoverBackground;
48
-        }
49
-    }
50
-
51
-    &_link {
52
-        color: $buttonLinkColor;
53
-        background-color: $buttonLinkBackground;
54
-
55
-        &:hover {
56
-            background-color: $buttonLinkBackground;
57
-        }
58
-    }
59
-
60
-    &_overlay {
61
-        color: $primaryButtonColor;
62
-        background-color: $overlayButtonBg;
63
-        border-radius: 2px;
64
-        border: none;
65
-
66
-        &:hover {
67
-            background-color: $primaryButtonBackground;
68
-            border: none;
69
-        }
70
-    }
71
-
72
-    &_primary {
73
-        background-color: $primaryButtonBackground;
74
-        border: 1px solid $primaryButtonBackground;
75
-        color: $primaryButtonColor !important;
76
-        font-weight: $primaryButtonFontWeight;
77
-
78
-        &:hover {
79
-            border: 1px solid $primaryButtonHoverBackground;
80
-            background-color: $primaryButtonHoverBackground;
81
-        }
82
-
83
-        &[disabled] {
84
-            color: $primaryButtonColor;
85
-        }
86
-    }
87
-
88
-    &_close {
89
-        color: $defaultFontColor;
90
-    }
91
-    &_submit {
92
-        color: $linkFontColor;
93
-        &:hover {
94
-            color: $linkHoverFontColor;
95
-        }
96
-    }
97
-
98
-    &_center {
99
-        float: none !important;
100
-    }
101
-}

+ 0
- 49
css/components/_form-control.scss Целия файл

@@ -1,49 +0,0 @@
1
-.form-control {
2
-    padding: $formPadding 0;
3
-
4
-    &:first-child {
5
-        padding-top: 0;
6
-    }
7
-
8
-    &:last-child {
9
-        padding-bottom: 0;
10
-    }
11
-
12
-    &__text {
13
-        margin: 8px 0;
14
-        font-size: 1em
15
-    }
16
-
17
-    &__label {
18
-        font-size: 1em;
19
-        font-weight: $labelFontWeight;
20
-    }
21
-
22
-    &__em {
23
-        color: $inputControlEmColor;
24
-    }
25
-
26
-    &__container {
27
-        position: relative;
28
-        width: 100%;
29
-        margin-top: 5px;
30
-        margin-bottom: 5px;
31
-        @include flex();
32
-
33
-        .button-control {
34
-            margin: 1px 0 1px 10px;
35
-        }
36
-    }
37
-
38
-    &__right {
39
-        position: absolute;
40
-        right: 0;
41
-    }
42
-}
43
-
44
-/**
45
- * Set a specific color for read only style.
46
- */
47
-input:read-only {
48
-    color: $readOnlyInputColor;
49
-}

+ 0
- 29
css/components/_input-control.scss Целия файл

@@ -1,29 +0,0 @@
1
-.input-control {
2
-    @include transition(all .2s ease-in);
3
-    display: inline-block;
4
-    width: 100%;
5
-    padding: 5px 7px;
6
-    border-radius: $borderRadius;
7
-    line-height: 32px;
8
-    height: 32px;
9
-    text-align: left;
10
-    margin-bottom: 8px;
11
-
12
-    &:last-child {
13
-        margin-bottom: inherit;
14
-    }
15
-
16
-    &::selection {
17
-        background-color: $defaultDarkSelectionColor;
18
-    }
19
-
20
-
21
-    &.error {
22
-        color: $errorColor;
23
-        border-color: $errorColor;
24
-    }
25
-}
26
-
27
-@include placeholder {
28
-    color: $placeHolderColor;
29
-}

+ 0
- 20
css/components/_link.scss Целия файл

@@ -1,20 +0,0 @@
1
-.link {
2
-    cursor: pointer;
3
-    color: $linkFontColor;
4
-    @include transition(color .1s ease-out);
5
-
6
-    &:hover {
7
-        color: $linkHoverFontColor;
8
-        text-decoration: underline;
9
-        @include transition(color .1s ease-in);
10
-    }
11
-}
12
-
13
-/**
14
- * Helper links are links that are meant to open a documentation page or more
15
- * detailed info.
16
- */
17
-.helper-link {
18
-    @extend .link;
19
-    font-size: 12px;
20
-}

+ 0
- 6
css/main.scss Целия файл

@@ -33,8 +33,6 @@ $flagsImagePath: "../images/";
33 33
 @import 'mini_toolbox';
34 34
 @import 'modals/desktop-picker/desktop-picker';
35 35
 @import 'modals/dialog';
36
-@import 'modals/embed-meeting/embed-meeting';
37
-@import 'modals/feedback/feedback';
38 36
 @import 'modals/invite/info';
39 37
 @import 'modals/screen-share/share-audio';
40 38
 @import 'modals/screen-share/share-screen-warning';
@@ -51,10 +49,6 @@ $flagsImagePath: "../images/";
51 49
 @import 'welcome_page_settings_toolbar';
52 50
 @import 'toolbars';
53 51
 @import 'redirect_page';
54
-@import 'components/form-control';
55
-@import 'components/link';
56
-@import 'components/button-control';
57
-@import 'components/input-control';
58 52
 @import 'components/input-slider';
59 53
 @import '404';
60 54
 @import 'policy';

+ 0
- 42
css/modals/embed-meeting/_embed-meeting.scss Целия файл

@@ -1,42 +0,0 @@
1
-.embed-meeting {
2
-    &-dialog {
3
-        display: flex;
4
-        flex-direction: column;
5
-    }
6
-
7
-    &-copy {
8
-        color: white;
9
-        font-size: 15px;
10
-        margin-left: auto;
11
-        margin-top: 16px;
12
-    }
13
-
14
-    &-code {
15
-        background: transparent;
16
-        border: 1px solid #A4B8D1;
17
-        color: white;
18
-        font-size: 15px;
19
-        height: 165px;
20
-        line-height: 24px;
21
-        padding: 8px;
22
-        width: 100%;
23
-        resize: vertical;
24
-    }
25
-
26
-    &-trigger {
27
-        display: flex;
28
-        align-items: center;
29
-        padding: 8px 8px 8px 16px;
30
-        margin-top: 24px;
31
-        width: calc(100% - 24px);
32
-        height: 24px;
33
-        background: #2A3A4B;
34
-        border: 1px solid #5E6D7A;
35
-        border-radius: 4px;
36
-        cursor: pointer;
37
-
38
-        .jitsi-icon {
39
-            margin-right: 20px;
40
-        }
41
-    }
42
-}

+ 0
- 46
css/modals/feedback/_feedback.scss Целия файл

@@ -1,46 +0,0 @@
1
-@-webkit-keyframes shake-rotate {
2
-    0% {
3
-        -webkit-transform:scale(1) rotate(0deg);
4
-        transform:scale(1) rotate(0deg)
5
-    }
6
-
7
-    50% {
8
-        -webkit-transform:scale(.8) rotate(-5deg);
9
-        transform:scale(.8) rotate(-5deg)
10
-    }
11
-
12
-    to {
13
-        -webkit-transform:scale(1) rotate(3deg);
14
-        transform:scale(1) rotate(3deg)
15
-    }
16
-}
17
-
18
-@keyframes shake-rotate {
19
-    0% {
20
-        -webkit-transform:scale(1) rotate(0deg);
21
-        transform:scale(1) rotate(0deg)
22
-    }
23
-
24
-    50% {
25
-        -webkit-transform:scale(.8) rotate(-5deg);
26
-        transform:scale(.8) rotate(-5deg)
27
-    }
28
-
29
-    to {
30
-        -webkit-transform:scale(1) rotate(3deg);
31
-        transform:scale(1) rotate(3deg)
32
-    }
33
-}
34
-
35
-.shake-rotate {
36
-    display: inline-block;
37
-
38
-    -webkit-animation-duration: .4s;
39
-    animation-duration: .4s;
40
-    -webkit-animation-iteration-count: infinite;
41
-    animation-iteration-count: infinite;
42
-    -webkit-animation-name: shake-rotate;
43
-    animation-name: shake-rotate;
44
-    -webkit-animation-timing-function: ease-in-out;
45
-    animation-timing-function: ease-in-out
46
-}

+ 2
- 1
interface_config.js Целия файл

@@ -70,7 +70,8 @@ var interfaceConfig = {
70 70
 
71 71
     ENABLE_DIAL_OUT: true,
72 72
 
73
-    ENABLE_FEEDBACK_ANIMATION: false, // Enables feedback star animation.
73
+    // DEPRECATED. Animation no longer supported.
74
+    // ENABLE_FEEDBACK_ANIMATION: false,
74 75
 
75 76
     FILM_STRIP_MAX_HEIGHT: 120,
76 77
 

+ 3
- 3
react/features/app/components/App.web.tsx Целия файл

@@ -1,5 +1,5 @@
1 1
 import { AtlasKitThemeProvider } from '@atlaskit/theme';
2
-import React, { Fragment } from 'react';
2
+import React from 'react';
3 3
 
4 4
 import GlobalStyles from '../../base/ui/components/GlobalStyles.web';
5 5
 import JitsiThemeProvider from '../../base/ui/components/JitsiThemeProvider.web';
@@ -31,9 +31,9 @@ export class App extends AbstractApp {
31 31
      */
32 32
     _createExtraElement() {
33 33
         return (
34
-            <Fragment>
34
+            <JitsiThemeProvider>
35 35
                 <OverlayContainer />
36
-            </Fragment>
36
+            </JitsiThemeProvider>
37 37
         );
38 38
     }
39 39
 

+ 17
- 3
react/features/connection-stats/components/ConnectionStatsTable.tsx Целия файл

@@ -234,7 +234,21 @@ const useStyles = makeStyles()(theme => {
234 234
         status: {
235 235
             fontWeight: 'bold'
236 236
         },
237
-        upload: {}
237
+        upload: {},
238
+        link: {
239
+            cursor: 'pointer',
240
+            color: theme.palette.link01,
241
+            transition: 'color .2s ease',
242
+
243
+            '&:hover': {
244
+                color: theme.palette.link01Hover,
245
+                textDecoration: 'underline'
246
+            },
247
+
248
+            '&:active': {
249
+                color: theme.palette.link01Active
250
+            }
251
+        }
238 252
     };
239 253
 });
240 254
 
@@ -670,7 +684,7 @@ const ConnectionStatsTable = ({
670 684
     const _renderSaveLogs = () => (
671 685
         <span>
672 686
             <a
673
-                className = 'savelogs link'
687
+                className = { cx(classes.link, 'savelogs') }
674 688
                 onClick = { onSaveLogs }
675 689
                 role = 'button'
676 690
                 tabIndex = { 0 }>
@@ -688,7 +702,7 @@ const ConnectionStatsTable = ({
688 702
 
689 703
         return (
690 704
             <a
691
-                className = 'showmore link'
705
+                className = { cx(classes.link, 'showmore') }
692 706
                 onClick = { onShowMore }
693 707
                 role = 'button'
694 708
                 tabIndex = { 0 }>

+ 17
- 2
react/features/embed-meeting/components/EmbedMeetingDialog.tsx Целия файл

@@ -1,6 +1,7 @@
1 1
 import React from 'react';
2 2
 import { WithTranslation } from 'react-i18next';
3 3
 import { connect } from 'react-redux';
4
+import { makeStyles } from 'tss-react/mui';
4 5
 
5 6
 import { IReduxState } from '../../app/types';
6 7
 import CopyButton from '../../base/buttons/CopyButton.web';
@@ -17,12 +18,26 @@ interface IProps extends WithTranslation {
17 18
     url: string;
18 19
 }
19 20
 
21
+const useStyles = makeStyles()(theme => {
22
+    return {
23
+        container: {
24
+            paddingTop: theme.spacing(1)
25
+        },
26
+
27
+        button: {
28
+            marginTop: theme.spacing(3)
29
+        }
30
+    };
31
+});
32
+
20 33
 /**
21 34
  * Allow users to embed a jitsi meeting in an iframe.
22 35
  *
23 36
  * @returns {React$Element<any>}
24 37
  */
25 38
 function EmbedMeeting({ t, url }: IProps) {
39
+    const { classes } = useStyles();
40
+
26 41
     /**
27 42
      * Get the embed code for a jitsi meeting.
28 43
      *
@@ -37,7 +52,7 @@ function EmbedMeeting({ t, url }: IProps) {
37 52
             cancel = {{ hidden: true }}
38 53
             ok = {{ hidden: true }}
39 54
             titleKey = { 'embedMeeting.title' }>
40
-            <div className = 'embed-meeting-dialog'>
55
+            <div className = { classes.container }>
41 56
                 <Input
42 57
                     accessibilityLabel = { t('dialog.embedMeeting') }
43 58
                     readOnly = { true }
@@ -45,7 +60,7 @@ function EmbedMeeting({ t, url }: IProps) {
45 60
                     value = { getEmbedCode() } />
46 61
                 <CopyButton
47 62
                     aria-label = { t('addPeople.copyLink') }
48
-                    className = 'embed-meeting-copy'
63
+                    className = { classes.button }
49 64
                     displayedText = { t('dialog.copy') }
50 65
                     textOnCopySuccess = { t('dialog.copied') }
51 66
                     textOnHover = { t('dialog.copy') }

+ 0
- 70
react/features/embed-meeting/components/EmbedMeetingTrigger.js Целия файл

@@ -1,70 +0,0 @@
1
-// @flow
2
-
3
-/* eslint-disable react/jsx-no-bind */
4
-
5
-import React from 'react';
6
-import { connect } from 'react-redux';
7
-
8
-import { openDialog } from '../../base/dialog';
9
-import { translate } from '../../base/i18n/functions';
10
-
11
-import EmbedMeetingDialog from './EmbedMeetingDialog';
12
-
13
-type Props = {
14
-
15
-    /**
16
-     * Open the embed meeting dialog.
17
-     */
18
-    openEmbedDialog: Function,
19
-
20
-    /**
21
-     * Invoked to obtain translated strings.
22
-     */
23
-    t: Function,
24
-};
25
-
26
-/**
27
- * Component meant to trigger showing the EmbedMeetingDialog.
28
- *
29
- * @returns {React$Element<any>}
30
- */
31
-function EmbedMeetingTrigger({ t, openEmbedDialog }: Props) {
32
-    /**
33
-     * Handles opening the embed dialog.
34
-     *
35
-     * @returns {void}
36
-     */
37
-    function onClick() {
38
-        openEmbedDialog(EmbedMeetingDialog);
39
-    }
40
-
41
-    /**
42
-     * KeyPress handler for accessibility.
43
-     *
44
-     * @param {React.KeyboardEventHandler<HTMLDivElement>} e - The key event to handle.
45
-     *
46
-     * @returns {void}
47
-     */
48
-    function onKeyPress(e) {
49
-        if (e.key === ' ' || e.key === 'Enter') {
50
-            e.preventDefault();
51
-            onClick();
52
-        }
53
-    }
54
-
55
-    return (
56
-        <div
57
-            aria-label = { t('embedMeeting.title') }
58
-            className = 'embed-meeting-trigger'
59
-            onClick = { onClick }
60
-            onKeyPress = { onKeyPress }
61
-            role = 'button'
62
-            tabIndex = { 0 }>
63
-            {t('embedMeeting.title')}
64
-        </div>
65
-    );
66
-}
67
-
68
-const mapDispatchToProps = { openEmbedDialog: openDialog };
69
-
70
-export default translate(connect(null, mapDispatchToProps)(EmbedMeetingTrigger));

+ 1
- 4
react/features/feedback/components/FeedbackDialog.web.tsx Целия файл

@@ -70,9 +70,6 @@ const styles = (theme: Theme) => {
70 70
     };
71 71
 };
72 72
 
73
-const scoreAnimationClass
74
-    = interfaceConfig.ENABLE_FEEDBACK_ANIMATION ? 'shake-rotate' : '';
75
-
76 73
 /**
77 74
  * The scores to display for selecting. The score is the index in the array and
78 75
  * the value of the index is a translation key used for display in the dialog.
@@ -282,7 +279,7 @@ class FeedbackDialog extends Component<IProps, IState> {
282 279
                 const isFilled = index <= scoreToDisplayAsSelected;
283 280
                 const activeClass = isFilled ? 'active' : '';
284 281
                 const className
285
-                    = `${classes.starBtn} ${scoreAnimationClass} ${activeClass}`;
282
+                    = `${classes.starBtn} ${activeClass}`;
286 283
 
287 284
                 return (
288 285
                     <span

+ 26
- 58
react/features/overlay/components/web/ReloadButton.tsx Целия файл

@@ -1,20 +1,14 @@
1
-import React, { Component } from 'react';
2
-import { WithTranslation } from 'react-i18next';
3
-import { connect } from 'react-redux';
1
+import React, { useCallback } from 'react';
2
+import { useDispatch } from 'react-redux';
3
+import { makeStyles } from 'tss-react/mui';
4 4
 
5 5
 import { reloadNow } from '../../../app/actions.web';
6
-import { IStore } from '../../../app/types';
7
-import { translate } from '../../../base/i18n/functions';
6
+import Button from '../../../base/ui/components/web/Button';
8 7
 
9 8
 /**
10 9
  * The type of the React {@code Component} props of {@link ReloadButton}.
11 10
  */
12
-interface IProps extends WithTranslation {
13
-
14
-    /**
15
-     * Reloads the page.
16
-     */
17
-    _reloadNow: () => void;
11
+interface IProps {
18 12
 
19 13
     /**
20 14
      * The translation key for the text in the button.
@@ -22,54 +16,28 @@ interface IProps extends WithTranslation {
22 16
     textKey: string;
23 17
 }
24 18
 
25
-/**
26
- * Implements a React Component for button for the overlays that will reload
27
- * the page.
28
- */
29
-class ReloadButton extends Component<IProps> {
30
-    /**
31
-     * Renders the button for relaod the page if necessary.
32
-     *
33
-     * @private
34
-     * @returns {ReactElement}
35
-     */
36
-    render() {
37
-        const className
38
-            = 'button-control button-control_overlay button-control_center';
39
-
40
-        /* eslint-disable react/jsx-handler-names */
41
-
42
-        return (
43
-            <button
44
-                className = { className }
45
-                onClick = { this.props._reloadNow }>
46
-                { this.props.t(this.props.textKey) }
47
-            </button>
48
-        );
49
-
50
-        /* eslint-enable react/jsx-handler-names */
51
-    }
52
-}
53
-
54
-/**
55
- * Maps part of redux actions to component's props.
56
- *
57
- * @param {Function} dispatch - Redux's {@code dispatch} function.
58
- * @private
59
- * @returns {Object}
60
- */
61
-function _mapDispatchToProps(dispatch: IStore['dispatch']) {
19
+const useStyles = makeStyles()(theme => {
62 20
     return {
63
-        /**
64
-         * Dispatches the redux action to reload the page.
65
-         *
66
-         * @protected
67
-         * @returns {Object} Dispatched action.
68
-         */
69
-        _reloadNow() {
70
-            dispatch(reloadNow());
21
+        button: {
22
+            margin: `${theme.spacing(2)} auto 0`
71 23
         }
72 24
     };
73
-}
25
+});
26
+
27
+const ReloadButton = ({ textKey }: IProps) => {
28
+    const dispatch = useDispatch();
29
+    const { classes } = useStyles();
30
+
31
+    const onClick = useCallback(() => {
32
+        dispatch(reloadNow());
33
+    }, []);
34
+
35
+    return (
36
+        <Button
37
+            className = { classes.button }
38
+            labelKey = { textKey }
39
+            onClick = { onClick } />
40
+    );
41
+};
74 42
 
75
-export default translate(connect(undefined, _mapDispatchToProps)(ReloadButton));
43
+export default ReloadButton;

+ 2
- 0
react/features/recording/components/LiveStream/AbstractStreamKeyForm.ts Целия файл

@@ -38,6 +38,8 @@ export interface IProps extends WithTranslation {
38 38
      */
39 39
     _liveStreaming: LiveStreamingProps;
40 40
 
41
+    classes: any;
42
+
41 43
     /**
42 44
      * Callback invoked when the entered stream key has changed.
43 45
      */

+ 30
- 5
react/features/recording/components/LiveStream/web/StreamKeyForm.tsx Целия файл

@@ -1,12 +1,37 @@
1
+import { Theme } from '@mui/material';
2
+import { withStyles } from '@mui/styles';
1 3
 import React from 'react';
2 4
 import { connect } from 'react-redux';
3 5
 
4 6
 import { translate } from '../../../../base/i18n/functions';
7
+import { withPixelLineHeight } from '../../../../base/styles/functions.web';
5 8
 import Input from '../../../../base/ui/components/web/Input';
6 9
 import AbstractStreamKeyForm, {
7 10
     IProps, _mapStateToProps
8 11
 } from '../AbstractStreamKeyForm';
9 12
 
13
+const styles = (theme: Theme) => {
14
+    return {
15
+        helperLink: {
16
+            cursor: 'pointer',
17
+            color: theme.palette.link01,
18
+            transition: 'color .2s ease',
19
+            ...withPixelLineHeight(theme.typography.labelBold),
20
+            marginLeft: 'auto',
21
+            marginTop: theme.spacing(1),
22
+
23
+            '&:hover': {
24
+                textDecoration: 'underline',
25
+                color: theme.palette.link01Hover
26
+            },
27
+
28
+            '&:active': {
29
+                color: theme.palette.link01Active
30
+            }
31
+        }
32
+    };
33
+};
34
+
10 35
 /**
11 36
  * A React Component for entering a key for starting a YouTube live stream.
12 37
  *
@@ -35,7 +60,7 @@ class StreamKeyForm extends AbstractStreamKeyForm<IProps> {
35 60
      * @returns {ReactElement}
36 61
      */
37 62
     render() {
38
-        const { t, value } = this.props;
63
+        const { classes, t, value } = this.props;
39 64
 
40 65
         return (
41 66
             <div className = 'stream-key-form'>
@@ -59,7 +84,7 @@ class StreamKeyForm extends AbstractStreamKeyForm<IProps> {
59 84
                         { this.props._liveStreaming.helpURL
60 85
                             ? <a
61 86
                                 aria-label = { t('liveStreaming.streamIdHelp') }
62
-                                className = 'helper-link'
87
+                                className = { classes.helperLink }
63 88
                                 onClick = { this._onOpenHelp }
64 89
                                 onKeyPress = { this._onOpenHelpKeyPress }
65 90
                                 role = 'link'
@@ -70,14 +95,14 @@ class StreamKeyForm extends AbstractStreamKeyForm<IProps> {
70 95
                         }
71 96
                     </div>
72 97
                     <a
73
-                        className = 'helper-link'
98
+                        className = { classes.helperLink }
74 99
                         href = { this.props._liveStreaming.termsURL }
75 100
                         rel = 'noopener noreferrer'
76 101
                         target = '_blank'>
77 102
                         { t('liveStreaming.youtubeTerms') }
78 103
                     </a>
79 104
                     <a
80
-                        className = 'helper-link'
105
+                        className = { classes.helperLink }
81 106
                         href = { this.props._liveStreaming.dataPrivacyURL }
82 107
                         rel = 'noopener noreferrer'
83 108
                         target = '_blank'>
@@ -116,4 +141,4 @@ class StreamKeyForm extends AbstractStreamKeyForm<IProps> {
116 141
     }
117 142
 }
118 143
 
119
-export default translate(connect(_mapStateToProps)(StreamKeyForm));
144
+export default translate(connect(_mapStateToProps)(withStyles(styles)(StreamKeyForm)));

Loading…
Отказ
Запис