ngx-slider-recaptcha
Version:
Angular slider with reCAPTCHA verification
1 lines • 48.3 kB
Source Map (JSON)
{"version":3,"file":"ngx-slider-recaptcha.mjs","sources":["../../../src/lib/config/default-ngx-slider-recaptcha-config.ts","../../../src/lib/services/default-ngx-slider-recaptcha-image.service.ts","../../../src/lib/services/default-ngx-slider-recaptcha-verification.service.ts","../../../src/lib/tokens/ngx-slider-recaptcha-image-service.token.ts","../../../src/lib/tokens/ngx-slider-recaptcha-config.token.ts","../../../src/lib/tokens/ngx-slider-recaptcha-verification-service.token.ts","../../../src/lib/components/ngx-slider-recaptcha.component.ts","../../../src/lib/components/ngx-slider-recaptcha.component.html","../../../src/lib/ngx-slider-recaptcha.module.ts","../../../src/public-api.ts","../../../src/ngx-slider-recaptcha.ts"],"sourcesContent":["import { NgxSliderRecaptchaConfig } from \"./ngx-slider-recaptcha-config\";\r\n\r\nexport const DEFAULT_SLIDER_RECAPTCHA_CONFIG: NgxSliderRecaptchaConfig = {\r\n width: 300,\r\n height: 200,\r\n puzzleSize: 45,\r\n puzzleRadius: 10,\r\n\r\n toleranceOffset: 5,\r\n maxRetryAttempts: 3,\r\n allowRefresh: false,\r\n allowResponsiveWidth: false,\r\n disabled: false,\r\n\r\n primaryColor: '#0083c1',\r\n errorColor: '#c4161c',\r\n successColor: '#52ccba',\r\n textColor: '#4b4b4b',\r\n sliderContainerBackgroundColor: '#f7f9fa',\r\n sliderContainerBorderColor: '#e6e8eb',\r\n borderRadius: 4,\r\n\r\n loadingText: 'Loading...',\r\n instructionText: 'Slide to complete the puzzle',\r\n};","import { Injectable } from '@angular/core';\r\nimport { Observable, of } from 'rxjs';\r\nimport { NgxSliderRecaptchaImageService } from '../core/ngx-slider-recaptcha-image-service.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DefaultNgxSliderRecaptchaImageService implements NgxSliderRecaptchaImageService {\r\n getSliderImage(): Observable<string> {\r\n return of(`assets/images/ngx-slider-recaptcha-${Math.floor(Math.random() * 5)}.jpg`);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, of } from 'rxjs';\r\nimport { NgxSliderRecaptchaVerificationService } from '../core/ngx-slider-recaptcha-verification-service.interface';\r\nimport { VerificationResponse } from '../core/ngx-slider-recaptcha-verification-response.interface';\r\nimport { VerificationRequest } from '../core/ngx-slider-recaptcha-verification-request.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DefaultNgxSliderRecaptchaVerificationService implements NgxSliderRecaptchaVerificationService<VerificationRequest, VerificationResponse> {\r\n verify(verificationRequest: VerificationRequest): Observable<VerificationResponse> {\r\n if (!verificationRequest?.sliderMovements?.length) {\r\n return of({\r\n success: false,\r\n message: 'No slider movement detected. Please try again.'\r\n });\r\n }\r\n\r\n const { sliderMovements, puzzleBlockPosition, puzzlePosition, toleranceOffset: offset } = verificationRequest;\r\n const averageMovement = sliderMovements.reduce((sum, value) => sum + value, 0) / sliderMovements.length;\r\n const movementDeviation = Math.sqrt(\r\n sliderMovements.reduce((sum, value) => sum + Math.pow(value - averageMovement, 2), 0) / sliderMovements.length\r\n );\r\n\r\n const isVerified = movementDeviation !== 0;\r\n const isSpliced = Math.abs(puzzleBlockPosition - puzzlePosition) < (offset ?? 0);\r\n\r\n\r\n const response: VerificationResponse = {\r\n success: isSpliced && isVerified,\r\n message: isSpliced && isVerified ? 'Verification successful' : 'Verification failed',\r\n };\r\n return of(response);\r\n }\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\nimport { NgxSliderRecaptchaImageService } from '../core/ngx-slider-recaptcha-image-service.interface';\r\n\r\nexport const NGX_SLIDER_RECAPTCHA_IMAGE_SERVICE_TOKEN = new InjectionToken<NgxSliderRecaptchaImageService>('NgxSliderRecaptchaImageService');\r\n","import { InjectionToken } from \"@angular/core\";\r\nimport { NgxSliderRecaptchaConfig } from \"../config/ngx-slider-recaptcha-config\";\r\n\r\nexport const NGX_SLIDER_RECAPTCHA_CONFIG_TOKEN = new InjectionToken<NgxSliderRecaptchaConfig>('NgxSliderRecaptchaConfig');","import { InjectionToken } from \"@angular/core\";\r\nimport { NgxSliderRecaptchaVerificationService } from \"../core/ngx-slider-recaptcha-verification-service.interface\";\r\nimport { VerificationResponse } from \"../core/ngx-slider-recaptcha-verification-response.interface\";\r\nimport { VerificationRequest } from \"../core/ngx-slider-recaptcha-verification-request.interface\";\r\n\r\nexport const NGX_SLIDER_RECAPTCHA_VERIFICATION_SERVICE_TOKEN = new InjectionToken<NgxSliderRecaptchaVerificationService<VerificationRequest, VerificationResponse>>('NgxSliderRecaptchaVerificationService');\r\n","import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostListener, Inject, Input, OnChanges, OnInit, Output, Renderer2, SimpleChanges, TemplateRef, ViewChild } from '@angular/core';\r\nimport { VerificationStatus } from '../types/verification-status.type';\r\nimport { NGX_SLIDER_RECAPTCHA_VERIFICATION_SERVICE_TOKEN } from '../tokens/ngx-slider-recaptcha-verification-service.token';\r\nimport { NgxSliderRecaptchaVerificationService } from '../core/ngx-slider-recaptcha-verification-service.interface';\r\nimport { NgxSliderRecaptchaImageService } from '../core/ngx-slider-recaptcha-image-service.interface';\r\nimport { NGX_SLIDER_RECAPTCHA_IMAGE_SERVICE_TOKEN } from '../tokens/ngx-slider-recaptcha-image-service.token';\r\nimport { NGX_SLIDER_RECAPTCHA_CONFIG_TOKEN } from '../tokens/ngx-slider-recaptcha-config.token';\r\nimport { NgxSliderRecaptchaConfig } from '../config/ngx-slider-recaptcha-config';\r\nimport { DEFAULT_SLIDER_RECAPTCHA_CONFIG } from '../config/default-ngx-slider-recaptcha-config';\r\nimport { VerificationResponse } from '../core/ngx-slider-recaptcha-verification-response.interface';\r\nimport { CommonModule } from '@angular/common';\r\nimport { VerificationRequest } from '../core/ngx-slider-recaptcha-verification-request.interface';\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'ngx-slider-recaptcha',\r\n templateUrl: './ngx-slider-recaptcha.component.html',\r\n styleUrls: ['./ngx-slider-recaptcha.component.scss'],\r\n imports: [CommonModule]\r\n})\r\nexport class NgxSliderRecaptchaComponent implements OnInit, OnChanges, AfterViewInit {\r\n @ViewChild('canvas', { static: true }) private canvas!: ElementRef<HTMLCanvasElement>;\r\n @ViewChild('block', { static: true }) private block!: ElementRef<HTMLCanvasElement>;\r\n @ViewChild('captchaContainer', { static: true }) private captchaContainer!: ElementRef<HTMLElement>;\r\n @ViewChild('slider', { static: true }) private slider!: ElementRef<HTMLElement>;\r\n\r\n @Input() config?: NgxSliderRecaptchaConfig;\r\n @Input() disabled?: boolean = false;\r\n @Input() sliderContent?: string | TemplateRef<void>;\r\n @Input() successContent?: string | TemplateRef<void>;\r\n @Input() failContent?: string | TemplateRef<void>;\r\n\r\n\r\n @Output() onVerified = new EventEmitter<VerificationResponse>();\r\n @Output() onRefresh = new EventEmitter();\r\n @Output() onError = new EventEmitter();\r\n\r\n private _sliderText: string | undefined = '';\r\n private _sliderOffsetX: number = 0;\r\n private _blockOffsetX: number = 0;\r\n private _maskWidth: number = 0;\r\n private _isSliderDragging = false;\r\n private _isVerifying = false;\r\n private _verificationStatus: VerificationStatus = 'none';\r\n private _sliderConfig!: NgxSliderRecaptchaConfig;\r\n\r\n private dragStartX = 0;\r\n private dragStartY = 0;\r\n private puzzleX = 0;\r\n private puzzleY = 0;\r\n private loadCount = 0;\r\n private sliderMovements: number[] = [];\r\n private ctx!: CanvasRenderingContext2D;\r\n private blockCtx!: CanvasRenderingContext2D;\r\n\r\n private readonly isUsingIE = window.navigator.userAgent.includes('Trident');\r\n private readonly SLIDER_CONTAINER_MARGIN = 7;\r\n\r\n constructor(\r\n private renderer: Renderer2,\r\n private cdr: ChangeDetectorRef,\r\n @Inject(NGX_SLIDER_RECAPTCHA_CONFIG_TOKEN) private globalSliderConfig: NgxSliderRecaptchaConfig,\r\n @Inject(NGX_SLIDER_RECAPTCHA_VERIFICATION_SERVICE_TOKEN) private verifier: NgxSliderRecaptchaVerificationService<VerificationRequest, VerificationResponse>,\r\n @Inject(NGX_SLIDER_RECAPTCHA_IMAGE_SERVICE_TOKEN) private imageRetriever: NgxSliderRecaptchaImageService\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this._sliderConfig = { ...this._sliderConfig, ...this.globalSliderConfig, ...DEFAULT_SLIDER_RECAPTCHA_CONFIG };\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (!this.ctx || !this.blockCtx) {\r\n this.initializeCaptcha();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['config']?.currentValue) {\r\n this._sliderConfig = { ...this._sliderConfig, ...this.globalSliderConfig, ...this.config };\r\n this._sliderText = this.sliderConfig.instructionText;\r\n this.initializeStyles();\r\n this.cdr.detectChanges()\r\n }\r\n }\r\n\r\n reset() {\r\n setTimeout(() => {\r\n this._maskWidth = 0;\r\n this._sliderOffsetX = 0;\r\n this._blockOffsetX = 0;\r\n this.sliderMovements = [];\r\n this._verificationStatus = 'none';\r\n this._sliderText = this.sliderConfig.loadingText!;\r\n this.initializeCaptcha();\r\n this.cdr.detectChanges();\r\n }, 500);\r\n }\r\n\r\n refresh(): void {\r\n this.reset();\r\n this.onRefresh.emit();\r\n }\r\n\r\n isTemplate(input: any): input is TemplateRef<void> {\r\n return input instanceof TemplateRef;\r\n }\r\n\r\n get isSliderDragging() {\r\n return this._isSliderDragging;\r\n }\r\n\r\n get isVerifying() {\r\n return this._isVerifying;\r\n }\r\n\r\n get sliderText() {\r\n return this._sliderText;\r\n }\r\n\r\n get verificationStatus() {\r\n return this._verificationStatus;\r\n }\r\n\r\n get maskWidth() {\r\n return this._maskWidth;\r\n }\r\n\r\n get sliderOffsetX() {\r\n return this._sliderOffsetX;\r\n }\r\n\r\n get blockOffsetX() {\r\n return this._blockOffsetX;\r\n }\r\n\r\n get sliderConfig() {\r\n return this._sliderConfig;\r\n }\r\n\r\n get isDisabled() {\r\n return this.disabled ?? this.sliderConfig.disabled ?? false;\r\n }\r\n\r\n @HostListener('document:mousedown', ['$event'])\r\n @HostListener('document:touchstart', ['$event'])\r\n private onDragStart(event: MouseEvent | TouchEvent): void {\r\n const target = event.target as HTMLElement;\r\n\r\n if (this.isVerifying || !this.slider.nativeElement.contains(target)) {\r\n return;\r\n }\r\n\r\n this._isSliderDragging = true;\r\n this.initializeDragStartCoordinates(event);\r\n }\r\n\r\n @HostListener('document:mousemove', ['$event'])\r\n @HostListener('document:touchmove', ['$event'])\r\n private onDragMove(event: MouseEvent | TouchEvent): void {\r\n if (this.isVerifying || !this._isSliderDragging) return;\r\n\r\n const { x, y } = this.extractEventCoordinates(event);\r\n const { width, puzzleSize } = this.sliderConfig;\r\n\r\n let deltaX: number = x - this.dragStartX;\r\n let deltaY: number = y - this.dragStartY;\r\n\r\n if (deltaX < 0 || deltaX + puzzleSize! > width!) return;\r\n\r\n this._sliderOffsetX = (deltaX - 1);\r\n this._maskWidth = (deltaX + 4);\r\n this._blockOffsetX = (width! - this.sliderConfig.puzzleSize! - 20) / (width! - puzzleSize!) * deltaX;\r\n this.sliderMovements.push(Math.round(deltaY));\r\n }\r\n\r\n @HostListener('document:mouseup', ['$event'])\r\n @HostListener('document:touchend', ['$event'])\r\n private onDragEnd(event: MouseEvent | TouchEvent): void {\r\n if (this.isVerifying || !this._isSliderDragging) return;\r\n this._isSliderDragging = false;\r\n const { x } = this.extractEventCoordinates(event);\r\n if (x === this.dragStartX) return;\r\n\r\n const verificationRequest: VerificationRequest = {\r\n sliderMovements: this.sliderMovements,\r\n puzzleBlockPosition: this.blockOffsetX,\r\n puzzlePosition: this.puzzleX,\r\n toleranceOffset: this.sliderConfig.toleranceOffset!\r\n };\r\n\r\n this._isVerifying = true;\r\n\r\n this.verifier.verify(verificationRequest).subscribe({\r\n next: (response: VerificationResponse) => {\r\n this._isVerifying = false;\r\n if (response.success) {\r\n this._verificationStatus = 'success';\r\n this.onVerified.emit(response);\r\n } else {\r\n this._verificationStatus = 'fail';\r\n this.onError.emit(\"Verification failed\");\r\n setTimeout(() => this.reset(), 1000);\r\n }\r\n },\r\n error: (error: any) => {\r\n this._isVerifying = false;\r\n this.onError.emit(error);\r\n setTimeout(() => this.reset(), 1000);\r\n }\r\n });\r\n }\r\n\r\n private initializeCanvasDimensions(): void {\r\n const { width, height, puzzleSize } = this.sliderConfig;\r\n const sliderContainerHeight = (puzzleSize ?? 0) + this.SLIDER_CONTAINER_MARGIN;\r\n const adjustedHeight = (height ?? 0) - sliderContainerHeight;\r\n\r\n [this.canvas.nativeElement, this.block.nativeElement].forEach(element => {\r\n this.renderer.setAttribute(element, 'width', width!.toString());\r\n this.renderer.setAttribute(element, 'height', adjustedHeight.toString());\r\n });\r\n }\r\n\r\n private initializeCanvasContexts(): void {\r\n this.initializeCanvasDimensions();\r\n this.ctx = this.canvas.nativeElement.getContext('2d', { willReadFrequently: true }) as CanvasRenderingContext2D;\r\n this.blockCtx = this.block.nativeElement.getContext('2d', { willReadFrequently: true }) as CanvasRenderingContext2D;\r\n\r\n if (!this.ctx || !this.blockCtx) {\r\n throw new Error(\"Failed to initialize canvas contexts\");\r\n }\r\n }\r\n\r\n private initializeCaptcha() {\r\n this.resetCanvas();\r\n this.initializeStyles();\r\n this.initializeCanvasContexts();\r\n this.renderPuzzle();\r\n }\r\n\r\n private renderPuzzle() {\r\n let img = new Image();\r\n img.crossOrigin = 'Anonymous';\r\n img.onload = () => this.configurePuzzleImage(img);\r\n img.onerror = () => this.retryImageLoad(img);\r\n this.fetchImageSource(img);\r\n this._sliderText = this.sliderConfig.loadingText;\r\n this.cdr.detectChanges();\r\n }\r\n\r\n private configurePuzzleImage(img: HTMLImageElement): void {\r\n const { width, puzzleSize, puzzleRadius, instructionText } = this.sliderConfig;\r\n let puzzleBlockWidth = puzzleSize! + puzzleRadius! * 2 + 3;\r\n const { width: canvasWidth, height: canvasHeight } = this.canvas.nativeElement;\r\n\r\n this.puzzleX = this.generateRandomNumber(puzzleBlockWidth + 10, canvasWidth! - (puzzleBlockWidth + 10));\r\n this.puzzleY = this.generateRandomNumber(10 + puzzleRadius! * 2, canvasHeight! - (puzzleBlockWidth + 10));\r\n\r\n this.drawPuzzlePieceShape(this.ctx, 'fill');\r\n this.drawPuzzlePieceShape(this.blockCtx, 'clip');\r\n\r\n this.ctx.drawImage(img, 0, 0, width!, canvasHeight!);\r\n this.blockCtx.drawImage(img, 0, 0, width!, canvasHeight!);\r\n\r\n const yOffset = this.puzzleY - puzzleRadius! * 2 - 1;\r\n const imageData = this.blockCtx.getImageData(this.puzzleX - 3, yOffset, puzzleBlockWidth, puzzleBlockWidth);\r\n\r\n this.renderer.setAttribute(this.block.nativeElement, 'width', puzzleBlockWidth.toString());\r\n this.renderer.setAttribute(this.block.nativeElement, 'height', canvasHeight.toString());\r\n\r\n this.blockCtx.putImageData(imageData, 0, yOffset + 1);\r\n this._sliderText = instructionText;\r\n this.cdr.detectChanges();\r\n }\r\n\r\n private retryImageLoad(img: HTMLImageElement): void {\r\n this.loadCount++;\r\n if (this.loadCount <= this.sliderConfig.maxRetryAttempts!) {\r\n this.renderPuzzle()\r\n } else {\r\n img.src = this.loadFallbackImage();\r\n }\r\n }\r\n\r\n private fetchImageSource(img: HTMLImageElement): void {\r\n this.imageRetriever.getSliderImage().subscribe({\r\n next: (image) => img.src = image,\r\n error: (error) => this.onError.emit(error)\r\n })\r\n }\r\n\r\n private loadFallbackImage(): string {\r\n return `assets/images/ngx-slider-recaptcha-${Math.floor(Math.random() * 4)}.jpg`;\r\n }\r\n\r\n private drawPuzzlePieceShape(ctx: CanvasRenderingContext2D, operation: 'fill' | 'clip'): void {\r\n const { puzzleSize: size, puzzleRadius: radius } = this.sliderConfig;\r\n const { PI } = Math;\r\n const { puzzleX, puzzleY } = this;\r\n\r\n ctx.beginPath();\r\n ctx.moveTo(puzzleX, puzzleY);\r\n ctx.arc(puzzleX + size! / 2, puzzleY - radius! + 2, radius!, 0.72 * PI, 2.26 * PI);\r\n ctx.lineTo(puzzleX + size!, puzzleY);\r\n ctx.arc(puzzleX + size! + radius! - 2, puzzleY + size! / 2, radius!, 1.21 * PI, 2.78 * PI);\r\n ctx.lineTo(puzzleX + size!, puzzleY + size!);\r\n ctx.lineTo(puzzleX, puzzleY + size!);\r\n ctx.arc(puzzleX + radius! - 2, puzzleY + size! / 2, radius! + 0.4, 2.76 * PI, 1.24 * PI, true);\r\n ctx.lineTo(puzzleX, puzzleY);\r\n ctx.lineWidth = 2;\r\n ctx.fillStyle = 'rgba(255, 255, 255, 0.7)';\r\n ctx.strokeStyle = 'rgba(255, 255, 255, 0.7)';\r\n ctx.stroke();\r\n ctx[operation]();\r\n ctx.globalCompositeOperation = this.isUsingIE ? 'xor' : 'destination-over';\r\n }\r\n\r\n private generateRandomNumber(start: number, end: number): number {\r\n return Math.round(Math.random() * (end - start) + start);\r\n };\r\n\r\n private resetCanvas(): void {\r\n const { width, height } = this.canvas.nativeElement;\r\n this.ctx?.clearRect(0, 0, width!, height!);\r\n this.blockCtx?.clearRect(0, 0, width!, height!);\r\n }\r\n\r\n private extractEventCoordinates(event: MouseEvent | TouchEvent): { x: number, y: number } {\r\n if (event instanceof MouseEvent) {\r\n return { x: event.clientX, y: event.clientY };\r\n } else {\r\n return { x: event.changedTouches[0].clientX, y: event.changedTouches[0].clientY };\r\n }\r\n }\r\n\r\n private initializeDragStartCoordinates(event: MouseEvent | TouchEvent) {\r\n const { x, y } = this.extractEventCoordinates(event);\r\n this.dragStartX = x;\r\n this.dragStartY = y;\r\n }\r\n\r\n private initializeStyles(): void {\r\n if (this.sliderConfig.allowResponsiveWidth) {\r\n this._sliderConfig = { ...this._sliderConfig, width: this.captchaContainer.nativeElement.offsetWidth };\r\n }\r\n\r\n const { width, height, primaryColor, successColor, errorColor, textColor, sliderContainerBackgroundColor: containerBackgroundColor, sliderContainerBorderColor: containerBorderColor, borderRadius: commonBorderRadius, puzzleSize } = this.sliderConfig;\r\n\r\n this.setStyle('--recaptcha-container-width', `${width!}px`);\r\n this.setStyle('--recaptcha-container-height', `${height!}px`);\r\n this.setStyle('--recaptcha-canvas-width', `${width!}px`);\r\n this.setStyle('--recaptcha-canvas-height', `${(height! - (puzzleSize! + this.SLIDER_CONTAINER_MARGIN))}px`);\r\n this.setStyle('--recaptcha-primary-color', primaryColor!);\r\n this.setStyle('--recaptcha-error-color', errorColor!);\r\n this.setStyle('--recaptcha-success-color', successColor!);\r\n this.setStyle('--recaptcha-text-color', textColor!);\r\n this.setStyle('--recaptcha-container-background-color', containerBackgroundColor!);\r\n this.setStyle('--recaptcha-container-border-color', containerBorderColor!);\r\n this.setStyle('--recaptcha-common-border-radius', `${commonBorderRadius!}px`);\r\n this.setStyle('--recaptcha-slider-container-height', `${puzzleSize!}px`);\r\n this.setStyle('--recaptcha-slider-mask-primary-color', this.hexToRgba(primaryColor!, 0.3));\r\n this.setStyle('--recaptcha-slider-mask-success-color', this.hexToRgba(successColor!, 0.3));\r\n this.setStyle('--recaptcha-slider-mask-error-color', this.hexToRgba(errorColor!, 0.3));\r\n }\r\n\r\n private setStyle(property: string, value: string): void {\r\n document.documentElement.style.setProperty(property, value);\r\n }\r\n\r\n private hexToRgba(hex: string, opacity: number): string {\r\n const sanitizedHex = hex?.replace(/^#/, '');\r\n\r\n const [radius, g, b] = [0, 2, 4].map((start) =>\r\n parseInt(sanitizedHex.slice(start, start + 2), 16)\r\n );\r\n\r\n return `rgba(${radius}, ${g}, ${b}, ${opacity})`;\r\n }\r\n}","<div #captchaContainer class=\"captcha-container\">\r\n <canvas #canvas class=\"canvas\"></canvas>\r\n <canvas #block class=\"block\" [style.left.px]=\"blockOffsetX\"></canvas>\r\n <div class=\"slider-container\" [class.active]=\"isSliderDragging\" [class.success]=\"verificationStatus === 'success'\"\r\n [class.fail]=\"verificationStatus === 'fail'\">\r\n <div class=\"slider-mask\" [style.width.px]=\"maskWidth\">\r\n <div #slider class=\"slider\" [style.left.px]=\"sliderOffsetX\">\r\n <ng-container *ngIf=\"verificationStatus === 'none'\">\r\n <ng-container *ngIf=\"sliderContent; else defaultTemplate\">\r\n <ng-container *ngIf=\"isTemplate(sliderContent); else sliderContentStringTemplate\">\r\n <ng-container *ngTemplateOutlet=\"sliderContent\"></ng-container>\r\n </ng-container>\r\n <ng-template #sliderContentStringTemplate>\r\n {{ sliderContent }}\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"verificationStatus === 'success'\">\r\n <ng-container *ngIf=\"successContent; else defaultTemplate\">\r\n <ng-container *ngIf=\"isTemplate(successContent); else successContentStringTemplate\">\r\n <ng-container *ngTemplateOutlet=\"successContent\"></ng-container>\r\n </ng-container>\r\n <ng-template #successContentStringTemplate>\r\n {{ successContent }}\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"verificationStatus === 'fail'\">\r\n <ng-container *ngIf=\"failContent; else defaultTemplate\">\r\n <ng-container *ngIf=\"isTemplate(failContent); else failContentStringTemplate\">\r\n <ng-container *ngTemplateOutlet=\"failContent\"></ng-container>\r\n </ng-container>\r\n <ng-template #failContentStringTemplate>\r\n {{ sliderContent }}\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #defaultTemplate>\r\n <span class=\"slider-icon\"></span>\r\n </ng-template>\r\n </div>\r\n </div>\r\n <span class=\"slider-text\" *ngIf=\"!isVerifying\">{{ sliderText }}</span>\r\n </div>\r\n <i *ngIf=\"sliderConfig.allowRefresh\" class=\"refresh-icon\" (click)=\"refresh()\"></i>\r\n <div class=\"disable-wrapper\" *ngIf=\"isDisabled || isVerifying\"></div>\r\n</div>","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { NgxSliderRecaptchaComponent } from './components/ngx-slider-recaptcha.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DefaultNgxSliderRecaptchaVerificationService } from './services/default-ngx-slider-recaptcha-verification.service';\r\nimport { NGX_SLIDER_RECAPTCHA_VERIFICATION_SERVICE_TOKEN } from './tokens/ngx-slider-recaptcha-verification-service.token';\r\nimport { NGX_SLIDER_RECAPTCHA_IMAGE_SERVICE_TOKEN } from './tokens/ngx-slider-recaptcha-image-service.token';\r\nimport { DefaultNgxSliderRecaptchaImageService } from './services/default-ngx-slider-recaptcha-image.service';\r\nimport { NGX_SLIDER_RECAPTCHA_CONFIG_TOKEN } from './tokens/ngx-slider-recaptcha-config.token';\r\nimport { NgxSliderRecaptchaOptions } from './config/ngx-slider-recaptcha-options';\r\nimport { DEFAULT_SLIDER_RECAPTCHA_CONFIG } from './config/default-ngx-slider-recaptcha-config';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n NgxSliderRecaptchaComponent\r\n ],\r\n exports: [\r\n NgxSliderRecaptchaComponent\r\n ],\r\n providers: [\r\n {\r\n provide: NGX_SLIDER_RECAPTCHA_CONFIG_TOKEN,\r\n useValue: DEFAULT_SLIDER_RECAPTCHA_CONFIG\r\n },\r\n {\r\n provide: NGX_SLIDER_RECAPTCHA_VERIFICATION_SERVICE_TOKEN,\r\n useClass: DefaultNgxSliderRecaptchaVerificationService\r\n },\r\n {\r\n provide: NGX_SLIDER_RECAPTCHA_IMAGE_SERVICE_TOKEN,\r\n useClass: DefaultNgxSliderRecaptchaImageService\r\n }\r\n ]\r\n})\r\nexport class NgxSliderRecaptchaModule {\r\n static forRoot(\r\n options: NgxSliderRecaptchaOptions = {}\r\n ): ModuleWithProviders<NgxSliderRecaptchaModule> {\r\n const {\r\n sliderConfig = DEFAULT_SLIDER_RECAPTCHA_CONFIG,\r\n verificationService = DefaultNgxSliderRecaptchaVerificationService,\r\n imageRetrievalService = DefaultNgxSliderRecaptchaImageService\r\n } = options;\r\n return {\r\n ngModule: NgxSliderRecaptchaModule,\r\n providers: [\r\n {\r\n provide: NGX_SLIDER_RECAPTCHA_CONFIG_TOKEN,\r\n useValue: sliderConfig\r\n },\r\n {\r\n provide: NGX_SLIDER_RECAPTCHA_VERIFICATION_SERVICE_TOKEN,\r\n useClass: verificationService\r\n },\r\n {\r\n provide: NGX_SLIDER_RECAPTCHA_IMAGE_SERVICE_TOKEN,\r\n useClass: imageRetrievalService\r\n }\r\n ]\r\n };\r\n }\r\n}\r\n","/*\r\n * Public API Surface of ngx-slider-recaptcha\r\n */\r\n\r\nexport * from './lib/config/ngx-slider-recaptcha-config'\r\nexport * from './lib/config/default-ngx-slider-recaptcha-config'\r\nexport * from './lib/config/ngx-slider-recaptcha-options'\r\n\r\nexport * from './lib/core/ngx-slider-recaptcha-image-service.interface';\r\nexport * from './lib/core/ngx-slider-recaptcha-verification-service.interface';\r\nexport * from './lib/core/ngx-slider-recaptcha-verification-response.interface'\r\n\r\nexport * from './lib/services/default-ngx-slider-recaptcha-image.service'\r\nexport * from './lib/services/default-ngx-slider-recaptcha-verification.service'\r\n\r\nexport * from './lib/tokens/ngx-slider-recaptcha-image-service.token'\r\nexport * from './lib/tokens/ngx-slider-recaptcha-config.token'\r\nexport * from './lib/tokens/ngx-slider-recaptcha-verification-service.token'\r\n\r\nexport * from './lib/components/ngx-slider-recaptcha.component';\r\nexport * from './lib/ngx-slider-recaptcha.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}