Skip to content

Commit

Permalink
feat(FEC-13040): Add an 'Advanced Audio Descriptions' settings option…
Browse files Browse the repository at this point in the history
… to the (“Gear”) settings (#752)

Add an 'Advanced Audio Descriptions' configurable settings option to the (“Gear”) settings

solves FEC-1304
  • Loading branch information
JonathanTGold committed Apr 17, 2023
1 parent 9a20e54 commit 2149d98
Show file tree
Hide file tree
Showing 15 changed files with 214 additions and 16 deletions.
1 change: 1 addition & 0 deletions flow-typed/types/ui-options.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ declare type UIOptionsObject = {
debugActions?: boolean,
forceTouchUI?: boolean,
showCCButton?: boolean,
showAdvancedAudioDescButton?: boolean,
hoverTimeout?: number,
logger?: loggerType,
components?: ComponentsConfig,
Expand Down
4 changes: 3 additions & 1 deletion src/components/event-dispatcher/event-dispatcher-provider.js
Original file line number Diff line number Diff line change
Expand Up @@ -264,8 +264,10 @@ function onPictureInPictureClicked(store: any, action: Object, player: Object):
function onSettingsClicked(store: any, action: Object, player: Object): void {
if (action.payload.type === player.Track.VIDEO) {
player.dispatchEvent(new QualitySelectedEvent(action.payload.track));
} else {
} else if (action.payload.type === 'speed') {
player.dispatchEvent(new SpeedSelectedEvent(action.payload.speed));
} else if (action.payload.type === 'AdvancedAudioDescription') {
player.dispatchEvent(new FakeEvent(FakeEvent.Type.USER_CLICKED_ADVANCED_AUDIO_DESCRIPTION, action.payload));
}
}

Expand Down
6 changes: 5 additions & 1 deletion src/components/icon/icon.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@ const IconType = {
PictureInPictureStart: 'picture-in-picture-start',
PictureInPictureStop: 'picture-in-picture-stop',
ClosedCaptionsOn: 'closed-captions-on',
ClosedCaptionsOff: 'closed-captions-off'
ClosedCaptionsOff: 'closed-captions-off',
AdvancedAudioDescription: 'advanced-audio-description'
};

const BadgeType = {
Expand Down Expand Up @@ -310,6 +311,9 @@ class Icon extends Component {
case IconType.ClosedCaptionsOff:
return <i className={[style.icon, style.iconClosedCaptionsOff].join(' ')} />;

case IconType.AdvancedAudioDescription:
return <i className={[style.icon, style.iconAdvancedAudioDescription].join(' ')} />;

default:
break;
}
Expand Down
9 changes: 8 additions & 1 deletion src/components/icon/icon.scss
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,9 @@
closedCaptionsOn:
'<path fill="#{$color}" d="M15.114 18.545c0.144-0.275 0.217-0.533 0.217-0.774 0-0.204-0.078-0.395-0.234-0.575s-0.353-0.27-0.59-0.27c-0.199 0-0.367 0.061-0.504 0.185s-0.265 0.294-0.384 0.511c-0.213 0.369-0.458 0.644-0.735 0.824s-0.61 0.27-0.998 0.27c-0.289 0-0.554-0.056-0.796-0.167s-0.447-0.275-0.618-0.49c-0.171-0.215-0.301-0.476-0.391-0.781s-0.135-0.64-0.135-1.005c0-0.777 0.175-1.389 0.526-1.836s0.812-0.671 1.385-0.671c0.398 0 0.726 0.090 0.984 0.27s0.505 0.45 0.742 0.81c0.133 0.185 0.252 0.318 0.359 0.401s0.24 0.124 0.401 0.124c0.246 0 0.456-0.081 0.629-0.242s0.259-0.357 0.259-0.59c0-0.227-0.077-0.472-0.231-0.735s-0.377-0.51-0.668-0.742c-0.291-0.232-0.646-0.421-1.066-0.568s-0.88-0.22-1.382-0.22c-0.81 0-1.506 0.167-2.088 0.501s-1.028 0.806-1.335 1.417-0.462 1.314-0.462 2.11c0 1.174 0.336 2.111 1.009 2.809s1.608 1.048 2.806 1.048c0.564 0 1.070-0.076 1.52-0.227s0.823-0.352 1.119-0.6c0.296-0.249 0.516-0.51 0.661-0.785z"></path> <path fill="#{$color}" d="M23.759 18.545c0.145-0.275 0.217-0.533 0.217-0.774 0-0.204-0.078-0.395-0.234-0.575s-0.353-0.27-0.59-0.27c-0.199 0-0.367 0.061-0.504 0.185s-0.265 0.294-0.384 0.511c-0.213 0.369-0.458 0.644-0.735 0.824s-0.61 0.27-0.998 0.27c-0.289 0-0.554-0.056-0.796-0.167s-0.448-0.275-0.618-0.49c-0.17-0.215-0.301-0.476-0.391-0.781s-0.135-0.64-0.135-1.005c0-0.777 0.175-1.389 0.526-1.836s0.812-0.671 1.385-0.671c0.398 0 0.726 0.090 0.984 0.27s0.506 0.45 0.742 0.81c0.133 0.185 0.252 0.318 0.359 0.401s0.24 0.124 0.401 0.124c0.246 0 0.456-0.081 0.629-0.242s0.259-0.357 0.259-0.59c0-0.227-0.077-0.472-0.231-0.735s-0.377-0.51-0.668-0.742c-0.291-0.232-0.646-0.421-1.066-0.568s-0.88-0.22-1.382-0.22c-0.81 0-1.506 0.167-2.088 0.501s-1.028 0.806-1.335 1.417-0.462 1.314-0.462 2.11c0 1.174 0.336 2.111 1.009 2.809s1.608 1.048 2.806 1.048c0.564 0 1.070-0.076 1.52-0.227s0.823-0.352 1.119-0.6 0.516-0.51 0.661-0.785z"></path> <path fill="#{$color}" d="M3 7.9c0-1.049 0.895-1.9 1.997-1.9h22.006c1.103 0 1.997 0.859 1.997 1.9v16.201c0 1.049-0.895 1.9-1.997 1.9h-22.006c-1.103 0-1.997-0.859-1.997-1.9v-16.201zM5 24.1c-0.001-0.005 22-0.005 22-0.005v-16.196c0 0.005-22 0.005-22 0.005v16.196z"></path>',
closedCaptionsOff:
'<path fill="#{$color}" d="M30.133 6.838l-1.143 0.863c0.007 0.065 0.011 0.131 0.011 0.198v16.201c0 1.049-0.895 1.9-1.997 1.9h-22.006c-0.080 0-0.159-0.005-0.236-0.013l-1.128 0.851c-0.463 0.349-1.121 0.257-1.471-0.206s-0.257-1.121 0.206-1.471l26.5-20c0.463-0.349 1.121-0.257 1.471 0.206s0.257 1.121-0.206 1.471zM27 9.202l-4.619 3.486c0.222 0.109 0.421 0.233 0.596 0.373 0.291 0.232 0.514 0.479 0.668 0.742s0.231 0.508 0.231 0.735c0 0.232-0.086 0.429-0.259 0.59s-0.382 0.242-0.629 0.242c-0.161 0-0.295-0.041-0.401-0.124s-0.226-0.217-0.359-0.401c-0.237-0.36-0.484-0.63-0.742-0.81-0.164-0.114-0.357-0.193-0.578-0.234l-2.249 1.697c-0.045 0.237-0.068 0.495-0.068 0.774 0 0.365 0.045 0.7 0.135 1.005s0.22 0.566 0.391 0.781c0.171 0.215 0.377 0.379 0.618 0.49s0.507 0.167 0.796 0.167c0.388 0 0.721-0.090 0.998-0.27s0.522-0.455 0.735-0.824c0.118-0.218 0.246-0.388 0.384-0.511s0.305-0.185 0.504-0.185c0.237 0 0.433 0.090 0.59 0.27s0.234 0.372 0.234 0.575c0 0.241-0.072 0.5-0.217 0.774s-0.365 0.536-0.661 0.785-0.669 0.449-1.119 0.6c-0.45 0.152-0.957 0.227-1.52 0.227-1.198 0-2.133-0.349-2.806-1.048-0.536-0.557-0.858-1.265-0.967-2.123l-1.382 1.043c-0.033 0.165-0.096 0.337-0.19 0.516-0.145 0.275-0.365 0.536-0.661 0.785s-0.669 0.449-1.119 0.6c-0.246 0.083-0.508 0.143-0.788 0.18l-5.283 3.987c5.615-0.003 19.737-0.003 19.737-0.003v-14.893z"></path> <path fill="#{$color}" d="M4.997 6h19.546l-2.492 1.903c-6.487 0.002-17.051 0.002-17.051 0.002v13.019l-2 1.527v-14.551c0-1.049 0.895-1.9 1.997-1.9z"></path> <path fill="#{$color}" d="M12.841 14.034c0.179 0.125 0.353 0.293 0.521 0.504l1.399-1.068c-0.121-0.141-0.264-0.277-0.428-0.409-0.291-0.232-0.646-0.421-1.066-0.568s-0.88-0.22-1.382-0.22c-0.81 0-1.506 0.167-2.088 0.501s-1.028 0.806-1.335 1.417-0.462 1.314-0.462 2.11c0 0.77 0.144 1.437 0.433 2.002l1.598-1.22c-0.056-0.252-0.085-0.522-0.085-0.81 0-0.777 0.175-1.389 0.526-1.836s0.812-0.671 1.385-0.671c0.398 0 0.726 0.090 0.984 0.27z"></path>'
'<path fill="#{$color}" d="M30.133 6.838l-1.143 0.863c0.007 0.065 0.011 0.131 0.011 0.198v16.201c0 1.049-0.895 1.9-1.997 1.9h-22.006c-0.080 0-0.159-0.005-0.236-0.013l-1.128 0.851c-0.463 0.349-1.121 0.257-1.471-0.206s-0.257-1.121 0.206-1.471l26.5-20c0.463-0.349 1.121-0.257 1.471 0.206s0.257 1.121-0.206 1.471zM27 9.202l-4.619 3.486c0.222 0.109 0.421 0.233 0.596 0.373 0.291 0.232 0.514 0.479 0.668 0.742s0.231 0.508 0.231 0.735c0 0.232-0.086 0.429-0.259 0.59s-0.382 0.242-0.629 0.242c-0.161 0-0.295-0.041-0.401-0.124s-0.226-0.217-0.359-0.401c-0.237-0.36-0.484-0.63-0.742-0.81-0.164-0.114-0.357-0.193-0.578-0.234l-2.249 1.697c-0.045 0.237-0.068 0.495-0.068 0.774 0 0.365 0.045 0.7 0.135 1.005s0.22 0.566 0.391 0.781c0.171 0.215 0.377 0.379 0.618 0.49s0.507 0.167 0.796 0.167c0.388 0 0.721-0.090 0.998-0.27s0.522-0.455 0.735-0.824c0.118-0.218 0.246-0.388 0.384-0.511s0.305-0.185 0.504-0.185c0.237 0 0.433 0.090 0.59 0.27s0.234 0.372 0.234 0.575c0 0.241-0.072 0.5-0.217 0.774s-0.365 0.536-0.661 0.785-0.669 0.449-1.119 0.6c-0.45 0.152-0.957 0.227-1.52 0.227-1.198 0-2.133-0.349-2.806-1.048-0.536-0.557-0.858-1.265-0.967-2.123l-1.382 1.043c-0.033 0.165-0.096 0.337-0.19 0.516-0.145 0.275-0.365 0.536-0.661 0.785s-0.669 0.449-1.119 0.6c-0.246 0.083-0.508 0.143-0.788 0.18l-5.283 3.987c5.615-0.003 19.737-0.003 19.737-0.003v-14.893z"></path> <path fill="#{$color}" d="M4.997 6h19.546l-2.492 1.903c-6.487 0.002-17.051 0.002-17.051 0.002v13.019l-2 1.527v-14.551c0-1.049 0.895-1.9 1.997-1.9z"></path> <path fill="#{$color}" d="M12.841 14.034c0.179 0.125 0.353 0.293 0.521 0.504l1.399-1.068c-0.121-0.141-0.264-0.277-0.428-0.409-0.291-0.232-0.646-0.421-1.066-0.568s-0.88-0.22-1.382-0.22c-0.81 0-1.506 0.167-2.088 0.501s-1.028 0.806-1.335 1.417-0.462 1.314-0.462 2.11c0 0.77 0.144 1.437 0.433 2.002l1.598-1.22c-0.056-0.252-0.085-0.522-0.085-0.81 0-0.777 0.175-1.389 0.526-1.836s0.812-0.671 1.385-0.671c0.398 0 0.726 0.090 0.984 0.27z"></path>',
advancedAudioDescription:
'<path d="M6.647 12.958h1.547V10.81l-1.547 2.147ZM12.226 10.408c.99 0 1.787.717 1.787 1.595 0 .881-.798 1.598-1.787 1.598h-.467v-3.193h.467Z" fill="#fff"/><path fill-rule="evenodd" clip-rule="evenodd" d="M3.536 4C2.688 4 2 4.68 2 5.52v12.96c0 .832.688 1.52 1.536 1.52h16.928c.848 0 1.536-.68 1.536-1.52V5.52C22 4.688 21.312 4 20.464 4H3.536Zm15.335 5h.826c.83.87 1.303 1.982 1.303 3.14a4.504 4.504 0 0 1-1.033 2.837h-.792c.745-.793 1.165-1.792 1.165-2.838 0-1.178-.537-2.311-1.47-3.139ZM8.185 15h1.47V9.004H7.819L3 15h2.158l.566-.793h2.461V15Zm4.223-.003c1.851 0 3.357-1.343 3.357-2.994 0-1.657-1.49-2.997-3.341-2.997h-2.075v5.993h2.059v-.002ZM18.008 9h-.826c.932.828 1.47 1.961 1.47 3.14 0 1.045-.421 2.044-1.166 2.837h.787a4.48 4.48 0 0 0 1.038-2.838c0-1.157-.472-2.27-1.303-3.139Zm-2.515 0h.82c.837.87 1.304 1.982 1.304 3.14a4.474 4.474 0 0 1-1.033 2.837h-.787c.74-.793 1.16-1.792 1.16-2.838 0-1.178-.532-2.311-1.464-3.139Z" fill="#fff"/>'
);
$icon: map-get($icons, $icon-name);
$svg-encoded-icon: svg-url($icon, $size, $viewBox, $fillRule);
Expand Down Expand Up @@ -287,6 +289,11 @@
background-image: icon(pictureInPictureStop, '#fff');
}

.icon-advanced-audio-description {
background-image: icon(advancedAudioDescription, '#fff', '24', '0 0 24 24');
}


.icon-quality-hd {
&:after {
background-image: icon(qualityHd, '#fff', '16', '0 0 16 16');
Expand Down
1 change: 1 addition & 0 deletions src/components/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ export {PlaybackControls} from './playback-controls';
export {CopyButton} from './copy-button';
export {ButtonControl} from './button-control';
export {Button} from './button';
export {ToggleSwitch} from './toggle-switch';

export {PlayerArea, withPlayerPreset, Remove} from './player-area';
export {VideoArea} from './video-area';
Expand Down
28 changes: 27 additions & 1 deletion src/components/settings/settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,9 @@ const mapStateToProps = state => ({
videoTracks: state.engine.videoTracks,
isMobile: state.shell.isMobile,
isSmallSize: state.shell.isSmallSize,
isLive: state.engine.isLive
isLive: state.engine.isLive,
showAdvancedAudioDescButton: state.config.showAdvancedAudioDescButton,
isAdvancedAudioDescChecked: state.settings.advancedAudioDesc
});

const COMPONENT_NAME = 'Settings';
Expand All @@ -52,6 +54,7 @@ const COMPONENT_NAME = 'Settings';
@withText({
qualityLabelText: 'settings.quality',
speedLabelText: 'settings.speed',
advancedAudioText: 'settings.AdvancedAudioDescription',
buttonLabel: 'controls.settings',
speedNormalLabelText: 'settings.speedNormal',
qualityAutoLabelText: 'settings.qualityAuto'
Expand Down Expand Up @@ -201,10 +204,23 @@ class Settings extends Component {
this.props.updateSpeed(playbackRate);
this.props.player.playbackRate = playbackRate;
this.props.notifyClick({
type: 'speed',
speed: playbackRate
});
};

/**
* Toggle the Advanced Audio Description option and update it in the store state
*
* @param {boolean} isChecked - Whether the feature is enabled or not
* @returns {void}
* @memberof Settings
*/
onAdvancedAudioClick = (isChecked: boolean): void => {
this.props.updateAdvancedAudioDesc(isChecked);
this.props.notifyClick({type: 'AdvancedAudioDescription', checked: isChecked});
};

/**
* change quality track or if value is 'auto', enable player adaptive bitrate
*
Expand Down Expand Up @@ -360,6 +376,16 @@ class Settings extends Component {
''
) : (
<SmartContainer targetId={player.config.targetId} title={<Text id="settings.title" />} onClose={this.onControlButtonClick}>
{!props.showAdvancedAudioDescButton ? (
''
) : (
<SmartContainerItem
icon={IconType.AdvancedAudioDescription}
label={props.advancedAudioText}
isChecked={props.isAdvancedAudioDescChecked}
onMenuChosen={this.onAdvancedAudioClick}
/>
)}
{qualityOptions.length <= 1 ? (
''
) : (
Expand Down
30 changes: 22 additions & 8 deletions src/components/smart-container/smart-container-item.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import style from '../../styles/style.scss';
import {h, Component} from 'preact';
import {DropDown} from '../dropdown';
import {default as Icon} from '../icon';
import {ToggleSwitch} from 'components';

const COMPONENT_NAME = 'SmartContainerItem';

Expand Down Expand Up @@ -32,14 +33,27 @@ class SmartContainerItem extends Component {
) : undefined}
{props.label}
</label>
<DropDown
pushRef={el => {
props.pushRef(el);
}}
name={label}
onMenuChosen={o => props.onMenuChosen(o)}
options={props.options}
/>
{props.options && props.options.length ? (
<DropDown
pushRef={el => {
props.pushRef(el);
}}
name={label}
onMenuChosen={o => props.onMenuChosen(o)}
options={props.options}
/>
) : (
<div style={{paddingLeft: '20px'}}>
<ToggleSwitch
pushRef={el => {
props.pushRef(el);
}}
name={label}
isChecked={props.isChecked}
onMenuChosen={o => props.onMenuChosen(o)}
/>
</div>
)}
</div>
);
}
Expand Down
1 change: 1 addition & 0 deletions src/components/toggle-switch/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export {ToggleSwitch} from './toggle-switch';
76 changes: 76 additions & 0 deletions src/components/toggle-switch/toggle-switch.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
//@flow
import {h, Component} from 'preact';
import {KeyMap} from 'utils';
import style from '../../styles/style.scss';

const COMPONENT_NAME = 'ToggleSwitch';

/**
* Toggle Switch component
*
* @class ToggleSwitch
* @example <ToggleSwitch />
* @extends {Component}
*/
class ToggleSwitch extends Component {
/**
* render Toggle Switch component
*
* @param {boolean} isChecked - - Whether the input is checked or not
* @returns {void}
* @member ToggleSwitch
*/
onChange = (isChecked: boolean) => {
this.props.onMenuChosen(isChecked);
};

/**
* render Toggle Switch component
*
* @param {KeyboardEvent} event - - Keyboard Event
* @returns {void}
* @member ToggleSwitch
*/
handleOnKeyDown = (event: KeyboardEvent) => {
if (event.keyCode === KeyMap.ENTER || event.keyCode === KeyMap.SPACE) {
event.preventDefault();
this.onChange(!this.props.isChecked);
}
};

/**
* render Toggle Switch component
*
* @param {*} props - component props
* @returns {React$Element} component element
* @memberof ToggleSwitch
*/
render(props: any): React$Element<any> {
return (
<label
onKeyDown={event => this.handleOnKeyDown(event)}
className={style.switch}
ref={el => {
if (props.pushRef) {
props.pushRef(el);
}
}}
aria-label={props.name}
role="switch"
aria-checked={props.isChecked}
tabIndex="-1">
<input
name={props.name}
className={style.toggleInput}
type="checkbox"
checked={props.isChecked}
onChange={e => this.onChange(e.target.checked)}
/>
<span className={style.slider} />
</label>
);
}
}

ToggleSwitch.displayName = COMPONENT_NAME;
export {ToggleSwitch};
53 changes: 53 additions & 0 deletions src/components/toggle-switch/toggle-switch.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
.switch {
position: relative;
display: inline-block;
width: 32px;
height: 16px;

.toggle-input {
opacity: 0;
width: 0;
height: 0;

&:checked + .slider {
background-color: #2196f3;
}

&:focus + .slider {
box-shadow: 0 0 1px #2196f3;
}

&:checked + .slider:before {
transform: translateX(14px);
-webkit-transform: translateX(14px);
-ms-transform: translateX(14px);
}
}

.slider {
height: 100%;
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #ccc;
-webkit-transition: 0.4s;
transition: 0.4s;
border-radius: 34px;

&:before {
position: absolute;
content: '';
height: 12px;
width: 12px;
left: 3px;
top: 2px;
background-color: white;
-webkit-transition: 0.3s;
transition: 0.3s;
border-radius: 50%;
}
}
}
1 change: 1 addition & 0 deletions src/event/event-type.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ const EventType: {[event: string]: string} = {
USER_CLICKED_LIVE_TAG: `${namespace}-userclickedlivetag`,
USER_CLICKED_MUTE: `${namespace}-userclickedmute`,
USER_CLICKED_UNMUTE: `${namespace}-userclickedunmute`,
USER_CLICKED_ADVANCED_AUDIO_DESCRIPTION: `${namespace}-userclickedadvancedaudiodescription`,
USER_CHANGED_VOLUME: `${namespace}-userchangedvolume`,
USER_SELECTED_CAPTION_TRACK: `${namespace}-userselectedcaptiontrack`,
USER_SHOWED_CAPTIONS: `${namespace}-usershowedcaptions`,
Expand Down
1 change: 1 addition & 0 deletions src/reducers/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ export const types = {
export const initialState = {
forceTouchUI: false,
showCCButton: false,
showAdvancedAudioDescButton: false,
hoverTimeout: 3000,
components: {
watermark: {},
Expand Down
15 changes: 12 additions & 3 deletions src/reducers/settings.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
//@flow
export const types = {
UPDATE_QUALITY: 'settings/UPDATE_QUALITY',
UPDATE_SPEED: 'settings/UPDATE_SPEED'
UPDATE_SPEED: 'settings/UPDATE_SPEED',
UPDATE_ADVANCED_AUDIO_DESC: 'settings/UPDATE_ADVANCED_AUDIO_DESC'
};

export const initialState = {
quality: 1,
speed: 2
speed: 2,
advancedAudioDesc: false
};

export default (state: Object = initialState, action: Object) => {
Expand All @@ -23,12 +25,19 @@ export default (state: Object = initialState, action: Object) => {
speed: action.speed
};

case types.UPDATE_ADVANCED_AUDIO_DESC:
return {
...state,
advancedAudioDesc: action.isChecked
};

default:
return state;
}
};

export const actions = {
updateQuality: (quality: string) => ({type: types.UPDATE_QUALITY, quality}),
updateSpeed: (speed: string) => ({type: types.UPDATE_SPEED, speed})
updateSpeed: (speed: string) => ({type: types.UPDATE_SPEED, speed}),
updateAdvancedAudioDesc: (isChecked: boolean) => ({type: types.UPDATE_ADVANCED_AUDIO_DESC, isChecked})
};
1 change: 1 addition & 0 deletions src/styles/style.scss
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,4 @@
@import '../components/video-area/video-area';
@import '../components/gui-area/gui-area';
@import '../components/spinner/spinner';
@import '../components/toggle-switch/toggle-switch';
3 changes: 2 additions & 1 deletion translations/en.i18n.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@
"quality": "Quality",
"speed": "Speed",
"speedNormal": "Normal",
"qualityAuto": "Auto"
"qualityAuto": "Auto",
"AdvancedAudioDescription": "Advanced Audio Description"
},
"language": {
"title": "Language",
Expand Down

0 comments on commit 2149d98

Please sign in to comment.