import type { EventEmitter } from '../../stencil-public-runtime'; import { type FormValidationState } from '../../shared/utils/form'; import { type FormValidationChangeDetail } from '../../shared/utils/validator'; import type { SliderDensity, SliderRangeValue, SliderStep, SliderValidator } from './slider.types'; /** * O `br-slider` seleciona um valor ou uma faixa de valores numéricos em uma trilha graduada. * * Use `min`, `max`, `step` e `value` para definir os limites e o valor. Para selecionar um intervalo (faixa com duas alças), use `range` e `range-value`. * * ```html * * * ``` * * ### Quando usar * * - Ajuste gradual de quantidades contínuas (volume, brilho, zoom). * - Filtros de intervalos numéricos ou de preços. * * ### Quando evitar * * - Entrada numérica exata arbitrária: use `br-input` com `type="number"`. * - Poucas escolhas fixas discretas: use `br-radio` ou `br-select`. * * Consulte as [diretrizes de design do GovBR](https://www.gov.br/ds/components/slider?tab=designer). * * @category Formulários, Seleção * @status stable * @slot ref-start - Conteúdo exibido como referência inicial abaixo da trilha. * @slot ref-end - Conteúdo exibido como referência final abaixo da trilha. * @slot feedback - Mensagem de validação, normalmente um `br-message`. * @slot thumb-icon - Ícone customizado na alça de controle em modo simples. * @slot thumb-start-icon - Ícone customizado na alça inicial em modo composto. * @slot thumb-end-icon - Ícone customizado na alça final em modo composto. * * @part base - Contêiner principal do slider. * @part layout - Contêiner de layout do slider. * @part body - Área que agrupa trilha e referências. * @part track - Área interativa da trilha. * @part track-visual - Trilha visual do slider. * @part tick-labels - Contêiner das etiquetas das marcações. * @part tick-label - Etiqueta de uma marcação intermediária. * @part filled-track - Trecho preenchido da trilha. * @part value-label - Etiqueta com o valor da alça. * @part value-label-arrow - Seta da etiqueta de valor. * @part thumb - Alça de controle do slider. * @part thumb-start - Alça inicial do slider. * @part thumb-end - Alça final do slider em modo composto. * @part references - Contêiner das referências inicial e final. * @part reference-start - Referência inicial. * @part reference-end - Referência final. * @part reference-bound - Valor fixo de limite renderizado por `show-bounds`. * @part input-wrapper - Contêiner do campo numérico. * @part input - Campo numérico sincronizado com o slider. * @part feedback - Contêiner da mensagem de validação. * @part steps - Contêiner das marcações de passos customizados. * @part step - Botão indicador de passo customizado individual. */ export declare class Slider { elementInternals: ElementInternals; formDisabledCallback(disabled: boolean): void; formResetCallback(): void; formStateRestoreCallback(state: string | File | FormData | null): void; el: HTMLElement; /** * Indica se alguma alça está sendo arrastada. */ private dragging; private formDisabled; /** * Indica se o slot `ref-end` possui conteúdo. */ private hasRefEnd; /** * Indica se o slot `ref-start` possui conteúdo. */ private hasRefStart; private hasFeedbackSlot; private hasThumbIconSlot; private hasThumbStartIconSlot; private hasThumbEndIconSlot; private customValidationMessage; private validatorMessage; private isValidating; /** * Identificador único. * Caso não seja fornecido, um ID gerado automaticamente será usado. */ readonly customId: string; /** * Nome do campo, utilizado em formulários nativos (`
`). */ readonly name: string; /** * Texto descritivo associado ao slider para acessibilidade. */ readonly label: string; /** * Valor mínimo aceito pelo slider. Valores inválidos usam `0`. */ readonly min: number; /** * Valor máximo aceito pelo slider. Deve ser maior que `min`; valores inválidos usam `100` e relações inválidas usam `min + 100`. */ readonly max: number; /** * Incremento aplicado a cada passo. Deve ser maior que `0`; valores inválidos usam `1`. */ readonly step: number; /** * Regra síncrona ou assíncrona aplicada ao número ou intervalo selecionado. * No modo `range`, recebe um objeto com `start` e `end`. * * @example * ```js * const slider = document.querySelector('br-slider'); * slider.validator = (value) => { * const minimum = typeof value === 'number' ? value : value.start; * return minimum >= 18 ? null : 'O valor inicial deve ser pelo menos 18'; * }; * ``` */ readonly validator?: SliderValidator; /** * Valor atual do slider (alça inicial no modo composto). Valores não finitos usam o limite mínimo; * valores fora do intervalo são limitados. */ value: number; /** * Valor da alça final no modo composto (`range`). * Quando não fornecido em modo composto, assume o valor de `max`. Valores não finitos usam `max`, * valores fora do intervalo são limitados. * @deprecated Use `rangeValue`. */ valueEnd: number; /** * Valor estruturado das duas alças no modo `range`. * Deve conter `start` e `end` finitos; valores inválidos mantêm o último valor efetivo. * Passe o objeto por property binding. * * @example * ```js * const slider = document.querySelector('br-slider'); * slider.range = true; * slider.rangeValue = { start: 20, end: 80 }; * ``` */ rangeValue?: SliderRangeValue; /** * Desativa o slider, tornando-o não interativo. */ readonly disabled: boolean; /** * Exibe o slider na orientação vertical. * @deprecated Use `orientation`. */ readonly vertical: boolean; /** Orientação padrão. Quando informada, tem precedência sobre `vertical`; valores inválidos usam `horizontal`. */ readonly orientation?: 'horizontal' | 'vertical'; /** * Ativa o modo composto com duas alças para seleção de faixa. */ readonly range: boolean; /** * Exibe etiqueta com o valor atual acima da alça (horizontal) ou à esquerda (vertical). * Ignorado quando `show-input` está ativo. */ readonly showLabel: boolean; /** * Exibe um `br-input` numérico sincronizado com a alça. * No modo `range`, exibe um campo para o início e outro para o fim; na * orientação horizontal ficam nas extremidades esquerda e direita, e na * vertical ficam acima e abaixo da trilha. Quando ativo, a etiqueta de valor * não é exibida. */ readonly showInput: boolean; /** * Exibe gradações na trilha como pequenos espaços que indicam os steps disponíveis, * forçando a alça de controle a saltar entre os valores predefinidos e * impossibilitando a seleção de valores aleatórios. */ readonly showTicks: boolean; /** Exibe os valores das marcações derivadas de `min`, `max` e `step`. */ readonly showTickLabels: boolean; /** * Exibe os limites nas referências inicial e final: `min` no início e `max` no fim * (limites fixos), tanto em modo simples quanto em modo composto (`range`). O valor * selecionado por cada alça é exibido na etiqueta (`show-label`), não nas referências. * Quando ativo, sobrescreve o conteúdo dos slots `ref-start` e `ref-end`. */ readonly showBounds: boolean; /** * Densidade visual do componente. * Altera exclusivamente as dimensões da alça de controle (thumb). * Valores aceitos: 'small' (16px), 'medium' (20px - padrão), 'large' (24px). * 'high' e 'low' são aceitos como sinônimos de 'small' e 'large'. */ readonly density?: SliderDensity; /** * Nome do ícone a ser exibido no interior da alça de controle (thumb). * No modo `range`, aplica-se a ambas as alças caso `thumbStartIcon` ou `thumbEndIcon` não sejam especificados. * Exemplo: 'fa-solid:arrows-left-right', 'fa-solid:circle'. */ readonly thumbIcon?: string; /** * Nome do ícone da alça inicial (no modo `range`, alça à esquerda/inferior). */ readonly thumbStartIcon?: string; /** * Nome do ícone da alça final (no modo `range`, alça à direita/superior). */ readonly thumbEndIcon?: string; /** * Habilita gradiente de cores na trilha e sincroniza dinamicamente a cor da alça (thumb) * e da etiqueta de valor (tooltip) com a cor correspondente à posição atual. * Pode ser um booleano (usa gradiente padrão verde -> amarelo -> vermelho) * ou uma string com cores/gradiente customizado (ex.: '#168821, #ffcd07, #e52207' ou 'linear-gradient(...)'). */ readonly gradient?: string | boolean; /** * Lista de passos customizados para o slider. * Cada passo pode definir `value`, `label` (texto exibido no tooltip e/ou abaixo da trilha) * e `icon` (nome do ícone exibido abaixo da marcação do passo). * Aceita array de objetos `SliderStep[]`, array de strings `string[]`, ou string JSON. * * @example * ```html * * ``` * @example * ```js * const slider = document.querySelector('br-slider'); * slider.steps = [ * { value: 1, label: 'Péssimo', icon: 'fa-solid:face-frown' }, * { value: 5, label: 'Excelente', icon: 'fa-solid:face-laugh' }, * ]; * ``` */ readonly steps?: SliderStep[] | string; private get effectiveMin(); private get effectiveMax(); private get effectiveStep(); private get effectiveValue(); private get effectiveValueEnd(); onValueChange(newValue: number): void; onValueEndChange(newValue: number): void; onRangeValueChange(newValue?: SliderRangeValue): void; /** * Disparado após alteração do valor da alça inicial. * @deprecated Use o evento nativo `input`. */ brDidChangeValue: EventEmitter; /** * Disparado após alteração do valor da alça final (modo composto). * @deprecated Use o evento nativo `input` e leia `event.target.rangeValue`. */ brDidChangeValueEnd: EventEmitter; /** Emitido ao iniciar e concluir a validação customizada. */ brSliderValidationChange: EventEmitter; private trackEl?; private thumbStartEl?; private thumbEndEl?; private valueLabelStartEl?; private valueLabelEndEl?; private arrowStartEl?; private arrowEndEl?; private cleanupLabelStart?; private cleanupLabelEnd?; private inputStartEl?; private inputEndEl?; private inputEditing; private draggingThumb; private tickValuesCacheKey; private tickValuesCache; private static readonly MAX_VISUAL_TICKS; private initialValue; private initialValueEnd; private validationRunId; private dragRect; private readonly pointerBatch; componentWillLoad(): void; componentDidLoad(): void; componentDidUpdate(): void; disconnectedCallback(): void; /** Retorna se o slider atende às constraints configuradas. */ checkValidity(): Promise; /** Valida e solicita ao navegador a apresentação do erro atual. */ reportValidity(): Promise; /** Define ou limpa uma mensagem de validade customizada. */ setCustomValidity(message: string): Promise; /** Executa o validator do slider e retorna se o valor atual é válido. */ validate(): Promise; /** Retorna um snapshot serializável da Constraint Validation API. */ getValidationState(): Promise; private get effectiveVertical(); private setupLabelAutoUpdate; private positionLabels; private positionSingleLabel; private getFormValue; private syncRangeValue; private get normalizedSteps(); private get hasGradient(); private get gradientStops(); private getGradientColorAt; private getGradientCss; private clamp; private snapToStep; private percent; private percentOf; private applyGradientToFilledStyle; private getFilledStyle; private getTrackMaskStyle; private getTickValues; private getValueFromX; private getValueFromY; private nearerThumb; private applyUpdate; private readonly handlePointerDown; private readonly handlePointerMove; private readonly handlePointerUp; private getInputValueState; private updateValueFromInput; private readonly handleInputInput; private readonly handleInputChange; private calculateNextStepValue; private calculateNextSliderValue; handleKeyDown(event: KeyboardEvent): void; private getCssClassMap; private shouldShowValueLabel; private isDisabled; private updateValidity; private getThumbStyle; private setValueLabelElement; private setValueLabelArrowElement; private setThumbElement; private renderValueLabel; private renderThumb; private renderReferences; private setInputElement; private renderInput; private readonly handleStepClick; private renderSteps; private renderTrack; private renderTickLabels; render(): any; }