@ -0,0 +1,41 @@ | |||
@import './modules/_variables.scss'; | |||
$dist: './fonts/Montserrat-Regular'; | |||
@font-face { | |||
font-family: Montserrat; | |||
font-weight: 400; | |||
src: url("./fonts/Montserrat-Regular.eot?") format("eot"),url("./fonts/Montserrat-Regular.woff") format("woff"),url("./fonts/Montserrat-Regular.ttf") format("truetype"),url("./fonts/Montserrat-Regular.svg#Montserrat") format("svg") | |||
} | |||
@font-face { | |||
font-family: Montserrat; | |||
font-weight: 700; | |||
src: url("./fonts/Montserrat-Bold.eot?") format("eot"),url("./fonts/Montserrat-Bold.woff") format("woff"),url("./fonts/Montserrat-Bold.ttf") format("truetype"),url("./fonts/Montserrat-Bold.svg#Montserrat") format("svg") | |||
} | |||
html, | |||
body { | |||
font-family: Montserrat,sans-serif; | |||
font-size: 16px; | |||
font-weight: $font-weight-normal; | |||
z-index: 10; | |||
} | |||
*, | |||
*::after, | |||
*::before { | |||
box-sizing: border-box; | |||
} | |||
.preloading { | |||
color: $color-brand; | |||
display: block; | |||
font-size: $font-size-xl; | |||
left: 50%; | |||
position: fixed; | |||
top: 50%; | |||
transform: translate(-50%, -50%); | |||
} | |||
select::-ms-expand { | |||
display: none; | |||
} |
@ -1,44 +1,38 @@ | |||
<div class="app"> | |||
<header class="navbar navbar-light navbar-static-top"> | |||
<div class="container"> | |||
<div class="row"> | |||
<div class="col-sm-10"> | |||
<a class="navbar-brand" routerLink="catalog"> | |||
<img src="../images/brand.png" /> | |||
</a> | |||
</div> | |||
<div class="col-sm-2"> | |||
<esh-basket-status *ngIf="Authenticated"></esh-basket-status> | |||
<esh-identity></esh-identity> | |||
</div> | |||
</div> | |||
</div> | |||
</header> | |||
<!-- component routing placeholder --> | |||
<router-outlet></router-outlet> | |||
<footer class="app-footer"> | |||
<div class="container"> | |||
<div class="row"> | |||
<div class="col-sm-6"> | |||
<br> | |||
<div class="app-footer-brand"> | |||
<img src="../images/brand_dark.png" /> | |||
</div> | |||
</div> | |||
<div class="col-sm-6"> | |||
<br> | |||
<br> | |||
<br> | |||
<div class="app-footer-text hidden-xs">e-ShoponContainers. All right reserved</div> | |||
</div> | |||
</div> | |||
</div> | |||
</footer> | |||
</div> | |||
<header class="navbar navbar-light navbar-static-top"> | |||
<div class="container"> | |||
<article class="row"> | |||
<section class="col-sm-10"> | |||
<a class="navbar-brand" routerLink="catalog"> | |||
<img src="../images/brand.png" /> | |||
</a> | |||
</section> | |||
<section class="col-sm-2"> | |||
<esh-basket-status *ngIf="Authenticated"></esh-basket-status> | |||
<esh-identity></esh-identity> | |||
</section> | |||
</article> | |||
</div> | |||
</header> | |||
<!-- component routing placeholder --> | |||
<router-outlet></router-outlet> | |||
<footer class="esh-app-footer"> | |||
<div class="container"> | |||
<article class="row"> | |||
<section class="col-sm-6"> | |||
<img class="esh-app-footer-brand" src="../images/brand_dark.png" /> | |||
</section> | |||
<section class="col-sm-6"> | |||
<div class="esh-app-footer-text hidden-xs"> e-ShoponContainers. All right reserved </div> | |||
</section> | |||
</article> | |||
</div> | |||
</footer> | |||
@ -1,44 +1,28 @@ | |||
@import './_variables.scss'; | |||
@font-face { | |||
font-family: Montserrat; | |||
font-weight: 400; | |||
src: url("../dist/fonts/Montserrat-Regular.eot?") format("eot"),url("../dist/fonts/Montserrat-Regular.woff") format("woff"),url("../dist/fonts/Montserrat-Regular.ttf") format("truetype"),url("../dist/fonts/Montserrat-Regular.svg#Montserrat") format("svg") | |||
} | |||
@font-face { | |||
font-family: Montserrat; | |||
font-weight: 700; | |||
src: url("../dist/fonts/Montserrat-Bold.eot?") format("eot"),url("../dist/fonts/Montserrat-Bold.woff") format("woff"),url("../dist/fonts/Montserrat-Bold.ttf") format("truetype"),url("../dist/fonts/Montserrat-Bold.svg#Montserrat") format("svg") | |||
} | |||
.app { | |||
font-family: Montserrat,sans-serif; | |||
.esh-app { | |||
&-footer { | |||
padding-top: 40px; | |||
padding-bottom: 40px; | |||
margin-top: 40px; | |||
border-top: 1px solid #eee; | |||
background-color: black; | |||
$margin: 2.5rem; | |||
$padding: 2.5rem; | |||
background-color: $color-background-darker; | |||
border-top: $border-light solid $color-foreground-bright; | |||
margin-top: $margin; | |||
padding-bottom: $padding; | |||
padding-top: $padding; | |||
width: 100%; | |||
$height: 50px; | |||
&-brand { | |||
margin-top: 25px; | |||
max-width: 231px; | |||
height: 52px; | |||
margin-left: 0px !important; | |||
height: $height; | |||
width: 230px; | |||
} | |||
&-text { | |||
color: $color-secondary; | |||
line-height: $height; | |||
text-align: right; | |||
width: 100%; | |||
height: 100%; | |||
color: #83d01b; | |||
margin-top: 10px; | |||
} | |||
} | |||
} | |||
@ -1,41 +1,46 @@ | |||
<div class="container"> | |||
<div class="catalog-banner"> | |||
<img class="catalog-banner-image" src="../../images/main_banner.png" /> | |||
<div class="container"> | |||
<img src="../../images/main_banner_text.png" class="catalog-banner-text" /> | |||
</div> | |||
<section class="esh-catalog-hero"> | |||
<div class="container"> | |||
<img class="esh-catalog-title" src="../../images/main_banner_text.png" /> | |||
</div> | |||
<div class="catalog-filter"> | |||
<div class="catalog-filter-container"> | |||
<div class="container"> | |||
<div data-name="brand" class="catalog-filter-wrapper"> | |||
<select class="catalog-filter-select" (change)="onBrandFilterChanged($event, $event.target.value)"> | |||
<option *ngFor="let brand of brands" [value]="brand.id">{{brand.brand}}</option> | |||
</select> | |||
</div> | |||
<div data-name="type" class="catalog-filter-wrapper"> | |||
<select class="catalog-filter-select" (change)="onTypeFilterChanged($event, $event.target.value)"> | |||
<option *ngFor="let type of types" [value]="type.id">{{type.type}}</option> | |||
</select> | |||
</div> | |||
<button class="catalog-filter-button" (click)="onFilterApplied($event)"> | |||
<img src="../../images/arrow-right.svg"> | |||
</button> | |||
</div> | |||
</div> | |||
</section> | |||
<section class="esh-catalog-filters"> | |||
<div class="container"> | |||
<label class="esh-catalog-label" data-title="brand"> | |||
<select class="esh-catalog-filter" (change)="onBrandFilterChanged($event, $event.target.value)"> | |||
<option *ngFor="let brand of brands" [value]="brand.id">{{brand.brand}}</option> | |||
</select> | |||
</label> | |||
<label class="esh-catalog-label" data-title="type"> | |||
<select class="esh-catalog-filter" (change)="onTypeFilterChanged($event, $event.target.value)"> | |||
<option *ngFor="let type of types" [value]="type.id">{{type.type}}</option> | |||
</select> | |||
</label> | |||
<img class="esh-catalog-send" (click)="onFilterApplied($event)" src="../../images/arrow-right.svg" /> | |||
</div> | |||
<esh-pager [model]="paginationInfo" (changed)="onPageChanged($event)"></esh-pager> | |||
<div class="catalog-content row"> | |||
<div class="col-md-4 catalog-content-item" *ngFor="let item of catalog?.data"> | |||
<img src="{{item.pictureUri}}" /> | |||
<button (click)="addToCart(item)" class="catalog-content-item-button">[ ADD TO CART ]</button> | |||
<div class="catalog-content-item-title"> | |||
</section> | |||
<div class="container"> | |||
<esh-pager class="esh-pager" [model]="paginationInfo" (changed)="onPageChanged($event)"></esh-pager> | |||
<div class="esh-catalog-items row"> | |||
<div class="esh-catalog-item col-md-4" | |||
*ngFor="let item of catalog?.data"> | |||
<img class="esh-catalog-thumbnail" src="{{item.pictureUri}}" /> | |||
<button class="esh-catalog-button" (click)="addToCart(item)"> | |||
[ ADD TO CART ] | |||
</button> | |||
<div class="esh-catalog-name"> | |||
<span>{{item.name}}</span> | |||
</div> | |||
<div class="catalog-content-item-price"> | |||
<div class="esh-catalog-price"> | |||
<span>{{item.price}}</span> | |||
</div> | |||
</div> | |||
</div> | |||
<esh-pager [model]="paginationInfo" (changed)="onPageChanged($event)"></esh-pager> | |||
</div> | |||
<esh-pager class="esh-pager" [model]="paginationInfo" (changed)="onPageChanged($event)"></esh-pager> | |||
</div> | |||
@ -1,125 +1,148 @@ | |||
@import '../_variables.scss'; | |||
@import '../variables'; | |||
select::-ms-expand { | |||
display: none; | |||
} | |||
.esh-catalog { | |||
.catalog { | |||
&-banner { | |||
height: 258px; | |||
vertical-align: middle; | |||
$banner-height: 260px; | |||
&-image { | |||
width: 100%; | |||
position: absolute; | |||
left: 0; | |||
height: 258px; | |||
} | |||
&-hero { | |||
background-image: url('../../images/main_banner.png'); | |||
background-size: cover; | |||
height: $banner-height; | |||
width: 100%; | |||
} | |||
&-text { | |||
position: relative; | |||
top: 75px; | |||
} | |||
&-title { | |||
position: relative; | |||
top: $banner-height / 3.5; | |||
} | |||
$filter-height: 65px; | |||
&-filters { | |||
background-color: $color-brand; | |||
height: $filter-height; | |||
} | |||
$filter-padding: .5rem; | |||
&-filter { | |||
height: 65px; | |||
background-color: transparent; | |||
border-color: $color-brand-bright; | |||
color: $color-foreground-brighter; | |||
cursor: pointer; | |||
margin-right: 1rem; | |||
margin-top: .5rem; | |||
outline-color: $color-secondary; | |||
padding-bottom: 0; | |||
padding-left: $filter-padding; | |||
padding-right: $filter-padding; | |||
padding-top: $filter-padding * 3; | |||
min-width: 140px; | |||
-webkit-appearance: none; | |||
option { | |||
background-color: $color-brand; | |||
} | |||
} | |||
&-container { | |||
&-label { | |||
display: inline-block; | |||
position: relative; | |||
z-index: 0; | |||
&::before { | |||
color: rgba($color-foreground-brighter, .5); | |||
content: attr(data-title); | |||
font-size: $font-size-xs; | |||
margin-top: $font-size-xs; | |||
margin-left: $filter-padding; | |||
position: absolute; | |||
width: 100%; | |||
background-color: $color-brand; | |||
left: 0; | |||
height: 65px; | |||
text-transform: uppercase; | |||
z-index: 1; | |||
} | |||
&-button { | |||
width: 45px; | |||
height: 45px; | |||
padding: 6px 20px 10px 8px; | |||
background-color: $color-secondary; | |||
color: white; | |||
font-size: 16px; | |||
margin: 10px 0; | |||
border: none; | |||
&::after { | |||
background-image: url('../../images/arrow-down.png'); | |||
height: 7px; //png height | |||
content: ''; | |||
position: absolute; | |||
right: $filter-padding * 3; | |||
top: $filter-padding * 5; | |||
width: 10px; //png width | |||
z-index: 1; | |||
} | |||
} | |||
&-select { | |||
background-color: transparent; | |||
padding: 10px; | |||
margin: 10px; | |||
margin-right: 20px; | |||
color: #fff; | |||
padding-top: 20px; | |||
padding-bottom: 3px; | |||
min-width: 140px; | |||
border-color: #37c7ca; | |||
max-height: 43px; | |||
-webkit-appearance: none; | |||
& option { | |||
background-color: #00a69c; | |||
} | |||
&-send { | |||
background-color: $color-secondary; | |||
color: $color-foreground-brighter; | |||
cursor: pointer; | |||
font-size: $font-size-m; | |||
margin-top: -$filter-padding * 3; | |||
padding: $filter-padding; | |||
transition: all $animation-speed-default; | |||
&:hover { | |||
background-color: $color-secondary-darker; | |||
transition: all $animation-speed-default; | |||
} | |||
} | |||
&-items { | |||
margin-top: 1rem; | |||
} | |||
&-item { | |||
text-align: center; | |||
margin-bottom: 1.5rem; | |||
width: 33%; | |||
&-wrapper { | |||
z-index: 0; | |||
display: inline-block; | |||
margin-left: -10px; | |||
@media screen and (max-width: $media-screen-m) { | |||
width: 50%; | |||
} | |||
&-wrapper::before { | |||
content: attr(data-name); | |||
opacity: 0.5; | |||
z-index: 1; | |||
text-transform: uppercase; | |||
position: absolute; | |||
font-size: 10px; | |||
margin-top: 15px; | |||
margin-left: 21px; | |||
color: white; | |||
@media screen and (max-width: $media-screen-s) { | |||
width: 100%; | |||
} | |||
} | |||
&-content { | |||
margin-top: 10px; | |||
&-item { | |||
text-align: center; | |||
margin-bottom: 20px; | |||
&-image { | |||
} | |||
&-button { | |||
width: 255px; | |||
height: 45px; | |||
padding: 10px 20px 10px 20px; | |||
background-color: $color-secondary; | |||
color: white; | |||
font-size: 16px; | |||
margin: 10px 0; | |||
border: none; | |||
cursor: pointer; | |||
} | |||
&-title { | |||
text-align: center; | |||
text-transform: uppercase; | |||
font-weight: 300; | |||
font-size: 16px; | |||
} | |||
&-price { | |||
text-align: center; | |||
font-weight: 900; | |||
font-size: 28px; | |||
} | |||
&-price::before { | |||
content: '$'; | |||
} | |||
&-thumbnail { | |||
max-width: 370px; | |||
width: 100%; | |||
} | |||
&-button { | |||
background-color: $color-secondary; | |||
border: none; | |||
color: $color-foreground-brighter; | |||
cursor: pointer; | |||
font-size: $font-size-m; | |||
height: 3rem; | |||
margin-top: 1rem; | |||
transition: all $animation-speed-default; | |||
width: 80%; | |||
&:hover { | |||
background-color: $color-secondary-darker; | |||
transition: all $animation-speed-default; | |||
} | |||
} | |||
&-name { | |||
font-size: $font-size-m; | |||
font-weight: $font-weight-semilight; | |||
margin-top: .5rem; | |||
text-align: center; | |||
text-transform: uppercase; | |||
} | |||
&-price { | |||
text-align: center; | |||
font-weight: 900; | |||
font-size: 28px; | |||
&::before { | |||
content: '$'; | |||
} | |||
} | |||
} |
@ -1,31 +1,25 @@ | |||
<div class="row pager"> | |||
<div class="col-xs-4"> | |||
<div class="container"> | |||
<article class="esh-pager-wrapper row"> | |||
<nav> | |||
<ul> | |||
<li class="page-item"> | |||
<span class="pager-text pager-previous" id="Previous" | |||
[hidden]="buttonStates?.previousDisabled" | |||
(click)="onPreviousCliked($event)" | |||
aria-label="Previous"> | |||
Previous | |||
</span> | |||
</li> | |||
</ul> | |||
<span class="esh-pager-item esh-pager-item--navigable" | |||
id="Previous" | |||
[hidden]="buttonStates?.previousDisabled" | |||
(click)="onPreviousCliked($event)" | |||
aria-label="Previous"> | |||
Previous | |||
</span> | |||
<span class="esh-pager-item"> | |||
Showing {{model?.items}} of {{model?.totalItems}} products - Page {{model?.actualPage + 1}} - {{model?.totalPages}} | |||
</span> | |||
<span class="esh-pager-item esh-pager-item--navigable" | |||
id="Next" | |||
[hidden]="buttonStates?.nextDisabled" | |||
(click)="onNextClicked($event)" | |||
aria-label="Next"> | |||
Next | |||
</span> | |||
</nav> | |||
</div> | |||
<div class="col-xs-4 u-align-center"><span>Showing {{model?.items}} of {{model?.totalItems}} products - Page {{model?.actualPage + 1}} - {{model?.totalPages}}</span></div> | |||
<div class="col-xs-4"> | |||
<nav> | |||
<ul> | |||
<li class="page-item"> | |||
<span class="pager-text pager-next" id="Next" | |||
[hidden]="buttonStates?.nextDisabled" | |||
(click)="onNextClicked($event)" | |||
aria-label="Next"> | |||
Next | |||
</span> | |||
</li> | |||
</ul> | |||
</nav> | |||
</div> | |||
</article> | |||
</div> |
@ -1,30 +1,30 @@ | |||
.pager { | |||
margin-bottom: 20px; | |||
margin-top: 20px; | |||
margin-left: 0px; | |||
margin-right: -30px; | |||
@import "../../../variables"; | |||
&-previous { | |||
position: absolute; | |||
left: 0; | |||
top: 0; | |||
cursor: pointer; | |||
} | |||
.esh-pager { | |||
&-text { | |||
color: #83d01b; | |||
&-wrapper { | |||
padding-top: 1rem; | |||
text-align: center; | |||
} | |||
&-next { | |||
position: absolute; | |||
right: 15px; | |||
top: 0; | |||
cursor: pointer; | |||
} | |||
&-item { | |||
$margin: 8vw; | |||
margin: 0 $margin; | |||
&--navigable { | |||
cursor: pointer; | |||
&:hover { | |||
color: $color-secondary; | |||
} | |||
} | |||
@media screen and (max-width: $media-screen-l) { | |||
font-size: $font-size-s; | |||
} | |||
&-isDisabled { | |||
cursor: not-allowed; | |||
opacity: .5; | |||
pointer-events: none; | |||
@media screen and (max-width: $media-screen-m) { | |||
margin: 0 $margin / 2; | |||
} | |||
} | |||
} | |||
} |