import { AfterViewInit, AfterViewChecked, ElementRef, EventEmitter, OnChanges, OnDestroy, OnInit, QueryList, SimpleChanges } from '@angular/core';
import { PoTimerBaseComponent } from './po-timer-base.component';
/** Tipo dos eixos das colunas. */
type PoTimerColumnType = 'hour' | 'minute' | 'second' | 'period';
/**
* @docsPrivate
*
* @docsExtends PoTimerBaseComponent
*
* @example
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*/
export declare class PoTimerComponent extends PoTimerBaseComponent implements OnInit, OnChanges, AfterViewInit, AfterViewChecked, OnDestroy {
hourCells: QueryList;
minuteCells: QueryList;
secondCells: QueryList;
periodCells: QueryList;
hourItemsRefs: QueryList>;
minuteItemsRefs: QueryList>;
secondItemsRefs: QueryList>;
displayHours: Array;
displayMinutes: Array;
displaySeconds: Array;
boundaryTab: EventEmitter<{
direction: "forward" | "backward";
event: KeyboardEvent;
column: PoTimerColumnType;
}>;
private readonly changeDetector;
private readonly ngZone;
private readonly domDocument;
private hasViewInitialized;
private currentRenderedSize;
/** ID do requestAnimationFrame pendente para throttle do wheel. */
private wheelRafId;
/**
* Offset atual (em px) de cada coluna, mantido em JS.
* O container de itens e posicionado via translateY(-offset).
* O offset e mantido sempre no intervalo [sectionHeight, 2*sectionHeight)
* para que o salto de reposicionamento seja sempre invisivel (as secoes
* sao identicas por serem copias do mesmo array fonte).
*/
private columnOffsets;
/**
* Indice no displayArray do item focado em cada coluna.
* Usado para redirecionar o foco ao botao correto ao entrar na coluna via Tab.
*/
private focusedDisplayIndex;
activeDescendantIds: Record;
disabledMinuteCache: Set;
disabledSecondCache: Set;
constructor();
ngOnInit(): void;
ngOnChanges(changes: SimpleChanges): void;
ngAfterViewInit(): void;
ngAfterViewChecked(): void;
ngOnDestroy(): void;
onSelectHour(hour: number): void;
onSelectMinute(minute: number): void;
onSelectSecond(second: number): void;
onSelectPeriod(newPeriod: string): void;
onCellFocus(type: PoTimerColumnType, displayIndex: number): void;
getCellTabIndex(type: PoTimerColumnType, displayIndex: number): number;
onCellKeydown(event: KeyboardEvent, type: PoTimerColumnType): void;
onPeriodKeydown(event: KeyboardEvent): void;
onColumnWheel(event: WheelEvent, type: PoTimerColumnType): void;
writeValue(time: string): void;
trackByIndex(index: number, _item: number): number;
focusFirstVisibleCell(): void;
focusLastVisibleCell(): void;
initAllColumnOffsets(): void;
/**
* Posiciona o container de itens na secao do meio do array repetido,
* alinhando o item selecionado ao topo da janela visivel.
*
* Estrutura do array repetido (exemplo sourceLength = 24, repeats = 3):
* [secao 0: itens 0-23] [secao 1: itens 0-23] [secao 2: itens 0-23]
* ^--- usuario fica aqui (offset em [sH, 2*sH))
*
* Usar a secao do meio garante que qualquer deslize para cima ou para baixo
* tem espaco antes de precisar fazer o wrap.
*/
private initColumnOffset;
private getFirstAvailableIndexByType;
private getReferenceHourForConstraints;
private getReferenceMinuteForConstraints;
private isValueDisabledByType;
/**
* Desloca a coluna pelo numero de passos indicado e aplica o wrap modular.
*
* O wrap mantem o offset em [sectionHeight, 2*sectionHeight), aproveitando
* o fato de que as secoes sao identicas — o salto e impercetivel visualmente.
*/
private scrollColumnByStep;
private wrapOffset;
private getCellStep;
/**
* Foca o botao nativo (