import { AfterViewInit, ElementRef, EventEmitter, OnDestroy } from '@angular/core'; import { QrScannerMetadata, QrScannerState } from './types'; import * as i0 from "@angular/core"; /** * val-qr-scanner * * Organism: scanner de códigos QR por cámara (`@zxing/browser` + * `@zxing/library`). Emite el texto decodificado por `(scanned)`. * * Maneja: permiso de cámara denegado (`denied`), ausencia de cámara * (`no-camera`), selector cuando hay varias cámaras, y botón start/stop. Hace * cleanup del stream en `ngOnDestroy`. i18n auto-registrado (namespace * `QrScanner`). * * Object-first (`@Input() props`) + un único `@Output() scanned`. * * @example * ```html * * ``` */ export declare class QrScannerComponent implements AfterViewInit, OnDestroy { props: QrScannerMetadata; /** Emite el texto decodificado del QR. */ scanned: EventEmitter; videoRef: ElementRef; private i18n; readonly state: import("@angular/core").WritableSignal; readonly devices: import("@angular/core").WritableSignal; readonly activeDeviceId: import("@angular/core").WritableSignal; private reader; private controls; private lastValue; private lastAt; private viewReady; /** La cámara activa declara soporte de linterna. */ readonly torchAvailable: import("@angular/core").WritableSignal; readonly torchOn: import("@angular/core").WritableSignal; /** Mensaje puntual del intento de leer desde una foto. */ readonly imageError: import("@angular/core").WritableSignal; constructor(); ngAfterViewInit(): void; /** * Arranca sola SOLO si el permiso ya está concedido. * * El aviso del navegador no lo podemos evitar: quién lo muestra y cuándo lo * decide el navegador, no la página. Lo que sí evitamos es dispararlo por * sorpresa al montar. Si el permiso todavía no está resuelto, se espera a que * la persona toque el botón: así el aviso aparece cuando lo pidió y no de la * nada, que es cuando la gente lo rechaza sin leer. * * `navigator.permissions` con 'camera' no está en todos los navegadores * (Firefox no lo soporta); ante la duda se arranca igual, que es el * comportamiento anterior. */ private startIfAllowed; ngOnDestroy(): void; t(key: string): string; /** Sobre superficie oscura los botones van claros, o no se ven. */ buttonColor(): string; stateMessage(): string; deviceLabel(d: MediaDeviceInfo): string; start(deviceId?: string): Promise; /** * Pregunta a la pista de video si sabe encender la luz. * * Se consulta DESPUÉS de arrancar porque las capabilities solo existen con la * cámara ya abierta. Si no hay soporte, el botón no se muestra: ofrecer una * linterna que no enciende es prometer algo que no pasa, el mismo error del * indicador de arrastre del menú. */ private detectTorch; /** Enciende o apaga la luz de la cámara. */ toggleTorch(): Promise; /** * Lee el código desde una foto que elige la persona. * * Salida para cuando la cámara no está disponible, el permiso quedó bloqueado * en la configuración del sitio, o el código llegó por mensaje. */ onImagePicked(event: Event): Promise; stop(): void; onSelectDevice(deviceId: string): Promise; private handleResult; private handleStartError; /** Detiene el decode + libera el stream de la cámara. */ private teardown; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; }