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;
}