@birdnet/advanced-react-dates 0.0.0-stage → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. package/.babelrc +67 -0
  2. package/.eslintrc +66 -0
  3. package/.nvmrc +1 -0
  4. package/.nyc_output/4d8efcd220c2aec1f2b4ffd49d875001.json +1 -0
  5. package/.nyc_output/66d34779498a5d49bcf9d757dfc7fdb5.json +1 -0
  6. package/.nyc_output/8ca7e04140934515928bc7d4ae476b73.json +1 -0
  7. package/.nyc_output/afc270bb597bfc50e690436959c2ae54.json +1 -0
  8. package/.nycrc +19 -0
  9. package/.travis.yml +13 -0
  10. package/CHANGELOG.md +665 -0
  11. package/CLAUDE.md +56 -0
  12. package/INTHEWILD.md +9 -0
  13. package/LICENSE +21 -0
  14. package/README.md +421 -2
  15. package/constants.js +2 -0
  16. package/esm/components/CalendarDay.js +321 -0
  17. package/esm/components/CalendarIcon.js +11 -0
  18. package/esm/components/CalendarMonth.js +254 -0
  19. package/esm/components/CalendarMonthGrid.js +365 -0
  20. package/esm/components/CalendarWeek.js +11 -0
  21. package/esm/components/ChevronDown.js +11 -0
  22. package/esm/components/ChevronUp.js +11 -0
  23. package/esm/components/CloseButton.js +12 -0
  24. package/esm/components/CustomizableCalendarDay.js +341 -0
  25. package/esm/components/DateInput.js +344 -0
  26. package/esm/components/DateRangePicker.js +647 -0
  27. package/esm/components/DateRangePickerInput.js +341 -0
  28. package/esm/components/DateRangePickerInputController.js +348 -0
  29. package/esm/components/DayPicker.js +1167 -0
  30. package/esm/components/DayPickerKeyboardShortcuts.js +364 -0
  31. package/esm/components/DayPickerNavigation.js +314 -0
  32. package/esm/components/DayPickerRangeController.js +1202 -0
  33. package/esm/components/DayPickerSingleDateController.js +690 -0
  34. package/esm/components/KeyboardShortcutRow.js +69 -0
  35. package/esm/components/LeftArrow.js +11 -0
  36. package/esm/components/RightArrow.js +11 -0
  37. package/esm/components/SingleDatePicker.js +605 -0
  38. package/esm/components/SingleDatePickerInput.js +264 -0
  39. package/esm/components/SingleDatePickerInputController.js +260 -0
  40. package/esm/constants.js +28 -0
  41. package/esm/defaultPhrases.js +225 -0
  42. package/esm/index.js +20 -0
  43. package/esm/initialize.js +2 -0
  44. package/esm/shapes/AnchorDirectionShape.js +3 -0
  45. package/esm/shapes/CalendarInfoPositionShape.js +3 -0
  46. package/esm/shapes/DateRangePickerShape.js +101 -0
  47. package/esm/shapes/DayOfWeekShape.js +3 -0
  48. package/esm/shapes/DisabledShape.js +3 -0
  49. package/esm/shapes/FocusedInputShape.js +3 -0
  50. package/esm/shapes/IconPositionShape.js +3 -0
  51. package/esm/shapes/ModifiersShape.js +18 -0
  52. package/esm/shapes/NavPositionShape.js +3 -0
  53. package/esm/shapes/OpenDirectionShape.js +3 -0
  54. package/esm/shapes/OrientationShape.js +3 -0
  55. package/esm/shapes/ScrollableOrientationShape.js +3 -0
  56. package/esm/shapes/SingleDatePickerShape.js +90 -0
  57. package/esm/theme/DefaultTheme.js +176 -0
  58. package/esm/utils/calculateDimension.js +28 -0
  59. package/esm/utils/disableScroll.js +67 -0
  60. package/esm/utils/getActiveElement.js +3 -0
  61. package/esm/utils/getCalendarDaySettings.js +48 -0
  62. package/esm/utils/getCalendarMonthWeeks.js +37 -0
  63. package/esm/utils/getCalendarMonthWidth.js +4 -0
  64. package/esm/utils/getDetachedContainerStyles.js +36 -0
  65. package/esm/utils/getInputHeight.js +42 -0
  66. package/esm/utils/getNumberOfCalendarMonthWeeks.js +11 -0
  67. package/esm/utils/getPhrase.js +7 -0
  68. package/esm/utils/getPhrasePropTypes.js +9 -0
  69. package/esm/utils/getPooledMoment.js +8 -0
  70. package/esm/utils/getPreviousMonthMemoLast.js +9 -0
  71. package/esm/utils/getResponsiveContainerStyles.js +8 -0
  72. package/esm/utils/getSelectedDateOffset.js +8 -0
  73. package/esm/utils/getTransformStyles.js +8 -0
  74. package/esm/utils/getVisibleDays.js +42 -0
  75. package/esm/utils/isAfterDay.js +7 -0
  76. package/esm/utils/isBeforeDay.js +13 -0
  77. package/esm/utils/isDayVisible.js +38 -0
  78. package/esm/utils/isInclusivelyAfterDay.js +6 -0
  79. package/esm/utils/isInclusivelyBeforeDay.js +6 -0
  80. package/esm/utils/isNextDay.js +7 -0
  81. package/esm/utils/isNextMonth.js +6 -0
  82. package/esm/utils/isPrevMonth.js +6 -0
  83. package/esm/utils/isPreviousDay.js +7 -0
  84. package/esm/utils/isSameDay.js +7 -0
  85. package/esm/utils/isSameMonth.js +7 -0
  86. package/esm/utils/isTransitionEndSupported.js +3 -0
  87. package/esm/utils/modifiers.js +94 -0
  88. package/esm/utils/noflip.js +10 -0
  89. package/esm/utils/registerCSSInterfaceWithDefaultTheme.js +5 -0
  90. package/esm/utils/registerInterfaceWithDefaultTheme.js +6 -0
  91. package/esm/utils/toISODateString.js +12 -0
  92. package/esm/utils/toISOMonthString.js +12 -0
  93. package/esm/utils/toLocalizedDateString.js +8 -0
  94. package/esm/utils/toMomentObject.js +7 -0
  95. package/index.js +2 -0
  96. package/initialize.js +2 -0
  97. package/karma.conf.js +82 -0
  98. package/lib/components/CalendarDay.js +327 -0
  99. package/lib/components/CalendarIcon.js +18 -0
  100. package/lib/components/CalendarMonth.js +259 -0
  101. package/lib/components/CalendarMonthGrid.js +372 -0
  102. package/lib/components/CalendarWeek.js +18 -0
  103. package/lib/components/ChevronDown.js +18 -0
  104. package/lib/components/ChevronUp.js +18 -0
  105. package/lib/components/CloseButton.js +19 -0
  106. package/lib/components/CustomizableCalendarDay.js +347 -0
  107. package/lib/components/DateInput.js +351 -0
  108. package/lib/components/DateRangePicker.js +653 -0
  109. package/lib/components/DateRangePickerInput.js +348 -0
  110. package/lib/components/DateRangePickerInputController.js +354 -0
  111. package/lib/components/DayPicker.js +1175 -0
  112. package/lib/components/DayPickerKeyboardShortcuts.js +371 -0
  113. package/lib/components/DayPickerNavigation.js +321 -0
  114. package/lib/components/DayPickerRangeController.js +1208 -0
  115. package/lib/components/DayPickerSingleDateController.js +695 -0
  116. package/lib/components/KeyboardShortcutRow.js +76 -0
  117. package/lib/components/LeftArrow.js +18 -0
  118. package/lib/components/RightArrow.js +18 -0
  119. package/lib/components/SingleDatePicker.js +611 -0
  120. package/lib/components/SingleDatePickerInput.js +271 -0
  121. package/lib/components/SingleDatePickerInputController.js +266 -0
  122. package/lib/constants.js +34 -0
  123. package/lib/css/_datepicker.css +886 -0
  124. package/lib/defaultPhrases.js +231 -0
  125. package/lib/index.js +146 -0
  126. package/lib/initialize.js +5 -0
  127. package/lib/shapes/AnchorDirectionShape.js +10 -0
  128. package/lib/shapes/CalendarInfoPositionShape.js +10 -0
  129. package/lib/shapes/DateRangePickerShape.js +108 -0
  130. package/lib/shapes/DayOfWeekShape.js +10 -0
  131. package/lib/shapes/DisabledShape.js +10 -0
  132. package/lib/shapes/FocusedInputShape.js +10 -0
  133. package/lib/shapes/IconPositionShape.js +10 -0
  134. package/lib/shapes/ModifiersShape.js +25 -0
  135. package/lib/shapes/NavPositionShape.js +10 -0
  136. package/lib/shapes/OpenDirectionShape.js +10 -0
  137. package/lib/shapes/OrientationShape.js +10 -0
  138. package/lib/shapes/ScrollableOrientationShape.js +10 -0
  139. package/lib/shapes/SingleDatePickerShape.js +97 -0
  140. package/lib/theme/DefaultTheme.js +182 -0
  141. package/lib/utils/calculateDimension.js +34 -0
  142. package/lib/utils/disableScroll.js +75 -0
  143. package/lib/utils/getActiveElement.js +9 -0
  144. package/lib/utils/getCalendarDaySettings.js +55 -0
  145. package/lib/utils/getCalendarMonthWeeks.js +44 -0
  146. package/lib/utils/getCalendarMonthWidth.js +10 -0
  147. package/lib/utils/getDetachedContainerStyles.js +41 -0
  148. package/lib/utils/getInputHeight.js +48 -0
  149. package/lib/utils/getNumberOfCalendarMonthWeeks.js +18 -0
  150. package/lib/utils/getPhrase.js +13 -0
  151. package/lib/utils/getPhrasePropTypes.js +16 -0
  152. package/lib/utils/getPooledMoment.js +15 -0
  153. package/lib/utils/getPreviousMonthMemoLast.js +15 -0
  154. package/lib/utils/getResponsiveContainerStyles.js +15 -0
  155. package/lib/utils/getSelectedDateOffset.js +14 -0
  156. package/lib/utils/getTransformStyles.js +14 -0
  157. package/lib/utils/getVisibleDays.js +49 -0
  158. package/lib/utils/isAfterDay.js +14 -0
  159. package/lib/utils/isBeforeDay.js +20 -0
  160. package/lib/utils/isDayVisible.js +45 -0
  161. package/lib/utils/isInclusivelyAfterDay.js +13 -0
  162. package/lib/utils/isInclusivelyBeforeDay.js +13 -0
  163. package/lib/utils/isNextDay.js +14 -0
  164. package/lib/utils/isNextMonth.js +13 -0
  165. package/lib/utils/isPrevMonth.js +13 -0
  166. package/lib/utils/isPreviousDay.js +14 -0
  167. package/lib/utils/isSameDay.js +14 -0
  168. package/lib/utils/isSameMonth.js +14 -0
  169. package/lib/utils/isTransitionEndSupported.js +9 -0
  170. package/lib/utils/modifiers.js +102 -0
  171. package/lib/utils/noflip.js +16 -0
  172. package/lib/utils/registerCSSInterfaceWithDefaultTheme.js +12 -0
  173. package/lib/utils/registerInterfaceWithDefaultTheme.js +13 -0
  174. package/lib/utils/toISODateString.js +19 -0
  175. package/lib/utils/toISOMonthString.js +19 -0
  176. package/lib/utils/toLocalizedDateString.js +15 -0
  177. package/lib/utils/toMomentObject.js +14 -0
  178. package/package.json +141 -4
  179. package/scripts/.eslintrc +7 -0
  180. package/scripts/buildCSS.js +37 -0
  181. package/scripts/pure-component-fallback.js +70 -0
  182. package/scripts/renderAllComponents.jsx +25 -0
  183. package/src/components/CalendarDay.jsx +366 -0
  184. package/src/components/CalendarIcon.jsx +3 -0
  185. package/src/components/CalendarMonth.jsx +300 -0
  186. package/src/components/CalendarMonthGrid.jsx +427 -0
  187. package/src/components/CalendarWeek.jsx +17 -0
  188. package/src/components/ChevronDown.jsx +3 -0
  189. package/src/components/ChevronUp.jsx +3 -0
  190. package/src/components/CloseButton.jsx +3 -0
  191. package/src/components/CustomizableCalendarDay.jsx +382 -0
  192. package/src/components/DateInput.jsx +401 -0
  193. package/src/components/DateRangePicker.jsx +777 -0
  194. package/src/components/DateRangePickerInput.jsx +434 -0
  195. package/src/components/DateRangePickerInputController.jsx +379 -0
  196. package/src/components/DayPicker.jsx +1407 -0
  197. package/src/components/DayPickerKeyboardShortcuts.jsx +443 -0
  198. package/src/components/DayPickerNavigation.jsx +445 -0
  199. package/src/components/DayPickerRangeController.jsx +1409 -0
  200. package/src/components/DayPickerSingleDateController.jsx +769 -0
  201. package/src/components/KeyboardShortcutRow.jsx +93 -0
  202. package/src/components/LeftArrow.jsx +3 -0
  203. package/src/components/RightArrow.jsx +3 -0
  204. package/src/components/SingleDatePicker.jsx +731 -0
  205. package/src/components/SingleDatePickerInput.jsx +329 -0
  206. package/src/components/SingleDatePickerInputController.jsx +280 -0
  207. package/src/constants.js +37 -0
  208. package/src/defaultPhrases.js +215 -0
  209. package/src/index.js +20 -0
  210. package/src/initialize.js +3 -0
  211. package/src/shapes/AnchorDirectionShape.js +8 -0
  212. package/src/shapes/CalendarInfoPositionShape.js +15 -0
  213. package/src/shapes/DateRangePickerShape.js +111 -0
  214. package/src/shapes/DayOfWeekShape.js +5 -0
  215. package/src/shapes/DisabledShape.js +5 -0
  216. package/src/shapes/FocusedInputShape.js +8 -0
  217. package/src/shapes/IconPositionShape.js +8 -0
  218. package/src/shapes/ModifiersShape.js +20 -0
  219. package/src/shapes/NavPositionShape.js +8 -0
  220. package/src/shapes/OpenDirectionShape.js +8 -0
  221. package/src/shapes/OrientationShape.js +8 -0
  222. package/src/shapes/ScrollableOrientationShape.js +13 -0
  223. package/src/shapes/SingleDatePickerShape.js +100 -0
  224. package/src/svg/arrow-left.svg +1 -0
  225. package/src/svg/arrow-right.svg +1 -0
  226. package/src/svg/calendar.svg +1 -0
  227. package/src/svg/chevron-down.svg +1 -0
  228. package/src/svg/chevron-up.svg +1 -0
  229. package/src/svg/close.svg +1 -0
  230. package/src/theme/DefaultTheme.js +196 -0
  231. package/src/utils/calculateDimension.js +32 -0
  232. package/src/utils/disableScroll.js +65 -0
  233. package/src/utils/getActiveElement.js +3 -0
  234. package/src/utils/getCalendarDaySettings.js +61 -0
  235. package/src/utils/getCalendarMonthWeeks.js +49 -0
  236. package/src/utils/getCalendarMonthWidth.js +3 -0
  237. package/src/utils/getDetachedContainerStyles.js +39 -0
  238. package/src/utils/getInputHeight.js +67 -0
  239. package/src/utils/getNumberOfCalendarMonthWeeks.js +15 -0
  240. package/src/utils/getPhrase.jsx +9 -0
  241. package/src/utils/getPhrasePropTypes.js +9 -0
  242. package/src/utils/getPooledMoment.js +10 -0
  243. package/src/utils/getPreviousMonthMemoLast.js +11 -0
  244. package/src/utils/getResponsiveContainerStyles.js +18 -0
  245. package/src/utils/getSelectedDateOffset.js +6 -0
  246. package/src/utils/getTransformStyles.js +8 -0
  247. package/src/utils/getVisibleDays.js +54 -0
  248. package/src/utils/isAfterDay.js +9 -0
  249. package/src/utils/isBeforeDay.js +18 -0
  250. package/src/utils/isDayVisible.js +57 -0
  251. package/src/utils/isInclusivelyAfterDay.js +8 -0
  252. package/src/utils/isInclusivelyBeforeDay.js +8 -0
  253. package/src/utils/isNextDay.js +9 -0
  254. package/src/utils/isNextMonth.js +8 -0
  255. package/src/utils/isPrevMonth.js +8 -0
  256. package/src/utils/isPreviousDay.js +9 -0
  257. package/src/utils/isSameDay.js +10 -0
  258. package/src/utils/isSameMonth.js +9 -0
  259. package/src/utils/isTransitionEndSupported.js +3 -0
  260. package/src/utils/modifiers.js +116 -0
  261. package/src/utils/noflip.js +11 -0
  262. package/src/utils/registerCSSInterfaceWithDefaultTheme.js +7 -0
  263. package/src/utils/registerInterfaceWithDefaultTheme.js +7 -0
  264. package/src/utils/toISODateString.js +14 -0
  265. package/src/utils/toISOMonthString.js +14 -0
  266. package/src/utils/toLocalizedDateString.js +12 -0
  267. package/src/utils/toMomentObject.js +12 -0
