From f491aecc598456276f98a0fab263c4a9afd252a6 Mon Sep 17 00:00:00 2001 From: Boris Voropaev Date: Fri, 20 Oct 2023 14:49:27 +0300 Subject: [PATCH] add viget modules --- .../viget/drop-down/drop-down.component.html | 3 + .../viget/drop-down/drop-down.component.scss | 10 ++ .../viget/drop-down/drop-down.component.ts | 27 ++++ src/app/_modules/viget/ico/ico.component.html | 3 + src/app/_modules/viget/ico/ico.component.scss | 15 +++ src/app/_modules/viget/ico/ico.component.ts | 41 ++++++ .../viget/qrcode/qrcode.component.html | 2 + .../viget/qrcode/qrcode.component.scss | 0 .../_modules/viget/qrcode/qrcode.component.ts | 39 ++++++ .../viget/slider/slider.component.html | 15 +++ .../viget/slider/slider.component.scss | 127 ++++++++++++++++++ .../_modules/viget/slider/slider.component.ts | 31 +++++ .../viget/switch/switch.component.html | 1 + .../viget/switch/switch.component.scss | 58 ++++++++ .../_modules/viget/switch/switch.component.ts | 12 ++ src/app/_modules/viget/viget.module.ts | 33 +++++ src/environments/environment.ts | 2 +- 17 files changed, 418 insertions(+), 1 deletion(-) create mode 100644 src/app/_modules/viget/drop-down/drop-down.component.html create mode 100644 src/app/_modules/viget/drop-down/drop-down.component.scss create mode 100644 src/app/_modules/viget/drop-down/drop-down.component.ts create mode 100644 src/app/_modules/viget/ico/ico.component.html create mode 100644 src/app/_modules/viget/ico/ico.component.scss create mode 100644 src/app/_modules/viget/ico/ico.component.ts create mode 100644 src/app/_modules/viget/qrcode/qrcode.component.html create mode 100644 src/app/_modules/viget/qrcode/qrcode.component.scss create mode 100644 src/app/_modules/viget/qrcode/qrcode.component.ts create mode 100644 src/app/_modules/viget/slider/slider.component.html create mode 100644 src/app/_modules/viget/slider/slider.component.scss create mode 100644 src/app/_modules/viget/slider/slider.component.ts create mode 100644 src/app/_modules/viget/switch/switch.component.html create mode 100644 src/app/_modules/viget/switch/switch.component.scss create mode 100644 src/app/_modules/viget/switch/switch.component.ts create mode 100644 src/app/_modules/viget/viget.module.ts diff --git a/src/app/_modules/viget/drop-down/drop-down.component.html b/src/app/_modules/viget/drop-down/drop-down.component.html new file mode 100644 index 0000000..3cc0287 --- /dev/null +++ b/src/app/_modules/viget/drop-down/drop-down.component.html @@ -0,0 +1,3 @@ +
+ +
diff --git a/src/app/_modules/viget/drop-down/drop-down.component.scss b/src/app/_modules/viget/drop-down/drop-down.component.scss new file mode 100644 index 0000000..f76c23b --- /dev/null +++ b/src/app/_modules/viget/drop-down/drop-down.component.scss @@ -0,0 +1,10 @@ + +.invisible{ + display: none; +} + +.toggle{ + position: relative; + align-items: flex-start; + display: inline-flex; +} \ No newline at end of file diff --git a/src/app/_modules/viget/drop-down/drop-down.component.ts b/src/app/_modules/viget/drop-down/drop-down.component.ts new file mode 100644 index 0000000..e3f1a25 --- /dev/null +++ b/src/app/_modules/viget/drop-down/drop-down.component.ts @@ -0,0 +1,27 @@ +import { Component, Input, Output, EventEmitter } from '@angular/core'; + +@Component({ + selector: 'drop-down', + templateUrl: './drop-down.component.html', + styleUrls: ['./drop-down.component.scss'] +}) +export class DropDownComponent { + + @Input() ico = 'drop_down_24'; + @Input() angle = [0,-180]; + @Input() visible = false; + @Input() target:HTMLElement; + + ngOnChanges(){ + if(this.target) this.target.hidden = !this.visible; + } + + @Output() toggle = new EventEmitter() + + + click(){ + this.visible = !this.visible; + if(this.target) this.target.hidden = !this.visible; + this.toggle.emit(this.visible) + } +} diff --git a/src/app/_modules/viget/ico/ico.component.html b/src/app/_modules/viget/ico/ico.component.html new file mode 100644 index 0000000..d91497b --- /dev/null +++ b/src/app/_modules/viget/ico/ico.component.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/app/_modules/viget/ico/ico.component.scss b/src/app/_modules/viget/ico/ico.component.scss new file mode 100644 index 0000000..7bbfce9 --- /dev/null +++ b/src/app/_modules/viget/ico/ico.component.scss @@ -0,0 +1,15 @@ +.color{ + color: var(--second); +} +:host-context(.ico-host:hover,a:hover,b:hover){ + svg.color{ + color: var(--active); + } +} + +:host-context(a){ + svg.color{color: var(--prime)} +} +:host{ + display: inline-flex; +} diff --git a/src/app/_modules/viget/ico/ico.component.ts b/src/app/_modules/viget/ico/ico.component.ts new file mode 100644 index 0000000..45edd34 --- /dev/null +++ b/src/app/_modules/viget/ico/ico.component.ts @@ -0,0 +1,41 @@ +import { Component, Input, OnChanges } from '@angular/core'; + +@Component({ + selector: 'ico', + templateUrl: './ico.component.html', + styleUrls: ['./ico.component.scss'] +}) +export class IcoComponent { + + @Input() size:number|number[] = 24; + @Input() rotate:number = 0; + @Input() ico:string = 'close_24'; + @Input() color:string; + + public width:number; + public height:number; + public url:string; + + ngOnInit(){ + this.ngOnChanges() + } + + ngOnChanges():void{ + if (typeof this.size=='number'){ + this.width = this.height = this.size; + } else { + this.width = this.size[0] + this.height = this.size[1] + } + this.url = `assets/images/icons/${this.ico}.svg#ico` + } + + + get style(){ + return { + color: this.color, + transform: `rotate(${this.rotate}deg)`, + transition: 'transform 0.2s' + } + } +} diff --git a/src/app/_modules/viget/qrcode/qrcode.component.html b/src/app/_modules/viget/qrcode/qrcode.component.html new file mode 100644 index 0000000..7819353 --- /dev/null +++ b/src/app/_modules/viget/qrcode/qrcode.component.html @@ -0,0 +1,2 @@ + +Загрузить PNG \ No newline at end of file diff --git a/src/app/_modules/viget/qrcode/qrcode.component.scss b/src/app/_modules/viget/qrcode/qrcode.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/_modules/viget/qrcode/qrcode.component.ts b/src/app/_modules/viget/qrcode/qrcode.component.ts new file mode 100644 index 0000000..380f725 --- /dev/null +++ b/src/app/_modules/viget/qrcode/qrcode.component.ts @@ -0,0 +1,39 @@ +import { Component, Input, OnChanges } from '@angular/core'; + +@Component({ + selector: 'qr-code', + templateUrl: './qrcode.component.html', + styleUrls: ['./qrcode.component.scss'] +}) +export class QRCodeComponent { + @Input() txt:string = 'lenta.ru'; + + + saveAsImage(parent: any, btn:any) { + + let parentElement = parent.qrcElement.nativeElement + .querySelector("canvas") + .toDataURL("image/png") + + + if (parentElement) { + let blobData = this.convertBase64ToBlob(parentElement) + const blob = new Blob([blobData], { type: "image/png" }) + const url = window.URL.createObjectURL(blob) + const link = document.createElement("a") + btn.href = url + btn.download = "angularx-qrcode" + } + } + + private convertBase64ToBlob(Base64Image: string) { + const parts = Base64Image.split(";base64,") + const imageType = parts[0].split(":")[1] + const decodedData = window.atob(parts[1]) + const uInt8Array = new Uint8Array(decodedData.length) + for (let i = 0; i < decodedData.length; ++i) { + uInt8Array[i] = decodedData.charCodeAt(i) + } + return new Blob([uInt8Array], { type: imageType }) + } +} diff --git a/src/app/_modules/viget/slider/slider.component.html b/src/app/_modules/viget/slider/slider.component.html new file mode 100644 index 0000000..9a2c458 --- /dev/null +++ b/src/app/_modules/viget/slider/slider.component.html @@ -0,0 +1,15 @@ +
+
+
+
+ + +
+
+
+ +
+ +
\ No newline at end of file diff --git a/src/app/_modules/viget/slider/slider.component.scss b/src/app/_modules/viget/slider/slider.component.scss new file mode 100644 index 0000000..4ccf528 --- /dev/null +++ b/src/app/_modules/viget/slider/slider.component.scss @@ -0,0 +1,127 @@ + + + + + +.slider-bar { + position: fixed; + top: 0; + + display: flex; + flex-direction: column; + width: 100%; + overflow: hidden; + height: 100%; + + + .header { + + + .title { + display: flex; + flex-direction: row; + align-items: top; + justify-content: space-between; + + + } + + .stepper { + + .items { + + .item { + + .num { + + &:after { + + } + } + .name { + + } + &.active { + .num { + + &:after { + + } + } + .name { + + } + } + &.finished { + .num { + + &:after { + + } + } + .name { + + } + } + } + } + } + } + + .body { + + flex-grow: 1; + overflow: auto; + -webkit-overflow-scrolling: touch; + } + + [footer] { + + .left { + .reset { + + cursor: pointer; + } + + .notice { + + } + } + + .right { + + button { + + } + } + } + } + + .slider-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 100; + } + + + @media screen and (max-width: 767px) { + .slider-bar { + .header, .body, .footer { + + } + + [footer] { + .left { + + } + .right { + button { + + } + } + } + } + } \ No newline at end of file diff --git a/src/app/_modules/viget/slider/slider.component.ts b/src/app/_modules/viget/slider/slider.component.ts new file mode 100644 index 0000000..3990bbf --- /dev/null +++ b/src/app/_modules/viget/slider/slider.component.ts @@ -0,0 +1,31 @@ +import { AfterViewInit, Component, Input, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; + +@Component({ + selector: 'slider', + templateUrl: './slider.component.html', + styleUrls: ['./slider.component.scss'] +}) +export class SliderComponent implements OnInit { + @Input() width: 'string'; + @Input() side: 'left'|'right' ='right'; + + css:any; + + constructor( + private router:Router + ){} + + ngOnInit(){ + this.css = { + 'left-side': this.side=='left', + 'right-side': this.side=='right' + } + } + + + close() { + this.router.navigate([{outlets: {slider: null}}]).then(); + } + +} diff --git a/src/app/_modules/viget/switch/switch.component.html b/src/app/_modules/viget/switch/switch.component.html new file mode 100644 index 0000000..d448d23 --- /dev/null +++ b/src/app/_modules/viget/switch/switch.component.html @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/src/app/_modules/viget/switch/switch.component.scss b/src/app/_modules/viget/switch/switch.component.scss new file mode 100644 index 0000000..6f068f6 --- /dev/null +++ b/src/app/_modules/viget/switch/switch.component.scss @@ -0,0 +1,58 @@ + +$bull: 12px; +$offset: 2px; +$track: 14px; +div{ + border: 1px solid var(--second); + display: inline-flex; + border-radius: $bull + 3px; + div{ + width: $bull; + height: $bull; + background-color: var(--second); + border-radius: 50%; + margin: $offset $track $offset $offset; + border: none; + } +} +div.on{ + border: 1px solid var(--prime); + background-color: var(--prime); + div{ + margin: $offset $offset $offset $track; + background-color: var(--white); + border: none; + animation: switch-on 0.1s; + } +} +div.off{ + div{ + animation: switch-off 0.1s; + } +} +:host-context(.switch-host:hover){ + div.on{ + background-color: var(--active); + div{ + background-color: var(--white); + border: none; + } + } + div{ + border-color: var(--active); + div{ + background-color: var(--active); + border: none; + } + } +} + +@keyframes switch-on { + 0% {margin: $offset $track $offset $offset;} + 100% {margin: $offset $offset $offset $track;} +} + +@keyframes switch-off { + 100% {margin: $offset $track $offset $offset;} + 0% {margin: $offset $offset $offset $track;} +} \ No newline at end of file diff --git a/src/app/_modules/viget/switch/switch.component.ts b/src/app/_modules/viget/switch/switch.component.ts new file mode 100644 index 0000000..22a4784 --- /dev/null +++ b/src/app/_modules/viget/switch/switch.component.ts @@ -0,0 +1,12 @@ +import { Component, Input } from '@angular/core'; + +@Component({ + selector: 'switch', + templateUrl: './switch.component.html', + styleUrls: ['./switch.component.scss'] +}) +export class SwitchComponent { + @Input() val:boolean; + + +} diff --git a/src/app/_modules/viget/viget.module.ts b/src/app/_modules/viget/viget.module.ts new file mode 100644 index 0000000..ce88bf0 --- /dev/null +++ b/src/app/_modules/viget/viget.module.ts @@ -0,0 +1,33 @@ +import { NgModule } from "@angular/core"; +import {BrowserModule} from "@angular/platform-browser"; +import { IcoComponent } from "./ico/ico.component"; +import { QRCodeComponent } from "./qrcode/qrcode.component"; +import { QRCodeModule } from "angularx-qrcode"; +import {DropDownComponent } from "./drop-down/drop-down.component"; +import { SliderComponent } from './slider/slider.component'; +import { SwitchComponent } from './switch/switch.component'; + + +@NgModule({ + imports:[ + BrowserModule, + QRCodeModule + ], + declarations: [ + IcoComponent, + QRCodeComponent, + DropDownComponent, + SliderComponent, + SwitchComponent, + ], + exports: [ + IcoComponent, + QRCodeComponent, + DropDownComponent, + SliderComponent, + SwitchComponent + ] +}) +export class VigetModule { + +} \ No newline at end of file diff --git a/src/environments/environment.ts b/src/environments/environment.ts index ab2d1fc..982bdc4 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -6,7 +6,7 @@ export const environment = { production: false, apiUrl: 'http://api.vniigazv2.lc', clientId: 4, - clientSecret: 'KaeoKK3VEnfycWBdlcpAnIVS2BYtEr4rbVXXm9gd', + clientSecret: 'QC09jOPEU7mpfFerpLyAJRshFUW1T28GfhsYzJHc', }; /*