Merge branch 'master' of github.com:Stremio/stremio-web into player

This commit is contained in:
NikolaBorislavovHristov 2018-12-11 11:46:18 +02:00
commit 7987bbe48c
35 changed files with 841 additions and 505 deletions

View file

@ -25,7 +25,7 @@
"stremio-addons": "git+ssh://git@github.com/Stremio/stremio-addons.git#v2.8.14",
"stremio-aggregators": "git+ssh://git@github.com/Stremio/stremio-aggregators.git#v1.4.1",
"stremio-api-client": "git+ssh://git@github.com/Stremio/stremio-api-client.git#e8459d01fdd3507113b13b02aab628d24e20515e",
"stremio-colors": "git+ssh://git@github.com/Stremio/stremio-colors.git#v2.0.2",
"stremio-colors": "git+ssh://git@github.com/Stremio/stremio-colors.git#v2.0.3",
"stremio-icons": "git+ssh://git@github.com/Stremio/stremio-icons.git#v1.0.2",
"stremio-json-data": "git+ssh://git@github.com/stremio/stremio-json-data.git#v1.2.3",
"stremio-models": "git+ssh://git@github.com/stremio/stremio-models.git#v1.51.5",

View file

@ -80,11 +80,11 @@ const Addon = (props) => {
{renderDescription(props.description)}
{renderUrls(props.urls)}
<div className={styles['buttons']}>
<div onClick={props.shareAddon} className={classnames(styles['button'], styles['share-button'])}>
<div className={classnames(styles['button'], styles['share-button'])} onClick={props.shareAddon}>
<Icon className={styles['icon']} icon={'ic_share'} />
<span className={styles['label']}>SHARE ADD-ON</span>
</div>
<div onClick={props.onToggleClicked} className={classnames(styles['button'], props.isInstalled ? styles['install-button'] : styles['uninstall-button'])}>
<div className={classnames(styles['button'], props.isInstalled ? styles['install-button'] : styles['uninstall-button'])} onClick={props.onToggleClicked}>
<span className={styles['label']}>{props.isInstalled ? 'Install' : 'Uninstall'}</span>
</div>
</div>

View file

@ -1,45 +1,21 @@
@addon-width: 514px;
@logo-width: floor((@addon-width * 0.2));
.addon {
width: @addon-width;
grid-template-rows: floor((@logo-width * 0.25)) floor((@logo-width * 0.20)) auto auto ceil((@addon-width * 0.08));
.logo {
width: @logo-width;
height: @logo-width;
}
.name {
font-size: 20px;
}
.type {
font-size: 12px;
}
.description {
font-size: 12px;
}
.urls-container {
font-size: 12px;
}
.button {
border-width: 2px;
.label {
font-size: 14px;
}
}
--addon-width: 514px;
--name-font-size: 20px;
--version-font-size: 12px;
--type-font-size: 12px;
--description-font-size: 12px;
--url-font-size: 12px;
--button-border-width: 2px;
--button-label-font-size: 14px;
}
.addon {
display: grid;
width: var(--addon-width);
padding: 2%;
// background-color: @colorglass;
background-color: var(--color-background);
grid-template-columns: 1fr 4fr;
grid-template-rows: calc(0.04 * var(--addon-width)) calc(0.04 * var(--addon-width)) auto auto calc((0.08 * var(--addon-width)));
grid-template-areas:
"logo header"
"logo type"
@ -51,9 +27,11 @@
grid-area: logo;
.logo {
width: calc(0.2 * var(--addon-width));
height: calc(0.2 * var(--addon-width));
padding: 20%;
// fill: @colorwhite;
// background-color: @colordarkest;
fill: var(--color-surfacelighter);
background-color: var(--color-backgrounddarker);
}
}
@ -72,7 +50,8 @@
.name {
max-width: 80%;
margin-right: 3%;
// color: @colorwhite;
font-size: var(--name-font-size);
color: var(--color-surfacelighter);
overflow: hidden;
white-space: pre;
text-overflow: ellipsis;
@ -80,7 +59,8 @@
.version {
flex: 1;
// color: @colorwhite60;
font-size: var(--version-font-size);
color: var(--color-surface);
overflow: hidden;
white-space: pre;
text-overflow: ellipsis;
@ -93,13 +73,15 @@
display: flex;
align-items: center;
padding-left: 4%;
// color: @coloraccent;
font-size: var(--type-font-size);
color: var(--color-secondarylighter);
}
.description {
grid-area: description;
padding-left: 4%;
// color: @colorwhite;
font-size: var(--description-font-size);
color: var(--color-surfacelighter);
word-break: break-all; //Firefox doesn't support { break-word }
word-break: break-word;
}
@ -111,7 +93,8 @@
word-break: break-all;
.url {
// color: @colorwhite60;
font-size: var(--url-font-size);
color: var(--color-surface);
}
}
@ -127,6 +110,7 @@
display: flex;
align-items: center;
justify-content: center;
border-width: var(--button-border-width);
border-style: solid;
.icon {
@ -135,47 +119,47 @@
}
.label {
// color: @colorwhite;
color: var(--color-surfacelighter);
}
&.share-button {
// border-color: @coloraccent;
border-color: var(--color-secondarylighter);
.icon {
// fill: @coloraccent;
fill: var(--color-secondarylighter);
}
.label {
// color: @coloraccent;
color: var(--color-secondarylighter);
}
&:hover {
// background-color: @coloraccent;
background-color: var(--color-secondarylighter);
.icon {
// fill: @colorwhite;
fill: var(--color-surfacelighter);
}
.label {
// color: @colorwhite;
color: var(--color-surfacelighter);
}
}
}
&.install-button {
// border-color: @colorsignal5;
// background-color: @colorsignal5;
border-color: var(--color-signal5);
background-color: var(--color-signal5);
&:hover {
// background-color: @colorsignal580;
background-color: var(--color-signal580);
}
}
&.uninstall-button {
// border-color: @colorneutral;
border-color: var(--color-surfacedark);
&:hover {
// background-color: @colorneutral;
background-color: var(--color-surfacedark);
}
}

View file

@ -2,11 +2,11 @@
cursor: pointer;
&.checkbox-checked {
// background-color: @colorprimlight;
background-color: var(--color-primarylight);
.icon {
padding: 10%;
// fill: @colorwhite;
fill: var(--color-surfacelighter);
}
}
@ -28,6 +28,6 @@
width: 100%;
height: 100%;
margin: auto;
// fill: @colorwhite60;
fill: var(--color-surfacelighter60);
}
}

View file

