import type { FormValidator } from '../../shared/utils/validator'; import type { DATETIME_PICKER_LOCALE, DATETIME_PICKER_MODE, NAVIGATION_ACTION } from './datetime-picker-constants'; import type { INPUT_TIME_TYPE } from './time-picker/time-picker-constants'; /** * Representa os modos válidos de operação do datetime picker. * * Derivado de `DATETIME_PICKER_MODE` para manter tipo e constantes * sincronizados automaticamente. */ export type DatetimePickerMode = (typeof DATETIME_PICKER_MODE)[keyof typeof DATETIME_PICKER_MODE]; /** * Representa os locais suportados pelo componente. * * O tipo aceita o valor livre `string` para manter compatibilidade com * consumidores que ainda não usam a constante exportada. */ export type DatetimePickerLocale = string | (typeof DATETIME_PICKER_LOCALE)[keyof typeof DATETIME_PICKER_LOCALE]; /** * Seleção inicial aceita pelo componente. * * - `'now'`: usa o momento atual no carregamento/atualização da prop. * - `Date` ou `string`: usa uma data arbitrária informada pelo consumidor. * - `null`: inicia sem seleção. */ export type DatetimePickerInitialMoment = 'now' | Date | string | null; /** * Valor de data aceito para regras de desabilitação. */ export type DatetimePickerDisabledDate = Date | string; /** * Conjunto de datas que devem ficar indisponíveis para seleção no calendário. * * Aceita: * - array de datas (Date|string) * - string com datas separadas por espaço em branco * - null */ export type DatetimePickerDisabledDates = DatetimePickerDisabledDate[] | string | null; /** * Modo de seleção usado no calendário de datas. * * `range` só é suportado quando o datetime picker está em `mode="date"`. */ export type DatetimePickerSelectionMode = 'single' | 'range'; /** * Índice numérico válido para o dia inicial da semana no calendário. * * Dom = 0, Seg = 1, Ter = 2, Qua = 3, Qui = 4, Sex = 5, Sab = 6. */ export type DatetimePickerWeekDayIndex = 0 | 1 | 2 | 3 | 4 | 5 | 6; /** * Intervalo de datas selecionado no calendário. */ export type DatetimePickerDateRange = { start: Date | null; end: Date | null; }; export type DatetimePickerValidator = FormValidator; /** * Representa um dia dentro do intervalo selecionado com seu estado de bloqueio. */ export type DatetimePickerRangeDateState = { date: Date; disabled: boolean; }; /** * Representa a ação de navegação emitida pelos controles de calendário e horário. */ export type NavigationAction = (typeof NAVIGATION_ACTION)[keyof typeof NAVIGATION_ACTION]; /** * Estado compartilhado entre os subcomponentes de data e horário. * * `referenceDate` controla a navegação visual e `value` representa a seleção * efetiva do usuário. */ export type DatetimePickerDateState = { referenceDate: Date; value: Date | null; range?: DatetimePickerDateRange; rangeDates?: DatetimePickerRangeDateState[]; }; /** * Índice numérico válido para o dia da semana. * * Dom = 0, Seg = 1, Ter = 2, Qua = 3, Qui = 4, Sex = 5, Sab = 6. */ export type WeekDayIndex = 0 | 1 | 2 | 3 | 4 | 5 | 6; /** * Representa os tipos de campo suportados pelo time picker. * * Derivado de `INPUT_TIME_TYPE` para manter o tipo alinhado com as constantes públicas. */ export type InputTimeType = (typeof INPUT_TIME_TYPE)[keyof typeof INPUT_TIME_TYPE]; export type DatetimePickerFormContext = { mode: DatetimePickerMode; selectionMode: DatetimePickerSelectionMode; rangeStart: Date | null; rangeEnd: Date | null; referenceDate: Date; }; export type DatetimePickerMissingValueContext = DatetimePickerFormContext & { required: boolean; disabled: boolean; value: Date | null; };