@ -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'; | @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 { | &-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%; | width: 100%; | ||||
$height: 50px; | |||||
&-brand { | &-brand { | ||||
margin-top: 25px; | |||||
max-width: 231px; | |||||
height: 52px; | |||||
margin-left: 0px !important; | |||||
height: $height; | |||||
width: 230px; | |||||
} | } | ||||
&-text { | &-text { | ||||
color: $color-secondary; | |||||
line-height: $height; | |||||
text-align: right; | text-align: right; | ||||
width: 100%; | 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> | ||||
<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> | </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> | <span>{{item.name}}</span> | ||||
</div> | </div> | ||||
<div class="catalog-content-item-price"> | |||||
<div class="esh-catalog-price"> | |||||
<span>{{item.price}}</span> | <span>{{item.price}}</span> | ||||
</div> | </div> | ||||
</div> | </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 { | &-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; | 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; | 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> | <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> | </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> | </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; | |||||
} | |||||
} | } | ||||
} | |||||
} |