@@ -0,0 +1,434 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { forbidExtraProps, nonNegativeInteger } from 'airbnb-prop-types';
4
+ import { withStyles, withStylesPropTypes } from 'react-with-styles';
5
+
6
+ import { DateRangePickerInputPhrases } from '../defaultPhrases';
7
+ import getPhrasePropTypes from '../utils/getPhrasePropTypes';
8
+ import noflip from '../utils/noflip';
9
+ import openDirectionShape from '../shapes/OpenDirectionShape';
10
+
11
+ import DateInput from './DateInput';
12
+ import IconPositionShape from '../shapes/IconPositionShape';
13
+ import DisabledShape from '../shapes/DisabledShape';
14
+
15
+ import RightArrow from './RightArrow';
16
+ import LeftArrow from './LeftArrow';
17
+ import CloseButton from './CloseButton';
18
+ import CalendarIcon from './CalendarIcon';
19
+
20
+ import {
21
+ START_DATE,
22
+ END_DATE,
23
+ ICON_BEFORE_POSITION,
24
+ ICON_AFTER_POSITION,
25
+ OPEN_DOWN,
26
+ } from '../constants';
27
+
28
+ const propTypes = forbidExtraProps({
29
+ ...withStylesPropTypes,
30
+
31
+ children: PropTypes.node,
32
+
33
+ startDateId: PropTypes.string,
34
+ startDatePlaceholderText: PropTypes.string,
35
+ startDateAriaLabel: PropTypes.string,
36
+ startDateTitleText: PropTypes.string,
37
+ screenReaderMessage: PropTypes.string,
38
+
39
+ endDateId: PropTypes.string,
40
+ endDatePlaceholderText: PropTypes.string,
41
+ endDateAriaLabel: PropTypes.string,
42
+ endDateTitleText: PropTypes.string,
43
+
44
+ onStartDateFocus: PropTypes.func,
45
+ onEndDateFocus: PropTypes.func,
46
+ onStartDateChange: PropTypes.func,
47
+ onEndDateChange: PropTypes.func,
48
+ onStartDateShiftTab: PropTypes.func,
49
+ onEndDateTab: PropTypes.func,
50
+ onClearDates: PropTypes.func,
51
+ onKeyDownArrowDown: PropTypes.func,
52
+ onKeyDownQuestionMark: PropTypes.func,
53
+
54
+ startDate: PropTypes.string,
55
+ endDate: PropTypes.string,
56
+
57
+ isStartDateFocused: PropTypes.bool,
58
+ isEndDateFocused: PropTypes.bool,
59
+ showClearDates: PropTypes.bool,
60
+ disabled: DisabledShape,
61
+ required: PropTypes.bool,
62
+ readOnly: PropTypes.bool,
63
+ openDirection: openDirectionShape,
64
+ showCaret: PropTypes.bool,
65
+ showDefaultInputIcon: PropTypes.bool,
66
+ inputIconPosition: IconPositionShape,
67
+ customInputIcon: PropTypes.node,
68
+ customArrowIcon: PropTypes.node,
69
+ customCloseIcon: PropTypes.node,
70
+ noBorder: PropTypes.bool,
71
+ block: PropTypes.bool,
72
+ small: PropTypes.bool,
73
+ regular: PropTypes.bool,
74
+ verticalSpacing: nonNegativeInteger,
75
+ autoComplete: PropTypes.string,
76
+
77
+ // accessibility
78
+ isFocused: PropTypes.bool, // describes actual DOM focus
79
+
80
+ // i18n
81
+ phrases: PropTypes.shape(getPhrasePropTypes(DateRangePickerInputPhrases)),
82
+
83
+ isRTL: PropTypes.bool,
84
+ });
85
+
86
+ const defaultProps = {
87
+ children: null,
88
+ startDateId: START_DATE,
89
+ endDateId: END_DATE,
90
+ startDatePlaceholderText: 'Start Date',
91
+ endDatePlaceholderText: 'End Date',
92
+ startDateAriaLabel: undefined,
93
+ endDateAriaLabel: undefined,
94
+ startDateTitleText: undefined,
95
+ endDateTitleText: undefined,
96
+ screenReaderMessage: '',
97
+ autoComplete: 'off',
98
+ onStartDateFocus() {},
99
+ onEndDateFocus() {},
100
+ onStartDateChange() {},
101
+ onEndDateChange() {},
102
+ onStartDateShiftTab() {},
103
+ onEndDateTab() {},
104
+ onClearDates() {},
105
+ onKeyDownArrowDown() {},
106
+ onKeyDownQuestionMark() {},
107
+
108
+ startDate: '',
109
+ endDate: '',
110
+
111
+ isStartDateFocused: false,
112
+ isEndDateFocused: false,
113
+ showClearDates: false,
114
+ disabled: false,
115
+ required: false,
116
+ readOnly: false,
117
+ openDirection: OPEN_DOWN,
118
+ showCaret: false,
119
+ showDefaultInputIcon: false,
120
+ inputIconPosition: ICON_BEFORE_POSITION,
121
+ customInputIcon: null,
122
+ customArrowIcon: null,
123
+ customCloseIcon: null,
124
+ noBorder: false,
125
+ block: false,
126
+ small: false,
127
+ regular: false,
128
+ verticalSpacing: undefined,
129
+
130
+ // accessibility
131
+ isFocused: false,
132
+
133
+ // i18n
134
+ phrases: DateRangePickerInputPhrases,
135
+
136
+ isRTL: false,
137
+ };
138
+
139
+ function DateRangePickerInput({
140
+ children,
141
+ startDate,
142
+ startDateId,
143
+ startDatePlaceholderText,
144
+ screenReaderMessage,
145
+ isStartDateFocused,
146
+ onStartDateChange,
147
+ onStartDateFocus,
148
+ onStartDateShiftTab,
149
+ startDateAriaLabel,
150
+ startDateTitleText,
151
+ endDate,
152
+ endDateId,
153
+ endDatePlaceholderText,
154
+ isEndDateFocused,
155
+ onEndDateChange,
156
+ onEndDateFocus,
157
+ onEndDateTab,
158
+ endDateAriaLabel,
159
+ endDateTitleText,
160
+ onKeyDownArrowDown,
161
+ onKeyDownQuestionMark,
162
+ onClearDates,
163
+ showClearDates,
164
+ disabled,
165
+ required,
166
+ readOnly,
167
+ autoComplete,
168
+ showCaret,
169
+ openDirection,
170
+ showDefaultInputIcon,
171
+ inputIconPosition,
172
+ customInputIcon,
173
+ customArrowIcon,
174
+ customCloseIcon,
175
+ isFocused,
176
+ phrases,
177
+ isRTL,
178
+ noBorder,
179
+ block,
180
+ verticalSpacing,
181
+ small,
182
+ regular,
183
+ css,
184
+ styles,
185
+ }) {
186
+ const calendarIcon = customInputIcon || (
187
+ <CalendarIcon {...css(styles.DateRangePickerInput_calendarIcon_svg)} />
188
+ );
189
+ let arrowIcon = <RightArrow {...css(styles.DateRangePickerInput_arrow_svg)} />;
190
+ if (isRTL) arrowIcon = <LeftArrow {...css(styles.DateRangePickerInput_arrow_svg)} />;
191
+ if (small) arrowIcon = '-';
192
+ if (customArrowIcon) arrowIcon = customArrowIcon;
193
+
194
+ const closeIcon = customCloseIcon || (
195
+ <CloseButton
196
+ {...css(
197
+ styles.DateRangePickerInput_clearDates_svg,
198
+ small && styles.DateRangePickerInput_clearDates_svg__small,
199
+ )}
200
+ />
201
+ );
202
+
203
+ const screenReaderStartDateText = screenReaderMessage
204
+ || phrases.keyboardForwardNavigationInstructions;
205
+ const screenReaderEndDateText = screenReaderMessage
206
+ || phrases.keyboardBackwardNavigationInstructions;
207
+
208
+ const inputIcon = (showDefaultInputIcon || customInputIcon !== null) && (
209
+ <button
210
+ {...css(styles.DateRangePickerInput_calendarIcon)}
211
+ type="button"
212
+ disabled={disabled}
213
+ aria-label={phrases.focusStartDate}
214
+ onClick={onKeyDownArrowDown}
215
+ >
216
+ {calendarIcon}
217
+ </button>
218
+ );
219
+
220
+ const startDateDisabled = disabled === START_DATE || disabled === true;
221
+ const endDateDisabled = disabled === END_DATE || disabled === true;
222
+
223
+ return (
224
+ <div
225
+ {...css(
226
+ styles.DateRangePickerInput,
227
+ disabled && styles.DateRangePickerInput__disabled,
228
+ isRTL && styles.DateRangePickerInput__rtl,
229
+ !noBorder && styles.DateRangePickerInput__withBorder,
230
+ block && styles.DateRangePickerInput__block,
231
+ showClearDates && styles.DateRangePickerInput__showClearDates,
232
+ )}
233
+ >
234
+ {inputIconPosition === ICON_BEFORE_POSITION && inputIcon}
235
+
236
+ <DateInput
237
+ id={startDateId}
238
+ placeholder={startDatePlaceholderText}
239
+ ariaLabel={startDateAriaLabel}
240
+ autoComplete={autoComplete}
241
+ titleText={startDateTitleText}
242
+ displayValue={startDate}
243
+ screenReaderMessage={screenReaderStartDateText}
244
+ focused={isStartDateFocused}
245
+ isFocused={isFocused}
246
+ disabled={startDateDisabled}
247
+ required={required}
248
+ readOnly={readOnly}
249
+ showCaret={showCaret}
250
+ openDirection={openDirection}
251
+ onChange={onStartDateChange}
252
+ onFocus={onStartDateFocus}
253
+ onKeyDownShiftTab={onStartDateShiftTab}
254
+ onKeyDownArrowDown={onKeyDownArrowDown}
255
+ onKeyDownQuestionMark={onKeyDownQuestionMark}
256
+ verticalSpacing={verticalSpacing}
257
+ small={small}
258
+ regular={regular}
259
+ />
260
+
261
+ {!isEndDateFocused && children}
262
+
263
+ <div
264
+ {...css(styles.DateRangePickerInput_arrow)}
265
+ aria-hidden="true"
266
+ role="presentation"
267
+ >
268
+ {arrowIcon}
269
+ </div>
270
+
271
+ <DateInput
272
+ id={endDateId}
273
+ placeholder={endDatePlaceholderText}
274
+ ariaLabel={endDateAriaLabel}
275
+ autoComplete={autoComplete}
276
+ titleText={endDateTitleText}
277
+ displayValue={endDate}
278
+ screenReaderMessage={screenReaderEndDateText}
279
+ focused={isEndDateFocused}
280
+ isFocused={isFocused}
281
+ disabled={endDateDisabled}
282
+ required={required}
283
+ readOnly={readOnly}
284
+ showCaret={showCaret}
285
+ openDirection={openDirection}
286
+ onChange={onEndDateChange}
287
+ onFocus={onEndDateFocus}
288
+ onKeyDownArrowDown={onKeyDownArrowDown}
289
+ onKeyDownQuestionMark={onKeyDownQuestionMark}
290
+ onKeyDownTab={onEndDateTab}
291
+ verticalSpacing={verticalSpacing}
292
+ small={small}
293
+ regular={regular}
294
+ />
295
+
296
+ {isEndDateFocused && children}
297
+
298
+ {showClearDates && (
299
+ <button
300
+ type="button"
301
+ aria-label={phrases.clearDates}
302
+ {...css(
303
+ styles.DateRangePickerInput_clearDates,
304
+ small && styles.DateRangePickerInput_clearDates__small,
305
+ !customCloseIcon && styles.DateRangePickerInput_clearDates_default,
306
+ !(startDate || endDate) && styles.DateRangePickerInput_clearDates__hide,
307
+ )}
308
+ onClick={onClearDates}
309
+ disabled={disabled}
310
+ >
311
+ {closeIcon}
312
+ </button>
313
+ )}
314
+
315
+ {inputIconPosition === ICON_AFTER_POSITION && inputIcon}
316
+ </div>
317
+ );
318
+ }
319
+
320
+ DateRangePickerInput.propTypes = propTypes;
321
+ DateRangePickerInput.defaultProps = defaultProps;
322
+
323
+ export default withStyles(({ reactDates: { border, color, sizing } }) => ({
324
+ DateRangePickerInput: {
325
+ backgroundColor: color.background,
326
+ display: 'inline-block',
327
+ },
328
+
329
+ DateRangePickerInput__disabled: {
330
+ background: color.disabled,
331
+ },
332
+
333
+ DateRangePickerInput__withBorder: {
334
+ borderColor: color.border,
335
+ borderWidth: border.pickerInput.borderWidth,
336
+ borderStyle: border.pickerInput.borderStyle,
337
+ borderRadius: border.pickerInput.borderRadius,
338
+ },
339
+
340
+ DateRangePickerInput__rtl: {
341
+ direction: noflip('rtl'),
342
+ },
343
+
344
+ DateRangePickerInput__block: {
345
+ display: 'block',
346
+ },
347
+
348
+ DateRangePickerInput__showClearDates: {
349
+ paddingRight: 30, // TODO: should be noflip wrapped and handled by an isRTL prop
350
+ },
351
+
352
+ DateRangePickerInput_arrow: {
353
+ display: 'inline-block',
354
+ verticalAlign: 'middle',
355
+ color: color.text,
356
+ },
357
+
358
+ DateRangePickerInput_arrow_svg: {
359
+ verticalAlign: 'middle',
360
+ fill: color.text,
361
+ height: sizing.arrowWidth,
362
+ width: sizing.arrowWidth,
363
+ },
364
+
365
+ DateRangePickerInput_clearDates: {
366
+ background: 'none',
367
+ border: 0,
368
+ color: 'inherit',
369
+ font: 'inherit',
370
+ lineHeight: 'normal',
371
+ overflow: 'visible',
372
+
373
+ cursor: 'pointer',
374
+ padding: 10,
375
+ margin: '0 10px 0 5px', // TODO: should be noflip wrapped and handled by an isRTL prop
376
+ position: 'absolute',
377
+ right: 0, // TODO: should be noflip wrapped and handled by an isRTL prop
378
+ top: '50%',
379
+ transform: 'translateY(-50%)',
380
+ },
381
+
382
+ DateRangePickerInput_clearDates__small: {
383
+ padding: 6,
384
+ },
385
+
386
+ DateRangePickerInput_clearDates_default: {
387
+ ':focus': {
388
+ background: color.core.border,
389
+ borderRadius: '50%',
390
+ },
391
+
392
+ ':hover': {
393
+ background: color.core.border,
394
+ borderRadius: '50%',
395
+ },
396
+ },
397
+
398
+ DateRangePickerInput_clearDates__hide: {
399
+ visibility: 'hidden',
400
+ },
401
+
402
+ DateRangePickerInput_clearDates_svg: {
403
+ fill: color.core.grayLight,
404
+ height: 12,
405
+ width: 15,
406
+ verticalAlign: 'middle',
407
+ },
408
+
409
+ DateRangePickerInput_clearDates_svg__small: {
410
+ height: 9,
411
+ },
412
+
413
+ DateRangePickerInput_calendarIcon: {
414
+ background: 'none',
415
+ border: 0,
416
+ color: 'inherit',
417
+ font: 'inherit',
418
+ lineHeight: 'normal',
419
+ overflow: 'visible',
420
+
421
+ cursor: 'pointer',
422
+ display: 'inline-block',
423
+ verticalAlign: 'middle',
424
+ padding: 10,
425
+ margin: '0 5px 0 10px', // TODO: should be noflip wrapped and handled by an isRTL prop
426
+ },
427
+
428
+ DateRangePickerInput_calendarIcon_svg: {
429
+ fill: color.core.grayLight,
430
+ height: 15,
431
+ width: 14,
432
+ verticalAlign: 'middle',
433
+ },
434
+ }), { pureComponent: typeof React.PureComponent !== 'undefined' })(DateRangePickerInput);