@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,18 @@
1
+ import moment from 'moment';
2
+
3
+ export default function isBeforeDay(a, b) {
4
+ if (!moment.isMoment(a) || !moment.isMoment(b)) return false;
5
+
6
+ const aYear = a.year();
7
+ const aMonth = a.month();
8
+
9
+ const bYear = b.year();
10
+ const bMonth = b.month();
11
+
12
+ const isSameYear = aYear === bYear;
13
+ const isSameMonth = aMonth === bMonth;
14
+
15
+ if (isSameYear && isSameMonth) return a.date() < b.date();
16
+ if (isSameYear) return aMonth < bMonth;
17
+ return aYear < bYear;
18
+ }
@@ -0,0 +1,57 @@
1
+ import moment from 'moment';
2
+
3
+ import isBeforeDay from './isBeforeDay';
4
+ import isAfterDay from './isAfterDay';
5
+ import toISOMonthString from './toISOMonthString';
6
+
7
+ const startCacheOutsideDays = new Map();
8
+ const endCacheOutsideDays = new Map();
9
+
10
+ const startCacheInsideDays = new Map();
11
+ const endCacheInsideDays = new Map();
12
+
13
+ export default function isDayVisible(day, month, numberOfMonths, enableOutsideDays) {
14
+ if (!moment.isMoment(day)) return false;
15
+
16
+ // Cloning is a little expensive, so we want to do it as little as possible.
17
+
18
+ const startKey = toISOMonthString(month);
19
+ // eslint-disable-next-line prefer-template
20
+ const endKey = startKey + '+' + numberOfMonths;
21
+
22
+ if (enableOutsideDays) {
23
+ if (!startCacheOutsideDays.has(startKey)) {
24
+ startCacheOutsideDays.set(startKey, month.clone().startOf('month').startOf('week').hour(12));
25
+ }
26
+
27
+ if (isBeforeDay(day, startCacheOutsideDays.get(startKey))) return false;
28
+
29
+ if (!endCacheOutsideDays.has(endKey)) {
30
+ endCacheOutsideDays.set(
31
+ endKey,
32
+ month.clone().endOf('week').add(numberOfMonths - 1, 'months').endOf('month')
33
+ .endOf('week')
34
+ .hour(12),
35
+ );
36
+ }
37
+
38
+ return !isAfterDay(day, endCacheOutsideDays.get(endKey));
39
+ }
40
+
41
+ // !enableOutsideDays
42
+
43
+ if (!startCacheInsideDays.has(startKey)) {
44
+ startCacheInsideDays.set(startKey, month.clone().startOf('month').hour(12));
45
+ }
46
+
47
+ if (isBeforeDay(day, startCacheInsideDays.get(startKey))) return false;
48
+
49
+ if (!endCacheInsideDays.has(endKey)) {
50
+ endCacheInsideDays.set(
51
+ endKey,
52
+ month.clone().add(numberOfMonths - 1, 'months').endOf('month').hour(12),
53
+ );
54
+ }
55
+
56
+ return !isAfterDay(day, endCacheInsideDays.get(endKey));
57
+ }
@@ -0,0 +1,8 @@
1
+ import moment from 'moment';
2
+
3
+ import isBeforeDay from './isBeforeDay';
4
+
5
+ export default function isInclusivelyAfterDay(a, b) {
6
+ if (!moment.isMoment(a) || !moment.isMoment(b)) return false;
7
+ return !isBeforeDay(a, b);
8
+ }
@@ -0,0 +1,8 @@
1
+ import moment from 'moment';
2
+
3
+ import isAfterDay from './isAfterDay';
4
+
5
+ export default function isInclusivelyBeforeDay(a, b) {
6
+ if (!moment.isMoment(a) || !moment.isMoment(b)) return false;
7
+ return !isAfterDay(a, b);
8
+ }
@@ -0,0 +1,9 @@
1
+ import moment from 'moment';
2
+
3
+ import isSameDay from './isSameDay';
4
+
5
+ export default function isNextDay(a, b) {
6
+ if (!moment.isMoment(a) || !moment.isMoment(b)) return false;
7
+ const nextDay = moment(a).add(1, 'day');
8
+ return isSameDay(nextDay, b);
9
+ }
@@ -0,0 +1,8 @@
1
+ import moment from 'moment';
2
+
3
+ import isSameMonth from './isSameMonth';
4
+
5
+ export default function isNextMonth(a, b) {
6
+ if (!moment.isMoment(a) || !moment.isMoment(b)) return false;
7
+ return isSameMonth(a.clone().add(1, 'month'), b);
8
+ }
@@ -0,0 +1,8 @@
1
+ import moment from 'moment';
2
+
3
+ import isSameMonth from './isSameMonth';
4
+
5
+ export default function isPrevMonth(a, b) {
6
+ if (!moment.isMoment(a) || !moment.isMoment(b)) return false;
7
+ return isSameMonth(a.clone().subtract(1, 'month'), b);
8
+ }
@@ -0,0 +1,9 @@
1
+ import moment from 'moment';
2
+
3
+ import isSameDay from './isSameDay';
4
+
5
+ export default function isPreviousDay(a, b) {
6
+ if (!moment.isMoment(a) || !moment.isMoment(b)) return false;
7
+ const dayBefore = moment(a).subtract(1, 'day');
8
+ return isSameDay(dayBefore, b);
9
+ }
@@ -0,0 +1,10 @@
1
+ import moment from 'moment';
2
+
3
+ export default function isSameDay(a, b) {
4
+ if (!moment.isMoment(a) || !moment.isMoment(b)) return false;
5
+ // Compare least significant, most likely to change units first
6
+ // Moment's isSame clones moment inputs and is a tad slow
7
+ return a.date() === b.date()
8
+ && a.month() === b.month()
9
+ && a.year() === b.year();
10
+ }
@@ -0,0 +1,9 @@
1
+ import moment from 'moment';
2
+
3
+ export default function isSameMonth(a, b) {
4
+ if (!moment.isMoment(a) || !moment.isMoment(b)) return false;
5
+ // Compare least significant, most likely to change units first
6
+ // Moment's isSame clones moment inputs and is a tad slow
7
+ return a.month() === b.month()
8
+ && a.year() === b.year();
9
+ }
@@ -0,0 +1,3 @@
1
+ export default function isTransitionEndSupported() {
2
+ return !!(typeof window !== 'undefined' && 'TransitionEvent' in window);
3
+ }
@@ -0,0 +1,116 @@
1
+ import isDayVisible from './isDayVisible';
2
+ import toISODateString from './toISODateString';
3
+ import toISOMonthString from './toISOMonthString';
4
+ import getPreviousMonthMemoLast from './getPreviousMonthMemoLast';
5
+
6
+ import { VERTICAL_SCROLLABLE } from '../constants';
7
+
8
+ export function addModifier(updatedDays, day, modifier, props, state) {
9
+ const { numberOfMonths: numberOfVisibleMonths, enableOutsideDays, orientation } = props;
10
+ const { currentMonth: firstVisibleMonth, visibleDays } = state;
11
+
12
+ let currentMonth = firstVisibleMonth;
13
+ let numberOfMonths = numberOfVisibleMonths;
14
+ if (orientation === VERTICAL_SCROLLABLE) {
15
+ numberOfMonths = Object.keys(visibleDays).length;
16
+ } else {
17
+ currentMonth = getPreviousMonthMemoLast(currentMonth);
18
+ numberOfMonths += 2;
19
+ }
20
+ if (!day || !isDayVisible(day, currentMonth, numberOfMonths, enableOutsideDays)) {
21
+ return updatedDays;
22
+ }
23
+
24
+ const iso = toISODateString(day);
25
+
26
+ let updatedDaysAfterAddition = { ...updatedDays };
27
+ if (enableOutsideDays) {
28
+ const monthsToUpdate = Object.keys(visibleDays).filter((monthKey) => (
29
+ Object.keys(visibleDays[monthKey]).indexOf(iso) > -1
30
+ ));
31
+
32
+ updatedDaysAfterAddition = monthsToUpdate.reduce((acc, monthIso) => {
33
+ const month = updatedDays[monthIso] || visibleDays[monthIso];
34
+
35
+ if (!month[iso] || !month[iso].has(modifier)) {
36
+ const modifiers = new Set(month[iso]);
37
+ modifiers.add(modifier);
38
+ acc[monthIso] = {
39
+ ...month,
40
+ [iso]: modifiers,
41
+ };
42
+ }
43
+
44
+ return acc;
45
+ }, updatedDaysAfterAddition);
46
+ } else {
47
+ const monthIso = toISOMonthString(day);
48
+ const month = updatedDays[monthIso] || visibleDays[monthIso] || {};
49
+
50
+ if (!month[iso] || !month[iso].has(modifier)) {
51
+ const modifiers = new Set(month[iso]);
52
+ modifiers.add(modifier);
53
+ updatedDaysAfterAddition[monthIso] = {
54
+ ...month,
55
+ [iso]: modifiers,
56
+ };
57
+ }
58
+ }
59
+
60
+ return updatedDaysAfterAddition;
61
+ }
62
+
63
+ export function deleteModifier(updatedDays, day, modifier, props, state) {
64
+ const { numberOfMonths: numberOfVisibleMonths, enableOutsideDays, orientation } = props;
65
+ const { currentMonth: firstVisibleMonth, visibleDays } = state;
66
+
67
+ let currentMonth = firstVisibleMonth;
68
+ let numberOfMonths = numberOfVisibleMonths;
69
+ if (orientation === VERTICAL_SCROLLABLE) {
70
+ numberOfMonths = Object.keys(visibleDays).length;
71
+ } else {
72
+ currentMonth = getPreviousMonthMemoLast(currentMonth);
73
+ numberOfMonths += 2;
74
+ }
75
+ if (!day || !isDayVisible(day, currentMonth, numberOfMonths, enableOutsideDays)) {
76
+ return updatedDays;
77
+ }
78
+
79
+ const iso = toISODateString(day);
80
+
81
+ let updatedDaysAfterDeletion = { ...updatedDays };
82
+ if (enableOutsideDays) {
83
+ const monthsToUpdate = Object.keys(visibleDays).filter((monthKey) => (
84
+ Object.keys(visibleDays[monthKey]).indexOf(iso) > -1
85
+ ));
86
+
87
+ updatedDaysAfterDeletion = monthsToUpdate.reduce((acc, monthIso) => {
88
+ const month = updatedDays[monthIso] || visibleDays[monthIso];
89
+
90
+ if (month[iso] && month[iso].has(modifier)) {
91
+ const modifiers = new Set(month[iso]);
92
+ modifiers.delete(modifier);
93
+ acc[monthIso] = {
94
+ ...month,
95
+ [iso]: modifiers,
96
+ };
97
+ }
98
+
99
+ return acc;
100
+ }, updatedDaysAfterDeletion);
101
+ } else {
102
+ const monthIso = toISOMonthString(day);
103
+ const month = updatedDays[monthIso] || visibleDays[monthIso] || {};
104
+
105
+ if (month[iso] && month[iso].has(modifier)) {
106
+ const modifiers = new Set(month[iso]);
107
+ modifiers.delete(modifier);
108
+ updatedDaysAfterDeletion[monthIso] = {
109
+ ...month,
110
+ [iso]: modifiers,
111
+ };
112
+ }
113
+ }
114
+
115
+ return updatedDaysAfterDeletion;
116
+ }
@@ -0,0 +1,11 @@
1
+ const NOFLIP = '/* @noflip */';
2
+
3
+ // Appends a noflip comment to a style rule in order to prevent it from being automatically
4
+ // flipped in RTL contexts. This should be used only in situations where the style must remain
5
+ // unflipped regardless of direction context. See: https://github.com/kentcdodds/rtl-css-js#usage
6
+ export default function noflip(value) {
7
+ if (typeof value === 'number') return `${value}px ${NOFLIP}`;
8
+ if (typeof value === 'string') return `${value} ${NOFLIP}`;
9
+
10
+ throw new TypeError('noflip expects a string or a number');
11
+ }
@@ -0,0 +1,7 @@
1
+ import CSSInterface from 'react-with-styles-interface-css';
2
+
3
+ import registerInterfaceWithDefaultTheme from './registerInterfaceWithDefaultTheme';
4
+
5
+ export default function registerCSSInterfaceWithDefaultTheme() {
6
+ registerInterfaceWithDefaultTheme(CSSInterface);
7
+ }
@@ -0,0 +1,7 @@
1
+ import ThemedStyleSheet from 'react-with-styles/lib/ThemedStyleSheet';
2
+ import DefaultTheme from '../theme/DefaultTheme';
3
+
4
+ export default function registerInterfaceWithDefaultTheme(reactWithStylesInterface) {
5
+ ThemedStyleSheet.registerInterface(reactWithStylesInterface);
6
+ ThemedStyleSheet.registerTheme(DefaultTheme);
7
+ }
@@ -0,0 +1,14 @@
1
+ import moment from 'moment';
2
+
3
+ import toMomentObject from './toMomentObject';
4
+
5
+ export default function toISODateString(date, currentFormat) {
6
+ const dateObj = moment.isMoment(date) ? date : toMomentObject(date, currentFormat);
7
+ if (!dateObj) return null;
8
+
9
+ // Template strings compiled in strict mode uses concat, which is slow. Since
10
+ // this code is in a hot path and we want it to be as fast as possible, we
11
+ // want to use old-fashioned +.
12
+ // eslint-disable-next-line prefer-template
13
+ return dateObj.year() + '-' + String(dateObj.month() + 1).padStart(2, '0') + '-' + String(dateObj.date()).padStart(2, '0');
14
+ }
@@ -0,0 +1,14 @@
1
+ import moment from 'moment';
2
+
3
+ import toMomentObject from './toMomentObject';
4
+
5
+ export default function toISOMonthString(date, currentFormat) {
6
+ const dateObj = moment.isMoment(date) ? date : toMomentObject(date, currentFormat);
7
+ if (!dateObj) return null;
8
+
9
+ // Template strings compiled in strict mode uses concat, which is slow. Since
10
+ // this code is in a hot path and we want it to be as fast as possible, we
11
+ // want to use old-fashioned +.
12
+ // eslint-disable-next-line prefer-template
13
+ return dateObj.year() + '-' + String(dateObj.month() + 1).padStart(2, '0');
14
+ }
@@ -0,0 +1,12 @@
1
+ import moment from 'moment';
2
+
3
+ import toMomentObject from './toMomentObject';
4
+
5
+ import { DISPLAY_FORMAT } from '../constants';
6
+
7
+ export default function toLocalizedDateString(date, currentFormat) {
8
+ const dateObj = moment.isMoment(date) ? date : toMomentObject(date, currentFormat);
9
+ if (!dateObj) return null;
10
+
11
+ return dateObj.format(DISPLAY_FORMAT);
12
+ }
@@ -0,0 +1,12 @@
1
+ import moment from 'moment';
2
+
3
+ import { DISPLAY_FORMAT, ISO_FORMAT } from '../constants';
4
+
5
+ export default function toMomentObject(dateString, customFormat) {
6
+ const dateFormats = customFormat
7
+ ? [customFormat, DISPLAY_FORMAT, ISO_FORMAT]
8
+ : [DISPLAY_FORMAT, ISO_FORMAT];
9
+
10
+ const date = moment(dateString, dateFormats, true);
11
+ return date.isValid() ? date.hour(12) : null;
12
+ }