import { DateInput } from '../../../composables/date/useDateInitializationDayjs'; import { DateObjectValue } from '../types'; /** * dateFormattingUtils — Utilitaires de formatage et de résolution d'état pour les DatePicker. * * ## Fonctions principales * * - `formatDateInput` : Formate une saisie utilisateur en ajoutant les séparateurs du format * (ex: `12032025` → `12/03/2025`). Gère le maintien de la position du curseur via une * carte de correspondance (positionMap) entre la chaîne brute et la chaîne formatée. * Supporte l'expansion automatique des années sur 2 chiffres (YY → YYYY) pendant la saisie. * * - `resolveDatePickerStateFromModelValue` : Résout l'état interne (selectedDates + displayValue) * à partir du `modelValue` reçu. Gère les 3 cas : null, string (date simple), string[] (plage). * Tente le parsing avec le format de retour puis le format d'affichage en fallback. * * - `getDisplayedMonthYearState` : Extrait le mois, l'année et leurs noms formatés depuis une Date. * Utilisé par `syncDisplayedMonthYearFromDate` dans `useDatePickerCalendar`. * * - `formatDateRangeDisplay` : Formate une plage de dates pour l'affichage (start - end). * * - `getDateDescription` : Génère une description textuelle de la date pour les lecteurs d'écran * (ex: « Jour 12, Mois 03, Année 2025 »). Utilisé par la live region d'accessibilité. * * ## Types exportés * * - `FormatDateInputResult` / `FormatDateOptions` : Résultat et options du formatage d'input. * - `DisplayedMonthYearState` : État mois/année affichés dans le calendrier. * - `ResolveDatePickerStateOptions` / `ResolvedDatePickerState` : Options et résultat de la * résolution d'état depuis le modelValue. */ /** * Résultat du formatage d'une date */ export interface FormatDateInputResult { /** * Valeur formatée */ formatted: string; /** * Position du curseur après formatage */ cursorPos: number; } /** * Options pour le formatage d'une date */ export interface FormatDateOptions { /** * Position actuelle du curseur */ cursorPosition?: number; /** * Caractère à utiliser pour les positions non remplies */ placeholderChar?: string; } export interface DisplayedMonthYearState { month: string; year: string; monthName: string; yearName: string; } export interface ResolveDatePickerStateOptions { modelValue: DateInput | undefined; displayRange: boolean; displayFormat: string; returnFormat: string; parseDate: (value: string, format: string) => Date | null; formatDate: (date: Date | null, format: string) => string; generateDateRange?: (start: Date, end: Date) => Date[]; preserveInvalidValue?: boolean; } export interface ResolvedDatePickerState { selectedDates: DateObjectValue; displayValue: string; } export declare const getDisplayedMonthYearState: (date: Date) => DisplayedMonthYearState; export declare const formatDateRangeDisplay: (startDate: Date, endDate: Date, format: string, formatDate: (date: Date | null, format: string) => string) => string; export declare const resolveDatePickerStateFromModelValue: ({ modelValue, displayRange, displayFormat, returnFormat, parseDate, formatDate, generateDateRange, preserveInvalidValue, }: ResolveDatePickerStateOptions) => ResolvedDatePickerState; /** * Formate une entrée de date en ajoutant les séparateurs appropriés * * @param input - Chaîne de caractères saisie * @param format - Format de date (ex: 'DD/MM/YYYY') * @param options - Options de formatage * @returns Objet contenant la chaîne formatée et la nouvelle position du curseur */ export declare const formatDateInput: (input: string, format: string, options?: FormatDateOptions) => FormatDateInputResult; /** * Crée une description accessible de la date pour les lecteurs d'écran * * @param dateStr - La chaîne de date à décrire * @param format - Le format de la date * @param placeholderChar - Caractère utilisé pour les positions vides * @returns Une description de la date adaptée aux lecteurs d'écran */ export declare const getDateDescription: (dateStr: string, format: string, placeholderChar?: string) => string; /** * Extrait les deux parties d'une plage de dates * * @param value - Chaîne de caractères contenant une plage de dates * @param separator - Séparateur de plage (par défaut: ' - ') * @returns Tableau contenant les deux parties de la plage */ export declare const extractRangeParts: (value: string, separator?: string) => [string, string]; /** * Vérifie si une chaîne de caractères contient un séparateur de plage * * @param value - Chaîne de caractères à vérifier * @param separator - Séparateur de plage (par défaut: ' - ') * @returns Booléen indiquant si la chaîne contient le séparateur */ export declare const hasRangeSeparator: (value: string, separator?: string) => boolean; /** * Vérifie si une plage de dates est valide (la date de début est antérieure à la date de fin) * * @param startDate - Date de début * @param endDate - Date de fin * @returns Booléen indiquant si la plage est valide */ export declare const isValidDateRange: (startDate: Date | null | undefined, endDate: Date | null | undefined) => boolean; /** * Retourne le message d'erreur de plage si invalide, sinon null. * Centralise la logique `isValidDateRange + locales.endBeforeStartEqual` dupliquée à 5 endroits. */ export declare const getRangeValidationError: (startDate: Date | null | undefined, endDate: Date | null | undefined) => string | null;