1 | import * as React from 'react';
|
2 | import {StyletronComponent} from 'styletron-react';
|
3 | import {Option} from '../select';
|
4 | import {SIZE} from '../input';
|
5 | import {Override} from '../overrides';
|
6 | import {Locale} from '../locale';
|
7 | import {any} from 'prop-types';
|
8 |
|
9 | export interface STATE_CHANGE_TYPE {
|
10 | change: 'change';
|
11 | moveUp: 'moveUp';
|
12 | moveDown: 'moveDown';
|
13 | moveLeft: 'moveLeft';
|
14 | moveRight: 'moveRight';
|
15 | mouseOver: 'mouseOver';
|
16 | mouseLeave: 'mouseLeave';
|
17 | }
|
18 |
|
19 | export interface ORIENTATION {
|
20 | horizontal: 'horizontal';
|
21 | vertical: 'vertical';
|
22 | }
|
23 |
|
24 | export type onChange = (args: {date: Date | Date[]}) => any;
|
25 | export type StateReducer = (
|
26 | stateType: STATE_CHANGE_TYPE[keyof STATE_CHANGE_TYPE],
|
27 | nextState: ContainerState,
|
28 | currentState: ContainerState,
|
29 | ) => ContainerState;
|
30 |
|
31 | export interface ContainerState {
|
32 | value?: Date | Date[];
|
33 | }
|
34 | export interface StatefulContainerProps<T> {
|
35 | children?: (args: T) => React.ReactNode;
|
36 | initialState?: ContainerState;
|
37 | stateReducer?: StateReducer;
|
38 | onChange?: onChange;
|
39 | range?: boolean;
|
40 | }
|
41 | export class StatefulContainer extends React.Component<
|
42 | StatefulContainerProps<CalendarProps | DatepickerProps>,
|
43 | ContainerState
|
44 | > {
|
45 | onChange(data: {date: Date | Date[]}): void;
|
46 | internalSetState(
|
47 | type: STATE_CHANGE_TYPE[keyof STATE_CHANGE_TYPE],
|
48 | changes: ContainerState,
|
49 | ): void;
|
50 | }
|
51 |
|
52 | export interface CalendarProps {
|
53 | autoFocusCalendar?: boolean;
|
54 | excludeDates?: Date[];
|
55 | quickSelect?: boolean;
|
56 | quickSelectOptions?: Array<{id: string; beginDate: Date; endDate?: Date}>;
|
57 | filterDate?: (day: Date) => boolean;
|
58 | highlightedDate?: Date;
|
59 | includeDates?: Date[];
|
60 | range?: boolean;
|
61 |
|
62 | locale?: any;
|
63 | maxDate?: Date;
|
64 | minDate?: Date;
|
65 | monthsShown?: number;
|
66 | onDayClick?: (args: {date: Date; event: Event}) => any;
|
67 | onDayMouseOver?: (args: {date: Date; event: Event}) => any;
|
68 | onDayMouseLeave?: (args: {date: Date; event: Event}) => any;
|
69 | onMonthChange?: (args: {date: Date}) => any;
|
70 | onYearChange?: (args: {date: Date}) => any;
|
71 | onChange?: onChange;
|
72 | orientation?: ORIENTATION[keyof ORIENTATION];
|
73 | overrides?: DatepickerOverrides<SharedStylePropsT>;
|
74 | peekNextMonth?: boolean;
|
75 | timeSelectStart?: boolean;
|
76 | timeSelectEnd?: boolean;
|
77 | trapTabbing?: boolean;
|
78 | value?: Date | Date[] | null;
|
79 | }
|
80 | export interface CalendarState {
|
81 | highlightedDate: Date;
|
82 | focused: boolean;
|
83 | date: Date;
|
84 | quickSelectId?: string;
|
85 | }
|
86 | export class Calendar extends React.Component<CalendarProps, CalendarState> {
|
87 | getSingleDate(value: Date | Date[]): Date | null;
|
88 | getDateInView(): Date;
|
89 | handleMonthChange(date: Date): void;
|
90 | handleYearChange(date: Date): void;
|
91 | changeMonth({date}: {date: Date}): void;
|
92 | changeYear({date}: {date: Date}): void;
|
93 | renderCalendarHeader(date: Date, order: number): React.ReactNode;
|
94 | onKeyDown(event: KeyboardEvent): void;
|
95 | handleArrowKey(key: string): void;
|
96 | focusCalendar(): void;
|
97 | blurCalendar(): void;
|
98 | handleTabbing(event: KeyboardEvent): void;
|
99 | onDayMouseOver(data: {event: Event; date: Date}): void;
|
100 | onDayMouseLeave(data: {event: Event; date: Date}): void;
|
101 | handleDateChange(data: {date: Date | Date[]}): void;
|
102 | handleTimeChange(time: Date, index: number): void;
|
103 | setHighlightedDate(date: Date): void;
|
104 | renderMonths(): React.ReactNode[];
|
105 | renderTimeSelect(
|
106 | value: Date,
|
107 | onChange: (...args: any) => any,
|
108 | ): React.ReactNode;
|
109 | renderQuickSelect(): React.ReactNode;
|
110 | }
|
111 |
|
112 | export const StatefulCalendar: React.FC<StatefulDatepickerProps<CalendarProps>>;
|
113 |
|
114 | export interface DatepickerOverrides<T> {
|
115 | Root?: Override<T>;
|
116 | QuickSelect?: Override<T>;
|
117 | QuickSelectContainer?: Override<T>;
|
118 | QuickSelectFormControl?: Override<T>;
|
119 | TimeSelect?: Override<T>;
|
120 | TimeSelectContainer?: Override<T>;
|
121 | TimeSelectFormControl?: Override<T>;
|
122 | CalendarContainer?: Override<T>;
|
123 | CalendarHeader?: Override<T>;
|
124 | PrevButton?: Override<T>;
|
125 | PrevButtonIcon?: Override<T>;
|
126 | NextButton?: Override<T>;
|
127 | NextButtonIcon?: Override<T>;
|
128 | MonthContainer?: Override<T>;
|
129 | MonthHeader?: Override<T>;
|
130 | MonthYearSelectButton?: Override<T>;
|
131 | MonthYearSelectIconContainer?: Override<T>;
|
132 | MonthYearSelectPopover?: Override<T>;
|
133 | MonthYearSelectStatefulMenu?: Override<T>;
|
134 | WeekdayHeader?: Override<T>;
|
135 | Month?: Override<T>;
|
136 | Week?: Override<T>;
|
137 | Day?: Override<T>;
|
138 | Input?: Override<T>;
|
139 | InputWrapper?: Override<T>;
|
140 | Popover?: Override<T>;
|
141 | }
|
142 | export type DatepickerProps = CalendarProps & {
|
143 | 'aria-label'?: string;
|
144 | 'aria-labelledby'?: string;
|
145 | 'aria-describedby'?: string;
|
146 | disabled?: boolean;
|
147 | clearable?: boolean;
|
148 | size?: SIZE[keyof SIZE];
|
149 | error?: boolean;
|
150 | positive?: boolean;
|
151 | placeholder?: string;
|
152 | required?: boolean;
|
153 | displayValueAtRangeIndex?: number;
|
154 | formatDisplayValue?: (date: Date | Date[], formatString: string) => string;
|
155 | formatString?: string;
|
156 | mask?: string | null;
|
157 | mountNode?: HTMLElement;
|
158 | onClose?: () => any;
|
159 | };
|
160 | export interface DatepickerState {
|
161 | calendarFocused: boolean;
|
162 | isOpen: boolean;
|
163 | isPseudoFocused: boolean;
|
164 | lastActiveElm?: HTMLElement;
|
165 | }
|
166 |
|
167 | declare function formatDate(
|
168 | date: Date | Date[],
|
169 | formatString: string,
|
170 | ): string | string[];
|
171 |
|
172 | export {formatDate};
|
173 |
|
174 | export class Datepicker extends React.Component<
|
175 | DatepickerProps,
|
176 | DatepickerState
|
177 | > {
|
178 | onChange(data: {date: Date | Date[]}): void;
|
179 | formatDate(date: Date | Date[], formatString: string): string | string[];
|
180 | formatDisplayValue(date: Date | Date[]): string;
|
181 | open(): void;
|
182 | close(): void;
|
183 | handleEsc(): void;
|
184 | handleInputBlur(): void;
|
185 | handleKeyDown(event: KeyboardEvent): void;
|
186 | focusCalendar(): void;
|
187 | }
|
188 | export {Datepicker as DatePicker};
|
189 |
|
190 | export type StatefulDatepickerProps<T> = T &
|
191 | StatefulContainerProps<T> & {children?: (args: T) => React.ReactNode};
|
192 | export const StatefulDatepicker: React.FC<
|
193 | StatefulDatepickerProps<DatepickerProps>
|
194 | >;
|
195 |
|
196 | export {StatefulDatepicker as StatefulDatePicker};
|
197 |
|
198 | export interface TimezonePickerProps {
|
199 | date?: Date;
|
200 | disabled?: boolean;
|
201 | positive?: boolean;
|
202 | error?: boolean;
|
203 | mapLabels?: (args: Option) => React.ReactNode;
|
204 | onChange?: (value: {id: string; label: string; offset: number}) => any;
|
205 | overrides?: {Select?: Override<any>};
|
206 | value?: string;
|
207 | }
|
208 | export interface TimezonePickerState {
|
209 | timezones: Option[];
|
210 | value?: string;
|
211 | }
|
212 | export class TimezonePicker extends React.Component<
|
213 | TimezonePickerProps,
|
214 | TimezonePickerState
|
215 | > {
|
216 | buildTimezones(compareDate: Date): string[];
|
217 | }
|
218 |
|
219 | export const DISPLAY_FORMAT: 'L';
|
220 | export const ISO_FORMAT: 'YYYY-MM-DD';
|
221 | export const ISO_MONTH_FORMAT: 'YYYY-MM';
|
222 |
|
223 | export const STATE_CHANGE_TYPE: STATE_CHANGE_TYPE;
|
224 |
|
225 | export const ORIENTATION: ORIENTATION;
|
226 |
|
227 | export const WEEKDAYS: [0, 1, 2, 3, 4, 5, 6];
|
228 |
|
229 | export type SharedStylePropsT = {
|
230 | $date: Date;
|
231 | $disabled: boolean;
|
232 | $isHeader: boolean;
|
233 | $isHighlighted: boolean;
|
234 | $isHovered: boolean;
|
235 | $outsideMonth: boolean;
|
236 | $pseudoHighlighted: boolean;
|
237 | $pseudoSelected: boolean;
|
238 | $selected: boolean;
|
239 | $startDate: boolean;
|
240 | $range: boolean;
|
241 | $hasRangeHighlighted: boolean;
|
242 | $hasRangeOnRight: boolean;
|
243 | $hasRangeSelected: boolean;
|
244 | };
|