/** * Utilitários de datas para os componentes GovBR-DS. * * Funções puramente nativas (sem dependências externas) para: * - Validação de strings ISO * - Parsing de entradas de data em múltiplos formatos e localidades * - Formatação de datas para exibição usando `Intl.DateTimeFormat` * - Extração e clamp de valores ISO dentro de intervalos * * Todos os formatos ISO utilizados seguem o padrão `YYYY-MM-DD`. */ /** * Verifica se uma string está no formato ISO `YYYY-MM-DD` e representa * uma data válida no calendário gregoriano. * * @param dateStr String a ser validada. * @returns `true` quando a string é uma data ISO válida. * * @example * isValidISODate('2024-05-30') // true * isValidISODate('2024-02-30') // false (30/fev não existe) * isValidISODate('30/05/2024') // false (formato incorreto) */ export declare function isValidISODate(dateStr: string): boolean; /** * Interpreta uma string de data em múltiplos formatos e retorna um objeto `Date`. * * Formatos suportados (em ordem de tentativa): * 1. ISO `YYYY-MM-DD` * 2. Texto com nome de mês: `DD MMM YYYY`, `MMM DD YYYY`, `MMM DD, YYYY` * 3. Numérico: `DD/MM/YYYY`, `MM/DD/YYYY`, `DD-MM-YYYY`, `DD.MM.YYYY`, etc. * * A localidade é utilizada como dica para desambiguar formatos numéricos * (`en-US` presume `MM/DD`; demais presumem `DD/MM`) e para identificar * nomes de meses em outros idiomas. * * @param input String de data de entrada. * @param locale Código BCP 47 de localidade (padrão `'pt-BR'`). * @returns Objeto `Date` sem componente de horário, ou `null` quando a entrada * é inválida, vazia ou não reconhecida. * * @example * parseDateInput('2024-05-30') // new Date(2024, 4, 30) * parseDateInput('30 May 2024', 'en-GB') // new Date(2024, 4, 30) * parseDateInput('05/30/2024', 'en-US') // new Date(2024, 4, 30) * parseDateInput('') // null */ export declare function parseDateInput(input: string, locale?: string): Date | null; /** * Converte um objeto `Date` para uma string no formato ISO `YYYY-MM-DD`. * * Utiliza os componentes locais da data (sem conversão para UTC), garantindo * consistência com datas criadas via `new Date(year, month, day)`. * * @param date Data a ser convertida. * @returns String no formato `YYYY-MM-DD`. * * @example * toISODateString(new Date(2024, 4, 30)) // '2024-05-30' * toISODateString(new Date(2024, 0, 5)) // '2024-01-05' */ export declare function toISODateString(date: Date): string; /** * Retorna a data de hoje como string ISO `YYYY-MM-DD`. * * @returns Data atual no formato `YYYY-MM-DD`. * * @example * getTodayISO() // ex.: '2024-05-30' */ export declare function getTodayISO(): string; /** * Formata um valor de data (ou intervalo/lista de datas) para exibição, * usando `Intl.DateTimeFormat` para localização. * * Modos suportados: * - `'single'`: formata uma única data ISO. * - `'multi'`: formata múltiplas datas ISO separadas por espaço. * - `'range'`: formata um intervalo `YYYY-MM-DD/YYYY-MM-DD`. * * Retorna `undefined` quando o valor está vazio ou contém datas inválidas. * * @param value String de valor de data conforme o modo. * @param mode Modo de formatação (`'single'`, `'multi'` ou `'range'`). * @param locale Código BCP 47 de localidade. * @param options Opções de formatação para `Intl.DateTimeFormat`. * @returns String formatada ou `undefined`. * * @example * formatDisplayValue('2024-05-30', 'single', 'en-US', { month: 'long', day: 'numeric', year: 'numeric' }) * // 'May 30, 2024' * * formatDisplayValue('2024-05-30 2024-06-15', 'multi', 'en-US', { month: 'long', day: 'numeric', year: 'numeric' }) * // 'May 30, 2024, June 15, 2024' * * formatDisplayValue('2024-05-01/2024-05-31', 'range', 'en-US', { month: 'long', day: 'numeric', year: 'numeric' }) * // 'May 1 – May 31, 2024' (formato pode variar por localidade) */ export declare function formatDisplayValue(value: string, mode: 'single' | 'multi' | 'range', locale: string, options: Intl.DateTimeFormatOptions): string | undefined; /** * Extrai a primeira data ISO `YYYY-MM-DD` encontrada em uma string de valor. * * Funciona com strings de data única, intervalos (`YYYY-MM-DD/YYYY-MM-DD`) * e listas de datas separadas por espaço. * * @param value String de valor de data. * @returns Primeira data ISO encontrada, ou `undefined` quando não há nenhuma. * * @example * extractFocusedDate('2024-05-30') // '2024-05-30' * extractFocusedDate('2024-05-01/2024-05-31') // '2024-05-01' * extractFocusedDate('2024-05-30 2024-06-15') // '2024-05-30' * extractFocusedDate('') // undefined */ export declare function extractFocusedDate(value: string): string | undefined; /** * Restringe uma data ISO ao intervalo `[min, max]` (string comparison ISO). * * A comparação utiliza a ordenação lexicográfica das strings ISO, que coincide * com a ordem cronológica para o formato `YYYY-MM-DD`. * * @param date Data ISO a ser limitada. * @param min Data mínima ISO (opcional). * @param max Data máxima ISO (opcional). * @returns Data ISO resultante (dentro do intervalo ou a própria data quando * nenhum limite foi informado). * * @example * clampDateToRange('2024-01-01', '2024-03-01') // '2024-03-01' * clampDateToRange('2024-12-31', undefined, '2024-06-30') // '2024-06-30' * clampDateToRange('2024-05-15', '2024-01-01', '2024-12-31') // '2024-05-15' */ export declare function clampDateToRange(date: string, min?: string, max?: string): string;