@ -3,8 +3,8 @@
display: flex;
padding: 8px;
align-items: center;
// color: @colorwhite60;
// border-top: 1px solid @colorwhite20;
color: var(--color-surfacelighter60);
border-top: 1px solid var(--color-surfacelighter20);
.poster {
width: 75px;
display: flex;
@ -22,13 +22,13 @@
.play {
width: 20px;
height: 20px;
// fill: @colortransparent;
fill: transparent;
}
}
}
.title {
width: 170px;
// color: @colorwhite;
color: var(--color-surfacelighter);
}
.type, .year, .views, .hours {
width: 100px;
@ -39,8 +39,8 @@
.icon-container {
width: 100px;
height: 100px;
// fill: @colorprim;
// color: @colorprim;
fill: var(--color-primarydark);
color: var(--color-primarydark);
padding-top: 24px;
text-align: center;
visibility: hidden;
@ -52,25 +52,25 @@
}
}
&:hover, &:focus {
// color: @colorblack;
// background-color: @colorwhite;
color: var(--color-backgrounddarker);
background-color: var(--color-surfacelighter);
.play-container {
// background-color: @colorwhite;
background-color: var(--color-surfacelighter);
.play {
// fill: @colormedium;
fill: var(--color-primary);
}
}
.title {
// color: @colorblack;
color: var(--color-backgrounddarker);
}
.icon-container {
cursor: pointer;
visibility: visible;
&:hover, &:focus {
// background-color: @colorblack20;
background-color: var(--color-backgrounddarker20);
.trailer-icon, .addlib-icon, .trailer, .addlib {
// fill: @colorprimdark;
// color: @colorprimdark;
fill: var(--color-primarydarker);
color: var(--color-primarydarker);
}
}
}

View file

@ -1,13 +1,13 @@
.meta-item, .progress-poster-shape, .progress-landscape-shape, .progress-square-shape, .progress-info-poster-shape, .progress-info-landscape-shape, .progress-info-square-shape, .poster-shape, .landscape-shape, .square-shape, .info-poster-shape, .info-landscape-shape, .info-square-shape {
display: grid;
// color: @colorwhite;
color: var(--color-surfacelighter);
.poster {
grid-area: poster;
display: flex;
background-position: center;
background-size: cover, auto;
background-repeat: no-repeat;
// background-color: @colordarkest;
background-color: var(--color-backgrounddark);
.play-container {
width: 70px;
height: 70px;
@ -15,61 +15,61 @@
display: flex;
visibility: hidden;
border-radius: 50%;
// background-color: @colorwhite;
background-color: var(--color-surfacelighter);
.play {
width: 26px;
height: 26px;
margin: auto;
margin-left: 26px;
// fill: @colormedium;
fill: var(--color-primary);
}
}
}
.progress-container {
grid-area: progress;
// background-color: @colorneutral;
background-color: var(--color-surface);
.progress {
height: 4px;
// background-color: @colorprimlight;
background-color: var(--color-primarylight);
}
}
.info {
grid-area: info;
.title, .year, .episode {
grid-area: text;
// color: @colorwhite60;
color: var(--color-surfacelighter60);
}
:first-child {
// color: @colorwhite;
color: var(--color-surfacelighter);
}
}
.popup-icon-container {
grid-area: popupIcon;
cursor: pointer;
// fill: @colorwhite;
fill: var(--color-surfacelighter);
.popup-icon {
width: 10px;
height: 10px;
}
}
&:hover {
// color: @colorblack;
// background-color: @colorwhite;
// outline: 2px solid @colorwhite;
color: var(--color-backgrounddarker);
background-color: var(--color-surfacelighter);
outline: 2px solid var(--color-surfacelighter);
.play-container {
cursor: pointer;
visibility: visible;
}
.info {
.title, .year {
// color: @colorblack60;
color: var(--color-backgrounddarker60);
}
:first-child {
// color: @colorblack;
color: var(--color-backgrounddarker);
}
}
.popup-icon {
// fill: @colorblack40;
fill: var(--color-backgrounddarker40);
}
}
}

View file

@ -14,24 +14,24 @@
background-repeat: no-repeat;
background-position: center;
background-origin: border-box;
// background-color: @colordarkest;
background-color: var(--color-backgrounddark);
.in-cinema-container {
width: 100%;
height: 26px;
display: flex;
align-items: center;
justify-content: center;
// background-color: @colormedium;
background-color: var(--color-primary);
.in-cinema-icon {
height: 100%;
width: 12px;
// fill: @colorwhite;
fill: var(--color-surfacelighter);
margin-right: 6px;
}
.in-cinema-label {
font-size: 13px;
text-transform: uppercase;
// color: @colorwhite;
color: var(--color-surfacelighter);
}
}
}
@ -44,20 +44,20 @@
}
.name {
font-size: 12px;
// color: @colorwhite;
color: var(--color-surfacelighter);
}
.year {
font-size: 11px;
// color: @colorwhite80;
color: var(--color-surfacelighter80);
}
}
&:hover {
// background: @colorwhite;
background: var(--color-surfacelighter);
.name {
// color: @colorblack;
color: var(--color-backgrounddarker);
}
.year {
// color: @colorneutral;
color: var(--color-surface);
}
}
}

View file

@ -7,26 +7,26 @@
align-items: center;
.nav-tab-icon {
height: @nav-bar-height;
// fill: @colorwhite80;
fill: var(--color-surfacelighter80);
width: 18px;
}
.nav-tab-label {
// color: @colorwhite80;
color: var(--color-surfacelighter80);
font-size: 15px;
margin-left: 10px;
}
&.active {
// background-color: @colorbgmain;
background-color: var(--color-backgrounddark);
}
&:hover:not(.active) {
// background-color: @colordarkest20;
background-color: var(--color-backgrounddark20);
}
&:hover, &.active {
.nav-tab-icon {
// fill: @colorwhite;
fill: var(--color-surfacelighter);
}
.nav-tab-label {
// color: @colorwhite;
color: var(--color-surfacelighter);
}
}
}

View file

@ -16,11 +16,11 @@
outline: none;
appearance: none;
user-select: text;
// background-color: @colorsecondarylight80;
// color: @colorwhite80;
background-color: var(--color-secondary80);
color: var(--color-surfacelighter80);
font-size: 14px;
&::placeholder {
// color: @colorwhite80;
color: var(--color-surfacelighter80);
}
}
.submit-button {
@ -28,11 +28,11 @@
height: 100%;
cursor: pointer;
outline: none;
// background-color: @coloraccent80;
background-color: var(--color-secondarylighter80);
.submit-icon {
width: 14px;
height: 100%;
// fill: @colorwhite80;
fill: var(--color-surfacelighter80);
}
}
}
@ -40,19 +40,19 @@
.search-label {
padding: 0;
.query-input {
// background-color: @colorbgmain;
// color: @colorwhite;
background-color: var(--color-backgrounddark);
color: var(--color-surfacelighter);
font-size: 16px;
&::placeholder {
// color: @colorwhite;
color: var(--color-surfacelighter);
}
}
.submit-button {
width: @nav-bar-height;
// background-color: @coloraccent;
background-color: var(--color-secondarylighter);
.submit-icon {
width: 16px;
// fill: @colorwhite;
fill: var(--color-surfacelighter);
}
}
}

View file

@ -6,7 +6,7 @@
background-color: transparent;
.icon {
height: @nav-bar-height;
// fill: @colorwhite80
fill: var(--color-surfacelighter80)
}
.user-icon {
width: 40%;
@ -15,9 +15,9 @@
width: 16%;
}
&:hover, &.active {
// background-color: @colordarkest20;
background-color: var(--color-backgrounddark20);
.icon {
// fill: @colorwhite;
fill: var(--color-surfacelighter);
}
}
}

View file

