@solar-angular/ui-sun 18.3.1 → 19.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/solar-angular-ui-sun-nav-progress-bar.mjs +5 -5
- package/fesm2022/solar-angular-ui-sun-nav-progress-bar.mjs.map +1 -1
- package/fesm2022/solar-angular-ui-sun-slider-captcha.mjs +4 -4
- package/fesm2022/solar-angular-ui-sun-slider-captcha.mjs.map +1 -1
- package/package.json +5 -11
- package/esm2022/index.mjs +0 -2
- package/esm2022/nav-progress-bar/index.mjs +0 -2
- package/esm2022/nav-progress-bar/nav-progress-bar.component.mjs +0 -18
- package/esm2022/nav-progress-bar/solar-angular-ui-sun-nav-progress-bar.mjs +0 -5
- package/esm2022/slider-captcha/index.mjs +0 -3
- package/esm2022/slider-captcha/model.mjs +0 -2
- package/esm2022/slider-captcha/slider-captcha.component.mjs +0 -220
- package/esm2022/slider-captcha/solar-angular-ui-sun-slider-captcha.mjs +0 -5
- package/esm2022/slider-captcha/utils.mjs +0 -20
- package/esm2022/solar-angular-ui-sun.mjs +0 -5
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AsyncPipe } from '@angular/common';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
|
-
import { inject,
|
|
3
|
+
import { inject, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
4
4
|
import { Router, NavigationStart, NavigationEnd, NavigationError, NavigationCancel } from '@angular/router';
|
|
5
5
|
import { fadeAnimation } from '@solar-angular/animations';
|
|
6
6
|
import { filter, map, startWith, distinctUntilChanged, shareReplay } from 'rxjs';
|
|
@@ -9,12 +9,12 @@ class SunNavProgressBar {
|
|
|
9
9
|
constructor() {
|
|
10
10
|
this.navigating$ = inject(Router).events.pipe(filter(event => [NavigationStart, NavigationEnd, NavigationError, NavigationCancel].some(o => event instanceof o)), map(event => event instanceof NavigationStart), startWith(true), distinctUntilChanged(), shareReplay(1));
|
|
11
11
|
}
|
|
12
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
13
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
12
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SunNavProgressBar, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
13
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: SunNavProgressBar, isStandalone: true, selector: "sun-nav-progress-bar", ngImport: i0, template: `@if (navigating$ | async) {<div @fadeAnimation></div>}`, isInline: true, styles: [":host{--track-color: transparent;--progress-color: var(--color-primary)}:host>div{position:fixed;top:0;left:0;width:100%;height:2.5px;background:var(--track-color);z-index:999}:host>div:after{content:\"\";display:block;height:100%;width:40%;transform-origin:left;background:var(--progress-color);animation:nav-progress 1.5s infinite linear}@keyframes nav-progress{0%{transform:translate(250%) scaleX(.2)}80%{transform:translate(0) scaleX(1)}to{transform:translate(0) scaleX(0)}}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }], animations: [fadeAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
14
14
|
}
|
|
15
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
15
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SunNavProgressBar, decorators: [{
|
|
16
16
|
type: Component,
|
|
17
|
-
args: [{ selector: 'sun-nav-progress-bar', template: `@if (navigating$ | async) {<div @fadeAnimation></div>}`,
|
|
17
|
+
args: [{ selector: 'sun-nav-progress-bar', template: `@if (navigating$ | async) {<div @fadeAnimation></div>}`, imports: [AsyncPipe], changeDetection: ChangeDetectionStrategy.OnPush, animations: [fadeAnimation], styles: [":host{--track-color: transparent;--progress-color: var(--color-primary)}:host>div{position:fixed;top:0;left:0;width:100%;height:2.5px;background:var(--track-color);z-index:999}:host>div:after{content:\"\";display:block;height:100%;width:40%;transform-origin:left;background:var(--progress-color);animation:nav-progress 1.5s infinite linear}@keyframes nav-progress{0%{transform:translate(250%) scaleX(.2)}80%{transform:translate(0) scaleX(1)}to{transform:translate(0) scaleX(0)}}\n"] }]
|
|
18
18
|
}] });
|
|
19
19
|
|
|
20
20
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solar-angular-ui-sun-nav-progress-bar.mjs","sources":["../../../packages/ui-sun/nav-progress-bar/nav-progress-bar.component.ts","../../../packages/ui-sun/nav-progress-bar/solar-angular-ui-sun-nav-progress-bar.ts"],"sourcesContent":["import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Router } from '@angular/router';\nimport { fadeAnimation } from '@solar-angular/animations';\nimport { distinctUntilChanged, filter, map, shareReplay, startWith } from 'rxjs';\n\n@Component({\n selector: 'sun-nav-progress-bar',\n template: `@if (navigating$ | async) {<div @fadeAnimation></div>}`,\n
|
|
1
|
+
{"version":3,"file":"solar-angular-ui-sun-nav-progress-bar.mjs","sources":["../../../packages/ui-sun/nav-progress-bar/nav-progress-bar.component.ts","../../../packages/ui-sun/nav-progress-bar/solar-angular-ui-sun-nav-progress-bar.ts"],"sourcesContent":["import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Router } from '@angular/router';\nimport { fadeAnimation } from '@solar-angular/animations';\nimport { distinctUntilChanged, filter, map, shareReplay, startWith } from 'rxjs';\n\n@Component({\n selector: 'sun-nav-progress-bar',\n template: `@if (navigating$ | async) {<div @fadeAnimation></div>}`,\n imports: [AsyncPipe],\n styleUrl: './nav-progress-bar.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [fadeAnimation]\n})\nexport class SunNavProgressBar {\n navigating$ = inject(Router).events.pipe(\n filter(event =>\n [NavigationStart, NavigationEnd, NavigationError, NavigationCancel].some(o => event instanceof o)\n ),\n map(event => event instanceof NavigationStart),\n startWith(true),\n distinctUntilChanged(),\n shareReplay(1)\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;MAca,iBAAiB,CAAA;AAR9B,IAAA,WAAA,GAAA;AASE,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CACtC,MAAM,CAAC,KAAK,IACV,CAAC,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAClG,EACD,GAAG,CAAC,KAAK,IAAI,KAAK,YAAY,eAAe,CAAC,EAC9C,SAAS,CAAC,IAAI,CAAC,EACf,oBAAoB,EAAE,EACtB,WAAW,CAAC,CAAC,CAAC,CACf;AACF;+GAVY,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,gFANlB,CAAwD,sDAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,keAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACxD,SAAS,EAGP,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAC,aAAa,CAAC,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAEhB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAR7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EACtB,QAAA,EAAA,CAAA,sDAAA,CAAwD,EACzD,OAAA,EAAA,CAAC,SAAS,CAAC,EAEH,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACnC,UAAA,EAAA,CAAC,aAAa,CAAC,EAAA,MAAA,EAAA,CAAA,keAAA,CAAA,EAAA;;;ACZ7B;;AAEG;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { EventEmitter, afterNextRender, numberAttribute,
|
|
2
|
+
import { EventEmitter, afterNextRender, numberAttribute, HostListener, Output, Input, ViewChild, HostBinding, Component } from '@angular/core';
|
|
3
3
|
import { withPixel } from '@solar-kit/core';
|
|
4
4
|
import { zip, fromEvent, take } from 'rxjs';
|
|
5
5
|
import * as i1 from '@angular/common/http';
|
|
@@ -195,10 +195,10 @@ class SunSliderCaptcha {
|
|
|
195
195
|
this.slide(this.width - left);
|
|
196
196
|
}
|
|
197
197
|
}
|
|
198
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
199
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
198
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SunSliderCaptcha, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
199
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: SunSliderCaptcha, isStandalone: true, selector: "sun-slider-captcha", inputs: { srcUrl: "srcUrl", verifyUrl: "verifyUrl", verifyData: "verifyData", width: ["width", "width", numberAttribute], height: ["height", "height", numberAttribute] }, outputs: { verified: "verified" }, host: { listeners: { "window:pointerup": "markEnd($event)", "window:pointercancel": "markEnd($event)", "window:pointermove": "moveMarker($event)" }, properties: { "class.sun-verify-loading": "this.loading", "class.sun-verify-verifying": "this.verifying" } }, viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["canvas"], descendants: true, static: true }, { propertyName: "sliderRef", first: true, predicate: ["slider"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"slide-block\" [style.width.px]=\"width\" [style.height.px]=\"height\">\n <canvas #canvas></canvas>\n @if (alert.show) {\n <div\n class=\"slide-alert\"\n [class.slide-alert-success]=\"alert.type === 'success'\"\n [class.slide-alert-danger]=\"alert.type === 'error'\"\n >\n {{ alert.msg }}\n </div>\n }\n</div>\n\n<div\n #slider\n class=\"verify-bar\"\n [style.width.px]=\"width\"\n (scroll)=\"$event.preventDefault()\"\n (touchmove)=\"$event.preventDefault()\"\n (mousewheel)=\"$event.preventDefault()\"\n>\n <div\n style=\"display: inline-block; height: 40px; vertical-align: top\"\n [style]=\"{ background: bar.background }\"\n [draggable]=\"false\"\n [style.width.px]=\"width\"\n ></div>\n <div class=\"verify-bar-area\" [style.width.px]=\"width\" [draggable]=\"false\">\n <span class=\"verify-msg\" [draggable]=\"false\">\u62D6\u52A8\u6ED1\u5757\u4EE5\u5B8C\u6210\u62FC\u56FE\u9A8C\u8BC1</span>\n <div class=\"verify-left-bar\" [style.width.px]=\"bar.blockWidth\">\n <div\n class=\"verify-move-block\"\n [draggable]=\"false\"\n (pointerdown)=\"markStart($event)\"\n >\n <svg viewBox=\"0 0 512 512\">\n <path\n stroke-width=\"32\"\n stroke-linecap=\"round\"\n stroke-miterlimit=\"10\"\n d=\"M80 160h352M80 256h352M80 352h352\"\n ></path>\n </svg>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{--background: white;--indicator-primary-color: var(--color-primary);--indicator-danger-color: var(--color-danger);--alert-success-color: var(--color-success);--alert-danger-color: var(--color-danger);--alert-success-background: #dcfce7;--alert-danger-background: #fee2e2;--handler-color: #94a3b8;--handler-border-color: #e2e8f0;display:inline-block;overflow:hidden}.slide-block{position:relative;background:var(--background)}.slide-alert{position:absolute;width:100%;bottom:0;opacity:.9;text-align:center;padding:4px 0;font-size:14px}.slide-alert-success{color:var(--alert-success-color);background:var(--alert-success-background)}.slide-alert-danger{color:var(--alert-danger-color);background:var(--alert-danger-background)}:host ::ng-deep .ant-alert{border-radius:0}.verify-bar{font-size:0;height:40px;line-height:40px;overflow:scroll hidden;white-space:nowrap;scrollbar-width:none}.verify-bar::-webkit-scrollbar{display:none}.verify-bar-area{position:relative;display:inline-block;font-size:14px;text-align:center;background:var(--background);height:100%}.verify-bar-area .verify-msg{z-index:3;pointer-events:none;-webkit-user-select:none;user-select:none}.verify-bar-area .verify-move-block{display:flex;justify-content:center;align-items:center;width:100%;height:100%;background:var(--background);border:1px solid var(--handler-border-color)}.verify-bar-area .verify-move-block>svg{font-size:24px;color:var(--handler-color);width:1em;height:1em;contain:strict;fill:currentcolor;box-sizing:content-box;stroke:currentcolor;transform:rotate(90deg)}.verify-bar-area .verify-left-bar{position:absolute;top:0;left:0;cursor:grab;height:40px}:host.sun-verify-loading .verify-left-bar,:host.sun-verify-verifying .verify-left-bar{cursor:progress}\n"] }); }
|
|
200
200
|
}
|
|
201
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
201
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SunSliderCaptcha, decorators: [{
|
|
202
202
|
type: Component,
|
|
203
203
|
args: [{ selector: 'sun-slider-captcha', standalone: true, template: "<div class=\"slide-block\" [style.width.px]=\"width\" [style.height.px]=\"height\">\n <canvas #canvas></canvas>\n @if (alert.show) {\n <div\n class=\"slide-alert\"\n [class.slide-alert-success]=\"alert.type === 'success'\"\n [class.slide-alert-danger]=\"alert.type === 'error'\"\n >\n {{ alert.msg }}\n </div>\n }\n</div>\n\n<div\n #slider\n class=\"verify-bar\"\n [style.width.px]=\"width\"\n (scroll)=\"$event.preventDefault()\"\n (touchmove)=\"$event.preventDefault()\"\n (mousewheel)=\"$event.preventDefault()\"\n>\n <div\n style=\"display: inline-block; height: 40px; vertical-align: top\"\n [style]=\"{ background: bar.background }\"\n [draggable]=\"false\"\n [style.width.px]=\"width\"\n ></div>\n <div class=\"verify-bar-area\" [style.width.px]=\"width\" [draggable]=\"false\">\n <span class=\"verify-msg\" [draggable]=\"false\">\u62D6\u52A8\u6ED1\u5757\u4EE5\u5B8C\u6210\u62FC\u56FE\u9A8C\u8BC1</span>\n <div class=\"verify-left-bar\" [style.width.px]=\"bar.blockWidth\">\n <div\n class=\"verify-move-block\"\n [draggable]=\"false\"\n (pointerdown)=\"markStart($event)\"\n >\n <svg viewBox=\"0 0 512 512\">\n <path\n stroke-width=\"32\"\n stroke-linecap=\"round\"\n stroke-miterlimit=\"10\"\n d=\"M80 160h352M80 256h352M80 352h352\"\n ></path>\n </svg>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{--background: white;--indicator-primary-color: var(--color-primary);--indicator-danger-color: var(--color-danger);--alert-success-color: var(--color-success);--alert-danger-color: var(--color-danger);--alert-success-background: #dcfce7;--alert-danger-background: #fee2e2;--handler-color: #94a3b8;--handler-border-color: #e2e8f0;display:inline-block;overflow:hidden}.slide-block{position:relative;background:var(--background)}.slide-alert{position:absolute;width:100%;bottom:0;opacity:.9;text-align:center;padding:4px 0;font-size:14px}.slide-alert-success{color:var(--alert-success-color);background:var(--alert-success-background)}.slide-alert-danger{color:var(--alert-danger-color);background:var(--alert-danger-background)}:host ::ng-deep .ant-alert{border-radius:0}.verify-bar{font-size:0;height:40px;line-height:40px;overflow:scroll hidden;white-space:nowrap;scrollbar-width:none}.verify-bar::-webkit-scrollbar{display:none}.verify-bar-area{position:relative;display:inline-block;font-size:14px;text-align:center;background:var(--background);height:100%}.verify-bar-area .verify-msg{z-index:3;pointer-events:none;-webkit-user-select:none;user-select:none}.verify-bar-area .verify-move-block{display:flex;justify-content:center;align-items:center;width:100%;height:100%;background:var(--background);border:1px solid var(--handler-border-color)}.verify-bar-area .verify-move-block>svg{font-size:24px;color:var(--handler-color);width:1em;height:1em;contain:strict;fill:currentcolor;box-sizing:content-box;stroke:currentcolor;transform:rotate(90deg)}.verify-bar-area .verify-left-bar{position:absolute;top:0;left:0;cursor:grab;height:40px}:host.sun-verify-loading .verify-left-bar,:host.sun-verify-verifying .verify-left-bar{cursor:progress}\n"] }]
|
|
204
204
|
}], ctorParameters: () => [{ type: i1.HttpClient }], propDecorators: { loading: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solar-angular-ui-sun-slider-captcha.mjs","sources":["../../../packages/ui-sun/slider-captcha/utils.ts","../../../packages/ui-sun/slider-captcha/slider-captcha.component.ts","../../../packages/ui-sun/slider-captcha/slider-captcha.component.html","../../../packages/ui-sun/slider-captcha/solar-angular-ui-sun-slider-captcha.ts"],"sourcesContent":["import { HttpContext } from '@angular/common/http';\nimport { API_TOKEN, AUTH_TOKEN } from '@solar-angular/http';\nimport { encrypt } from 'crypto-js/aes';\nimport { parse } from 'crypto-js/enc-utf8';\nimport { default as mode } from 'crypto-js/mode-ecb';\nimport { default as padding } from 'crypto-js/pad-pkcs7';\n\nexport const HTTP_OPTIONS = {\n withCredentials: true,\n context: new HttpContext().set(API_TOKEN, false).set(AUTH_TOKEN, false)\n};\n\nexport const aesEncrypt = (word: string, secret: string) => {\n const key = parse(secret);\n const src = parse(word);\n const encrypted = encrypt(src, key, { mode, padding });\n return encrypted.toString();\n};\n\nexport function withDpr(value: number) {\n return value * devicePixelRatio;\n}\n","import { HttpClient } from '@angular/common/http';\nimport { afterNextRender, Component, ElementRef, EventEmitter, HostBinding, HostListener, Input, numberAttribute, Output, ViewChild } from '@angular/core';\nimport { withPixel } from '@solar-kit/core';\nimport { Result } from '@solar-kit/planets/sun';\nimport { fromEvent, take, zip } from 'rxjs';\nimport { Captcha, CaptchaType } from './model';\nimport { aesEncrypt, HTTP_OPTIONS, withDpr } from './utils';\n\n/** 验证码的原始尺寸 */\nconst HEIGHT = 155, WIDTH = 310;\n/** 拼图的原始尺寸 */\nconst PUZZLE_HEIGHT = 155, PUZZLE_WIDTH = 50;\n\n@Component({\n selector: 'sun-slider-captcha',\n standalone: true,\n templateUrl: './slider-captcha.component.html',\n styleUrl: './slider-captcha.component.scss',\n})\nexport class SunSliderCaptcha {\n @HostBinding('class.sun-verify-loading') loading = false;\n @HostBinding('class.sun-verify-verifying') verifying = false;\n\n @ViewChild('canvas', { static: true }) canvasRef!: ElementRef<HTMLCanvasElement>;\n @ViewChild('slider', { static: true }) sliderRef!: ElementRef<HTMLDivElement>;\n\n @Input() srcUrl!: string;\n @Input() verifyUrl!: string;\n @Input() verifyData?: Record<string, any> | (() => Record<string, any>);\n @Input({ transform: numberAttribute }) width = WIDTH;\n @Input({ transform: numberAttribute }) height = HEIGHT;\n\n @Output() verified = new EventEmitter<Result<Captcha>>();\n\n private canvas!: HTMLCanvasElement;\n private ctx!: CanvasRenderingContext2D;\n private bgImage!: HTMLImageElement;\n private slideImage!: HTMLImageElement;\n\n /** 滑块拼图的x坐标 */\n x = 0;\n\n secrets: { secretKey: string, token: string } = {} as any;\n\n alert: { type: 'success' | 'error', msg: string, show: boolean } = {\n type: 'success', // error\n msg: '',\n show: false\n };\n\n beginTime!: number;\n endTime!: number;\n\n /** 滑动开始的X */\n dragStartX = -1;\n /** 滑动bar初始的scrollLeft */\n scrollLeft = 0;\n\n bar = {\n blockWidth: 42, // 滑块宽度\n background: 'var(--indicator-primary-color)'\n };\n\n /**\n * 当前尺寸 除于 原始尺寸得到的商\n * 用于等比例缩放\n */\n get quotient() {\n return {\n width: this.width / WIDTH,\n height: this.height / HEIGHT\n };\n }\n\n constructor(private http: HttpClient) {\n afterNextRender(() => {\n const dpr = devicePixelRatio;\n this.canvas = this.canvasRef.nativeElement;\n this.canvas.style.width = withPixel(this.width);\n this.canvas.style.height = withPixel(this.height);\n this.canvas.width = withDpr(this.width);\n this.canvas.height = withDpr(this.height);\n\n this.ctx = this.canvas.getContext('2d')!;\n this.ctx.scale(dpr, dpr);\n\n setTimeout(() => {\n this.refresh();\n });\n })\n }\n\n refresh() {\n setTimeout(() => {\n this.sliderRef.nativeElement.scrollTo(this.width, 0);\n }, 50);\n this.alert.show = false;\n this.bar.background = 'var(--indicator-primary-color)';\n this.loading = true;\n this.http.post<Result<Captcha>>(this.srcUrl, { captchaType: CaptchaType.BlockPuzzle }, HTTP_OPTIONS).subscribe(response => {\n if (response.code === 0) {\n this.secrets.secretKey = response.data.secretKey;\n this.secrets.token = response.data.token;\n this.bgImage = new Image();\n this.slideImage = new Image();\n // this.bgImage.src = `data:image/png;base64,${re.data.jigsawImageBase64}`;\n this.bgImage.src = `data:image/png;base64,${response.data.originalImageBase64}`;\n this.slideImage.src = `data:image/png;base64,${response.data.jigsawImageBase64}`;\n zip(\n fromEvent(this.bgImage, 'load'),\n fromEvent(this.slideImage, 'load'),\n ).pipe(take(1)).subscribe(() => {\n this.beginTime = new Date().getTime();\n this.draw();\n });\n } else {\n console.error(response.msg);\n }\n });\n }\n\n private draw(x = 0) {\n this.x = x;\n this.ctx.clearRect(0, 0, this.width, this.height);\n this.ctx.drawImage(this.bgImage, 0, 0, this.width, this.height);\n this.ctx.drawImage(this.slideImage, this.x, 0, this.quotient.width * PUZZLE_WIDTH, this.quotient.height * PUZZLE_HEIGHT);\n this.loading = false;\n }\n\n slide(x: number) {\n this.draw(x);\n }\n\n verify(x: number) {\n this.verifying = true;\n // 计算出原始移动距离\n x = x / this.quotient.width;\n\n this.endTime = new Date().getTime();\n const json = JSON.stringify({ x: x, y: 5.0 });\n const pointJson = this.secrets.secretKey ? aesEncrypt(json, this.secrets.secretKey) : json;\n const verifyData = typeof this.verifyData === 'function' ? this.verifyData() : this.verifyData;\n const obj = {\n captchaType: CaptchaType.BlockPuzzle,\n pointJson,\n token: this.secrets.token,\n ...verifyData\n };\n this.http.post<Result<Captcha>>(this.verifyUrl, obj, HTTP_OPTIONS).subscribe({\n next: response => {\n if (response.code !== 0) {\n this.alert.type = 'error';\n this.alert.msg = response.msg;\n this.alert.show = true;\n this.bar.background = 'var(--indicator-danger-color)';\n this.verified.emit({\n code: -1,\n msg: response.msg,\n data: null!\n });\n setTimeout(() => {\n this.alert.show = false;\n this.refresh();\n }, 1000);\n } else {\n this.alert.type = 'success';\n this.bar.background = 'var(--indicator-primary-color)';\n const seconds = Math.abs(this.endTime - this.beginTime) / 1000;\n this.alert.msg = ` ${seconds}秒 验证成功`;\n this.alert.show = true;\n const temp = response.data.token + '---' + json;\n response.data.captcha = this.secrets.secretKey ? aesEncrypt(temp, this.secrets.secretKey) : temp;\n // delete response.data.token;\n // delete response.data.captchaType;\n // delete response.data.pointJson;\n // delete response.data.result;\n this.verified.emit({\n code: 0,\n msg: response.msg,\n data: response.data\n });\n }\n },\n complete: () => this.verifying = false\n });\n }\n\n markStart(event: PointerEvent) {\n if (!this.loading && !this.verifying) {\n event.stopPropagation();\n this.dragStartX = event.clientX;\n this.scrollLeft = this.sliderRef.nativeElement.scrollLeft;\n }\n }\n\n @HostListener('window:pointerup', ['$event'])\n @HostListener('window:pointercancel', ['$event'])\n markEnd(event: PointerEvent) {\n event.stopPropagation();\n if (this.dragStartX > -1) {\n this.verify(this.width - this.sliderRef.nativeElement.scrollLeft);\n }\n this.dragStartX = -1;\n }\n\n @HostListener('window:pointermove', ['$event'])\n moveMarker(event: PointerEvent) {\n event.stopPropagation();\n if (this.dragStartX > -1) { // 如果在拖动了\n const currentX = event.clientX; // 得到当前的X\n const offset = currentX - this.dragStartX; // 得到拖动的距离\n\n let left = this.scrollLeft - (offset < 0 ? 0 : offset);\n\n if (left <= this.bar.blockWidth) {\n left = this.bar.blockWidth;\n } else if (left >= this.width) {\n left = this.width;\n }\n this.sliderRef.nativeElement.scrollLeft = left;\n this.slide(this.width - left);\n }\n }\n\n}\n","<div class=\"slide-block\" [style.width.px]=\"width\" [style.height.px]=\"height\">\n <canvas #canvas></canvas>\n @if (alert.show) {\n <div\n class=\"slide-alert\"\n [class.slide-alert-success]=\"alert.type === 'success'\"\n [class.slide-alert-danger]=\"alert.type === 'error'\"\n >\n {{ alert.msg }}\n </div>\n }\n</div>\n\n<div\n #slider\n class=\"verify-bar\"\n [style.width.px]=\"width\"\n (scroll)=\"$event.preventDefault()\"\n (touchmove)=\"$event.preventDefault()\"\n (mousewheel)=\"$event.preventDefault()\"\n>\n <div\n style=\"display: inline-block; height: 40px; vertical-align: top\"\n [style]=\"{ background: bar.background }\"\n [draggable]=\"false\"\n [style.width.px]=\"width\"\n ></div>\n <div class=\"verify-bar-area\" [style.width.px]=\"width\" [draggable]=\"false\">\n <span class=\"verify-msg\" [draggable]=\"false\">拖动滑块以完成拼图验证</span>\n <div class=\"verify-left-bar\" [style.width.px]=\"bar.blockWidth\">\n <div\n class=\"verify-move-block\"\n [draggable]=\"false\"\n (pointerdown)=\"markStart($event)\"\n >\n <svg viewBox=\"0 0 512 512\">\n <path\n stroke-width=\"32\"\n stroke-linecap=\"round\"\n stroke-miterlimit=\"10\"\n d=\"M80 160h352M80 256h352M80 352h352\"\n ></path>\n </svg>\n </div>\n </div>\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"solar-angular-ui-sun-slider-captcha.mjs","sources":["../../../packages/ui-sun/slider-captcha/utils.ts","../../../packages/ui-sun/slider-captcha/slider-captcha.component.ts","../../../packages/ui-sun/slider-captcha/slider-captcha.component.html","../../../packages/ui-sun/slider-captcha/solar-angular-ui-sun-slider-captcha.ts"],"sourcesContent":["import { HttpContext } from '@angular/common/http';\nimport { API_TOKEN, AUTH_TOKEN } from '@solar-angular/http';\nimport { encrypt } from 'crypto-js/aes';\nimport { parse } from 'crypto-js/enc-utf8';\nimport { default as mode } from 'crypto-js/mode-ecb';\nimport { default as padding } from 'crypto-js/pad-pkcs7';\n\nexport const HTTP_OPTIONS = {\n withCredentials: true,\n context: new HttpContext().set(API_TOKEN, false).set(AUTH_TOKEN, false)\n};\n\nexport const aesEncrypt = (word: string, secret: string) => {\n const key = parse(secret);\n const src = parse(word);\n const encrypted = encrypt(src, key, { mode, padding });\n return encrypted.toString();\n};\n\nexport function withDpr(value: number) {\n return value * devicePixelRatio;\n}\n","import { HttpClient } from '@angular/common/http';\nimport { afterNextRender, Component, ElementRef, EventEmitter, HostBinding, HostListener, Input, numberAttribute, Output, ViewChild } from '@angular/core';\nimport { withPixel } from '@solar-kit/core';\nimport { Result } from '@solar-kit/planets/sun';\nimport { fromEvent, take, zip } from 'rxjs';\nimport { Captcha, CaptchaType } from './model';\nimport { aesEncrypt, HTTP_OPTIONS, withDpr } from './utils';\n\n/** 验证码的原始尺寸 */\nconst HEIGHT = 155, WIDTH = 310;\n/** 拼图的原始尺寸 */\nconst PUZZLE_HEIGHT = 155, PUZZLE_WIDTH = 50;\n\n@Component({\n selector: 'sun-slider-captcha',\n standalone: true,\n templateUrl: './slider-captcha.component.html',\n styleUrl: './slider-captcha.component.scss',\n})\nexport class SunSliderCaptcha {\n @HostBinding('class.sun-verify-loading') loading = false;\n @HostBinding('class.sun-verify-verifying') verifying = false;\n\n @ViewChild('canvas', { static: true }) canvasRef!: ElementRef<HTMLCanvasElement>;\n @ViewChild('slider', { static: true }) sliderRef!: ElementRef<HTMLDivElement>;\n\n @Input() srcUrl!: string;\n @Input() verifyUrl!: string;\n @Input() verifyData?: Record<string, any> | (() => Record<string, any>);\n @Input({ transform: numberAttribute }) width = WIDTH;\n @Input({ transform: numberAttribute }) height = HEIGHT;\n\n @Output() verified = new EventEmitter<Result<Captcha>>();\n\n private canvas!: HTMLCanvasElement;\n private ctx!: CanvasRenderingContext2D;\n private bgImage!: HTMLImageElement;\n private slideImage!: HTMLImageElement;\n\n /** 滑块拼图的x坐标 */\n x = 0;\n\n secrets: { secretKey: string, token: string } = {} as any;\n\n alert: { type: 'success' | 'error', msg: string, show: boolean } = {\n type: 'success', // error\n msg: '',\n show: false\n };\n\n beginTime!: number;\n endTime!: number;\n\n /** 滑动开始的X */\n dragStartX = -1;\n /** 滑动bar初始的scrollLeft */\n scrollLeft = 0;\n\n bar = {\n blockWidth: 42, // 滑块宽度\n background: 'var(--indicator-primary-color)'\n };\n\n /**\n * 当前尺寸 除于 原始尺寸得到的商\n * 用于等比例缩放\n */\n get quotient() {\n return {\n width: this.width / WIDTH,\n height: this.height / HEIGHT\n };\n }\n\n constructor(private http: HttpClient) {\n afterNextRender(() => {\n const dpr = devicePixelRatio;\n this.canvas = this.canvasRef.nativeElement;\n this.canvas.style.width = withPixel(this.width);\n this.canvas.style.height = withPixel(this.height);\n this.canvas.width = withDpr(this.width);\n this.canvas.height = withDpr(this.height);\n\n this.ctx = this.canvas.getContext('2d')!;\n this.ctx.scale(dpr, dpr);\n\n setTimeout(() => {\n this.refresh();\n });\n })\n }\n\n refresh() {\n setTimeout(() => {\n this.sliderRef.nativeElement.scrollTo(this.width, 0);\n }, 50);\n this.alert.show = false;\n this.bar.background = 'var(--indicator-primary-color)';\n this.loading = true;\n this.http.post<Result<Captcha>>(this.srcUrl, { captchaType: CaptchaType.BlockPuzzle }, HTTP_OPTIONS).subscribe(response => {\n if (response.code === 0) {\n this.secrets.secretKey = response.data.secretKey;\n this.secrets.token = response.data.token;\n this.bgImage = new Image();\n this.slideImage = new Image();\n // this.bgImage.src = `data:image/png;base64,${re.data.jigsawImageBase64}`;\n this.bgImage.src = `data:image/png;base64,${response.data.originalImageBase64}`;\n this.slideImage.src = `data:image/png;base64,${response.data.jigsawImageBase64}`;\n zip(\n fromEvent(this.bgImage, 'load'),\n fromEvent(this.slideImage, 'load'),\n ).pipe(take(1)).subscribe(() => {\n this.beginTime = new Date().getTime();\n this.draw();\n });\n } else {\n console.error(response.msg);\n }\n });\n }\n\n private draw(x = 0) {\n this.x = x;\n this.ctx.clearRect(0, 0, this.width, this.height);\n this.ctx.drawImage(this.bgImage, 0, 0, this.width, this.height);\n this.ctx.drawImage(this.slideImage, this.x, 0, this.quotient.width * PUZZLE_WIDTH, this.quotient.height * PUZZLE_HEIGHT);\n this.loading = false;\n }\n\n slide(x: number) {\n this.draw(x);\n }\n\n verify(x: number) {\n this.verifying = true;\n // 计算出原始移动距离\n x = x / this.quotient.width;\n\n this.endTime = new Date().getTime();\n const json = JSON.stringify({ x: x, y: 5.0 });\n const pointJson = this.secrets.secretKey ? aesEncrypt(json, this.secrets.secretKey) : json;\n const verifyData = typeof this.verifyData === 'function' ? this.verifyData() : this.verifyData;\n const obj = {\n captchaType: CaptchaType.BlockPuzzle,\n pointJson,\n token: this.secrets.token,\n ...verifyData\n };\n this.http.post<Result<Captcha>>(this.verifyUrl, obj, HTTP_OPTIONS).subscribe({\n next: response => {\n if (response.code !== 0) {\n this.alert.type = 'error';\n this.alert.msg = response.msg;\n this.alert.show = true;\n this.bar.background = 'var(--indicator-danger-color)';\n this.verified.emit({\n code: -1,\n msg: response.msg,\n data: null!\n });\n setTimeout(() => {\n this.alert.show = false;\n this.refresh();\n }, 1000);\n } else {\n this.alert.type = 'success';\n this.bar.background = 'var(--indicator-primary-color)';\n const seconds = Math.abs(this.endTime - this.beginTime) / 1000;\n this.alert.msg = ` ${seconds}秒 验证成功`;\n this.alert.show = true;\n const temp = response.data.token + '---' + json;\n response.data.captcha = this.secrets.secretKey ? aesEncrypt(temp, this.secrets.secretKey) : temp;\n // delete response.data.token;\n // delete response.data.captchaType;\n // delete response.data.pointJson;\n // delete response.data.result;\n this.verified.emit({\n code: 0,\n msg: response.msg,\n data: response.data\n });\n }\n },\n complete: () => this.verifying = false\n });\n }\n\n markStart(event: PointerEvent) {\n if (!this.loading && !this.verifying) {\n event.stopPropagation();\n this.dragStartX = event.clientX;\n this.scrollLeft = this.sliderRef.nativeElement.scrollLeft;\n }\n }\n\n @HostListener('window:pointerup', ['$event'])\n @HostListener('window:pointercancel', ['$event'])\n markEnd(event: PointerEvent) {\n event.stopPropagation();\n if (this.dragStartX > -1) {\n this.verify(this.width - this.sliderRef.nativeElement.scrollLeft);\n }\n this.dragStartX = -1;\n }\n\n @HostListener('window:pointermove', ['$event'])\n moveMarker(event: PointerEvent) {\n event.stopPropagation();\n if (this.dragStartX > -1) { // 如果在拖动了\n const currentX = event.clientX; // 得到当前的X\n const offset = currentX - this.dragStartX; // 得到拖动的距离\n\n let left = this.scrollLeft - (offset < 0 ? 0 : offset);\n\n if (left <= this.bar.blockWidth) {\n left = this.bar.blockWidth;\n } else if (left >= this.width) {\n left = this.width;\n }\n this.sliderRef.nativeElement.scrollLeft = left;\n this.slide(this.width - left);\n }\n }\n\n}\n","<div class=\"slide-block\" [style.width.px]=\"width\" [style.height.px]=\"height\">\n <canvas #canvas></canvas>\n @if (alert.show) {\n <div\n class=\"slide-alert\"\n [class.slide-alert-success]=\"alert.type === 'success'\"\n [class.slide-alert-danger]=\"alert.type === 'error'\"\n >\n {{ alert.msg }}\n </div>\n }\n</div>\n\n<div\n #slider\n class=\"verify-bar\"\n [style.width.px]=\"width\"\n (scroll)=\"$event.preventDefault()\"\n (touchmove)=\"$event.preventDefault()\"\n (mousewheel)=\"$event.preventDefault()\"\n>\n <div\n style=\"display: inline-block; height: 40px; vertical-align: top\"\n [style]=\"{ background: bar.background }\"\n [draggable]=\"false\"\n [style.width.px]=\"width\"\n ></div>\n <div class=\"verify-bar-area\" [style.width.px]=\"width\" [draggable]=\"false\">\n <span class=\"verify-msg\" [draggable]=\"false\">拖动滑块以完成拼图验证</span>\n <div class=\"verify-left-bar\" [style.width.px]=\"bar.blockWidth\">\n <div\n class=\"verify-move-block\"\n [draggable]=\"false\"\n (pointerdown)=\"markStart($event)\"\n >\n <svg viewBox=\"0 0 512 512\">\n <path\n stroke-width=\"32\"\n stroke-linecap=\"round\"\n stroke-miterlimit=\"10\"\n d=\"M80 160h352M80 256h352M80 352h352\"\n ></path>\n </svg>\n </div>\n </div>\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@solar-angular/ui-sun",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "19.0.1",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"@solar-angular/http": "
|
|
10
|
-
"@solar-angular/animations": "
|
|
9
|
+
"@solar-angular/http": "19.0.1",
|
|
10
|
+
"@solar-angular/animations": "19.0.1",
|
|
11
11
|
"crypto-js": "^4.2.0",
|
|
12
12
|
"tslib": "^2.3.0"
|
|
13
13
|
},
|
|
14
14
|
"peerDependencies": {
|
|
15
|
-
"@angular/common": "^
|
|
16
|
-
"@angular/core": "^
|
|
15
|
+
"@angular/common": "^19.0.0",
|
|
16
|
+
"@angular/core": "^19.0.0"
|
|
17
17
|
},
|
|
18
18
|
"module": "fesm2022/solar-angular-ui-sun.mjs",
|
|
19
19
|
"typings": "index.d.ts",
|
|
@@ -23,20 +23,14 @@
|
|
|
23
23
|
},
|
|
24
24
|
".": {
|
|
25
25
|
"types": "./index.d.ts",
|
|
26
|
-
"esm2022": "./esm2022/solar-angular-ui-sun.mjs",
|
|
27
|
-
"esm": "./esm2022/solar-angular-ui-sun.mjs",
|
|
28
26
|
"default": "./fesm2022/solar-angular-ui-sun.mjs"
|
|
29
27
|
},
|
|
30
28
|
"./nav-progress-bar": {
|
|
31
29
|
"types": "./nav-progress-bar/index.d.ts",
|
|
32
|
-
"esm2022": "./esm2022/nav-progress-bar/solar-angular-ui-sun-nav-progress-bar.mjs",
|
|
33
|
-
"esm": "./esm2022/nav-progress-bar/solar-angular-ui-sun-nav-progress-bar.mjs",
|
|
34
30
|
"default": "./fesm2022/solar-angular-ui-sun-nav-progress-bar.mjs"
|
|
35
31
|
},
|
|
36
32
|
"./slider-captcha": {
|
|
37
33
|
"types": "./slider-captcha/index.d.ts",
|
|
38
|
-
"esm2022": "./esm2022/slider-captcha/solar-angular-ui-sun-slider-captcha.mjs",
|
|
39
|
-
"esm": "./esm2022/slider-captcha/solar-angular-ui-sun-slider-captcha.mjs",
|
|
40
34
|
"default": "./fesm2022/solar-angular-ui-sun-slider-captcha.mjs"
|
|
41
35
|
}
|
|
42
36
|
}
|
package/esm2022/index.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export default void 0;
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy91aS1zdW4vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFLLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHZvaWQgMFxuIl19
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export * from './nav-progress-bar.component';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy91aS1zdW4vbmF2LXByb2dyZXNzLWJhci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDhCQUE4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9uYXYtcHJvZ3Jlc3MtYmFyLmNvbXBvbmVudCc7XG4iXX0=
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { AsyncPipe } from '@angular/common';
|
|
2
|
-
import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
|
|
3
|
-
import { NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Router } from '@angular/router';
|
|
4
|
-
import { fadeAnimation } from '@solar-angular/animations';
|
|
5
|
-
import { distinctUntilChanged, filter, map, shareReplay, startWith } from 'rxjs';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
export class SunNavProgressBar {
|
|
8
|
-
constructor() {
|
|
9
|
-
this.navigating$ = inject(Router).events.pipe(filter(event => [NavigationStart, NavigationEnd, NavigationError, NavigationCancel].some(o => event instanceof o)), map(event => event instanceof NavigationStart), startWith(true), distinctUntilChanged(), shareReplay(1));
|
|
10
|
-
}
|
|
11
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SunNavProgressBar, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: SunNavProgressBar, isStandalone: true, selector: "sun-nav-progress-bar", ngImport: i0, template: `@if (navigating$ | async) {<div @fadeAnimation></div>}`, isInline: true, styles: [":host{--track-color: transparent;--progress-color: var(--color-primary)}:host>div{position:fixed;top:0;left:0;width:100%;height:2.5px;background:var(--track-color);z-index:999}:host>div:after{content:\"\";display:block;height:100%;width:40%;transform-origin:left;background:var(--progress-color);animation:nav-progress 1.5s infinite linear}@keyframes nav-progress{0%{transform:translate(250%) scaleX(.2)}80%{transform:translate(0) scaleX(1)}to{transform:translate(0) scaleX(0)}}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }], animations: [fadeAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
13
|
-
}
|
|
14
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SunNavProgressBar, decorators: [{
|
|
15
|
-
type: Component,
|
|
16
|
-
args: [{ selector: 'sun-nav-progress-bar', template: `@if (navigating$ | async) {<div @fadeAnimation></div>}`, standalone: true, imports: [AsyncPipe], changeDetection: ChangeDetectionStrategy.OnPush, animations: [fadeAnimation], styles: [":host{--track-color: transparent;--progress-color: var(--color-primary)}:host>div{position:fixed;top:0;left:0;width:100%;height:2.5px;background:var(--track-color);z-index:999}:host>div:after{content:\"\";display:block;height:100%;width:40%;transform-origin:left;background:var(--progress-color);animation:nav-progress 1.5s infinite linear}@keyframes nav-progress{0%{transform:translate(250%) scaleX(.2)}80%{transform:translate(0) scaleX(1)}to{transform:translate(0) scaleX(0)}}\n"] }]
|
|
17
|
-
}] });
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LXByb2dyZXNzLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy91aS1zdW4vbmF2LXByb2dyZXNzLWJhci9uYXYtcHJvZ3Jlc3MtYmFyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQVdqRixNQUFNLE9BQU8saUJBQWlCO0lBVDlCO1FBVUUsZ0JBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDdEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQ2IsQ0FBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FDbEcsRUFDRCxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLFlBQVksZUFBZSxDQUFDLEVBQzlDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFDZixvQkFBb0IsRUFBRSxFQUN0QixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztLQUNIOytHQVZZLGlCQUFpQjttR0FBakIsaUJBQWlCLGdGQVBsQix3REFBd0QscWlCQUV4RCxTQUFTLGdDQUdQLENBQUMsYUFBYSxDQUFDOzs0RkFFaEIsaUJBQWlCO2tCQVQ3QixTQUFTOytCQUNFLHNCQUFzQixZQUN0Qix3REFBd0QsY0FDdEQsSUFBSSxXQUNQLENBQUMsU0FBUyxDQUFDLG1CQUVILHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsQ0FBQyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uQ2FuY2VsLCBOYXZpZ2F0aW9uRW5kLCBOYXZpZ2F0aW9uRXJyb3IsIE5hdmlnYXRpb25TdGFydCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGZhZGVBbmltYXRpb24gfSBmcm9tICdAc29sYXItYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc2hhcmVSZXBsYXksIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdW4tbmF2LXByb2dyZXNzLWJhcicsXG4gIHRlbXBsYXRlOiBgQGlmIChuYXZpZ2F0aW5nJCB8IGFzeW5jKSB7PGRpdiBAZmFkZUFuaW1hdGlvbj48L2Rpdj59YCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0FzeW5jUGlwZV0sXG4gIHN0eWxlVXJsOiAnLi9uYXYtcHJvZ3Jlc3MtYmFyLmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGFuaW1hdGlvbnM6IFtmYWRlQW5pbWF0aW9uXVxufSlcbmV4cG9ydCBjbGFzcyBTdW5OYXZQcm9ncmVzc0JhciB7XG4gIG5hdmlnYXRpbmckID0gaW5qZWN0KFJvdXRlcikuZXZlbnRzLnBpcGUoXG4gICAgZmlsdGVyKGV2ZW50ID0+XG4gICAgICBbTmF2aWdhdGlvblN0YXJ0LCBOYXZpZ2F0aW9uRW5kLCBOYXZpZ2F0aW9uRXJyb3IsIE5hdmlnYXRpb25DYW5jZWxdLnNvbWUobyA9PiBldmVudCBpbnN0YW5jZW9mIG8pXG4gICAgKSxcbiAgICBtYXAoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpLFxuICAgIHN0YXJ0V2l0aCh0cnVlKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG59XG4iXX0=
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './index';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29sYXItYW5ndWxhci11aS1zdW4tbmF2LXByb2dyZXNzLWJhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3VpLXN1bi9uYXYtcHJvZ3Jlc3MtYmFyL3NvbGFyLWFuZ3VsYXItdWktc3VuLW5hdi1wcm9ncmVzcy1iYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
export * from './model';
|
|
2
|
-
export * from './slider-captcha.component';
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy91aS1zdW4vc2xpZGVyLWNhcHRjaGEvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxTQUFTLENBQUE7QUFDdkIsY0FBYyw0QkFBNEIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbW9kZWwnXG5leHBvcnQgKiBmcm9tICcuL3NsaWRlci1jYXB0Y2hhLmNvbXBvbmVudCdcbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy91aS1zdW4vc2xpZGVyLWNhcHRjaGEvbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgQ2FwdGNoYSB7XG4gIGppZ3Nhd0ltYWdlQmFzZTY0OiBzdHJpbmc7XG4gIG9yaWdpbmFsSW1hZ2VCYXNlNjQ6IHN0cmluZztcbiAgcmVzdWx0OiBib29sZWFuO1xuICBzZWNyZXRLZXk6IHN0cmluZztcbiAgdG9rZW46IHN0cmluZztcbiAgY2FwdGNoYTogc3RyaW5nO1xuICBjYXB0Y2hhVHlwZTogc3RyaW5nO1xuICBwb2ludEpzb246IHN0cmluZztcbiAgd29yZExpc3Q6IGFueVtdO1xuICBjbGllbnRJZDogc3RyaW5nO1xuICBjbGllbnRTZWNyZXQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGVudW0gQ2FwdGNoYVR5cGUge1xuICBCbG9ja1B1enpsZSA9ICdibG9ja1B1enpsZScsXG4gIENsaWNrV29yZCA9ICdjbGlja1dvcmQnXG59XG4iXX0=
|
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
import { afterNextRender, Component, EventEmitter, HostBinding, HostListener, Input, numberAttribute, Output, ViewChild } from '@angular/core';
|
|
2
|
-
import { withPixel } from '@solar-kit/core';
|
|
3
|
-
import { fromEvent, take, zip } from 'rxjs';
|
|
4
|
-
import { aesEncrypt, HTTP_OPTIONS, withDpr } from './utils';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/common/http";
|
|
7
|
-
/** 验证码的原始尺寸 */
|
|
8
|
-
const HEIGHT = 155, WIDTH = 310;
|
|
9
|
-
/** 拼图的原始尺寸 */
|
|
10
|
-
const PUZZLE_HEIGHT = 155, PUZZLE_WIDTH = 50;
|
|
11
|
-
export class SunSliderCaptcha {
|
|
12
|
-
/**
|
|
13
|
-
* 当前尺寸 除于 原始尺寸得到的商
|
|
14
|
-
* 用于等比例缩放
|
|
15
|
-
*/
|
|
16
|
-
get quotient() {
|
|
17
|
-
return {
|
|
18
|
-
width: this.width / WIDTH,
|
|
19
|
-
height: this.height / HEIGHT
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
constructor(http) {
|
|
23
|
-
this.http = http;
|
|
24
|
-
this.loading = false;
|
|
25
|
-
this.verifying = false;
|
|
26
|
-
this.width = WIDTH;
|
|
27
|
-
this.height = HEIGHT;
|
|
28
|
-
this.verified = new EventEmitter();
|
|
29
|
-
/** 滑块拼图的x坐标 */
|
|
30
|
-
this.x = 0;
|
|
31
|
-
this.secrets = {};
|
|
32
|
-
this.alert = {
|
|
33
|
-
type: 'success', // error
|
|
34
|
-
msg: '',
|
|
35
|
-
show: false
|
|
36
|
-
};
|
|
37
|
-
/** 滑动开始的X */
|
|
38
|
-
this.dragStartX = -1;
|
|
39
|
-
/** 滑动bar初始的scrollLeft */
|
|
40
|
-
this.scrollLeft = 0;
|
|
41
|
-
this.bar = {
|
|
42
|
-
blockWidth: 42, // 滑块宽度
|
|
43
|
-
background: 'var(--indicator-primary-color)'
|
|
44
|
-
};
|
|
45
|
-
afterNextRender(() => {
|
|
46
|
-
const dpr = devicePixelRatio;
|
|
47
|
-
this.canvas = this.canvasRef.nativeElement;
|
|
48
|
-
this.canvas.style.width = withPixel(this.width);
|
|
49
|
-
this.canvas.style.height = withPixel(this.height);
|
|
50
|
-
this.canvas.width = withDpr(this.width);
|
|
51
|
-
this.canvas.height = withDpr(this.height);
|
|
52
|
-
this.ctx = this.canvas.getContext('2d');
|
|
53
|
-
this.ctx.scale(dpr, dpr);
|
|
54
|
-
setTimeout(() => {
|
|
55
|
-
this.refresh();
|
|
56
|
-
});
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
refresh() {
|
|
60
|
-
setTimeout(() => {
|
|
61
|
-
this.sliderRef.nativeElement.scrollTo(this.width, 0);
|
|
62
|
-
}, 50);
|
|
63
|
-
this.alert.show = false;
|
|
64
|
-
this.bar.background = 'var(--indicator-primary-color)';
|
|
65
|
-
this.loading = true;
|
|
66
|
-
this.http.post(this.srcUrl, { captchaType: "blockPuzzle" /* CaptchaType.BlockPuzzle */ }, HTTP_OPTIONS).subscribe(response => {
|
|
67
|
-
if (response.code === 0) {
|
|
68
|
-
this.secrets.secretKey = response.data.secretKey;
|
|
69
|
-
this.secrets.token = response.data.token;
|
|
70
|
-
this.bgImage = new Image();
|
|
71
|
-
this.slideImage = new Image();
|
|
72
|
-
// this.bgImage.src = `data:image/png;base64,${re.data.jigsawImageBase64}`;
|
|
73
|
-
this.bgImage.src = `data:image/png;base64,${response.data.originalImageBase64}`;
|
|
74
|
-
this.slideImage.src = `data:image/png;base64,${response.data.jigsawImageBase64}`;
|
|
75
|
-
zip(fromEvent(this.bgImage, 'load'), fromEvent(this.slideImage, 'load')).pipe(take(1)).subscribe(() => {
|
|
76
|
-
this.beginTime = new Date().getTime();
|
|
77
|
-
this.draw();
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
console.error(response.msg);
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
draw(x = 0) {
|
|
86
|
-
this.x = x;
|
|
87
|
-
this.ctx.clearRect(0, 0, this.width, this.height);
|
|
88
|
-
this.ctx.drawImage(this.bgImage, 0, 0, this.width, this.height);
|
|
89
|
-
this.ctx.drawImage(this.slideImage, this.x, 0, this.quotient.width * PUZZLE_WIDTH, this.quotient.height * PUZZLE_HEIGHT);
|
|
90
|
-
this.loading = false;
|
|
91
|
-
}
|
|
92
|
-
slide(x) {
|
|
93
|
-
this.draw(x);
|
|
94
|
-
}
|
|
95
|
-
verify(x) {
|
|
96
|
-
this.verifying = true;
|
|
97
|
-
// 计算出原始移动距离
|
|
98
|
-
x = x / this.quotient.width;
|
|
99
|
-
this.endTime = new Date().getTime();
|
|
100
|
-
const json = JSON.stringify({ x: x, y: 5.0 });
|
|
101
|
-
const pointJson = this.secrets.secretKey ? aesEncrypt(json, this.secrets.secretKey) : json;
|
|
102
|
-
const verifyData = typeof this.verifyData === 'function' ? this.verifyData() : this.verifyData;
|
|
103
|
-
const obj = {
|
|
104
|
-
captchaType: "blockPuzzle" /* CaptchaType.BlockPuzzle */,
|
|
105
|
-
pointJson,
|
|
106
|
-
token: this.secrets.token,
|
|
107
|
-
...verifyData
|
|
108
|
-
};
|
|
109
|
-
this.http.post(this.verifyUrl, obj, HTTP_OPTIONS).subscribe({
|
|
110
|
-
next: response => {
|
|
111
|
-
if (response.code !== 0) {
|
|
112
|
-
this.alert.type = 'error';
|
|
113
|
-
this.alert.msg = response.msg;
|
|
114
|
-
this.alert.show = true;
|
|
115
|
-
this.bar.background = 'var(--indicator-danger-color)';
|
|
116
|
-
this.verified.emit({
|
|
117
|
-
code: -1,
|
|
118
|
-
msg: response.msg,
|
|
119
|
-
data: null
|
|
120
|
-
});
|
|
121
|
-
setTimeout(() => {
|
|
122
|
-
this.alert.show = false;
|
|
123
|
-
this.refresh();
|
|
124
|
-
}, 1000);
|
|
125
|
-
}
|
|
126
|
-
else {
|
|
127
|
-
this.alert.type = 'success';
|
|
128
|
-
this.bar.background = 'var(--indicator-primary-color)';
|
|
129
|
-
const seconds = Math.abs(this.endTime - this.beginTime) / 1000;
|
|
130
|
-
this.alert.msg = ` ${seconds}秒 验证成功`;
|
|
131
|
-
this.alert.show = true;
|
|
132
|
-
const temp = response.data.token + '---' + json;
|
|
133
|
-
response.data.captcha = this.secrets.secretKey ? aesEncrypt(temp, this.secrets.secretKey) : temp;
|
|
134
|
-
// delete response.data.token;
|
|
135
|
-
// delete response.data.captchaType;
|
|
136
|
-
// delete response.data.pointJson;
|
|
137
|
-
// delete response.data.result;
|
|
138
|
-
this.verified.emit({
|
|
139
|
-
code: 0,
|
|
140
|
-
msg: response.msg,
|
|
141
|
-
data: response.data
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
},
|
|
145
|
-
complete: () => this.verifying = false
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
markStart(event) {
|
|
149
|
-
if (!this.loading && !this.verifying) {
|
|
150
|
-
event.stopPropagation();
|
|
151
|
-
this.dragStartX = event.clientX;
|
|
152
|
-
this.scrollLeft = this.sliderRef.nativeElement.scrollLeft;
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
markEnd(event) {
|
|
156
|
-
event.stopPropagation();
|
|
157
|
-
if (this.dragStartX > -1) {
|
|
158
|
-
this.verify(this.width - this.sliderRef.nativeElement.scrollLeft);
|
|
159
|
-
}
|
|
160
|
-
this.dragStartX = -1;
|
|
161
|
-
}
|
|
162
|
-
moveMarker(event) {
|
|
163
|
-
event.stopPropagation();
|
|
164
|
-
if (this.dragStartX > -1) { // 如果在拖动了
|
|
165
|
-
const currentX = event.clientX; // 得到当前的X
|
|
166
|
-
const offset = currentX - this.dragStartX; // 得到拖动的距离
|
|
167
|
-
let left = this.scrollLeft - (offset < 0 ? 0 : offset);
|
|
168
|
-
if (left <= this.bar.blockWidth) {
|
|
169
|
-
left = this.bar.blockWidth;
|
|
170
|
-
}
|
|
171
|
-
else if (left >= this.width) {
|
|
172
|
-
left = this.width;
|
|
173
|
-
}
|
|
174
|
-
this.sliderRef.nativeElement.scrollLeft = left;
|
|
175
|
-
this.slide(this.width - left);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SunSliderCaptcha, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
179
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: SunSliderCaptcha, isStandalone: true, selector: "sun-slider-captcha", inputs: { srcUrl: "srcUrl", verifyUrl: "verifyUrl", verifyData: "verifyData", width: ["width", "width", numberAttribute], height: ["height", "height", numberAttribute] }, outputs: { verified: "verified" }, host: { listeners: { "window:pointerup": "markEnd($event)", "window:pointercancel": "markEnd($event)", "window:pointermove": "moveMarker($event)" }, properties: { "class.sun-verify-loading": "this.loading", "class.sun-verify-verifying": "this.verifying" } }, viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["canvas"], descendants: true, static: true }, { propertyName: "sliderRef", first: true, predicate: ["slider"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"slide-block\" [style.width.px]=\"width\" [style.height.px]=\"height\">\n <canvas #canvas></canvas>\n @if (alert.show) {\n <div\n class=\"slide-alert\"\n [class.slide-alert-success]=\"alert.type === 'success'\"\n [class.slide-alert-danger]=\"alert.type === 'error'\"\n >\n {{ alert.msg }}\n </div>\n }\n</div>\n\n<div\n #slider\n class=\"verify-bar\"\n [style.width.px]=\"width\"\n (scroll)=\"$event.preventDefault()\"\n (touchmove)=\"$event.preventDefault()\"\n (mousewheel)=\"$event.preventDefault()\"\n>\n <div\n style=\"display: inline-block; height: 40px; vertical-align: top\"\n [style]=\"{ background: bar.background }\"\n [draggable]=\"false\"\n [style.width.px]=\"width\"\n ></div>\n <div class=\"verify-bar-area\" [style.width.px]=\"width\" [draggable]=\"false\">\n <span class=\"verify-msg\" [draggable]=\"false\">\u62D6\u52A8\u6ED1\u5757\u4EE5\u5B8C\u6210\u62FC\u56FE\u9A8C\u8BC1</span>\n <div class=\"verify-left-bar\" [style.width.px]=\"bar.blockWidth\">\n <div\n class=\"verify-move-block\"\n [draggable]=\"false\"\n (pointerdown)=\"markStart($event)\"\n >\n <svg viewBox=\"0 0 512 512\">\n <path\n stroke-width=\"32\"\n stroke-linecap=\"round\"\n stroke-miterlimit=\"10\"\n d=\"M80 160h352M80 256h352M80 352h352\"\n ></path>\n </svg>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{--background: white;--indicator-primary-color: var(--color-primary);--indicator-danger-color: var(--color-danger);--alert-success-color: var(--color-success);--alert-danger-color: var(--color-danger);--alert-success-background: #dcfce7;--alert-danger-background: #fee2e2;--handler-color: #94a3b8;--handler-border-color: #e2e8f0;display:inline-block;overflow:hidden}.slide-block{position:relative;background:var(--background)}.slide-alert{position:absolute;width:100%;bottom:0;opacity:.9;text-align:center;padding:4px 0;font-size:14px}.slide-alert-success{color:var(--alert-success-color);background:var(--alert-success-background)}.slide-alert-danger{color:var(--alert-danger-color);background:var(--alert-danger-background)}:host ::ng-deep .ant-alert{border-radius:0}.verify-bar{font-size:0;height:40px;line-height:40px;overflow:scroll hidden;white-space:nowrap;scrollbar-width:none}.verify-bar::-webkit-scrollbar{display:none}.verify-bar-area{position:relative;display:inline-block;font-size:14px;text-align:center;background:var(--background);height:100%}.verify-bar-area .verify-msg{z-index:3;pointer-events:none;-webkit-user-select:none;user-select:none}.verify-bar-area .verify-move-block{display:flex;justify-content:center;align-items:center;width:100%;height:100%;background:var(--background);border:1px solid var(--handler-border-color)}.verify-bar-area .verify-move-block>svg{font-size:24px;color:var(--handler-color);width:1em;height:1em;contain:strict;fill:currentcolor;box-sizing:content-box;stroke:currentcolor;transform:rotate(90deg)}.verify-bar-area .verify-left-bar{position:absolute;top:0;left:0;cursor:grab;height:40px}:host.sun-verify-loading .verify-left-bar,:host.sun-verify-verifying .verify-left-bar{cursor:progress}\n"] }); }
|
|
180
|
-
}
|
|
181
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SunSliderCaptcha, decorators: [{
|
|
182
|
-
type: Component,
|
|
183
|
-
args: [{ selector: 'sun-slider-captcha', standalone: true, template: "<div class=\"slide-block\" [style.width.px]=\"width\" [style.height.px]=\"height\">\n <canvas #canvas></canvas>\n @if (alert.show) {\n <div\n class=\"slide-alert\"\n [class.slide-alert-success]=\"alert.type === 'success'\"\n [class.slide-alert-danger]=\"alert.type === 'error'\"\n >\n {{ alert.msg }}\n </div>\n }\n</div>\n\n<div\n #slider\n class=\"verify-bar\"\n [style.width.px]=\"width\"\n (scroll)=\"$event.preventDefault()\"\n (touchmove)=\"$event.preventDefault()\"\n (mousewheel)=\"$event.preventDefault()\"\n>\n <div\n style=\"display: inline-block; height: 40px; vertical-align: top\"\n [style]=\"{ background: bar.background }\"\n [draggable]=\"false\"\n [style.width.px]=\"width\"\n ></div>\n <div class=\"verify-bar-area\" [style.width.px]=\"width\" [draggable]=\"false\">\n <span class=\"verify-msg\" [draggable]=\"false\">\u62D6\u52A8\u6ED1\u5757\u4EE5\u5B8C\u6210\u62FC\u56FE\u9A8C\u8BC1</span>\n <div class=\"verify-left-bar\" [style.width.px]=\"bar.blockWidth\">\n <div\n class=\"verify-move-block\"\n [draggable]=\"false\"\n (pointerdown)=\"markStart($event)\"\n >\n <svg viewBox=\"0 0 512 512\">\n <path\n stroke-width=\"32\"\n stroke-linecap=\"round\"\n stroke-miterlimit=\"10\"\n d=\"M80 160h352M80 256h352M80 352h352\"\n ></path>\n </svg>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{--background: white;--indicator-primary-color: var(--color-primary);--indicator-danger-color: var(--color-danger);--alert-success-color: var(--color-success);--alert-danger-color: var(--color-danger);--alert-success-background: #dcfce7;--alert-danger-background: #fee2e2;--handler-color: #94a3b8;--handler-border-color: #e2e8f0;display:inline-block;overflow:hidden}.slide-block{position:relative;background:var(--background)}.slide-alert{position:absolute;width:100%;bottom:0;opacity:.9;text-align:center;padding:4px 0;font-size:14px}.slide-alert-success{color:var(--alert-success-color);background:var(--alert-success-background)}.slide-alert-danger{color:var(--alert-danger-color);background:var(--alert-danger-background)}:host ::ng-deep .ant-alert{border-radius:0}.verify-bar{font-size:0;height:40px;line-height:40px;overflow:scroll hidden;white-space:nowrap;scrollbar-width:none}.verify-bar::-webkit-scrollbar{display:none}.verify-bar-area{position:relative;display:inline-block;font-size:14px;text-align:center;background:var(--background);height:100%}.verify-bar-area .verify-msg{z-index:3;pointer-events:none;-webkit-user-select:none;user-select:none}.verify-bar-area .verify-move-block{display:flex;justify-content:center;align-items:center;width:100%;height:100%;background:var(--background);border:1px solid var(--handler-border-color)}.verify-bar-area .verify-move-block>svg{font-size:24px;color:var(--handler-color);width:1em;height:1em;contain:strict;fill:currentcolor;box-sizing:content-box;stroke:currentcolor;transform:rotate(90deg)}.verify-bar-area .verify-left-bar{position:absolute;top:0;left:0;cursor:grab;height:40px}:host.sun-verify-loading .verify-left-bar,:host.sun-verify-verifying .verify-left-bar{cursor:progress}\n"] }]
|
|
184
|
-
}], ctorParameters: () => [{ type: i1.HttpClient }], propDecorators: { loading: [{
|
|
185
|
-
type: HostBinding,
|
|
186
|
-
args: ['class.sun-verify-loading']
|
|
187
|
-
}], verifying: [{
|
|
188
|
-
type: HostBinding,
|
|
189
|
-
args: ['class.sun-verify-verifying']
|
|
190
|
-
}], canvasRef: [{
|
|
191
|
-
type: ViewChild,
|
|
192
|
-
args: ['canvas', { static: true }]
|
|
193
|
-
}], sliderRef: [{
|
|
194
|
-
type: ViewChild,
|
|
195
|
-
args: ['slider', { static: true }]
|
|
196
|
-
}], srcUrl: [{
|
|
197
|
-
type: Input
|
|
198
|
-
}], verifyUrl: [{
|
|
199
|
-
type: Input
|
|
200
|
-
}], verifyData: [{
|
|
201
|
-
type: Input
|
|
202
|
-
}], width: [{
|
|
203
|
-
type: Input,
|
|
204
|
-
args: [{ transform: numberAttribute }]
|
|
205
|
-
}], height: [{
|
|
206
|
-
type: Input,
|
|
207
|
-
args: [{ transform: numberAttribute }]
|
|
208
|
-
}], verified: [{
|
|
209
|
-
type: Output
|
|
210
|
-
}], markEnd: [{
|
|
211
|
-
type: HostListener,
|
|
212
|
-
args: ['window:pointerup', ['$event']]
|
|
213
|
-
}, {
|
|
214
|
-
type: HostListener,
|
|
215
|
-
args: ['window:pointercancel', ['$event']]
|
|
216
|
-
}], moveMarker: [{
|
|
217
|
-
type: HostListener,
|
|
218
|
-
args: ['window:pointermove', ['$event']]
|
|
219
|
-
}] } });
|
|
220
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLWNhcHRjaGEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvdWktc3VuL3NsaWRlci1jYXB0Y2hhL3NsaWRlci1jYXB0Y2hhLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3VpLXN1bi9zbGlkZXItY2FwdGNoYS9zbGlkZXItY2FwdGNoYS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0osT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7OztBQUU1RCxlQUFlO0FBQ2YsTUFBTSxNQUFNLEdBQUcsR0FBRyxFQUFFLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDaEMsY0FBYztBQUNkLE1BQU0sYUFBYSxHQUFHLEdBQUcsRUFBRSxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBUTdDLE1BQU0sT0FBTyxnQkFBZ0I7SUE0QzNCOzs7T0FHRztJQUNILElBQUksUUFBUTtRQUNWLE9BQU87WUFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLO1lBQ3pCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU07U0FDN0IsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFvQixJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBdERLLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDZCxjQUFT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Z0I7a0JBTjVCLFNBQVM7K0JBQ0Usb0JBQW9CLGNBQ2xCLElBQUk7K0VBS3lCLE9BQU87c0JBQS9DLFdBQVc7dUJBQUMsMEJBQTBCO2dCQUNJLFNBQVM7c0JBQW5ELFdBQVc7dUJBQUMsNEJBQTRCO2dCQUVGLFNBQVM7c0JBQS9DLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDRSxTQUFTO3NCQUEvQyxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRTVCLE1BQU07c0JBQWQsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ2lDLEtBQUs7c0JBQTNDLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQUNFLE1BQU07c0JBQTVDLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQUUzQixRQUFRO3NCQUFqQixNQUFNO2dCQXFLUCxPQUFPO3NCQUZOLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUMzQyxZQUFZO3VCQUFDLHNCQUFzQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVVoRCxVQUFVO3NCQURULFlBQVk7dUJBQUMsb0JBQW9CLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgYWZ0ZXJOZXh0UmVuZGVyLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIG51bWJlckF0dHJpYnV0ZSwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHdpdGhQaXhlbCB9IGZyb20gJ0Bzb2xhci1raXQvY29yZSc7XG5pbXBvcnQgeyBSZXN1bHQgfSBmcm9tICdAc29sYXIta2l0L3BsYW5ldHMvc3VuJztcbmltcG9ydCB7IGZyb21FdmVudCwgdGFrZSwgemlwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDYXB0Y2hhLCBDYXB0Y2hhVHlwZSB9IGZyb20gJy4vbW9kZWwnO1xuaW1wb3J0IHsgYWVzRW5jcnlwdCwgSFRUUF9PUFRJT05TLCB3aXRoRHByIH0gZnJvbSAnLi91dGlscyc7XG5cbi8qKiDpqozor4HnoIHnmoTljp/lp4vlsLrlr7ggKi9cbmNvbnN0IEhFSUdIVCA9IDE1NSwgV0lEVEggPSAzMTA7XG4vKiog5ou85Zu+55qE5Y6f5aeL5bC65a+4ICovXG5jb25zdCBQVVpaTEVfSEVJR0hUID0gMTU1LCBQVVpaTEVfV0lEVEggPSA1MDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3VuLXNsaWRlci1jYXB0Y2hhJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGVVcmw6ICcuL3NsaWRlci1jYXB0Y2hhLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3NsaWRlci1jYXB0Y2hhLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgU3VuU2xpZGVyQ2FwdGNoYSB7XG4gIEBIb3N0QmluZGluZygnY2xhc3Muc3VuLXZlcmlmeS1sb2FkaW5nJykgbG9hZGluZyA9IGZhbHNlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnN1bi12ZXJpZnktdmVyaWZ5aW5nJykgdmVyaWZ5aW5nID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgnY2FudmFzJywgeyBzdGF0aWM6IHRydWUgfSkgY2FudmFzUmVmITogRWxlbWVudFJlZjxIVE1MQ2FudmFzRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ3NsaWRlcicsIHsgc3RhdGljOiB0cnVlIH0pIHNsaWRlclJlZiE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIEBJbnB1dCgpIHNyY1VybCE6IHN0cmluZztcbiAgQElucHV0KCkgdmVyaWZ5VXJsITogc3RyaW5nO1xuICBASW5wdXQoKSB2ZXJpZnlEYXRhPzogUmVjb3JkPHN0cmluZywgYW55PiB8ICgoKSA9PiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgd2lkdGggPSBXSURUSDtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgaGVpZ2h0ID0gSEVJR0hUO1xuXG4gIEBPdXRwdXQoKSB2ZXJpZmllZCA9IG5ldyBFdmVudEVtaXR0ZXI8UmVzdWx0PENhcHRjaGE+PigpO1xuXG4gIHByaXZhdGUgY2FudmFzITogSFRNTENhbnZhc0VsZW1lbnQ7XG4gIHByaXZhdGUgY3R4ITogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICBwcml2YXRlIGJnSW1hZ2UhOiBIVE1MSW1hZ2VFbGVtZW50O1xuICBwcml2YXRlIHNsaWRlSW1hZ2UhOiBIVE1MSW1hZ2VFbGVtZW50O1xuXG4gIC8qKiDmu5HlnZfmi7zlm77nmoR45Z2Q5qCHICovXG4gIHggPSAwO1xuXG4gIHNlY3JldHM6IHsgc2VjcmV0S2V5OiBzdHJpbmcsIHRva2VuOiBzdHJpbmcgfSA9IHt9IGFzIGFueTtcblxuICBhbGVydDogeyB0eXBlOiAnc3VjY2VzcycgfCAnZXJyb3InLCBtc2c6IHN0cmluZywgc2hvdzogYm9vbGVhbiB9ID0ge1xuICAgIHR5cGU6ICdzdWNjZXNzJywgIC8vIGVycm9yXG4gICAgbXNnOiAnJyxcbiAgICBzaG93OiBmYWxzZVxuICB9O1xuXG4gIGJlZ2luVGltZSE6IG51bWJlcjtcbiAgZW5kVGltZSE6IG51bWJlcjtcblxuICAvKiog5ruR5Yqo5byA5aeL55qEWCAqL1xuICBkcmFnU3RhcnRYID0gLTE7XG4gIC8qKiDmu5HliqhiYXLliJ3lp4vnmoRzY3JvbGxMZWZ0ICovXG4gIHNjcm9sbExlZnQgPSAwO1xuXG4gIGJhciA9IHtcbiAgICBibG9ja1dpZHRoOiA0MiwgICAvLyDmu5HlnZflrr3luqZcbiAgICBiYWNrZ3JvdW5kOiAndmFyKC0taW5kaWNhdG9yLXByaW1hcnktY29sb3IpJ1xuICB9O1xuXG4gIC8qKlxuICAgKiDlvZPliY3lsLrlr7gg6Zmk5LqOIOWOn+Wni+WwuuWvuOW+l+WIsOeahOWVhlxuICAgKiDnlKjkuo7nrYnmr5TkvovnvKnmlL5cbiAgICovXG4gIGdldCBxdW90aWVudCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd2lkdGg6IHRoaXMud2lkdGggLyBXSURUSCxcbiAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQgLyBIRUlHSFRcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7XG4gICAgYWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcbiAgICAgIGNvbnN0IGRwciA9IGRldmljZVBpeGVsUmF0aW87XG4gICAgICB0aGlzLmNhbnZhcyA9IHRoaXMuY2FudmFzUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICB0aGlzLmNhbnZhcy5zdHlsZS53aWR0aCA9IHdpdGhQaXhlbCh0aGlzLndpZHRoKTtcbiAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmhlaWdodCA9IHdpdGhQaXhlbCh0aGlzLmhlaWdodCk7XG4gICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpdGhEcHIodGhpcy53aWR0aCk7XG4gICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB3aXRoRHByKHRoaXMuaGVpZ2h0KTtcblxuICAgICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpITtcbiAgICAgIHRoaXMuY3R4LnNjYWxlKGRwciwgZHByKTtcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgfSk7XG4gICAgfSlcbiAgfVxuXG4gIHJlZnJlc2goKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNsaWRlclJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbFRvKHRoaXMud2lkdGgsIDApO1xuICAgIH0sIDUwKTtcbiAgICB0aGlzLmFsZXJ0LnNob3cgPSBmYWxzZTtcbiAgICB0aGlzLmJhci5iYWNrZ3JvdW5kID0gJ3ZhcigtLWluZGljYXRvci1wcmltYXJ5LWNvbG9yKSc7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmh0dHAucG9zdDxSZXN1bHQ8Q2FwdGNoYT4+KHRoaXMuc3JjVXJsLCB7IGNhcHRjaGFUeXBlOiBDYXB0Y2hhVHlwZS5CbG9ja1B1enpsZSB9LCBIVFRQX09QVElPTlMpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICBpZiAocmVzcG9uc2UuY29kZSA9PT0gMCkge1xuICAgICAgICB0aGlzLnNlY3JldHMuc2VjcmV0S2V5ID0gcmVzcG9uc2UuZGF0YS5zZWNyZXRLZXk7XG4gICAgICAgIHRoaXMuc2VjcmV0cy50b2tlbiA9IHJlc3BvbnNlLmRhdGEudG9rZW47XG4gICAgICAgIHRoaXMuYmdJbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICB0aGlzLnNsaWRlSW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgLy8gdGhpcy5iZ0ltYWdlLnNyYyA9IGBkYXRhOmltYWdlL3BuZztiYXNlNjQsJHtyZS5kYXRhLmppZ3Nhd0ltYWdlQmFzZTY0fWA7XG4gICAgICAgIHRoaXMuYmdJbWFnZS5zcmMgPSBgZGF0YTppbWFnZS9wbmc7YmFzZTY0LCR7cmVzcG9uc2UuZGF0YS5vcmlnaW5hbEltYWdlQmFzZTY0fWA7XG4gICAgICAgIHRoaXMuc2xpZGVJbWFnZS5zcmMgPSBgZGF0YTppbWFnZS9wbmc7YmFzZTY0LCR7cmVzcG9uc2UuZGF0YS5qaWdzYXdJbWFnZUJhc2U2NH1gO1xuICAgICAgICB6aXAoXG4gICAgICAgICAgZnJvbUV2ZW50KHRoaXMuYmdJbWFnZSwgJ2xvYWQnKSxcbiAgICAgICAgICBmcm9tRXZlbnQodGhpcy5zbGlkZUltYWdlLCAnbG9hZCcpLFxuICAgICAgICApLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmJlZ2luVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgIHRoaXMuZHJhdygpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IocmVzcG9uc2UubXNnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhdyh4ID0gMCkge1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy5jdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICB0aGlzLmN0eC5kcmF3SW1hZ2UodGhpcy5iZ0ltYWdlLCAwLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgdGhpcy5jdHguZHJhd0ltYWdlKHRoaXMuc2xpZGVJbWFnZSwgdGhpcy54LCAwLCB0aGlzLnF1b3RpZW50LndpZHRoICogUFVaWkxFX1dJRFRILCB0aGlzLnF1b3RpZW50LmhlaWdodCAqIFBVWlpMRV9IRUlHSFQpO1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgc2xpZGUoeDogbnVtYmVyKSB7XG4gICAgdGhpcy5kcmF3KHgpO1xuICB9XG5cbiAgdmVyaWZ5KHg6IG51bWJlcikge1xuICAgIHRoaXMudmVyaWZ5aW5nID0gdHJ1ZTtcbiAgICAvLyDorqHnrpflh7rljp/lp4vnp7vliqjot53nprtcbiAgICB4ID0geCAvIHRoaXMucXVvdGllbnQud2lkdGg7XG5cbiAgICB0aGlzLmVuZFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkoeyB4OiB4LCB5OiA1LjAgfSk7XG4gICAgY29uc3QgcG9pbnRKc29uID0gdGhpcy5zZWNyZXRzLnNlY3JldEtleSA/IGFlc0VuY3J5cHQoanNvbiwgdGhpcy5zZWNyZXRzLnNlY3JldEtleSkgOiBqc29uO1xuICAgIGNvbnN0IHZlcmlmeURhdGEgPSB0eXBlb2YgdGhpcy52ZXJpZnlEYXRhID09PSAnZnVuY3Rpb24nID8gdGhpcy52ZXJpZnlEYXRhKCkgOiB0aGlzLnZlcmlmeURhdGE7XG4gICAgY29uc3Qgb2JqID0ge1xuICAgICAgY2FwdGNoYVR5cGU6IENhcHRjaGFUeXBlLkJsb2NrUHV6emxlLFxuICAgICAgcG9pbnRKc29uLFxuICAgICAgdG9rZW46IHRoaXMuc2VjcmV0cy50b2tlbixcbiAgICAgIC4uLnZlcmlmeURhdGFcbiAgICB9O1xuICAgIHRoaXMuaHR0cC5wb3N0PFJlc3VsdDxDYXB0Y2hhPj4odGhpcy52ZXJpZnlVcmwsIG9iaiwgSFRUUF9PUFRJT05TKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogcmVzcG9uc2UgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2UuY29kZSAhPT0gMCkge1xuICAgICAgICAgIHRoaXMuYWxlcnQudHlwZSA9ICdlcnJvcic7XG4gICAgICAgICAgdGhpcy5hbGVydC5tc2cgPSByZXNwb25zZS5tc2c7XG4gICAgICAgICAgdGhpcy5hbGVydC5zaG93ID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmJhci5iYWNrZ3JvdW5kID0gJ3ZhcigtLWluZGljYXRvci1kYW5nZXItY29sb3IpJztcbiAgICAgICAgICB0aGlzLnZlcmlmaWVkLmVtaXQoe1xuICAgICAgICAgICAgY29kZTogLTEsXG4gICAgICAgICAgICBtc2c6IHJlc3BvbnNlLm1zZyxcbiAgICAgICAgICAgIGRhdGE6IG51bGwhXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFsZXJ0LnNob3cgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWxlcnQudHlwZSA9ICdzdWNjZXNzJztcbiAgICAgICAgICB0aGlzLmJhci5iYWNrZ3JvdW5kID0gJ3ZhcigtLWluZGljYXRvci1wcmltYXJ5LWNvbG9yKSc7XG4gICAgICAgICAgY29uc3Qgc2Vjb25kcyA9IE1hdGguYWJzKHRoaXMuZW5kVGltZSAtIHRoaXMuYmVnaW5UaW1lKSAvIDEwMDA7XG4gICAgICAgICAgdGhpcy5hbGVydC5tc2cgPSBgICR7c2Vjb25kc33np5Ig6aqM6K+B5oiQ5YqfYDtcbiAgICAgICAgICB0aGlzLmFsZXJ0LnNob3cgPSB0cnVlO1xuICAgICAgICAgIGNvbnN0IHRlbXAgPSByZXNwb25zZS5kYXRhLnRva2VuICsgJy0tLScgKyBqc29uO1xuICAgICAgICAgIHJlc3BvbnNlLmRhdGEuY2FwdGNoYSA9IHRoaXMuc2VjcmV0cy5zZWNyZXRLZXkgPyBhZXNFbmNyeXB0KHRlbXAsIHRoaXMuc2VjcmV0cy5zZWNyZXRLZXkpIDogdGVtcDtcbiAgICAgICAgICAvLyBkZWxldGUgcmVzcG9uc2UuZGF0YS50b2tlbjtcbiAgICAgICAgICAvLyBkZWxldGUgcmVzcG9uc2UuZGF0YS5jYXB0Y2hhVHlwZTtcbiAgICAgICAgICAvLyBkZWxldGUgcmVzcG9uc2UuZGF0YS5wb2ludEpzb247XG4gICAgICAgICAgLy8gZGVsZXRlIHJlc3BvbnNlLmRhdGEucmVzdWx0O1xuICAgICAgICAgIHRoaXMudmVyaWZpZWQuZW1pdCh7XG4gICAgICAgICAgICBjb2RlOiAwLFxuICAgICAgICAgICAgbXNnOiByZXNwb25zZS5tc2csXG4gICAgICAgICAgICBkYXRhOiByZXNwb25zZS5kYXRhXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjb21wbGV0ZTogKCkgPT4gdGhpcy52ZXJpZnlpbmcgPSBmYWxzZVxuICAgIH0pO1xuICB9XG5cbiAgbWFya1N0YXJ0KGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMubG9hZGluZyAmJiAhdGhpcy52ZXJpZnlpbmcpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5kcmFnU3RhcnRYID0gZXZlbnQuY2xpZW50WDtcbiAgICAgIHRoaXMuc2Nyb2xsTGVmdCA9IHRoaXMuc2xpZGVyUmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cG9pbnRlcnVwJywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnBvaW50ZXJjYW5jZWwnLCBbJyRldmVudCddKVxuICBtYXJrRW5kKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5kcmFnU3RhcnRYID4gLTEpIHtcbiAgICAgIHRoaXMudmVyaWZ5KHRoaXMud2lkdGggLSB0aGlzLnNsaWRlclJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQpO1xuICAgIH1cbiAgICB0aGlzLmRyYWdTdGFydFggPSAtMTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpwb2ludGVybW92ZScsIFsnJGV2ZW50J10pXG4gIG1vdmVNYXJrZXIoZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICh0aGlzLmRyYWdTdGFydFggPiAtMSkgeyAvLyDlpoLmnpzlnKjmi5bliqjkuoZcbiAgICAgIGNvbnN0IGN1cnJlbnRYID0gZXZlbnQuY2xpZW50WDsgLy8g5b6X5Yiw5b2T5YmN55qEWFxuICAgICAgY29uc3Qgb2Zmc2V0ID0gY3VycmVudFggLSB0aGlzLmRyYWdTdGFydFg7IC8vIOW+l+WIsOaLluWKqOeahOi3neemu1xuXG4gICAgICBsZXQgbGVmdCA9IHRoaXMuc2Nyb2xsTGVmdCAtIChvZmZzZXQgPCAwID8gMCA6IG9mZnNldCk7XG5cbiAgICAgIGlmIChsZWZ0IDw9IHRoaXMuYmFyLmJsb2NrV2lkdGgpIHtcbiAgICAgICAgbGVmdCA9IHRoaXMuYmFyLmJsb2NrV2lkdGg7XG4gICAgICB9IGVsc2UgaWYgKGxlZnQgPj0gdGhpcy53aWR0aCkge1xuICAgICAgICBsZWZ0ID0gdGhpcy53aWR0aDtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2xpZGVyUmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IGxlZnQ7XG4gICAgICB0aGlzLnNsaWRlKHRoaXMud2lkdGggLSBsZWZ0KTtcbiAgICB9XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cInNsaWRlLWJsb2NrXCIgW3N0eWxlLndpZHRoLnB4XT1cIndpZHRoXCIgW3N0eWxlLmhlaWdodC5weF09XCJoZWlnaHRcIj5cbiAgPGNhbnZhcyAjY2FudmFzPjwvY2FudmFzPlxuICBAaWYgKGFsZXJ0LnNob3cpIHtcbiAgPGRpdlxuICAgIGNsYXNzPVwic2xpZGUtYWxlcnRcIlxuICAgIFtjbGFzcy5zbGlkZS1hbGVydC1zdWNjZXNzXT1cImFsZXJ0LnR5cGUgPT09ICdzdWNjZXNzJ1wiXG4gICAgW2NsYXNzLnNsaWRlLWFsZXJ0LWRhbmdlcl09XCJhbGVydC50eXBlID09PSAnZXJyb3InXCJcbiAgPlxuICAgIHt7IGFsZXJ0Lm1zZyB9fVxuICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG5cbjxkaXZcbiAgI3NsaWRlclxuICBjbGFzcz1cInZlcmlmeS1iYXJcIlxuICBbc3R5bGUud2lkdGgucHhdPVwid2lkdGhcIlxuICAoc2Nyb2xsKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgKHRvdWNobW92ZSk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gIChtb3VzZXdoZWVsKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbj5cbiAgPGRpdlxuICAgIHN0eWxlPVwiZGlzcGxheTogaW5saW5lLWJsb2NrOyBoZWlnaHQ6IDQwcHg7IHZlcnRpY2FsLWFsaWduOiB0b3BcIlxuICAgIFtzdHlsZV09XCJ7IGJhY2tncm91bmQ6IGJhci5iYWNrZ3JvdW5kIH1cIlxuICAgIFtkcmFnZ2FibGVdPVwiZmFsc2VcIlxuICAgIFtzdHlsZS53aWR0aC5weF09XCJ3aWR0aFwiXG4gID48L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInZlcmlmeS1iYXItYXJlYVwiIFtzdHlsZS53aWR0aC5weF09XCJ3aWR0aFwiIFtkcmFnZ2FibGVdPVwiZmFsc2VcIj5cbiAgICA8c3BhbiBjbGFzcz1cInZlcmlmeS1tc2dcIiBbZHJhZ2dhYmxlXT1cImZhbHNlXCI+5ouW5Yqo5ruR5Z2X5Lul5a6M5oiQ5ou85Zu+6aqM6K+BPC9zcGFuPlxuICAgIDxkaXYgY2xhc3M9XCJ2ZXJpZnktbGVmdC1iYXJcIiBbc3R5bGUud2lkdGgucHhdPVwiYmFyLmJsb2NrV2lkdGhcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJ2ZXJpZnktbW92ZS1ibG9ja1wiXG4gICAgICAgIFtkcmFnZ2FibGVdPVwiZmFsc2VcIlxuICAgICAgICAocG9pbnRlcmRvd24pPVwibWFya1N0YXJ0KCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgNTEyIDUxMlwiPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIzMlwiXG4gICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgIHN0cm9rZS1taXRlcmxpbWl0PVwiMTBcIlxuICAgICAgICAgICAgZD1cIk04MCAxNjBoMzUyTTgwIDI1NmgzNTJNODAgMzUyaDM1MlwiXG4gICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './index';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29sYXItYW5ndWxhci11aS1zdW4tc2xpZGVyLWNhcHRjaGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy91aS1zdW4vc2xpZGVyLWNhcHRjaGEvc29sYXItYW5ndWxhci11aS1zdW4tc2xpZGVyLWNhcHRjaGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { HttpContext } from '@angular/common/http';
|
|
2
|
-
import { API_TOKEN, AUTH_TOKEN } from '@solar-angular/http';
|
|
3
|
-
import { encrypt } from 'crypto-js/aes';
|
|
4
|
-
import { parse } from 'crypto-js/enc-utf8';
|
|
5
|
-
import { default as mode } from 'crypto-js/mode-ecb';
|
|
6
|
-
import { default as padding } from 'crypto-js/pad-pkcs7';
|
|
7
|
-
export const HTTP_OPTIONS = {
|
|
8
|
-
withCredentials: true,
|
|
9
|
-
context: new HttpContext().set(API_TOKEN, false).set(AUTH_TOKEN, false)
|
|
10
|
-
};
|
|
11
|
-
export const aesEncrypt = (word, secret) => {
|
|
12
|
-
const key = parse(secret);
|
|
13
|
-
const src = parse(word);
|
|
14
|
-
const encrypted = encrypt(src, key, { mode, padding });
|
|
15
|
-
return encrypted.toString();
|
|
16
|
-
};
|
|
17
|
-
export function withDpr(value) {
|
|
18
|
-
return value * devicePixelRatio;
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy91aS1zdW4vc2xpZGVyLWNhcHRjaGEvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sSUFBSSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsT0FBTyxJQUFJLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXpELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRztJQUMxQixlQUFlLEVBQUUsSUFBSTtJQUNyQixPQUFPLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDO0NBQ3hFLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFZLEVBQUUsTUFBYyxFQUFFLEVBQUU7SUFDekQsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELE9BQU8sU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzlCLENBQUMsQ0FBQztBQUVGLE1BQU0sVUFBVSxPQUFPLENBQUMsS0FBYTtJQUNuQyxPQUFPLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQztBQUNsQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENvbnRleHQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBBUElfVE9LRU4sIEFVVEhfVE9LRU4gfSBmcm9tICdAc29sYXItYW5ndWxhci9odHRwJztcbmltcG9ydCB7IGVuY3J5cHQgfSBmcm9tICdjcnlwdG8tanMvYWVzJztcbmltcG9ydCB7IHBhcnNlIH0gZnJvbSAnY3J5cHRvLWpzL2VuYy11dGY4JztcbmltcG9ydCB7IGRlZmF1bHQgYXMgbW9kZSB9IGZyb20gJ2NyeXB0by1qcy9tb2RlLWVjYic7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIHBhZGRpbmcgfSBmcm9tICdjcnlwdG8tanMvcGFkLXBrY3M3JztcblxuZXhwb3J0IGNvbnN0IEhUVFBfT1BUSU9OUyA9IHtcbiAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICBjb250ZXh0OiBuZXcgSHR0cENvbnRleHQoKS5zZXQoQVBJX1RPS0VOLCBmYWxzZSkuc2V0KEFVVEhfVE9LRU4sIGZhbHNlKVxufTtcblxuZXhwb3J0IGNvbnN0IGFlc0VuY3J5cHQgPSAod29yZDogc3RyaW5nLCBzZWNyZXQ6IHN0cmluZykgPT4ge1xuICBjb25zdCBrZXkgPSBwYXJzZShzZWNyZXQpO1xuICBjb25zdCBzcmMgPSBwYXJzZSh3b3JkKTtcbiAgY29uc3QgZW5jcnlwdGVkID0gZW5jcnlwdChzcmMsIGtleSwgeyBtb2RlLCBwYWRkaW5nIH0pO1xuICByZXR1cm4gZW5jcnlwdGVkLnRvU3RyaW5nKCk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aERwcih2YWx1ZTogbnVtYmVyKSB7XG4gIHJldHVybiB2YWx1ZSAqIGRldmljZVBpeGVsUmF0aW87XG59XG4iXX0=
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './index';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29sYXItYW5ndWxhci11aS1zdW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy91aS1zdW4vc29sYXItYW5ndWxhci11aS1zdW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
|