| @@ -7850,6 +7850,11 @@ | |||||
| } | } | ||||
| } | } | ||||
| }, | }, | ||||
| "moment": { | |||||
| "version": "2.24.0", | |||||
| "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", | |||||
| "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" | |||||
| }, | |||||
| "move-concurrently": { | "move-concurrently": { | ||||
| "version": "1.0.1", | "version": "1.0.1", | ||||
| "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", | "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", | ||||
| @@ -20,6 +20,7 @@ | |||||
| "@angular/platform-browser-dynamic": "~8.2.9", | "@angular/platform-browser-dynamic": "~8.2.9", | ||||
| "@angular/router": "~8.2.9", | "@angular/router": "~8.2.9", | ||||
| "ionicons": "^4.6.3", | "ionicons": "^4.6.3", | ||||
| "moment": "^2.24.0", | |||||
| "rxjs": "~6.4.0", | "rxjs": "~6.4.0", | ||||
| "tslib": "^1.10.0", | "tslib": "^1.10.0", | ||||
| "zone.js": "~0.9.1" | "zone.js": "~0.9.1" | ||||
| @@ -11,9 +11,9 @@ import { WidgetsHolderComponent } from './widgets-holder/widgets-holder.componen | |||||
| import { DashboardComponent } from './dashboard/dashboard.component'; | import { DashboardComponent } from './dashboard/dashboard.component'; | ||||
| import { OrdersComponent } from './orders/orders.component'; | import { OrdersComponent } from './orders/orders.component'; | ||||
| import { MenuItemsComponent } from './menu-items/menu-items.component'; | import { MenuItemsComponent } from './menu-items/menu-items.component'; | ||||
| import { OffersComponent } from './offers/offers.component'; | |||||
| import { SchedulesComponent } from './schedules/schedules.component'; | import { SchedulesComponent } from './schedules/schedules.component'; | ||||
| import { CustomSelectorComponent } from './custom-selector/custom-selector.component'; | import { CustomSelectorComponent } from './custom-selector/custom-selector.component'; | ||||
| import { FaqComponent } from './faq/faq.component'; | |||||
| @NgModule({ | @NgModule({ | ||||
| declarations: [ | declarations: [ | ||||
| @@ -23,9 +23,9 @@ import { CustomSelectorComponent } from './custom-selector/custom-selector.compo | |||||
| DashboardComponent, | DashboardComponent, | ||||
| OrdersComponent, | OrdersComponent, | ||||
| MenuItemsComponent, | MenuItemsComponent, | ||||
| OffersComponent, | |||||
| SchedulesComponent, | SchedulesComponent, | ||||
| CustomSelectorComponent | |||||
| CustomSelectorComponent, | |||||
| FaqComponent | |||||
| ], | ], | ||||
| imports: [ | imports: [ | ||||
| BrowserModule, | BrowserModule, | ||||
| @@ -0,0 +1,39 @@ | |||||
| <div class="widget-heading-holder"> | |||||
| <header> Frequently Asked Questions </header> | |||||
| <div class="search-input"> | |||||
| <input type="text" placeholder="Quick Search"> | |||||
| <button> <i class="icon ion-md-search"></i> </button> | |||||
| </div> | |||||
| </div> | |||||
| <div class="container"> | |||||
| <ul class="topic-list"> | |||||
| <li [ngClass]="{'active' : selectedCard === 1}" (click)="selectedCard = 1"> | |||||
| <header> General inquiries </header> | |||||
| <p> Lorem ipsum dolor sit amet, consectetur adipisicing elit. </p> | |||||
| </li> | |||||
| <li [ngClass]="{'active' : selectedCard === 2}" (click)="selectedCard = 2"> | |||||
| <header> Mall App Features </header> | |||||
| <p> Lorem ipsum dolor sit amet, consectetur adipisicing elit. </p> | |||||
| </li> | |||||
| </ul> | |||||
| <ul class="topic-detail"> | |||||
| <div class="heading"> | |||||
| <header> General Inquiries </header> | |||||
| <p> Lorem ipsum dolor sit amet, consectetur adipisicing elit. </p> | |||||
| </div> | |||||
| <li> | |||||
| <header> What is the most frequently asked question? | |||||
| <button (click)="showDetails = !showDetails" [ngClass]="{'active' : showDetails }"> | |||||
| <i class="icon" [ngClass]="{'ion-ios-add-circle-outline': !showDetails , 'ion-ios-remove-circle-outline' : showDetails}"></i> | |||||
| </button> | |||||
| </header> | |||||
| <p *ngIf="showDetails"> | |||||
| Lorem ipsum dolor sit amet, consectetur adipisicing elit. Necessitatibus at aliquid voluptatem ut similique vitae odit fuga minima cum. Eveniet, cumque? Rerum eius voluptatem ratione deserunt, quasi non. Accusantium, incidunt. | |||||
| </p> | |||||
| </li> | |||||
| </ul> | |||||
| </div> | |||||
| @@ -0,0 +1,194 @@ | |||||
| .search-input { | |||||
| display: flex; | |||||
| width: 35%; | |||||
| height: 30px; | |||||
| border-radius: 20px; | |||||
| background-color: white; | |||||
| color: var(--brand-blue); | |||||
| align-items: center; | |||||
| justify-content: space-between; | |||||
| input { | |||||
| border: 0; | |||||
| font-size: 12px; | |||||
| padding-left: 10px; | |||||
| font-weight: 500; | |||||
| color: var(--dark-grey); | |||||
| flex-grow: 1; | |||||
| letter-spacing: 1px; | |||||
| &::placeholder { | |||||
| color: var(--grey); | |||||
| } | |||||
| } | |||||
| button { | |||||
| border-radius: 50%; | |||||
| width: 30px; | |||||
| height: 30px; | |||||
| color: var(--brand-blue); | |||||
| font-size: 20px; | |||||
| border: 1px solid var(--brand-blue); | |||||
| background-color: white; | |||||
| transition: background-color 0.3s, color 0.3s; | |||||
| &:hover { | |||||
| background-color: var(--brand-blue); | |||||
| color: white; | |||||
| } | |||||
| } | |||||
| } | |||||
| .container { | |||||
| display: flex; | |||||
| width: 95%; | |||||
| margin: 30px auto; | |||||
| letter-spacing: 1px; | |||||
| } | |||||
| .topic-list { | |||||
| width: 25%; | |||||
| height: calc(100vh - 200px); | |||||
| overflow: auto; | |||||
| margin: 0 auto; | |||||
| list-style: none; | |||||
| &:hover { | |||||
| &::-webkit-scrollbar { | |||||
| display: block; | |||||
| } | |||||
| } | |||||
| &::-webkit-scrollbar { | |||||
| width: 8px; | |||||
| display: none; | |||||
| } | |||||
| /* Track */ | |||||
| &::-webkit-scrollbar-track { | |||||
| background-color: white; | |||||
| } | |||||
| /* Handle */ | |||||
| &::-webkit-scrollbar-thumb { | |||||
| background-color: rgba(black, 0.2); | |||||
| } | |||||
| /* Handle on hover */ | |||||
| &::-webkit-scrollbar-thumb:hover { | |||||
| background-color: rgba(black, 0.5); | |||||
| } | |||||
| li { | |||||
| background-color: white; | |||||
| margin-bottom: 15px; | |||||
| border-radius: 10px; | |||||
| padding: 15px; | |||||
| cursor: pointer; | |||||
| &.active { | |||||
| background-color: var(--brand-blue); | |||||
| box-shadow: 0px 0px 5px #cecece; | |||||
| header, p { | |||||
| color: white; | |||||
| } | |||||
| } | |||||
| header { | |||||
| margin-bottom: 5px; | |||||
| font-size: 14px; | |||||
| color: var(--dark-grey); | |||||
| font-weight: 500; | |||||
| } | |||||
| p { | |||||
| font-size: 12px; | |||||
| color: var(--grey); | |||||
| line-height: 1.5; | |||||
| } | |||||
| } | |||||
| } | |||||
| .topic-detail { | |||||
| width: 70%; | |||||
| margin: 0 auto; | |||||
| list-style: none; | |||||
| background-color: white; | |||||
| border-radius: 10px; | |||||
| height: calc(100vh - 200px); | |||||
| overflow: auto; | |||||
| padding: 20px 25px; | |||||
| &:hover { | |||||
| &::-webkit-scrollbar { | |||||
| display: block; | |||||
| } | |||||
| } | |||||
| &::-webkit-scrollbar { | |||||
| width: 8px; | |||||
| display: none; | |||||
| } | |||||
| /* Track */ | |||||
| &::-webkit-scrollbar-track { | |||||
| background-color: white; | |||||
| } | |||||
| /* Handle */ | |||||
| &::-webkit-scrollbar-thumb { | |||||
| background-color: rgba(black, 0.2); | |||||
| } | |||||
| /* Handle on hover */ | |||||
| &::-webkit-scrollbar-thumb:hover { | |||||
| background-color: rgba(black, 0.5); | |||||
| } | |||||
| .heading { | |||||
| margin-bottom: 20px; | |||||
| header { | |||||
| font-size: 20px; | |||||
| color: var(--dark-grey); | |||||
| font-weight: 500; | |||||
| } | |||||
| p { | |||||
| font-size: 12px; | |||||
| color: var(--grey); | |||||
| line-height: 1.5; | |||||
| } | |||||
| } | |||||
| li { | |||||
| header { | |||||
| display: flex; | |||||
| width: 100%; | |||||
| align-items: center; | |||||
| justify-content: space-between; | |||||
| font-size: 15px; | |||||
| font-weight: 500; | |||||
| color: var(--dark-grey); | |||||
| border-bottom: 1px solid #efefef; | |||||
| padding: 10px 0; | |||||
| button { | |||||
| background-color: transparent; | |||||
| border: 0px; | |||||
| color: var(--brand-blue); | |||||
| &.active { | |||||
| color: var(--grey); | |||||
| } | |||||
| i { | |||||
| font-size: 25px; | |||||
| } | |||||
| } | |||||
| } | |||||
| p { | |||||
| color: var(--grey); | |||||
| font-size: 13px; | |||||
| line-height: 1.5; | |||||
| margin-top: 15px; | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -1,20 +1,20 @@ | |||||
| import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | ||||
| import { OffersComponent } from './offers.component'; | |||||
| import { FaqComponent } from './faq.component'; | |||||
| describe('OffersComponent', () => { | |||||
| let component: OffersComponent; | |||||
| let fixture: ComponentFixture<OffersComponent>; | |||||
| describe('FaqComponent', () => { | |||||
| let component: FaqComponent; | |||||
| let fixture: ComponentFixture<FaqComponent>; | |||||
| beforeEach(async(() => { | beforeEach(async(() => { | ||||
| TestBed.configureTestingModule({ | TestBed.configureTestingModule({ | ||||
| declarations: [ OffersComponent ] | |||||
| declarations: [ FaqComponent ] | |||||
| }) | }) | ||||
| .compileComponents(); | .compileComponents(); | ||||
| })); | })); | ||||
| beforeEach(() => { | beforeEach(() => { | ||||
| fixture = TestBed.createComponent(OffersComponent); | |||||
| fixture = TestBed.createComponent(FaqComponent); | |||||
| component = fixture.componentInstance; | component = fixture.componentInstance; | ||||
| fixture.detectChanges(); | fixture.detectChanges(); | ||||
| }); | }); | ||||
| @@ -0,0 +1,17 @@ | |||||
| import { Component, OnInit } from '@angular/core'; | |||||
| @Component({ | |||||
| selector: 'app-faq', | |||||
| templateUrl: './faq.component.html', | |||||
| styleUrls: ['./faq.component.scss'] | |||||
| }) | |||||
| export class FaqComponent implements OnInit { | |||||
| showDetails: boolean = true; | |||||
| selectedCard: number = 1; | |||||
| constructor() { } | |||||
| ngOnInit() { | |||||
| } | |||||
| } | |||||
| @@ -1 +0,0 @@ | |||||
| <p>offers works!</p> | |||||
| @@ -1,15 +0,0 @@ | |||||
| import { Component, OnInit } from '@angular/core'; | |||||
| @Component({ | |||||
| selector: 'app-offers', | |||||
| templateUrl: './offers.component.html', | |||||
| styleUrls: ['./offers.component.scss'] | |||||
| }) | |||||
| export class OffersComponent implements OnInit { | |||||
| constructor() { } | |||||
| ngOnInit() { | |||||
| } | |||||
| } | |||||
| @@ -25,6 +25,7 @@ | |||||
| font-weight: 500; | font-weight: 500; | ||||
| color: var(--dark-grey); | color: var(--dark-grey); | ||||
| flex-grow: 1; | flex-grow: 1; | ||||
| letter-spacing: 1px; | |||||
| &::placeholder { | &::placeholder { | ||||
| color: var(--grey); | color: var(--grey); | ||||
| @@ -1,6 +1,6 @@ | |||||
| <div class="calendar-holder"> | <div class="calendar-holder"> | ||||
| <div class="widget-heading-holder"> | <div class="widget-heading-holder"> | ||||
| <header> Shop Events & Timings </header> | |||||
| <header> Shop Events and Timings </header> | |||||
| </div> | </div> | ||||
| <section class="calendar"> | <section class="calendar"> | ||||
| @@ -9,12 +9,12 @@ | |||||
| </div> | </div> | ||||
| <div class="days"> | <div class="days"> | ||||
| <span> Sun </span><span> Mon </span><span> Tue </span><span> Wed </span> | |||||
| <span> Thu </span><span> Fri </span><span> Sat </span> | |||||
| <span> Sunday </span><span> Monday </span><span> Tuesday </span><span> Wednesday </span> | |||||
| <span> Thursday </span><span> Friday </span><span> Saturday </span> | |||||
| </div> | </div> | ||||
| <div class="dates"> | <div class="dates"> | ||||
| <span class="non-current-date" *ngFor="let preceedingDay of preceedingDays"> {{ preceedingDay }} </span> | <span class="non-current-date" *ngFor="let preceedingDay of preceedingDays"> {{ preceedingDay }} </span> | ||||
| <span [ngClass]="{'active' : selectedDate === selectedMonthDay }" *ngFor="let selectedMonthDay of selectedMonthDays" (click)="selectedDate = selectedMonthDay; filterEvents()"> {{ selectedMonthDay }} | |||||
| <span [ngClass]="{'current-date': currentDate === selectedMonthDay, 'active' : selectedDate === selectedMonthDay }" *ngFor="let selectedMonthDay of selectedMonthDays" (click)="selectDay(selectedMonthDay)"> {{ selectedMonthDay }} | |||||
| </span> | </span> | ||||
| <span class="non-current-date" *ngFor="let succeedingDay of succeedingDays"> {{ succeedingDay }} </span> | <span class="non-current-date" *ngFor="let succeedingDay of succeedingDays"> {{ succeedingDay }} </span> | ||||
| </div> | </div> | ||||
| @@ -8,8 +8,7 @@ | |||||
| } | } | ||||
| .calendar { | .calendar { | ||||
| box-shadow: 0 0 10px -1px #bcbcbc; | |||||
| padding: 15px 0; | |||||
| padding: 15px 30px; | |||||
| background-color: white; | background-color: white; | ||||
| width: 100%; | width: 100%; | ||||
| border-radius: 10px; | border-radius: 10px; | ||||
| @@ -19,26 +18,11 @@ | |||||
| text-align: center; | text-align: center; | ||||
| padding: 5px 0 20px; | padding: 5px 0 20px; | ||||
| button, | |||||
| span { | span { | ||||
| vertical-align: middle; | |||||
| } | |||||
| button { | |||||
| --padding-start: 0; | |||||
| --padding-end: 0; | |||||
| } | |||||
| i { | |||||
| color: var(--ion-color-lighter-grey); | |||||
| font-size: 22px; | |||||
| } | |||||
| span { | |||||
| color: var(--ion-color-blue); | |||||
| text-transform: uppercase; | |||||
| font-size: 18px; | |||||
| padding: 0 5px; | |||||
| color: black; | |||||
| text-transform: capitalize; | |||||
| font-size: 16px; | |||||
| font-weight: 500; | |||||
| display: inline-block; | display: inline-block; | ||||
| width: 180px; | width: 180px; | ||||
| } | } | ||||
| @@ -48,17 +32,14 @@ | |||||
| .days { | .days { | ||||
| display: flex; | display: flex; | ||||
| width: 100%; | width: 100%; | ||||
| margin: 5px 0; | |||||
| span { | span { | ||||
| width: calc(100% / 7); | width: calc(100% / 7); | ||||
| text-align: center; | text-align: center; | ||||
| font-size: 14px; | |||||
| color: var(--ion-color-brand-black); | |||||
| &:first-child { | |||||
| color: #f05525; | |||||
| } | |||||
| font-size: 12px; | |||||
| color: var(--grey); | |||||
| border-right: 1px solid #efefef; | |||||
| padding: 5px 0; | |||||
| } | } | ||||
| } | } | ||||
| @@ -68,57 +49,46 @@ | |||||
| flex-wrap: wrap; | flex-wrap: wrap; | ||||
| span { | span { | ||||
| margin: 15px 0; | |||||
| display: block; | |||||
| cursor: pointer; | |||||
| font-size: 14px; | font-size: 14px; | ||||
| width: calc(100% / 7); | width: calc(100% / 7); | ||||
| text-align: center; | |||||
| color: var(--ion-color-brand-black); | |||||
| color: var(--dark-grey); | |||||
| font-weight: 400; | |||||
| position: relative; | position: relative; | ||||
| &::before { | |||||
| content: ''; | |||||
| position: absolute; | |||||
| left: 0; | |||||
| top: -70%; | |||||
| overflow: visible; | |||||
| width: 100%; | |||||
| height: 52px; | |||||
| box-shadow: none; | |||||
| border-radius: 50%; | |||||
| transform: scale(0.8); | |||||
| } | |||||
| &::after { | |||||
| content: ''; | |||||
| position: absolute; | |||||
| left: 46%; | |||||
| bottom: -5px; | |||||
| width: 5px; | |||||
| height: 5px; | |||||
| border-radius: 50%; | |||||
| overflow: hidden; | |||||
| background-color: var(--ion-color-lighter-grey); | |||||
| display: none; | |||||
| } | |||||
| height: 60px; | |||||
| padding-left: 10px; | |||||
| padding-top: 10px; | |||||
| border-top: 1px solid #efefef; | |||||
| border-right: 1px solid #efefef; | |||||
| transition: background-color 0.3s, color 0.3s; | |||||
| &:hover { | |||||
| background-color: #efefef; | |||||
| } | |||||
| &.current-date { | |||||
| color: var(--brand-blue); | |||||
| font-weight: 700; | |||||
| &::before { | |||||
| content: ''; | |||||
| position: absolute; | |||||
| left: 0; | |||||
| top: 0; | |||||
| width: 100%; | |||||
| height: 3px; | |||||
| background-color: var(--brand-blue); | |||||
| } | |||||
| } | |||||
| &.active { | &.active { | ||||
| &::before { | |||||
| box-shadow: 0 0 5px -1px var(--ion-color-light-grey); | |||||
| } | |||||
| } | |||||
| &.taken { | |||||
| &::after { | |||||
| display: block; | |||||
| } | |||||
| } | |||||
| &:nth-child(7n + 1) { | |||||
| color: #f05525; | |||||
| background-color: var(--brand-blue); | |||||
| color: white; | |||||
| } | } | ||||
| &.non-current-date { | &.non-current-date { | ||||
| color: var(--ion-color-lighter-grey); | |||||
| color: #cecece; | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -1,4 +1,5 @@ | |||||
| import { Component, OnInit } from '@angular/core'; | import { Component, OnInit } from '@angular/core'; | ||||
| import * as moment from 'moment'; | |||||
| @Component({ | @Component({ | ||||
| selector: 'app-schedules', | selector: 'app-schedules', | ||||
| @@ -6,6 +7,7 @@ import { Component, OnInit } from '@angular/core'; | |||||
| styleUrls: ['./schedules.component.scss'] | styleUrls: ['./schedules.component.scss'] | ||||
| }) | }) | ||||
| export class SchedulesComponent implements OnInit { | export class SchedulesComponent implements OnInit { | ||||
| currentDate: number; | |||||
| selectedDate: number; | selectedDate: number; | ||||
| selectedMonth: string; | selectedMonth: string; | ||||
| selectedYear: number; | selectedYear: number; | ||||
| @@ -20,10 +22,14 @@ export class SchedulesComponent implements OnInit { | |||||
| ngOnInit() { | ngOnInit() { | ||||
| this.selectedMonth = this.monthMap[(new Date()).getMonth()]; | this.selectedMonth = this.monthMap[(new Date()).getMonth()]; | ||||
| this.selectedYear = (new Date()).getFullYear(); | this.selectedYear = (new Date()).getFullYear(); | ||||
| this.selectedDate = new Date().getDate(); | |||||
| this.currentDate = new Date().getDate(); | |||||
| this.renderCalendar(); | this.renderCalendar(); | ||||
| } | } | ||||
| selectDay(selectedMonthDay: number) { | |||||
| this.selectedDate = selectedMonthDay; | |||||
| } | |||||
| renderCalendar() { | renderCalendar() { | ||||
| // Generate dates for the calendar | // Generate dates for the calendar | ||||
| let i = 1, | let i = 1, | ||||
| @@ -2,8 +2,10 @@ | |||||
| <img src="assets/logo.svg" alt="Logo"> | <img src="assets/logo.svg" alt="Logo"> | ||||
| <nav> | <nav> | ||||
| <a> FAQ's </a> | |||||
| <a> Support </a> | |||||
| <a [ngClass]="{'active' : selected_nav === 'faq'}" | |||||
| (click)="selected_nav = 'faq'"> FAQ's </a> | |||||
| <a [ngClass]="{'active' : selected_nav === 'support'}" | |||||
| (click)="selected_nav = 'support'"> Support </a> | |||||
| <button class="rect-button"> Logout </button> | <button class="rect-button"> Logout </button> | ||||
| </nav> | </nav> | ||||
| </section> | </section> | ||||
| @@ -45,5 +47,6 @@ | |||||
| <app-orders *ngIf="selected_nav === 'orders'"></app-orders> | <app-orders *ngIf="selected_nav === 'orders'"></app-orders> | ||||
| <app-menu-items *ngIf="selected_nav === 'items'"></app-menu-items> | <app-menu-items *ngIf="selected_nav === 'items'"></app-menu-items> | ||||
| <app-schedules *ngIf="selected_nav === 'schedule'"></app-schedules> | <app-schedules *ngIf="selected_nav === 'schedule'"></app-schedules> | ||||
| <app-faq *ngIf="selected_nav === 'faq'"></app-faq> | |||||
| </section> | </section> | ||||
| </div> | </div> | ||||
| @@ -15,14 +15,34 @@ | |||||
| } | } | ||||
| nav { | nav { | ||||
| height: 70px; | |||||
| display: flex; | |||||
| align-items: center; | |||||
| a, button { | a, button { | ||||
| margin: 0 15px; | |||||
| margin: 0 25px; | |||||
| } | } | ||||
| a { | a { | ||||
| color: var(--grey); | color: var(--grey); | ||||
| font-size: 16px; | font-size: 16px; | ||||
| height: 70px; | |||||
| display: flex; | |||||
| align-items: center; | |||||
| justify-content: center; | |||||
| position: relative; | |||||
| &.active { | |||||
| &::before { | |||||
| content: ''; | |||||
| position: absolute; | |||||
| left: 0; | |||||
| bottom: 0; | |||||
| height: 3px; | |||||
| width: 100%; | |||||
| background-color: var(--brand-blue); | |||||
| } | |||||
| } | |||||
| } | } | ||||
| button { | button { | ||||
| @@ -6,7 +6,7 @@ import { Component, OnInit } from '@angular/core'; | |||||
| styleUrls: ['./widgets-holder.component.scss'] | styleUrls: ['./widgets-holder.component.scss'] | ||||
| }) | }) | ||||
| export class WidgetsHolderComponent implements OnInit { | export class WidgetsHolderComponent implements OnInit { | ||||
| selected_nav: string = 'schedule'; | |||||
| selected_nav: string = 'faq'; | |||||
| constructor() { } | constructor() { } | ||||