@ -3,11 +3,11 @@
.nav-bar {
display: flex;
height: @nav-bar-height;
// background-color: @colorsecondary;
background-color: var(--color-secondarydark);
.nav-title {
padding: 0 10px;
font-size: 16px;
// color: @colorwhite;
color: var(--color-surfacelighter);
}
.search-input {
flex: 1;

View file

@ -12,18 +12,16 @@ const renderUrl = (copyToClipboard, url) => {
return (
<div className={styles['url-container']}>
<input className={styles['url']} defaultValue={url} readOnly={true} />
<span onClick={copyToClipboard} className={styles['copy-label']}>
<div onClick={copyToClipboard} className={styles['copy-label']}>
<Icon className={styles['copy-icon']} icon={'ic_link'} />Copy
</span>
</div>
</div>
);
}
const ShareAddon = (props) => {
const placeholderIconUrl = iconDataUrl({ icon: 'ic_x', fill: colors.neutrallight });
const placeholderIconUrl = iconDataUrl({ icon: 'ic_x', fill: colors.surface });
const imageStyle = {
width: 10,
height: 10,
backgroundImage: `url('${placeholderIconUrl}')`
};
@ -33,7 +31,7 @@ const ShareAddon = (props) => {
<div onClick={props.closeModalDialog} style={imageStyle} className={styles['x-icon']} />
</div>
<div className={styles['info-container']}>
<span className={styles['share-label']}>Share Add-on</span>
<div className={styles['share-label']}>Share Add-on</div>
<div className={styles['buttons']}>
<div onClick={props.shareInFacebook} className={styles['facebook-button']}>
<Icon className={styles['facebook-icon']} icon={'ic_facebook'} />FACEBOOK

View file

@ -1,8 +1,62 @@
@share-addon-width: 380px;
@spacing: floor((@share-addon-width * 0.06));
.share-addon {
width: 380px;
padding: 10px;
// color: @colorwhite;
// background-color: @colorwhite;
width: @share-addon-width;
padding: ceil((@spacing * 0.5));
.x-icon {
width: ceil((@spacing * 0.5));
height: ceil((@spacing * 0.5));
}
.info-container {
padding: floor((@spacing * 0.3)) ceil((@spacing * 0.9)) @spacing ceil((@spacing * 0.9));
.buttons {
padding: @spacing 0;
}
.facebook-button, .twitter-button, .gplus-button {
width: ceil((@share-addon-width * 0.26));
height: floor((@share-addon-width * 0.09));
.facebook-icon, .twitter-icon, .gplus-icon {
width: ceil((@spacing * 0.6));
height: ceil((@spacing * 0.6));
margin-right: floor((@spacing * 0.3));
}
}
.url-container {
border-radius: 4px;
border-width: 1px;
.url {
font-size: 12px;
border-radius: 4px;
padding: ceil((@spacing * 0.5));
}
.copy-label {
font-size: 14px;
border-top-right-radius: 3px;
border-bottom-right-radius: 3px;
padding: ceil((@spacing * 0.5));
.copy-icon {
width: ceil((@spacing * 0.7));
height: ceil((@spacing * 0.7));
margin-right: floor((@spacing * 0.3));
}
}
}
}
}
.share-addon {
color: var(--color-surfacelighter);
background-color: var(--color-surfacelighter);
.x-container {
display: flex;
@ -15,87 +69,67 @@
}
}
.info-container {
padding: 6px 20px 30px 20px;
.share-label {
color: var(--color-backgrounddarker);
font-weight: 500;
}
.share-label {
// color: @colorblack;
font-weight: 600;
}
.buttons {
display: flex;
font-size: 11px;
justify-content: space-between;
.buttons {
.facebook-button, .twitter-button, .gplus-button {
display: flex;
font-size: 11px;
margin: 22px 0px;
justify-content: space-between;
cursor: pointer;
align-items: center;
justify-content: center;
.facebook-icon, .twitter-icon, .gplus-icon {
width: 14px;
height: 14px;
margin-right: 6px;
// fill: @colorwhite;
}
.facebook-button {
// background-color: @colorfb;
}
.twitter-button {
// background-color: @coloraccent;
}
.gplus-button {
background-color: #dd4b39;
}
.facebook-button, .twitter-button, .gplus-button {
display: flex;
cursor: pointer;
width: 100px;
height: 32px;
align-items: center;
justify-content: center;
fill: var(--color-surfacelighter);
}
}
.url-container {
display: flex;
border-radius: 4px;
.facebook-button {
background-color: var(--color-secondary);
}
.twitter-button {
background-color: var(--color-secondarylighter);
}
.gplus-button {
background-color: var(--color-signal2);
}
}
.url-container {
display: flex;
border-style: solid;
border-color: var(--color-surface);
.url, .copy-label {
color: var(--color-backgrounddarker40);
}
.url {
width: 75%;
outline: none;
font-weight: 600;
text-align: center;
// border: 1px solid @colorneutrallight;
text-overflow: ellipsis;
}
.url, .copy-label {
padding: 10px;
font-weight: 600;
// color: @colorblack40;
}
.copy-label {
cursor: pointer;
width: 25%;
font-weight: 500;
display: flex;
justify-content: center;
background-color: var(--color-backgrounddarker20);
.url {
width: 90%;
outline: none;
font-size: 12px;
text-align: center;
border-radius: 4px;
padding-right: 30px;
text-overflow: ellipsis;
}
.copy-label {
width: 30%;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
border-top-right-radius: 3px;
border-bottom-right-radius: 3px;
// background-color: @colorblack20;
.copy-icon {
width: 16px;
height: 16px;
margin-right: 4px;
// fill: @colorblack40;
}
.copy-icon {
fill: var(--color-backgrounddarker40);
}
}
}

View file

@ -1,113 +0,0 @@
@stream-width: 360px;
@spacing: max(12px, ceil((@stream-width * 0.04)));
@progress-height: 5px;
.stream-container {
width: @stream-width;
.logo-container {
margin: @spacing 0 @spacing @spacing;
}
.source-name {
font-size: 13px;
margin: @spacing 0 @spacing @spacing;
}
.text-container {
min-height: ceil((@stream-width * 0.16));
padding: @spacing;
.title {
font-size: 11px;
}
.subtitle {
font-size: 11px;
}
:not(:last-child) {
margin-bottom: (@spacing * 0.5);
}
}
.play-container {
width: floor((@stream-width * 0.08));
padding: @spacing @spacing @spacing 0;
}
.progress {
height: @progress-height;
}
}
.stream-container {
// background-color: @colorglass;
.flex-row-container {
display: flex;
flex-direction: row;
align-items: stretch;
.logo-container {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
.logo {
width: 100%;
// fill: @colorwhite;
}
}
.source-name {
flex: 1;
display: flex;
align-items: center;
// color: @colorwhite;
word-break: break-all; //Firefox doesn't support { break-word }
word-break: break-word;
}
.text-container {
flex: 3;
display: flex;
flex-direction: column;
justify-content: center;
.title {
// color: @colorwhite;
word-break: break-word;
}
.subtitle {
// color: @colorwhite;
word-break: break-word;
}
}
.play-container {
display: flex;
align-items: center;
.play {
width: 100%;
// fill: @colorwhite;
}
}
}
.progress-container {
// background-color: @colorprim;
.progress {
// background-color: @colorprimlight;
}
}
&:hover {
cursor: pointer;
// background-color: @colorwhite20;
}
}

View file

@ -1,39 +1,18 @@
@user-panel-width: 260px;
@spacing: max(16px, ceil((@user-panel-width * 0.06)));
.user-panel {
width: @user-panel-width;
.user-info {
grid-template-columns: ceil((@user-panel-width * 0.2)) auto;
grid-template-rows: ceil((@user-panel-width * 0.1)) ceil((@user-panel-width * 0.1));
padding: @spacing;
}
.option {
padding: @spacing;
.icon {
width: floor((@user-panel-width * 0.08));
height: floor((@user-panel-width * 0.08));
margin-right: @spacing;
}
}
.label {
padding: ceil((@spacing * 0.6)) (2 * ceil((@spacing * 0.6)));
}
.separator {
height: 1px;
}
--user-panel-width: 260px;
--spacing: 16px;
--separator-height: 1px;
}
.user-panel {
// background-color: @colordarkest;
width: var(--user-panel-width);
background-color: var(--color-background);
.user-info {
display: grid;
padding: var(--spacing);
grid-template-columns: calc(0.2 * var(--user-panel-width)) auto;
grid-template-rows: calc(0.1 * var(--user-panel-width)) calc(0.1 * var(--user-panel-width));
grid-template-areas:
"avatar email"
"avatar login-logout";
@ -50,8 +29,8 @@
grid-area: email;
display: flex;
align-items: center;
// color: @colorwhite;
padding-left: @spacing;
color: var(--color-surfacelighter);
padding-left: var(--spacing);
overflow: hidden;
white-space: pre;
text-overflow: ellipsis;
@ -61,15 +40,15 @@
grid-area: login-logout;
display: flex;
align-items: center;
// color: @colorneutral;
padding-left: @spacing;
color: var(--color-surface);
padding-left: var(--spacing);
overflow: hidden;
white-space: pre;
text-overflow: ellipsis;
&:hover {
cursor: pointer;
// color: @colorwhite;
color: var(--color-surfacelighter);
}
}
}
@ -77,20 +56,25 @@
.option {
display: flex;
align-items: center;
// color: @colorwhite80;
padding: var(--spacing);
color: var(--color-surfacelighter80);
.icon {
// fill: @coloraccent;
width: calc(var(--user-panel-width) * 0.08);
height: calc(var(--user-panel-width) * 0.08);
margin-right: var(--spacing);
fill: var(--color-secondarylighter);
}
&:hover {
cursor: pointer;
// color: @colorwhite;
// background-color: @coloraccent20;
color: var(--color-surfacelighter);
background-color: var(--color-secondarylighter20);
}
}
.separator {
// background-color: @colorneutral;
height: var(--separator-height);
background-color: var(--color-surface);
}
}

View file

@ -1,121 +0,0 @@
@video-width: 360px;
@spacing: max(8px, ceil((@video-width * 0.02)));
@progress-height: 5px;
.video-container {
width: @video-width;
.poster {
margin: @spacing 0 @spacing @spacing;
}
.info-container {
min-height: ceil((@video-width * 0.2));
padding: @spacing;
.title {
font-size: 12px;
}
.released-date {
font-size: 11px;
}
.upcoming-label, .watched-label {
font-size: 10px;
border-radius: 2px;
}
.upcoming-label {
margin-right: @spacing;
}
>:not(:last-child) {
margin-bottom: (@spacing * 0.5);
}
}
.arrow-container {
width: floor((@video-width * 0.07));
padding: @spacing @spacing @spacing 0;
}
.progress {
height: @progress-height;
}
}
.video-container {
// background-color: @colorglass;
.flex-row-container {
display: flex;
flex-direction: row;
align-items: stretch;
.poster {
flex: 1;
background-position: center;
background-size: cover, auto;
background-repeat: no-repeat;
}
.info-container {
flex: 3;
display: flex;
flex-direction: column;
justify-content: center;
.title {
// color: @colorwhite;
word-break: break-all; //Firefox doesn't support { break-word }
word-break: break-word;
}
.released-date {
// color: @colorwhite60;
}
.label-container {
display: flex;
.upcoming-label, .watched-label {
padding: 0 0.6em;
font-weight: 600;
// color: @colorwhite;
}
.upcoming-label {
// background-color: @colorsignal5;
}
.watched-label {
// background-color: @colorprimlight;
}
}
}
.arrow-container {
display: flex;
align-items: center;
.arrow {
width: 100%;
// fill: @colorwhite;
}
}
}
.progress-container {
// background-color: @colorprim;
.progress {
// background-color: @colorprimlight;
}
}
&:hover {
cursor: pointer;
// background-color: @colorwhite20;
}
}

View file

@ -4,8 +4,6 @@ import NavBar from './NavBar';
import Modal from './Modal';
import MetadataItem from './MetadataItem';
import Router from './Router';
import Stream from './Stream';
import Video from './Video';
import LibraryItemList from './LibraryItemList';
import MetaItem from './MetaItem';
import Addon from './Addon';
@ -20,8 +18,6 @@ export {
Modal,
MetadataItem,
Router,
Stream,
Video,
LibraryItemList,
MetaItem,
Addon,

View file

@ -0,0 +1,9 @@
import React, { Component } from 'react';
class Detail extends Component {
render() {
return null;
}
}
export default Detail;

View file

@ -0,0 +1,96 @@
.stream-container {
--stream-width: 360px;
--spacing: 8px;
--source-name-font-size: 13px;
--title-font-size: 11px;
--subtitle-font-size: 11px;
}
.stream-container {
width: var(--stream-width);
background-color: var(--color-backgroundlight);
.flex-row-container {
display: flex;
flex-direction: row;
align-items: stretch;
.logo-container {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
margin: var(--spacing) 0 var(--spacing) var(--spacing);
.logo {
width: 100%;
fill: var(--color-surfacelighter);
}
}
.source-name {
flex: 1;
display: flex;
align-items: center;
margin: var(--spacing) 0 var(--spacing) var(--spacing);
font-size: var(--source-name-font-size);
color: var(--color-surfacelighter);
word-break: break-all; //Firefox doesn't support { break-word }
word-break: break-word;
}
.text-container {
flex: 3;
min-height: calc(0.2 * var(--stream-width));
padding: var(--spacing);
display: flex;
flex-direction: column;
justify-content: center;
.title {
font-size: var(--title-font-size);
color: var(--color-surfacelighter);
word-break: break-all;
word-break: break-word;
}
.subtitle {
font-size: var(--subtitle-font-size);
color: var(--color-surfacelighter);
word-break: break-all;
word-break: break-word;
}
:not(:last-child) {
margin-bottom: calc(0.5 * var(--spacing));
}
}
.play-container {
width: calc(0.07 * var(--stream-width));
display: flex;
align-items: center;
padding: var(--spacing) var(--spacing) var(--spacing) 0;
.play {
width: 100%;
fill: var(--color-surfacelighter);
}
}
}
.progress-container {
height: calc(0.5 * var(--spacing));
background-color: var(--color-primarydark);
.progress {
height: 100%;
background-color: var(--color-primarylight);
}
}
&:hover {
cursor: pointer;
background-color: var(--color-surfacelighter20);
}
}

View file

@ -0,0 +1,39 @@
import React from 'react';
import PropTypes from 'prop-types';
import Icon from 'stremio-icons/dom';
import Stream from './Stream';
import styles from './styles';
const StreamsList = (props) => {
return (
<div className={styles['streams-list-container']}>
<div className={styles['scroll-container']}>
{props.streams
.map((stream) =>
<Stream key={stream.id}
className={styles['stream']}
logo={stream.logo}
sourceName={stream.sourceName}
title={stream.title}
subtitle={stream.subtitle}
progress={stream.progress}
/>
)}
<div className={styles['button']} onClick={props.onMoreAddonsClicked}>
<Icon className={styles['button-icon']} icon={'ic_addons'} />
<div className={styles['button-label']}>More Add-ons</div>
</div>
</div>
</div>
);
}
StreamsList.propTypes = {
streams: PropTypes.arrayOf(PropTypes.object).isRequired,
onMoreAddonsClicked: PropTypes.func
};
StreamsList.defaultProps = {
streams: []
};
export default StreamsList;

View file

@ -0,0 +1,3 @@
import StreamsList from './StreamsList';
export default StreamsList;

View file

@ -0,0 +1,59 @@
.streams-list-container {
--scroll-container-width: 392px;
--stream-width: 360px;
--spacing: 8px;
--button-label-font-size: 18px;
}
.streams-list-container {
height: 100%;
display: inline-flex;
flex-direction: column;
background: var(--color-background);
.scroll-container {
flex: 1;
width: var(--scroll-container-width);
padding: 0 calc(2 * var(--spacing));
margin: var(--spacing);
overflow-y: auto;
overflow-x: hidden;
>:not(:first-child) {
margin-top: var(--spacing);
}
.button {
width: var(--stream-width);
height: calc(0.2 * var(--stream-width));
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
color: var(--color-primary);
background-color: var(--color-surfacelighter);
.button-icon {
height: 44%;
margin-right: var(--spacing);
fill: var(--color-primary);
}
.button-label {
font-size: var(--button-label-font-size);
}
}
}
.scroll-container::-webkit-scrollbar {
width: var(--spacing);
}
.scroll-container::-webkit-scrollbar-thumb {
background-color: var(--color-secondarylighter80);
}
.scroll-container::-webkit-scrollbar-track {
background-color: var(--color-backgroundlight);
}
}

View file

@ -1,8 +1,7 @@
import React from 'react';
import PropTypes from 'prop-types';
import classnames from 'classnames';
import Icon, { dataUrl as iconDataUrl } from 'stremio-icons/dom';
import colors from 'stremio-colors';
import Icon from 'stremio-icons/dom';
import styles from './styles';
const MAX_TITLE_SYMBOLS = 100;
@ -12,23 +11,20 @@ const renderPoster = (poster) => {
return null;
}
const placeholderIconUrl = iconDataUrl({ icon: 'ic_channels', fill: colors.accent });
const imageStyle = {
backgroundImage: `url('${poster}'), url('${placeholderIconUrl}')`
};
return (
<div style={imageStyle} className={styles['poster']} />
<div className={styles['poster-container']}>
<img className={styles['poster']} src={poster} alt={''} />
</div>
);
}
const renderTitle = (number, title) => {
const renderTitle = (episode, title) => {
if (title.length === 0) {
return null;
}
return (
<div className={styles['title']}>{number}. {title.length > MAX_TITLE_SYMBOLS ? title.slice(0, MAX_TITLE_SYMBOLS) + '...' : title}</div>
<div className={styles['title']}>{episode}. {title.length > MAX_TITLE_SYMBOLS ? title.slice(0, MAX_TITLE_SYMBOLS) + '...' : title}</div>
);
}
@ -95,7 +91,7 @@ const Video = (props) => {
<div className={styles['flex-row-container']}>
{renderPoster(props.poster)}
<div className={styles['info-container']}>
{renderTitle(props.number, props.title)}
{renderTitle(props.episode, props.title)}
{renderReleasedDate(props.released)}
{renderLabels(props.isUpcoming, props.isWatched)}
</div>
@ -111,7 +107,7 @@ const Video = (props) => {
Video.propTypes = {
className: PropTypes.string,
poster: PropTypes.string.isRequired,
number: PropTypes.number.isRequired,
episode: PropTypes.number.isRequired,
title: PropTypes.string.isRequired,
released: PropTypes.instanceOf(Date).isRequired,
isWatched: PropTypes.bool.isRequired,
@ -121,7 +117,7 @@ Video.propTypes = {
};
Video.defaultProps = {
poster: '',
number: 0,
episode: 0,
title: '',
released: new Date(''), //Invalid Date
isWatched: false,

View file

@ -0,0 +1,116 @@
.video-container {
--video-width: 360px;
--spacing: 8px;
--title-font-size: 12px;
--released-date-font-size: 11px;
--label-font-size: 10px;
--label-border-width: 2px;
}
.video-container {
width: var(--video-width);
background-color: var(--color-backgroundlight);
.flex-row-container {
display: flex;
flex-direction: row;
align-items: stretch;
.poster-container {
flex: 1;
margin: var(--spacing) 0 var(--spacing) var(--spacing);
.poster {
display: block;
width: 100%;
height: 100%;
object-fit: contain;
&[alt]:after {
display: block;
width: 100%;
height: 100%;
background-image: url("data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1391 1024\" width=\"undefined\" height=\"undefined\" fill=\"rgba(140,163,220,1)\"><path d=\"M501.459 632.471v-377.374c-0-0-0-0.001-0-0.001 0-22.516 18.167-40.788 40.643-40.959l0.016-0c7.294 0.019 14.141 1.915 20.089 5.228l-0.212-0.108 341.534 188.536c12.694 7.123 21.13 20.496 21.13 35.84s-8.437 28.717-20.924 35.734l-0.206 0.106-341.233 188.838c-5.741 3.22-12.599 5.116-19.9 5.116-15.251 0-28.57-8.275-35.712-20.58l-0.106-0.198c-3.172-5.843-5.060-12.784-5.12-20.16l-0-0.018z\" /><path d=\"M1141.459 1024h-897.807c-22.669-1.937-40.336-20.816-40.336-43.821s17.666-41.884 40.173-43.81l0.163-0.011h897.807c22.669 1.937 40.336 20.816 40.336 43.821s-17.666 41.884-40.173 43.81l-0.163 0.011z\" /><path d=\"M1275.181 887.868h-1159.529c-63.841-0.341-115.482-52.088-115.652-115.937l-0-0.016v-656.264c0-63.873 51.779-115.652 115.652-115.652v0h1159.529c63.873 0 115.652 51.779 115.652 115.652v0 656.264c-0.17 63.865-51.811 115.612-115.619 115.953l-0.032 0zM115.652 74.692c-22.622 0-40.96 18.338-40.96 40.96l-0-0v656.264c-0.001 0.089-0.001 0.195-0.001 0.301 0 22.622 18.338 40.96 40.96 40.96 0 0 0.001-0 0.001-0l1159.529 0c22.622 0 40.96-18.338 40.96-40.96v0 0-656.565c0-22.622-18.338-40.96-40.96-40.96v0h-1159.529z\" /></svg>");
background-repeat: no-repeat;
background-position: center;
content: "";
}
}
}
.info-container {
flex: 3;
min-height: calc(0.2 * var(--video-width));
padding: var(--spacing);
display: flex;
flex-direction: column;
justify-content: center;
.title {
font-size: var(--title-font-size);
color: var(--color-surfacelighter);
word-break: break-all; //Firefox doesn't support { break-word }
word-break: break-word;
}
.released-date {
font-size: var(--released-date-font-size);
color: var(--color-surface);
}
.label-container {
display: flex;
.upcoming-label, .watched-label {
font-size: var(--label-font-size);
font-weight: 600;
line-height: 1.5;
border-width: var(--label-border-width);
border-style: solid;
padding: 0 0.6em;
color: var(--color-surfacelighter);
}
.upcoming-label {
margin-right: var(--spacing);
border-color: var(--color-signal5);
}
.watched-label {
border-color: var(--color-primarylight);
}
}
>:not(:last-child) {
margin-bottom: calc(0.5 * var(--spacing));
}
}
.arrow-container {
width: calc(0.07 * var(--video-width));
display: flex;
align-items: center;
padding: var(--spacing) var(--spacing) var(--spacing) 0;
.arrow {
width: 100%;
fill: var(--color-surfacelighter);
}
}
}
.progress-container {
height: calc(0.5 * var(--spacing));
background-color: var(--color-primarydark);
.progress {
height: 100%;
background-color: var(--color-primarylight);
}
}
&:hover {
cursor: pointer;
background-color: var(--color-surfacelighter20);
}
}

View file

@ -0,0 +1,83 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import Icon from 'stremio-icons/dom';
import Video from './Video';
import styles from './styles';
class VideosList extends Component {
constructor(props) {
super(props);
this.seasons = this.props.videos.map((video) => video.season)
.filter((season, index, seasons) => seasons.indexOf(season) === index);
this.state = {
selectedSeason: this.seasons[0]
}
}
changeSeason = (event) => {
this.setState({ selectedSeason: parseInt(event.target.value) });
}
shouldComponentUpdate(nextProps, nextState) {
return nextState.selectedSeason !== this.state.selectedSeason;
}
onPrevButtonClicked = () => {
const prevSeasonIndex = Math.max(this.seasons.indexOf(this.state.selectedSeason) - 1, 0);
this.setState({ selectedSeason: this.seasons[prevSeasonIndex] });
}
onNextButtonClicked = () => {
const nextSeasonIndex = Math.min(this.seasons.indexOf(this.state.selectedSeason) + 1, this.seasons.length - 1);
this.setState({ selectedSeason: this.seasons[nextSeasonIndex] });
}
render() {
return (
<div className={styles['videos-list-container']}>
<div className={styles['seasons-bar']}>
<div className={styles['button-container']} onClick={this.onPrevButtonClicked}>
<Icon className={styles['button-icon']} icon={'ic_arrow_left'} />
</div>
<select value={this.state.selectedSeason} onChange={this.changeSeason}>
{this.seasons.map((season) =>
<option key={season} value={season}>
{season}
</option>
)}
</select>
<div className={styles['button-container']} onClick={this.onNextButtonClicked} >
<Icon className={styles['button-icon']} icon={'ic_arrow_left'} />
</div>
</div>
<div className={styles['scroll-container']}>
{this.props.videos
.filter((video) => video.season === this.state.selectedSeason)
.map((video) =>
<Video key={video.id}
className={styles['video']}
poster={video.poster}
episode={video.episode}
title={video.name}
released={video.released}
isWatched={video.isWatched}
isUpcoming={video.isUpcoming}
progress={video.progress}
/>
)}
</div>
</div>
);
}
}
VideosList.propTypes = {
videos: PropTypes.arrayOf(PropTypes.object).isRequired
};
VideosList.defaultProps = {
videos: []
};
export default VideosList;

View file

@ -0,0 +1,3 @@
import VideosList from './VideosList';
export default VideosList;

View file

@ -0,0 +1,62 @@
.videos-list-container {
--scroll-container-width: 392px;
--seasons-bar-height: 50px;
--spacing: 8px;
}
.videos-list-container {
height: 100%;
display: inline-flex;
flex-direction: column;
background: var(--color-background);
.seasons-bar {
height: var(--seasons-bar-height);
display: flex;
justify-content: space-between;
margin-bottom: var(--spacing);
.button-container {
width: calc(1.5 * var(--seasons-bar-height));
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
.button-icon {
width: 60%;
height: 60%;
fill: var(--color-surfacelighter);
}
&:hover {
background-color: var(--color-surfacelighter20);
}
}
}
.scroll-container {
flex: 1;
width: var(--scroll-container-width);
padding: 0 calc(2 * var(--spacing));
margin: 0 var(--spacing);
overflow-y: auto;
overflow-x: hidden;
>:not(:first-child) {
margin-top: var(--spacing);
}
}
.scroll-container::-webkit-scrollbar {
width: var(--spacing);
}
.scroll-container::-webkit-scrollbar-thumb {
background-color: var(--color-secondarylighter80);
}
.scroll-container::-webkit-scrollbar-track {
background-color: var(--color-backgroundlight);
}
}

View file

@ -0,0 +1,3 @@
import Detail from './Detail';
export default Detail;

View file

@ -2,7 +2,7 @@
height: 100%;
width: 100%;
display: flex;
// color: @colorwhite60;
color: var(--color-surfacelighter60);
.side-menu {
width: 240px;
@ -10,7 +10,7 @@
display: flex;
flex-direction: column;
font-size: 14px;
// background: @colordarkest;
background: var(--color-backgrounddark);
.menu-option {
padding: 14px;
@ -18,8 +18,8 @@
&:hover, &.selected {
cursor: pointer;
// color: @colorwhite;
// background: @colorglass;
color: var(--color-surfacelighter);
background: var(--color-background);
}
}
}
@ -52,14 +52,14 @@
&:hover {
.preference {
// color: @colorwhite;
color: var(--color-surfacelighter);
}
}
}
&:not(:last-child) {
margin-bottom: 30px;
// border-bottom: 1px solid @colormedium;
border-bottom: 1px solid var(--color-primary);
}
}
}

View file

@ -7,6 +7,7 @@ import Calendar from './Calendar';
import Search from './Search';
import Settings from './Settings';
import Player from './Player';
import Detail from './Detail';
export {
Addons,
@ -17,5 +18,6 @@ export {
Calendar,
Search,
Settings,
Player
Player,
Detail
};

View file

@ -1,6 +1,11 @@
import React from 'react';
import { storiesOf } from '@storybook/react';
import { Addon, Checkbox, LibraryItemList, MetaItem, ShareAddon, Stream, UserPanel, Video } from 'stremio-common';
import { Addon, Checkbox, LibraryItemList, MetaItem, ShareAddon, UserPanel } from 'stremio-common';
import Stream from '../src/routes/Detail/StreamsList/Stream';
import Video from '../src/routes/Detail/VideosList/Video';
import VideosList from '../src/routes/Detail/VideosList';
import StreamsList from '../src/routes/Detail/StreamsList';
import colors from 'stremio-colors';
import appStyles from '../src/app/styles';
import styles from './styles';
@ -10,6 +15,22 @@ const storyStyle = {
minHeight: 'initial'
};
const videosListStyle = {
position: 'absolute',
height: '100%',
padding: '10px',
minHeight: 'initial',
background: colors.backgroundlighter
}
const streamsListStyle = {
position: 'absolute',
height: '100%',
padding: '10px',
minHeight: 'initial',
background: colors.backgroundlighter
}
storiesOf('Addon', module)
.add('not-installed', () => (
<div style={storyStyle} className={appStyles['app']}>
@ -242,7 +263,7 @@ storiesOf('Video', module)
<Video
className={styles['video']}
poster={'https://www.stremio.com/website/home-stremio.png'}
number={2}
episode={2}
title={'The Bing BranHypothesiingBranHypothesiingBranHypothesiingBranHypothesiingBranHypothesiingBran Hypothesiing Bran Hypothesiing Bran Hypothesiing Bran Hypothesiing Bran Hypothesis'}
released={new Date(2018, 4, 23)}
isUpcoming={true}
@ -256,7 +277,7 @@ storiesOf('Video', module)
<Video
className={styles['video']}
poster={'https://www.stremio.com/website/home-stremio.png'}
number={2}
episode={2}
title={'The Bing Bran Hypothesis'}
isWatched={true}
onVideoClicked={function() { alert(8) }}
@ -267,7 +288,7 @@ storiesOf('Video', module)
<div style={storyStyle} className={appStyles['app']}>
<Video
className={styles['video']}
number={4}
episode={4}
title={'The Luminous Fish Effect'}
progress={50}
/>
@ -278,7 +299,7 @@ storiesOf('Video', module)
<Video
className={styles['video']}
poster={'5'}
number={5}
episode={5}
title={'The Dumpling Paradox'}
progress={50}
/>
@ -288,10 +309,92 @@ storiesOf('Video', module)
<div style={storyStyle} className={appStyles['app']}>
<Video
className={styles['video']}
number={8}
episode={8}
title={'The Loobendfeld Decay'}
released={new Date(2018, 4, 23)}
isUpcoming={true}
/>
</div>
));
storiesOf('VideosList', module)
.add('list of videos', () => (
<div style={videosListStyle} className={appStyles['app']}>
<VideosList videos={[
{ id: '1', poster: 'https://www.stremio.com/websiste/home-stremio.png', episode: 1, name: 'The Bing BranHypothesiingBranHypothesiingBranHypothesiingBranHypothesiingBranHypothesiingBran Hypothesiing Bran Hypothesiing Bran Hypothesiing Bran Hypothesiing Bran Hypothesis', description: 'dasdasda', released: new Date(2018, 4, 23), isUpcoming: true, isWatched: true, season: 1 },
{ id: '2', poster: 'https://www.stremio.com/website/home-stremio.png', episode: 2, name: 'The Bing Bran Hypothesis', description: 'dasdasda', released: new Date(2018, 4, 23), isWatched: true, season: 3 },
{ id: '3', episode: 4, name: 'The Luminous Fish Effect', description: 'dasdasda', released: new Date(2018, 4, 23), progress: 50, season: 5 },
{ id: '4', poster: 'https://www.stremiocom/website/home-stremio.png', episode: 5, name: 'The Dumpling Paradox', description: 'dasdasda', released: new Date(2018, 4, 23), progress: 50, season: 4 },
{ id: '5', episode: 8, name: 'The Loobendfeld Decay', description: 'dasdasda', released: new Date(2018, 4, 23), isUpcoming: true, season: 5 },
{ id: '6', poster: 'https://www.stremio.com/website/home-stremio.png', episode: 1, name: 'The Bing BranHypothesiingBranHypothesiingBranHypothesiingBranHypothesiingBranHypothesiingBran Hypothesiing Bran Hypothesiing Bran Hypothesiing Bran Hypothesiing Bran Hypothesis', description: 'dasdasda', released: new Date(2018, 4, 23), isUpcoming: true, isWatched: true, season: 1 },
{ id: '7', poster: 'https://www.stremio.com/website/home-stremio.png', episode: 2, name: 'The Bing Bran Hypothesis', description: 'dasdasda', released: new Date(2018, 4, 23), isWatched: true, season: 1 },
{ id: '8', episode: 4, name: 'The Luminous Fish Effect', description: 'dasdasda', released: new Date(2018, 4, 23), progress: 50, season: 3 },
{ id: '9', poster: 'https://www.stremiocom/website/home-stremio.png', episode: 5, name: 'The Dumpling Paradox', description: 'dasdasda', released: new Date(2018, 4, 23), progress: 50, season: 2 },
{ id: '10', episode: 8, name: 'The Loobendfeld Decay', description: 'dasdasda', released: new Date(2018, 4, 23), isUpcoming: true, season: 5 },
{ id: '11', episode: 8, name: 'The Loobendfeld Decay', description: 'dasdasda', released: new Date(2018, 4, 23), isUpcoming: true, season: 1 },
{ id: '12', poster: 'https://www.stremio.com/website/home-stremio.png', episode: 1, name: 'The Bing BranHypothesiingBranHypothesiingBranHypothesiingBranHypothesiingBranHypothesiingBran Hypothesiing Bran Hypothesiing Bran Hypothesiing Bran Hypothesiing Bran Hypothesis', description: 'dasdasda', released: new Date(2018, 4, 23), isUpcoming: true, isWatched: true, season: 1 },
{ id: '13', poster: 'https://www.stremio.com/website/home-stremio.png', episode: 2, name: 'The Bing Bran Hypothesis', description: 'dasdasda', released: new Date(2018, 4, 23), isWatched: true, season: 1 },
{ id: '14', episode: 4, name: 'The Luminous Fish Effect', description: 'dasdasda', released: new Date(2018, 4, 23), progress: 50, season: 3 },
{ id: '15', poster: 'https://www.stremiocom/website/home-stremio.png', episode: 5, name: 'The Dumpling Paradox', description: 'dasdasda', released: new Date(2018, 4, 23), progress: 50, season: 2 },
{ id: '16', episode: 8, name: 'The Loobendfeld Decay', description: 'dasdasda', released: new Date(2018, 4, 23), isUpcoming: true, season: 5 },
{ id: '17', episode: 8, name: 'The Loobendfeld Decay', description: 'dasdasda', released: new Date(2018, 4, 23), isUpcoming: true, season: 1 },
{ id: '18', poster: 'https://www.stremio.com/website/home-stremio.png', episode: 1, name: 'The Bing BranHypothesiingBranHypothesiingBranHypothesiingBranHypothesiingBranHypothesiingBran Hypothesiing Bran Hypothesiing Bran Hypothesiing Bran Hypothesiing Bran Hypothesis', description: 'dasdasda', released: new Date(2018, 4, 23), isUpcoming: true, isWatched: true, season: 1 },
{ id: '19', poster: 'https://www.stremio.com/website/home-stremio.png', episode: 2, name: 'The Bing Bran Hypothesis', description: 'dasdasda', released: new Date(2018, 4, 23), isWatched: true, season: 1 },
{ id: '20', episode: 4, name: 'The Luminous Fish Effect', description: 'dasdasda', released: new Date(2018, 4, 23), progress: 50, season: 3 },
{ id: '21', poster: 'https://www.stremiocom/wsebsite/home-stremio.png', episode: 5, name: 'The Dumpling Paradox', description: 'dasdasda', released: new Date(2018, 4, 23), progress: 50, season: 2 },
{ id: '22', episode: 8, name: 'The Loobendfeld Decay', description: 'dasdasda', released: new Date(2018, 4, 23), isUpcoming: true, season: 5 },
{ id: '23', episode: 8, name: 'The Loobendfeld Decay', description: 'dasdasda', released: new Date(2018, 4, 23), isUpcoming: true, season: 1 },
{ id: '24', poster: 'https://www.stremio.com/website/home-stremio.png', episode: 1, name: 'The Bing BranHypothesiingBranHypothesiingBranHypothesiingBranHypothesiingBranHypothesiingBran Hypothesiing Bran Hypothesiing Bran Hypothesiing Bran Hypothesiing Bran Hypothesis', description: 'dasdasda', released: new Date(2018, 4, 23), isUpcoming: true, isWatched: true, season: 1 },
{ id: '25', poster: 'https://www.stremio.com/website/home-stremio.png', episode: 2, name: 'The Bing Bran Hypothesis', description: 'dasdasda', released: new Date(2018, 4, 23), isWatched: true, season: 1 },
{ id: '26', episode: 4, name: 'The Luminous Fish Effect', description: 'dasdasda', released: new Date(2018, 4, 23), progress: 50, season: 3 },
{ id: '27', poster: 'https://www.stremiocom/website/home-stremio.png', episode: 5, name: 'The Dumpling Paradox', description: 'dasdasda', released: new Date(2018, 4, 23), progress: 50, season: 2 },
{ id: '28', episode: 8, name: 'The Loobendfeld Decay', description: 'dasdasda', released: new Date(2018, 4, 23), isUpcoming: true, season: 5 },
{ id: '29', episode: 8, name: 'The Loobendfeld Decay', description: 'dasdasda', released: new Date(2018, 4, 23), isUpcoming: true, season: 1 },
{ id: '30', poster: 'https://www.stremio.com/website/home-stremio.png', episode: 1, name: 'The Bing BranHypothesiingBranHypothesiingBranHypothesiingBranHypothesiingBranHypothesiingBran Hypothesiing Bran Hypothesiing Bran Hypothesiing Bran Hypothesiing Bran Hypothesis', description: 'dasdasda', released: new Date(2018, 4, 23), isUpcoming: true, isWatched: true, season: 1 },
{ id: '31', poster: 'https://www.stremio.com/website/home-stremio.png', episode: 2, name: 'The Bing Bran Hypothesis', description: 'dasdasda', released: new Date(2018, 4, 23), isWatched: true, season: 1 },
{ id: '32', episode: 4, name: 'The Luminous Fish Effect', description: 'dasdasda', released: new Date(2018, 4, 23), progress: 50, season: 1 },
{ id: '33', poster: 'https://www.stremiocom/website/home-stremio.png', episode: 5, name: 'The Dumpling Paradox', description: 'dasdasda', released: new Date(2018, 4, 23), progress: 50, season: 2 },
{ id: '34', episode: 8, name: 'The Loobendfeld Decay', description: 'dasdasda', released: new Date(2018, 4, 23), isUpcoming: true, season: 1 },
{ id: '35', episode: 8, name: 'The Loobendfeld Decay', description: 'dasdasda', released: new Date(2018, 4, 23), isUpcoming: true, season: 1 },
{ id: '36', poster: 'https://www.stremio.com/website/home-stremio.png', episode: 1, name: 'The Bing BranHypothesiingBranHypothesiingBranHypothesiingBranHypothesiingBranHypothesiingBran Hypothesiing Bran Hypothesiing Bran Hypothesiing Bran Hypothesiing Bran Hypothesis', description: 'dasdasda', released: new Date(2018, 4, 23), isUpcoming: true, isWatched: true, season: 1 },
{ id: '37', poster: 'https://www.stremio.com/website/home-stremio.png', episode: 2, name: 'The Bing Bran Hypothesis', description: 'dasdasda', released: new Date(2018, 4, 23), isWatched: true, season: 1 },
{ id: '38', episode: 4, name: 'The Luminous Fish Effect', description: 'dasdasda', released: new Date(2018, 4, 23), progress: 50, season: 1 },
{ id: '39', poster: 'https://www.stremiocom/website/home-stremio.png', episode: 5, name: 'The Dumpling Paradox', description: 'dasdasda', released: new Date(2018, 4, 23), progress: 50, season: 2 },
{ id: '40', episode: 8, name: 'The Loobendfeld Decay', description: 'dasdasda', released: new Date(2018, 4, 23), isUpcoming: true, season: 1 },
{ id: '41', episode: 8, name: 'The Loobendfeld Decay', description: 'dasdasda', released: new Date(2018, 4, 23), isUpcoming: true, season: 1 },
{ id: '42', poster: 'https://www.stremio.com/website/home-stremio.png', episode: 1, name: 'The Bing BranHypothesiingBranHypothesiingBranHypothesiingBranHypothesiingBranHypothesiingBran Hypothesiing Bran Hypothesiing Bran Hypothesiing Bran Hypothesiing Bran Hypothesis', description: 'dasdasda', released: new Date(2018, 4, 23), isUpcoming: true, isWatched: true, season: 1 },
{ id: '43', poster: 'https://www.stremio.com/website/home-stremio.png', episode: 2, name: 'The Bing Bran Hypothesis', description: 'dasdasda', released: new Date(2018, 4, 23), isWatched: true, season: 1 },
{ id: '44', episode: 4, name: 'The Luminous Fish Effect', description: 'dasdasda', released: new Date(2018, 4, 23), progress: 50, season: 1 },
{ id: '45', poster: 'https://www.stremiocom/website/home-stremio.png', episode: 5, name: 'The Dumpling Paradox', description: 'dasdasda', released: new Date(2018, 4, 23), progress: 50, season: 2 },
{ id: '46', episode: 8, name: 'The Loobendfeld Decay', description: 'dasdasda', released: new Date(2018, 4, 23), isUpcoming: true, season: 1 }
]}></VideosList>
</div>
));
storiesOf('StreamsList', module)
.add('short list of streams', () => (
<div style={streamsListStyle} className={appStyles['app']}>
<StreamsList streams={[
{ id: '1', logo: 'ic_itunes', sourceName: 'iTunes', title: 'Vikings S01E09 HDTV XviD-AFG[ettv], 👤 1', subtitle: 'HDTV', progress: 50 },
{ id: '2', logo: '', sourceName: 'Amazon', title: '$1.99 purchase SD,$2.99 purchase HD', subtitle: '', progress: 50 },
{ id: '3', logo: '', sourceName: 'Juan Carlos 2', title: 'Vikings S01E09 HDTV XviD-AFG[ettv], 👤 1', subtitle: 'HDTV', progress: 50 },
{ id: '4', logo: 'ic_amazon', sourceName: 'Amazon', title: 'Vikings S01E09 HDTV XviD-AFG[ettv], 👤 1', subtitle: '', progress: 0 }
]}></StreamsList>
</div>
))
.add('long list of streams', () => (
<div style={streamsListStyle} className={appStyles['app']}>
<StreamsList streams={[
{ id: '1', logo: 'ic_itunes', sourceName: 'iTunes', title: 'Vikings S01E09 HDTV XviD-AFG[ettv], 👤 1', subtitle: 'HDTV', progress: 50 },
{ id: '2', logo: '', sourceName: 'Amazon', title: '$1.99 purchase SD,$2.99 purchase HD', subtitle: '', progress: 50 },
{ id: '3', logo: '', sourceName: 'Juan Carlos 2', title: 'Vikings S01E09 HDTV XviD-AFG[ettv], 👤 1', subtitle: 'HDTV', progress: 50 },
{ id: '4', logo: 'ic_amazon', sourceName: 'Amazon', title: 'Vikings S01E09 HDTV XviD-AFG[ettv], 👤 1', subtitle: '', progress: 0 },
{ id: '5', logo: 'ic_amazon', sourceName: 'Amazon', title: '$1.99 purchase SD,$2.99 purchase HD', subtitle: '', progress: 0 },
{ id: '6', logo: 'ic_netflix', sourceName: 'Netflix', title: '$1.99 purchase SD,$2.99 purchase HD', subtitle: 'HDTV', progress: 50 },
{ id: '7', logo: '', sourceName: 'IBERIAN', title: '', subtitle: '', progress: 0 },
{ id: '8', logo: 'ic_netflix', sourceName: 'Netflix', title: 'SD', subtitle: '', progress: 50 },
{ id: '9', logo: 'ic_itunes', sourceName: 'Netflix', title: 'SD', subtitle: 'HDTV', progress: 50 },
{ id: '10', logo: 'ic_amazon', sourceName: 'Amazon', title: '', subtitle: 'HDTV', progress: 0 }
]}></StreamsList>
</div>
));

View file

@ -6857,9 +6857,9 @@ stremio-addon-linter@^1.2.1:
dependencies:
events "1.1.0"
"stremio-colors@git+ssh://git@github.com/Stremio/stremio-colors.git#v2.0.2":
version "2.0.2"
resolved "git+ssh://git@github.com/Stremio/stremio-colors.git#d91ec32305eef62fbd5a1da6aba8ab52060f58a1"
"stremio-colors@git+ssh://git@github.com/Stremio/stremio-colors.git#v2.0.3":
version "2.0.3"
resolved "git+ssh://git@github.com/Stremio/stremio-colors.git#23d5fcec9049dc3e5a2b3da0dec637fda702c9c5"
"stremio-icons@git+ssh://git@github.com/Stremio/stremio-icons.git#v1.0.2":
version "1.0.2"