{"version":3,"file":"bravobit-bb-foundation-recaptcha.mjs","sources":["../../../projects/bb-foundation/recaptcha/src/lib/recaptcha.interface.ts","../../../projects/bb-foundation/recaptcha/src/lib/recaptcha-loader.service.ts","../../../projects/bb-foundation/recaptcha/src/lib/recaptcha/recaptcha.component.ts","../../../projects/bb-foundation/recaptcha/src/lib/recaptcha/recaptcha.component.html","../../../projects/bb-foundation/recaptcha/src/lib/recaptcha.config.ts","../../../projects/bb-foundation/recaptcha/src/lib/recaptcha.module.ts","../../../projects/bb-foundation/recaptcha/src/bravobit-bb-foundation-recaptcha.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\n\nexport const RECAPTCHA_CONFIG = new InjectionToken<RecaptchaConfig>('bb-recaptcha-config');\n\nexport interface RecaptchaConfig {\n    baseUrl?: string;\n    nonce?: string;\n    siteKey?: string;\n    theme?: ReCaptchaV2.Theme;\n    type?: ReCaptchaV2.Type;\n    size?: ReCaptchaV2.Size;\n    badge?: ReCaptchaV2.Badge;\n}\n\nexport type NeverUndefined<T> = T extends undefined ? never : T;\nexport type RecaptchaErrorParameters = Parameters<NeverUndefined<ReCaptchaV2.Parameters['error-callback']>>;\n","import {inject, Injectable, LOCALE_ID, RendererFactory2, DOCUMENT} from '@angular/core';\nimport {Localize} from '@bravobit/bb-foundation/localize';\nimport {RECAPTCHA_CONFIG} from './recaptcha.interface';\nimport {Platform} from '@angular/cdk/platform';\nimport {BehaviorSubject} from 'rxjs';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class RecaptchaLoader {\n\n    // Dependencies.\n    private readonly _platform = inject(Platform);\n    private readonly _rendererFactory = inject(RendererFactory2);\n    private readonly _config = inject(RECAPTCHA_CONFIG);\n    private readonly _localize = inject(Localize, {optional: true});\n    private readonly _localeId = inject(LOCALE_ID, {optional: true});\n    private readonly _document = inject(DOCUMENT, {optional: true});\n    private readonly _renderer = this._rendererFactory.createRenderer(null, null);\n\n    // Ready state.\n    readonly ready$: BehaviorSubject<ReCaptchaV2.ReCaptcha | null> | null = null;\n\n    // Data.\n    private readonly _windowLoadFn: string = 'bbRecaptchaLoad';\n\n    constructor() {\n        // Set the ready subject if not exists.\n        if (this.ready$) {\n            return;\n        }\n        this.ready$ = new BehaviorSubject<ReCaptchaV2.ReCaptcha | null>(null);\n\n        // Create the script.\n        this.createScript(captcha => this.ready$.next(captcha));\n    }\n\n    private createScript(callback: (grecaptcha: ReCaptchaV2.ReCaptcha) => void) {\n        // Validate we are on a browser.\n        if (!this._platform.isBrowser) {\n            return;\n        }\n\n        // Create the script.\n        const script = this._renderer.createElement('script');\n\n        // Set properties on the script.\n        this._renderer.setProperty(script, 'src', this.getUrl());\n        this._renderer.setProperty(script, 'async', true);\n        this._renderer.setProperty(script, 'defer', true);\n\n        // Set the nonce.\n        if (this._config.nonce) {\n            this._renderer.setAttribute(script, 'nonce', this._config.nonce);\n        }\n\n        // Set the loading function.\n        if (this._platform.isBrowser) {\n            window[this._windowLoadFn] = () => callback(grecaptcha);\n        }\n\n        // Append the script tag.\n        this._renderer.appendChild(this._document?.body, script);\n    }\n\n    private getUrl() {\n        const baseUrl = this._config?.baseUrl ?? 'https://www.google.com/recaptcha/api.js';\n        return [baseUrl, this.getQueryParams()]\n            .filter(item => !!item)\n            .join('?');\n    }\n\n    private getQueryParams() {\n        const localeId = this._localize?.current?.id ?? this._localeId ?? null;\n        const params = {\n            render: 'explicit',\n            onload: this._windowLoadFn ?? null,\n            hl: localeId\n        };\n\n        return Object.keys(params)\n            .map(key => ({key, value: params[key]}))\n            .filter(item => !!item.value)\n            .map(item => `${item?.key}=${item?.value}`)\n            .join('&');\n    }\n\n}\n","import {\n    AfterViewInit,\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    ElementRef,\n    EventEmitter,\n    forwardRef,\n    HostBinding,\n    inject,\n    Input,\n    NgZone,\n    OnDestroy,\n    Output,\n    Renderer2,\n    ViewEncapsulation\n} from '@angular/core';\nimport {RECAPTCHA_CONFIG, RecaptchaConfig, RecaptchaErrorParameters} from '../recaptcha.interface';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {LOCALIZE_ID} from '@bravobit/bb-foundation/localize';\nimport {RecaptchaLoader} from '../recaptcha-loader.service';\nimport {Platform} from '@angular/cdk/platform';\nimport {Observable, Subscription} from 'rxjs';\n\nlet nextUniqueId = 0;\n\n@Component({\n    selector: 'bb-recaptcha',\n    templateUrl: './recaptcha.component.html',\n    styleUrls: ['./recaptcha.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    exportAs: 'bbRecaptcha',\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => RecaptchaComponent),\n            multi: true\n        }\n    ],\n    host: {\n        'class': 'bb-recaptcha',\n        '[class.grouped]': 'grouped'\n    }\n})\nexport class RecaptchaComponent implements ControlValueAccessor, AfterViewInit, OnDestroy {\n\n    // Dependencies.\n    private readonly _zone: NgZone = inject(NgZone);\n    private readonly _platform: Platform = inject(Platform);\n    private readonly _renderer: Renderer2 = inject(Renderer2);\n    private readonly _elementRef: ElementRef = inject(ElementRef);\n    private readonly _loader: RecaptchaLoader = inject(RecaptchaLoader);\n    private readonly _localizeId: Observable<string> = inject(LOCALIZE_ID);\n    private readonly _config?: RecaptchaConfig = inject(RECAPTCHA_CONFIG, {optional: true});\n\n    // Host bindings.\n    @HostBinding('attr.id') @Input() id: string = `bb-recaptcha-${nextUniqueId++}`;\n\n    // Inputs.\n    @Input() siteKey: string | null = null;\n    @Input() tabIndex: number | null = null;\n    @Input() type: ReCaptchaV2.Type | null = null;\n    @Input() size: ReCaptchaV2.Size | null = null;\n    @Input() theme: ReCaptchaV2.Theme | null = null;\n    @Input() badge: ReCaptchaV2.Badge | null = null;\n    @Input() errorMode: 'handled' | 'default' = 'default';\n    @Input({transform: booleanAttribute}) grouped: boolean = false;\n\n    // Outputs.\n    @Output() resolved = new EventEmitter<string>();\n    @Output() error = new EventEmitter<RecaptchaErrorParameters>();\n\n    // Data.\n    private _widgetId: number | null = null;\n    private _grecaptcha: ReCaptchaV2.ReCaptcha | null = null;\n    private _executeRequested: boolean = false;\n\n    // Form methods.\n    private _onChange: (value: string) => void | null = null;\n    private _onTouched: () => void | null = null;\n\n    // Subscriptions.\n    private _subscriptions = new Subscription();\n\n    constructor() {\n        this.initializeProperties();\n    }\n\n    ngAfterViewInit() {\n        this.handleOnLoad();\n        this.handleLocaleChanges();\n    }\n\n    ngOnDestroy() {\n        // Reset the captcha.\n        this.resetCaptchaElement();\n\n        // Unsubscribe of ready data.\n        this._subscriptions?.unsubscribe();\n    }\n\n    execute() {\n        // Check if the captcha is invisible.\n        if (this.size !== 'invisible') {\n            return;\n        }\n\n        // Check if the widget exists else return.\n        if (this._widgetId == null) {\n            this._executeRequested = true;\n            return;\n        }\n\n        // Execute the captcha.\n        this._grecaptcha.execute(this._widgetId).then(_ => _);\n    }\n\n    reset() {\n        if (this._widgetId == null) {\n            return;\n        }\n\n        if (this._grecaptcha.getResponse(this._widgetId)) {\n            this.resolved.emit(null);\n        }\n\n        this.resetCaptchaElement();\n    }\n\n    writeValue(value: string) {\n        if (value) {\n            return;\n        }\n\n        this.reset();\n    }\n\n    registerOnChange(fn: (value: string) => void) {\n        this._onChange = fn;\n    }\n\n    registerOnTouched(fn: () => void) {\n        this._onTouched = fn;\n    }\n\n    onResolve(event: string) {\n        // Emit the value.\n        this.resolved.emit(event);\n\n        // Call the form functions.\n        this._onChange?.(event);\n        this._onTouched?.();\n    }\n\n    private renderCaptchaElement() {\n        const parameters: ReCaptchaV2.Parameters = {\n            badge: this.badge,\n            sitekey: this.siteKey,\n            size: this.size,\n            tabindex: this.tabIndex,\n            theme: this.theme,\n            type: this.type,\n            'callback': (response: string) => this._zone.run(() => this.onResolve(response)),\n            'expired-callback': () => this._zone.run(() => this.onResolve(null))\n        };\n\n        if (this.errorMode === 'handled') {\n            parameters['error-callback'] = (...args: RecaptchaErrorParameters) => {\n                return this._zone.run(() => this.error.emit(args));\n            };\n        }\n\n        this._widgetId = this._grecaptcha.render(this._elementRef.nativeElement, parameters);\n\n        if (this._executeRequested) {\n            this._executeRequested = false;\n            this.execute();\n        }\n    }\n\n    private resetCaptchaElement() {\n        if (this._widgetId == null) {\n            return;\n        }\n\n        this._zone.runOutsideAngular(() => this._grecaptcha.reset(this._widgetId));\n    }\n\n    private initializeProperties() {\n        this.siteKey = this.siteKey ?? this._config?.siteKey;\n        this.theme = this.theme ?? this._config?.theme;\n        this.size = this.size ?? this._config?.size;\n        this.type = this.type ?? this._config?.type;\n        this.badge = this.badge ?? this._config?.badge;\n    }\n\n    private handleOnLoad() {\n        const subscription = this._loader.ready$.subscribe((grecaptcha: ReCaptchaV2.ReCaptcha) => {\n            if (grecaptcha == null || !(grecaptcha.render instanceof Function)) {\n                return;\n            }\n\n            this._grecaptcha = grecaptcha;\n            this.renderCaptchaElement();\n        });\n\n        this._subscriptions.add(subscription);\n    }\n\n    private handleLocaleChanges() {\n        const subscription = this._localizeId.subscribe(locale => this.onLocaleChanged(locale));\n        this._subscriptions.add(subscription);\n    }\n\n    private onLocaleChanged(locale: string) {\n        const element = this._elementRef?.nativeElement ?? null;\n        if (!element || !this._platform.isBrowser) {\n            return;\n        }\n\n        const frame = element?.querySelector('iframe');\n        if (!frame) {\n            return;\n        }\n\n        const src = frame.getAttribute('src');\n        const currentLanguageId = src.match(/hl=(.*?)&/).pop();\n        if (currentLanguageId === locale) {\n            return;\n        }\n\n        const newSrc = src.replace(/hl=(.*?)&/, `hl=${locale}&`);\n        this._renderer.setAttribute(frame, 'src', newSrc);\n    }\n\n}\n","","import {EnvironmentProviders, makeEnvironmentProviders} from '@angular/core';\nimport {RECAPTCHA_CONFIG, RecaptchaConfig} from './recaptcha.interface';\n\nexport function provideRecaptchaConfig(config: RecaptchaConfig): EnvironmentProviders {\n    return makeEnvironmentProviders([\n        {provide: RECAPTCHA_CONFIG, useValue: config}\n    ]);\n}\n","import {RecaptchaComponent} from './recaptcha/recaptcha.component';\nimport {ModuleWithProviders, NgModule} from '@angular/core';\nimport {RecaptchaLoader} from './recaptcha-loader.service';\nimport {provideRecaptchaConfig} from './recaptcha.config';\nimport {RecaptchaConfig} from './recaptcha.interface';\n\n@NgModule({\n    imports: [RecaptchaComponent],\n    exports: [RecaptchaComponent]\n})\nexport class RecaptchaModule {\n\n    static forRoot(config?: RecaptchaConfig): ModuleWithProviders<RecaptchaModule> {\n        return {\n            ngModule: RecaptchaModule,\n            providers: [\n                provideRecaptchaConfig(config),\n                RecaptchaLoader\n            ]\n        };\n    }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}