@utilitywarehouse/hearth-react-native 0.3.0 → 0.4.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 (313) hide show
  1. package/.storybook/preview.tsx +3 -0
  2. package/.turbo/turbo-build.log +1 -1
  3. package/.turbo/turbo-lint.log +3 -1
  4. package/CHANGELOG.md +22 -0
  5. package/build/components/Alert/AlertCloseButton.js +25 -3
  6. package/build/components/Alert/AlertIcon.js +17 -1
  7. package/build/components/Alert/AlertIconButton.js +27 -1
  8. package/build/components/Alert/AlertLink.js +47 -1
  9. package/build/components/Alert/AlertText.d.ts +1 -1
  10. package/build/components/Alert/AlertText.js +26 -2
  11. package/build/components/Alert/AlertTitle.d.ts +1 -1
  12. package/build/components/Alert/AlertTitle.js +26 -2
  13. package/build/components/Badge/BadgeIcon.js +72 -0
  14. package/build/components/Badge/BadgeText.js +72 -0
  15. package/build/components/Button/ButtonRoot.js +1 -0
  16. package/build/components/Checkbox/Checkbox.d.ts +2 -2
  17. package/build/components/Checkbox/Checkbox.js +11 -10
  18. package/build/components/Checkbox/Checkbox.props.d.ts +3 -1
  19. package/build/components/Checkbox/CheckboxIcon.js +1 -1
  20. package/build/components/Checkbox/CheckboxImage.d.ts +6 -0
  21. package/build/components/Checkbox/CheckboxImage.js +5 -0
  22. package/build/components/Checkbox/CheckboxTileRoot.js +1 -1
  23. package/build/components/Checkbox/index.d.ts +3 -2
  24. package/build/components/Checkbox/index.js +2 -1
  25. package/build/components/CurrencyInput/CurrencyInput.js +1 -1
  26. package/build/components/DatePicker/DatePicker.context.d.ts +19 -0
  27. package/build/components/DatePicker/DatePicker.context.js +3 -0
  28. package/build/components/DatePicker/DatePicker.d.ts +19 -0
  29. package/build/components/DatePicker/DatePicker.js +479 -0
  30. package/build/components/DatePicker/DatePicker.props.d.ts +125 -0
  31. package/build/components/DatePicker/DatePicker.props.js +1 -0
  32. package/build/components/DatePicker/DatePickerCalendar.d.ts +2 -0
  33. package/build/components/DatePicker/DatePickerCalendar.js +28 -0
  34. package/build/components/DatePicker/DatePickerDay.d.ts +11 -0
  35. package/build/components/DatePicker/DatePickerDay.js +242 -0
  36. package/build/components/DatePicker/DatePickerDays.d.ts +2 -0
  37. package/build/components/DatePicker/DatePickerDays.js +157 -0
  38. package/build/components/DatePicker/DatePickerFooter.d.ts +2 -0
  39. package/build/components/DatePicker/DatePickerFooter.js +23 -0
  40. package/build/components/DatePicker/DatePickerHeader/DatePickerHeader.props.d.ts +8 -0
  41. package/build/components/DatePicker/DatePickerHeader/DatePickerHeader.props.js +1 -0
  42. package/build/components/DatePicker/DatePickerHeader/DatePickerMonthButton.d.ts +2 -0
  43. package/build/components/DatePicker/DatePickerHeader/DatePickerMonthButton.js +14 -0
  44. package/build/components/DatePicker/DatePickerHeader/DatePickerNextButton.d.ts +2 -0
  45. package/build/components/DatePicker/DatePickerHeader/DatePickerNextButton.js +32 -0
  46. package/build/components/DatePicker/DatePickerHeader/DatePickerPrevButton.d.ts +2 -0
  47. package/build/components/DatePicker/DatePickerHeader/DatePickerPrevButton.js +32 -0
  48. package/build/components/DatePicker/DatePickerHeader/DatePickerSelectors.d.ts +6 -0
  49. package/build/components/DatePicker/DatePickerHeader/DatePickerSelectors.js +64 -0
  50. package/build/components/DatePicker/DatePickerHeader/DatePickerTimeButton.d.ts +1 -0
  51. package/build/components/DatePicker/DatePickerHeader/DatePickerTimeButton.js +22 -0
  52. package/build/components/DatePicker/DatePickerHeader/DatePickerYearButton.d.ts +2 -0
  53. package/build/components/DatePicker/DatePickerHeader/DatePickerYearButton.js +25 -0
  54. package/build/components/DatePicker/DatePickerHeader/index.d.ts +3 -0
  55. package/build/components/DatePicker/DatePickerHeader/index.js +30 -0
  56. package/build/components/DatePicker/DatePickerMonths.d.ts +2 -0
  57. package/build/components/DatePicker/DatePickerMonths.js +69 -0
  58. package/build/components/DatePicker/DatePickerWeekdays.d.ts +8 -0
  59. package/build/components/DatePicker/DatePickerWeekdays.js +26 -0
  60. package/build/components/DatePicker/DatePickerYears.d.ts +2 -0
  61. package/build/components/DatePicker/DatePickerYears.js +83 -0
  62. package/build/components/DatePicker/TimePicker.d.ts +3 -0
  63. package/build/components/DatePicker/TimePicker.js +84 -0
  64. package/build/components/DatePicker/enums.d.ts +12 -0
  65. package/build/components/DatePicker/enums.js +12 -0
  66. package/build/components/DatePicker/index.d.ts +4 -0
  67. package/build/components/DatePicker/index.js +3 -0
  68. package/build/components/DatePicker/polyfill.d.ts +0 -0
  69. package/build/components/DatePicker/polyfill.js +22 -0
  70. package/build/components/DatePicker/time-picker/animated-math.d.ts +4 -0
  71. package/build/components/DatePicker/time-picker/animated-math.js +19 -0
  72. package/build/components/DatePicker/time-picker/period-native.d.ts +6 -0
  73. package/build/components/DatePicker/time-picker/period-native.js +17 -0
  74. package/build/components/DatePicker/time-picker/period-picker.d.ts +6 -0
  75. package/build/components/DatePicker/time-picker/period-picker.js +10 -0
  76. package/build/components/DatePicker/time-picker/period-web.d.ts +6 -0
  77. package/build/components/DatePicker/time-picker/period-web.js +21 -0
  78. package/build/components/DatePicker/time-picker/wheel-native.d.ts +8 -0
  79. package/build/components/DatePicker/time-picker/wheel-native.js +19 -0
  80. package/build/components/DatePicker/time-picker/wheel-picker/index.d.ts +2 -0
  81. package/build/components/DatePicker/time-picker/wheel-picker/index.js +2 -0
  82. package/build/components/DatePicker/time-picker/wheel-picker/wheel-picker-item.d.ts +16 -0
  83. package/build/components/DatePicker/time-picker/wheel-picker/wheel-picker-item.js +97 -0
  84. package/build/components/DatePicker/time-picker/wheel-picker/wheel-picker.d.ts +21 -0
  85. package/build/components/DatePicker/time-picker/wheel-picker/wheel-picker.js +88 -0
  86. package/build/components/DatePicker/time-picker/wheel-picker/wheel-picker.style.d.ts +23 -0
  87. package/build/components/DatePicker/time-picker/wheel-picker/wheel-picker.style.js +21 -0
  88. package/build/components/DatePicker/time-picker/wheel-web.d.ts +8 -0
  89. package/build/components/DatePicker/time-picker/wheel-web.js +148 -0
  90. package/build/components/DatePicker/time-picker/wheel.d.ts +8 -0
  91. package/build/components/DatePicker/time-picker/wheel.js +10 -0
  92. package/build/components/DatePicker/utils.d.ts +212 -0
  93. package/build/components/DatePicker/utils.js +391 -0
  94. package/build/components/DatePickerInput/DatePickerInput.d.ts +6 -0
  95. package/build/components/DatePickerInput/DatePickerInput.js +126 -0
  96. package/build/components/DatePickerInput/DatePickerInput.props.d.ts +47 -0
  97. package/build/components/DatePickerInput/DatePickerInput.props.js +1 -0
  98. package/build/components/DatePickerInput/DatePickerInputDoneButton.d.ts +8 -0
  99. package/build/components/DatePickerInput/DatePickerInputDoneButton.js +19 -0
  100. package/build/components/DatePickerInput/DatePickerInputDoneButton.web.d.ts +5 -0
  101. package/build/components/DatePickerInput/DatePickerInputDoneButton.web.js +5 -0
  102. package/build/components/DatePickerInput/index.d.ts +2 -0
  103. package/build/components/DatePickerInput/index.js +1 -0
  104. package/build/components/Input/InputField.d.ts +1 -1
  105. package/build/components/Input/InputField.js +1 -1
  106. package/build/components/Input/InputSlot.d.ts +1 -1
  107. package/build/components/Input/InputSlot.js +3 -3
  108. package/build/components/Link/Link.d.ts +1 -1
  109. package/build/components/Link/Link.js +4 -4
  110. package/build/components/Link/Link.props.d.ts +3 -0
  111. package/build/components/Radio/Radio.d.ts +2 -2
  112. package/build/components/Radio/Radio.js +9 -8
  113. package/build/components/Radio/Radio.props.d.ts +3 -1
  114. package/build/components/Radio/RadioImage.d.ts +6 -0
  115. package/build/components/Radio/RadioImage.js +5 -0
  116. package/build/components/Radio/RadioTileRoot.js +1 -1
  117. package/build/components/Radio/index.d.ts +3 -2
  118. package/build/components/Radio/index.js +2 -1
  119. package/build/components/Select/SelectOption.js +1 -7
  120. package/build/components/UnstyledIconButton/UnstyledIconButton.d.ts +1 -1
  121. package/build/components/UnstyledIconButton/UnstyledIconButton.js +5 -5
  122. package/build/components/UnstyledIconButton/UnstyledIconButton.props.d.ts +2 -1
  123. package/build/components/UnstyledIconButton/UnstyledIconButtonRoot.js +1 -1
  124. package/build/components/index.d.ts +2 -0
  125. package/build/components/index.js +2 -0
  126. package/build/core/themes.d.ts +12 -12
  127. package/build/hooks/index.d.ts +4 -3
  128. package/build/hooks/index.js +4 -3
  129. package/build/hooks/usePrevious.d.ts +1 -0
  130. package/build/hooks/usePrevious.js +8 -0
  131. package/build/hooks/useTheme.d.ts +2 -1
  132. package/build/hooks/useTheme.js +2 -2
  133. package/build/tokens/color.d.ts +12 -12
  134. package/build/tokens/color.js +6 -6
  135. package/build/tokens/components/dark/alert.d.ts +13 -0
  136. package/build/tokens/components/dark/alert.js +13 -0
  137. package/build/tokens/components/dark/checkbox.d.ts +3 -0
  138. package/build/tokens/components/dark/checkbox.js +3 -0
  139. package/build/tokens/components/dark/date-picker.d.ts +1 -0
  140. package/build/tokens/components/dark/date-picker.js +1 -0
  141. package/build/tokens/components/dark/icon-button.d.ts +7 -0
  142. package/build/tokens/components/dark/icon-button.js +7 -0
  143. package/build/tokens/components/dark/illustrations.d.ts +7 -0
  144. package/build/tokens/components/dark/illustrations.js +6 -0
  145. package/build/tokens/components/dark/index.d.ts +2 -0
  146. package/build/tokens/components/dark/index.js +2 -0
  147. package/build/tokens/components/dark/link.d.ts +5 -0
  148. package/build/tokens/components/dark/link.js +5 -0
  149. package/build/tokens/components/dark/progress-bar.d.ts +41 -0
  150. package/build/tokens/components/dark/progress-bar.js +40 -0
  151. package/build/tokens/components/dark/segmented-control.d.ts +2 -2
  152. package/build/tokens/components/dark/segmented-control.js +2 -2
  153. package/build/tokens/components/dark/table.d.ts +3 -0
  154. package/build/tokens/components/dark/table.js +3 -0
  155. package/build/tokens/components/light/alert.d.ts +13 -0
  156. package/build/tokens/components/light/alert.js +13 -0
  157. package/build/tokens/components/light/checkbox.d.ts +3 -0
  158. package/build/tokens/components/light/checkbox.js +3 -0
  159. package/build/tokens/components/light/date-picker.d.ts +1 -0
  160. package/build/tokens/components/light/date-picker.js +1 -0
  161. package/build/tokens/components/light/icon-button.d.ts +7 -0
  162. package/build/tokens/components/light/icon-button.js +7 -0
  163. package/build/tokens/components/light/illustrations.d.ts +7 -0
  164. package/build/tokens/components/light/illustrations.js +6 -0
  165. package/build/tokens/components/light/index.d.ts +2 -0
  166. package/build/tokens/components/light/index.js +2 -0
  167. package/build/tokens/components/light/link.d.ts +5 -0
  168. package/build/tokens/components/light/link.js +5 -0
  169. package/build/tokens/components/light/progress-bar.d.ts +41 -0
  170. package/build/tokens/components/light/progress-bar.js +40 -0
  171. package/build/tokens/components/light/segmented-control.d.ts +2 -2
  172. package/build/tokens/components/light/segmented-control.js +2 -2
  173. package/build/tokens/components/light/table.d.ts +3 -0
  174. package/build/tokens/components/light/table.js +3 -0
  175. package/build/tokens/index.d.ts +1 -0
  176. package/build/tokens/index.js +1 -0
  177. package/build/tokens/motion.d.ts +23 -0
  178. package/build/tokens/motion.js +22 -0
  179. package/build/tokens/primitive.d.ts +19 -0
  180. package/build/tokens/primitive.js +19 -0
  181. package/build/tokens/semantic-dark.d.ts +5 -5
  182. package/build/tokens/semantic-dark.js +5 -5
  183. package/build/tokens/semantic-light.d.ts +1 -1
  184. package/build/tokens/semantic-light.js +1 -1
  185. package/build/utils/index.d.ts +1 -0
  186. package/build/utils/index.js +1 -0
  187. package/build/utils/isEqual.d.ts +2 -0
  188. package/build/utils/isEqual.js +29 -0
  189. package/chromatic.config.json +6 -0
  190. package/docs/assets/bank-logo.png +0 -0
  191. package/docs/assets/bank-logo1.png +0 -0
  192. package/docs/components/AllComponents.web.tsx +43 -1
  193. package/docs/components/ViewWrap.tsx +32 -0
  194. package/docs/components/index.ts +7 -7
  195. package/docs/getting-started.mdx +6 -6
  196. package/docs/introduction.mdx +3 -3
  197. package/package.json +16 -12
  198. package/src/components/Alert/AlertCloseButton.tsx +33 -5
  199. package/src/components/Alert/AlertIcon.tsx +17 -1
  200. package/src/components/Alert/AlertIconButton.tsx +37 -4
  201. package/src/components/Alert/AlertLink.tsx +52 -1
  202. package/src/components/Alert/AlertText.tsx +28 -3
  203. package/src/components/Alert/AlertTitle.tsx +28 -3
  204. package/src/components/Badge/BadgeIcon.tsx +72 -0
  205. package/src/components/Badge/BadgeText.tsx +72 -0
  206. package/src/components/Button/ButtonRoot.tsx +1 -0
  207. package/src/components/Checkbox/Checkbox.docs.mdx +45 -7
  208. package/src/components/Checkbox/Checkbox.props.ts +3 -1
  209. package/src/components/Checkbox/Checkbox.stories.tsx +37 -1
  210. package/src/components/Checkbox/Checkbox.tsx +12 -9
  211. package/src/components/Checkbox/CheckboxIcon.tsx +1 -1
  212. package/src/components/Checkbox/CheckboxImage.tsx +9 -0
  213. package/src/components/Checkbox/CheckboxTileRoot.tsx +1 -1
  214. package/src/components/Checkbox/index.ts +3 -2
  215. package/src/components/CurrencyInput/CurrencyInput.tsx +2 -1
  216. package/src/components/DatePicker/DatePicker.context.ts +23 -0
  217. package/src/components/DatePicker/DatePicker.docs.mdx +239 -0
  218. package/src/components/DatePicker/DatePicker.props.ts +139 -0
  219. package/src/components/DatePicker/DatePicker.stories.tsx +98 -0
  220. package/src/components/DatePicker/DatePicker.tsx +669 -0
  221. package/src/components/DatePicker/DatePickerCalendar.tsx +41 -0
  222. package/src/components/DatePicker/DatePickerDay.tsx +302 -0
  223. package/src/components/DatePicker/DatePickerDays.tsx +241 -0
  224. package/src/components/DatePicker/DatePickerFooter.tsx +35 -0
  225. package/src/components/DatePicker/DatePickerHeader/DatePickerHeader.props.ts +10 -0
  226. package/src/components/DatePicker/DatePickerHeader/DatePickerMonthButton.tsx +29 -0
  227. package/src/components/DatePicker/DatePickerHeader/DatePickerNextButton.tsx +46 -0
  228. package/src/components/DatePicker/DatePickerHeader/DatePickerPrevButton.tsx +46 -0
  229. package/src/components/DatePicker/DatePickerHeader/DatePickerSelectors.tsx +96 -0
  230. package/src/components/DatePicker/DatePickerHeader/DatePickerTimeButton.tsx +48 -0
  231. package/src/components/DatePicker/DatePickerHeader/DatePickerYearButton.tsx +50 -0
  232. package/src/components/DatePicker/DatePickerHeader/index.tsx +64 -0
  233. package/src/components/DatePicker/DatePickerMonths.tsx +101 -0
  234. package/src/components/DatePicker/DatePickerWeekdays.tsx +49 -0
  235. package/src/components/DatePicker/DatePickerYears.tsx +119 -0
  236. package/src/components/DatePicker/TimePicker.tsx +141 -0
  237. package/src/components/DatePicker/enums.ts +14 -0
  238. package/src/components/DatePicker/index.ts +13 -0
  239. package/src/components/DatePicker/polyfill.ts +21 -0
  240. package/src/components/DatePicker/time-picker/animated-math.ts +33 -0
  241. package/src/components/DatePicker/time-picker/period-native.tsx +34 -0
  242. package/src/components/DatePicker/time-picker/period-picker.tsx +16 -0
  243. package/src/components/DatePicker/time-picker/period-web.tsx +36 -0
  244. package/src/components/DatePicker/time-picker/wheel-native.tsx +37 -0
  245. package/src/components/DatePicker/time-picker/wheel-picker/index.ts +3 -0
  246. package/src/components/DatePicker/time-picker/wheel-picker/wheel-picker-item.tsx +132 -0
  247. package/src/components/DatePicker/time-picker/wheel-picker/wheel-picker.style.ts +22 -0
  248. package/src/components/DatePicker/time-picker/wheel-picker/wheel-picker.tsx +200 -0
  249. package/src/components/DatePicker/time-picker/wheel-web.tsx +181 -0
  250. package/src/components/DatePicker/time-picker/wheel.tsx +18 -0
  251. package/src/components/DatePicker/utils.ts +549 -0
  252. package/src/components/DatePickerInput/DatePickerInput.docs.mdx +237 -0
  253. package/src/components/DatePickerInput/DatePickerInput.props.ts +50 -0
  254. package/src/components/DatePickerInput/DatePickerInput.stories.tsx +178 -0
  255. package/src/components/DatePickerInput/DatePickerInput.tsx +265 -0
  256. package/src/components/DatePickerInput/DatePickerInputDoneButton.tsx +42 -0
  257. package/src/components/DatePickerInput/DatePickerInputDoneButton.web.tsx +7 -0
  258. package/src/components/DatePickerInput/index.ts +2 -0
  259. package/src/components/Icon/Icon.stories.tsx +4 -3
  260. package/src/components/IconContainer/IconContainer.docs.mdx +4 -4
  261. package/src/components/Input/InputField.tsx +0 -2
  262. package/src/components/Input/InputSlot.tsx +14 -3
  263. package/src/components/Link/Link.props.ts +3 -0
  264. package/src/components/Link/Link.tsx +12 -6
  265. package/src/components/List/List.docs.mdx +24 -23
  266. package/src/components/Modal/Modal.stories.tsx +2 -30
  267. package/src/components/Radio/Radio.docs.mdx +96 -124
  268. package/src/components/Radio/Radio.props.ts +3 -1
  269. package/src/components/Radio/Radio.stories.tsx +47 -0
  270. package/src/components/Radio/Radio.tsx +10 -7
  271. package/src/components/Radio/RadioImage.tsx +9 -0
  272. package/src/components/Radio/RadioTileRoot.tsx +1 -1
  273. package/src/components/Radio/index.ts +3 -2
  274. package/src/components/Select/Select.docs.mdx +6 -6
  275. package/src/components/Select/Select.stories.tsx +7 -7
  276. package/src/components/Select/SelectOption.tsx +4 -10
  277. package/src/components/UnstyledIconButton/UnstyledIconButton.props.ts +2 -1
  278. package/src/components/UnstyledIconButton/UnstyledIconButton.tsx +23 -5
  279. package/src/components/UnstyledIconButton/UnstyledIconButtonRoot.tsx +7 -3
  280. package/src/components/index.ts +2 -0
  281. package/src/hooks/index.ts +4 -3
  282. package/src/hooks/usePrevious.ts +9 -0
  283. package/src/hooks/useTheme.ts +4 -3
  284. package/src/tokens/color.ts +6 -6
  285. package/src/tokens/components/dark/alert.ts +13 -0
  286. package/src/tokens/components/dark/checkbox.ts +3 -0
  287. package/src/tokens/components/dark/date-picker.ts +1 -0
  288. package/src/tokens/components/dark/icon-button.ts +7 -0
  289. package/src/tokens/components/dark/illustrations.ts +7 -0
  290. package/src/tokens/components/dark/index.ts +2 -0
  291. package/src/tokens/components/dark/link.ts +5 -0
  292. package/src/tokens/components/dark/progress-bar.ts +41 -0
  293. package/src/tokens/components/dark/segmented-control.ts +2 -2
  294. package/src/tokens/components/dark/table.ts +3 -0
  295. package/src/tokens/components/light/alert.ts +13 -0
  296. package/src/tokens/components/light/checkbox.ts +3 -0
  297. package/src/tokens/components/light/date-picker.ts +1 -0
  298. package/src/tokens/components/light/icon-button.ts +7 -0
  299. package/src/tokens/components/light/illustrations.ts +7 -0
  300. package/src/tokens/components/light/index.ts +2 -0
  301. package/src/tokens/components/light/link.ts +5 -0
  302. package/src/tokens/components/light/progress-bar.ts +41 -0
  303. package/src/tokens/components/light/segmented-control.ts +2 -2
  304. package/src/tokens/components/light/table.ts +3 -0
  305. package/src/tokens/index.ts +1 -0
  306. package/src/tokens/motion.ts +23 -0
  307. package/src/tokens/primitive.ts +19 -0
  308. package/src/tokens/semantic-dark.ts +5 -5
  309. package/src/tokens/semantic-light.ts +1 -1
  310. package/src/utils/index.ts +1 -0
  311. package/src/utils/isEqual.ts +30 -0
  312. package/docs/assets/react-native-pig.png +0 -0
  313. package/docs/components/AdvancedRadioExample.tsx +0 -126
@@ -0,0 +1,19 @@
1
+ import type { DatePickerBaseProps, DateType, MultiChange, RangeChange, SingleChange } from './DatePicker.props';
2
+ export interface DatePickerSingleProps extends DatePickerBaseProps {
3
+ mode: 'single';
4
+ date?: DateType;
5
+ onChange?: SingleChange;
6
+ }
7
+ export interface DatePickerRangeProps extends DatePickerBaseProps {
8
+ mode: 'range';
9
+ startDate?: DateType;
10
+ endDate?: DateType;
11
+ onChange?: RangeChange;
12
+ }
13
+ export interface DatePickerMultipleProps extends DatePickerBaseProps {
14
+ mode: 'multiple';
15
+ dates?: DateType[];
16
+ onChange?: MultiChange;
17
+ }
18
+ declare const DateTimePicker: (props: DatePickerSingleProps | DatePickerRangeProps | DatePickerMultipleProps) => import("react/jsx-runtime").JSX.Element;
19
+ export default DateTimePicker;
@@ -0,0 +1,479 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import dayjs from 'dayjs';
3
+ import duration from 'dayjs/plugin/duration';
4
+ import localeData from 'dayjs/plugin/localeData';
5
+ import localizedFormat from 'dayjs/plugin/localizedFormat';
6
+ import relativeTime from 'dayjs/plugin/relativeTime';
7
+ import timezone from 'dayjs/plugin/timezone';
8
+ import utc from 'dayjs/plugin/utc';
9
+ import { useCallback, useEffect, useImperativeHandle, useMemo, useReducer, useRef } from 'react';
10
+ import { AccessibilityInfo, findNodeHandle, Platform, View as RNView } from 'react-native';
11
+ import { usePrevious } from '../../hooks/usePrevious';
12
+ import { BottomSheetModal, BottomSheetScrollView } from '../BottomSheet';
13
+ import { DatePickerContext } from './DatePicker.context';
14
+ import Calendar from './DatePickerCalendar';
15
+ import { CalendarActionKind, CONTAINER_HEIGHT, WEEKDAYS_HEIGHT } from './enums';
16
+ import { areDatesOnSameDay, dateToUnix, getEndOfDay, getStartOfDay, removeTime } from './utils';
17
+ dayjs.extend(localeData);
18
+ dayjs.extend(relativeTime);
19
+ dayjs.extend(localizedFormat);
20
+ dayjs.extend(utc);
21
+ dayjs.extend(timezone);
22
+ dayjs.extend(duration);
23
+ const DateTimePicker = (props) => {
24
+ const numerals = 'latn';
25
+ const { mode = 'single', timeZone, showOutsideDays = true, timePicker = false, firstDayOfWeek = 1,
26
+ // startYear,
27
+ // endYear,
28
+ minDate, maxDate, enabledDates, disabledDates, date, startDate, endDate, dates, min, max, onChange, initialView = 'day', containerHeight = CONTAINER_HEIGHT, weekdaysHeight = WEEKDAYS_HEIGHT, navigationPosition = 'right', weekdaysFormat = 'min', monthsFormat = 'short', monthCaptionFormat = 'full', multiRangeMode, hideHeader, hideFooter, hideWeekdays, disableMonthPicker, disableYearPicker, month, year, onMonthChange = () => { }, onYearChange = () => { }, use12Hours, ref, onCancel = () => { }, } = props;
29
+ dayjs.tz.setDefault(timeZone);
30
+ dayjs.locale('en');
31
+ const modalRef = useRef(null);
32
+ const calendarViewRef = useRef(null);
33
+ const scrollViewRef = useRef(null);
34
+ // Forward ref methods to parent component
35
+ useImperativeHandle(ref, () => modalRef.current);
36
+ const closeDatePicker = useCallback(() => {
37
+ modalRef.current?.close();
38
+ }, [modalRef.current]);
39
+ const prevTimezone = usePrevious(timeZone);
40
+ const initialCalendarView = useMemo(() => (mode !== 'single' && initialView === 'time' ? 'day' : initialView), [mode, initialView]);
41
+ const firstDay = useMemo(() => (firstDayOfWeek && firstDayOfWeek > 0 && firstDayOfWeek <= 6 ? firstDayOfWeek : 0), [firstDayOfWeek]);
42
+ const initialState = useMemo(() => {
43
+ let initialDate = dayjs().tz(timeZone);
44
+ if (mode === 'single' && date) {
45
+ initialDate = dayjs(date);
46
+ }
47
+ if (mode === 'range' && startDate) {
48
+ initialDate = dayjs(startDate);
49
+ }
50
+ if (mode === 'multiple' && dates && dates.length > 0) {
51
+ initialDate = dayjs(dates[0]);
52
+ }
53
+ if (minDate && initialDate.isBefore(minDate)) {
54
+ initialDate = dayjs(minDate);
55
+ }
56
+ if (month !== undefined && month && month >= 0 && month <= 11) {
57
+ initialDate = initialDate.month(month);
58
+ }
59
+ if (year !== undefined && year >= 0) {
60
+ initialDate = initialDate.year(year);
61
+ }
62
+ let _date = (date ? dayjs(date) : date);
63
+ if (_date && maxDate && dayjs(_date).isAfter(maxDate)) {
64
+ _date = dayjs(maxDate);
65
+ }
66
+ if (_date && minDate && dayjs(_date).isBefore(minDate)) {
67
+ _date = dayjs(minDate);
68
+ }
69
+ let start = (startDate ? dayjs(startDate) : startDate);
70
+ if (start && maxDate && dayjs(start).isAfter(maxDate)) {
71
+ start = dayjs(maxDate);
72
+ }
73
+ if (start && minDate && dayjs(start).isBefore(minDate)) {
74
+ start = dayjs(minDate);
75
+ }
76
+ let end = (endDate ? dayjs(endDate) : endDate);
77
+ if (end && maxDate && dayjs(end).isAfter(maxDate)) {
78
+ end = dayjs(maxDate);
79
+ }
80
+ if (end && minDate && dayjs(end).isBefore(minDate)) {
81
+ end = dayjs(minDate);
82
+ }
83
+ return {
84
+ date: _date,
85
+ startDate: start,
86
+ endDate: end,
87
+ dates,
88
+ calendarView: initialCalendarView,
89
+ currentDate: initialDate,
90
+ currentYear: initialDate.year(),
91
+ };
92
+ }, [
93
+ mode,
94
+ date,
95
+ startDate,
96
+ endDate,
97
+ dates,
98
+ minDate,
99
+ maxDate,
100
+ month,
101
+ year,
102
+ timeZone,
103
+ initialCalendarView,
104
+ ]);
105
+ const [state, dispatch] = useReducer((prevState, action) => {
106
+ switch (action.type) {
107
+ case CalendarActionKind.SET_CALENDAR_VIEW:
108
+ return {
109
+ ...prevState,
110
+ calendarView: action.payload,
111
+ };
112
+ case CalendarActionKind.CHANGE_CURRENT_DATE:
113
+ return {
114
+ ...prevState,
115
+ currentDate: action.payload,
116
+ };
117
+ case CalendarActionKind.CHANGE_CURRENT_YEAR:
118
+ return {
119
+ ...prevState,
120
+ currentYear: action.payload,
121
+ };
122
+ case CalendarActionKind.CHANGE_SELECTED_DATE:
123
+ const { date: selectedDate } = action.payload;
124
+ return {
125
+ ...prevState,
126
+ date: selectedDate,
127
+ currentDate: selectedDate,
128
+ };
129
+ case CalendarActionKind.CHANGE_SELECTED_RANGE:
130
+ const { startDate: start, endDate: end } = action.payload;
131
+ return {
132
+ ...prevState,
133
+ startDate: start,
134
+ endDate: end,
135
+ };
136
+ case CalendarActionKind.CHANGE_SELECTED_MULTIPLE:
137
+ const { dates: selectedDates } = action.payload;
138
+ return {
139
+ ...prevState,
140
+ dates: selectedDates,
141
+ };
142
+ case CalendarActionKind.RESET_STATE:
143
+ return action.payload;
144
+ default:
145
+ return prevState;
146
+ }
147
+ }, initialState);
148
+ const stateRef = useRef(state);
149
+ stateRef.current = state;
150
+ useEffect(() => {
151
+ const newState = {
152
+ ...initialState,
153
+ };
154
+ dispatch({ type: CalendarActionKind.RESET_STATE, payload: newState });
155
+ }, []);
156
+ useEffect(() => {
157
+ if (prevTimezone !== timeZone) {
158
+ const newDate = dayjs().tz(timeZone);
159
+ dispatch({
160
+ type: CalendarActionKind.CHANGE_CURRENT_DATE,
161
+ payload: newDate,
162
+ });
163
+ }
164
+ }, [timeZone, prevTimezone]);
165
+ useEffect(() => {
166
+ if (mode === 'single') {
167
+ let _date = (date &&
168
+ (timePicker ? dayjs.tz(date, timeZone) : getStartOfDay(dayjs.tz(date, timeZone)))) ??
169
+ date;
170
+ if (_date && maxDate && dayjs.tz(_date, timeZone).isAfter(maxDate)) {
171
+ _date = dayjs.tz(maxDate, timeZone);
172
+ }
173
+ if (_date && minDate && dayjs.tz(_date, timeZone).isBefore(minDate)) {
174
+ _date = dayjs.tz(minDate, timeZone);
175
+ }
176
+ dispatch({
177
+ type: CalendarActionKind.CHANGE_SELECTED_DATE,
178
+ payload: { date: _date },
179
+ });
180
+ if (prevTimezone !== timeZone) {
181
+ onChange({
182
+ date: _date ? dayjs(_date).toDate() : _date,
183
+ });
184
+ }
185
+ }
186
+ else if (mode === 'range') {
187
+ let start = (startDate ? dayjs.tz(startDate, timeZone) : startDate);
188
+ if (start && maxDate && dayjs.tz(start, timeZone).isAfter(maxDate)) {
189
+ start = dayjs.tz(maxDate, timeZone);
190
+ }
191
+ if (start && minDate && dayjs.tz(start, timeZone).isBefore(minDate)) {
192
+ start = dayjs.tz(minDate, timeZone);
193
+ }
194
+ let end = (endDate ? dayjs.tz(endDate, timeZone) : endDate);
195
+ if (end && maxDate && dayjs.tz(end, timeZone).isAfter(maxDate)) {
196
+ end = dayjs.tz(maxDate, timeZone);
197
+ }
198
+ if (end && minDate && dayjs.tz(end, timeZone).isBefore(minDate)) {
199
+ end = dayjs.tz(minDate, timeZone);
200
+ }
201
+ dispatch({
202
+ type: CalendarActionKind.CHANGE_SELECTED_RANGE,
203
+ payload: {
204
+ startDate: start,
205
+ endDate: end,
206
+ },
207
+ });
208
+ if (prevTimezone !== timeZone) {
209
+ onChange({
210
+ startDate: start ? dayjs(start).toDate() : start,
211
+ endDate: end ? dayjs(end).toDate() : end,
212
+ });
213
+ }
214
+ }
215
+ else if (mode === 'multiple') {
216
+ const _dates = dates?.map(date => dayjs(date).tz(timeZone));
217
+ dispatch({
218
+ type: CalendarActionKind.CHANGE_SELECTED_MULTIPLE,
219
+ payload: { dates: _dates },
220
+ });
221
+ if (prevTimezone !== timeZone) {
222
+ onChange({
223
+ dates: _dates.map(item => dayjs(item).toDate()),
224
+ change: 'updated',
225
+ });
226
+ }
227
+ }
228
+ }, [mode, date, startDate, endDate, dates, minDate, maxDate, timePicker, prevTimezone, timeZone]);
229
+ const setCalendarView = useCallback((view) => {
230
+ dispatch({ type: CalendarActionKind.SET_CALENDAR_VIEW, payload: view });
231
+ }, []);
232
+ const onSelectDate = useCallback((selectedDate) => {
233
+ if (onChange) {
234
+ if (mode === 'single') {
235
+ const newDate = timePicker
236
+ ? dayjs.tz(selectedDate, timeZone)
237
+ : dayjs.tz(getStartOfDay(selectedDate), timeZone);
238
+ dispatch({
239
+ type: CalendarActionKind.CHANGE_CURRENT_DATE,
240
+ payload: newDate,
241
+ });
242
+ onChange({
243
+ date: newDate ? dayjs(newDate).toDate() : newDate,
244
+ });
245
+ }
246
+ else if (mode === 'range') {
247
+ // set time to 00:00:00
248
+ let start = removeTime(stateRef.current.startDate, timeZone);
249
+ let end = removeTime(stateRef.current.endDate, timeZone);
250
+ const selected = removeTime(selectedDate, timeZone);
251
+ let isStart = true;
252
+ let isReset = false;
253
+ if (dateToUnix(selected) !== dateToUnix(end) &&
254
+ dateToUnix(selected) >= dateToUnix(start) &&
255
+ dateToUnix(start) !== dateToUnix(end)) {
256
+ isStart = false;
257
+ }
258
+ else if (start && dateToUnix(selected) === dateToUnix(start)) {
259
+ isReset = true;
260
+ }
261
+ if (start && end) {
262
+ if (dateToUnix(start) === dateToUnix(end) && dateToUnix(selected) > dateToUnix(start)) {
263
+ isStart = false;
264
+ }
265
+ if (dateToUnix(selected) > dateToUnix(start) &&
266
+ dateToUnix(selected) === dateToUnix(end)) {
267
+ end = undefined;
268
+ }
269
+ }
270
+ if (start && !end && dateToUnix(selected) < dateToUnix(start)) {
271
+ end = start;
272
+ }
273
+ if (isStart && end && (min || max)) {
274
+ const numberOfDays = dayjs(end).diff(selected, 'day');
275
+ if ((max && numberOfDays > max) || (min && numberOfDays < min)) {
276
+ isStart = true;
277
+ end = undefined;
278
+ }
279
+ }
280
+ if (!isStart && start && (min || max)) {
281
+ const numberOfDays = dayjs(selected).diff(start, 'day');
282
+ if (dateToUnix(selected) === dateToUnix(start)) {
283
+ isReset = true;
284
+ }
285
+ else if ((max && numberOfDays > max) || (min && numberOfDays < min)) {
286
+ isStart = true;
287
+ end = undefined;
288
+ }
289
+ }
290
+ if (isReset) {
291
+ onChange({
292
+ startDate: undefined,
293
+ endDate: undefined,
294
+ });
295
+ }
296
+ else {
297
+ onChange({
298
+ startDate: isStart
299
+ ? dayjs(selected).toDate()
300
+ : start
301
+ ? dayjs.tz(start).toDate()
302
+ : start,
303
+ endDate: !isStart
304
+ ? dayjs.tz(getEndOfDay(selected), timeZone).toDate()
305
+ : end
306
+ ? dayjs.tz(getEndOfDay(end), timeZone).toDate()
307
+ : end,
308
+ });
309
+ }
310
+ }
311
+ else if (mode === 'multiple') {
312
+ const safeDates = stateRef.current.dates || [];
313
+ const newDate = dayjs(selectedDate, timeZone).startOf('day');
314
+ const exists = safeDates.some(ed => areDatesOnSameDay(ed, newDate));
315
+ const newDates = exists
316
+ ? safeDates.filter(ed => !areDatesOnSameDay(ed, newDate))
317
+ : [...safeDates, newDate];
318
+ if (max && newDates.length > max) {
319
+ return;
320
+ }
321
+ newDates.sort((a, b) => (dayjs(a).isAfter(dayjs(b)) ? 1 : -1));
322
+ const _dates = newDates.map(date => dayjs(date).tz(timeZone));
323
+ onChange({
324
+ dates: _dates.map(item => dayjs(item).toDate()),
325
+ datePressed: newDate ? dayjs(newDate).toDate() : newDate,
326
+ change: exists ? 'removed' : 'added',
327
+ });
328
+ }
329
+ }
330
+ }, [mode, timePicker, min, max, timeZone]);
331
+ // set the active displayed month
332
+ const onSelectMonth = useCallback((value) => {
333
+ const currentMonth = dayjs(stateRef.current.currentDate).month();
334
+ const newDate = dayjs(stateRef.current.currentDate).month(value);
335
+ // Only call onMonthChange if the month actually changed
336
+ if (value !== currentMonth) {
337
+ onMonthChange(value);
338
+ }
339
+ dispatch({
340
+ type: CalendarActionKind.CHANGE_CURRENT_DATE,
341
+ payload: newDate,
342
+ });
343
+ setCalendarView('day');
344
+ }, [setCalendarView, onMonthChange]);
345
+ // set the active displayed year
346
+ const onSelectYear = useCallback((value) => {
347
+ const currentYear = dayjs(stateRef.current.currentDate).year();
348
+ const newDate = dayjs(stateRef.current.currentDate).year(value);
349
+ // Only call onYearChange if the year actually changed
350
+ if (value !== currentYear) {
351
+ onYearChange(value);
352
+ }
353
+ dispatch({
354
+ type: CalendarActionKind.CHANGE_CURRENT_DATE,
355
+ payload: newDate,
356
+ });
357
+ setCalendarView('day');
358
+ }, [setCalendarView, onYearChange]);
359
+ const onChangeMonth = useCallback((value) => {
360
+ const newDate = dayjs(stateRef.current.currentDate).add(value, 'month');
361
+ dispatch({
362
+ type: CalendarActionKind.CHANGE_CURRENT_DATE,
363
+ payload: dayjs(newDate),
364
+ });
365
+ }, [stateRef, dispatch]);
366
+ const onChangeYear = useCallback((value) => {
367
+ dispatch({
368
+ type: CalendarActionKind.CHANGE_CURRENT_YEAR,
369
+ payload: value,
370
+ });
371
+ }, [dispatch]);
372
+ useEffect(() => {
373
+ if (month !== undefined && month >= 0 && month <= 11) {
374
+ onSelectMonth(month);
375
+ }
376
+ }, [month]);
377
+ useEffect(() => {
378
+ if (year !== undefined && year >= 0) {
379
+ onSelectYear(year);
380
+ }
381
+ }, [year]);
382
+ const baseContextValue = useMemo(() => ({
383
+ mode,
384
+ numerals,
385
+ timeZone,
386
+ showOutsideDays,
387
+ timePicker,
388
+ minDate,
389
+ maxDate,
390
+ min,
391
+ max,
392
+ enabledDates,
393
+ disabledDates,
394
+ firstDayOfWeek: firstDay,
395
+ containerHeight,
396
+ weekdaysHeight,
397
+ navigationPosition,
398
+ weekdaysFormat,
399
+ monthsFormat,
400
+ monthCaptionFormat,
401
+ multiRangeMode,
402
+ hideHeader,
403
+ hideFooter,
404
+ hideWeekdays,
405
+ disableMonthPicker,
406
+ disableYearPicker,
407
+ use12Hours,
408
+ closeDatePicker,
409
+ }), [
410
+ mode,
411
+ numerals,
412
+ timeZone,
413
+ showOutsideDays,
414
+ timePicker,
415
+ minDate,
416
+ maxDate,
417
+ min,
418
+ max,
419
+ enabledDates,
420
+ disabledDates,
421
+ firstDay,
422
+ containerHeight,
423
+ weekdaysHeight,
424
+ navigationPosition,
425
+ weekdaysFormat,
426
+ monthsFormat,
427
+ monthCaptionFormat,
428
+ multiRangeMode,
429
+ hideHeader,
430
+ hideFooter,
431
+ hideWeekdays,
432
+ disableMonthPicker,
433
+ disableYearPicker,
434
+ use12Hours,
435
+ closeDatePicker,
436
+ ]);
437
+ const handlerContextValue = useMemo(() => ({
438
+ setCalendarView,
439
+ onSelectDate,
440
+ onSelectMonth,
441
+ onSelectYear,
442
+ onChangeMonth,
443
+ onChangeYear,
444
+ onCancel,
445
+ }), [
446
+ setCalendarView,
447
+ onSelectDate,
448
+ onSelectMonth,
449
+ onSelectYear,
450
+ onChangeMonth,
451
+ onChangeYear,
452
+ onCancel,
453
+ ]);
454
+ const memoizedValue = useMemo(() => ({
455
+ ...state,
456
+ ...baseContextValue,
457
+ ...handlerContextValue,
458
+ }), [state, baseContextValue, handlerContextValue]);
459
+ const handleChange = useCallback((index) => {
460
+ if (index > -1) {
461
+ // Add a small delay to ensure the bottom sheet is fully rendered
462
+ setTimeout(() => {
463
+ // Announce to screen readers
464
+ AccessibilityInfo.announceForAccessibility('Date picker opened.');
465
+ // Set focus for screen readers - different refs for iOS vs Android
466
+ const scrollViewTargetRef = scrollViewRef.current?.getInnerViewNode();
467
+ const targetRef = calendarViewRef.current;
468
+ if ((Platform.OS === 'android' && targetRef) || scrollViewTargetRef) {
469
+ const nodeHandle = findNodeHandle(Platform.OS === 'android' ? targetRef : scrollViewTargetRef);
470
+ if (nodeHandle) {
471
+ AccessibilityInfo.setAccessibilityFocus(nodeHandle);
472
+ }
473
+ }
474
+ }, 50);
475
+ }
476
+ }, []);
477
+ return (_jsx(BottomSheetModal, { ref: modalRef, onChange: handleChange, accessible: false, children: _jsx(BottomSheetScrollView, { ref: scrollViewRef, children: _jsx(RNView, { ref: calendarViewRef, accessible: Platform.OS === 'android' ? true : undefined, accessibilityLabel: Platform.OS === 'android' ? 'Date picker calendar' : undefined, importantForAccessibility: Platform.OS === 'android' ? 'yes' : 'auto', children: _jsx(DatePickerContext.Provider, { value: memoizedValue, children: _jsx(Calendar, {}) }) }) }) }));
478
+ };
479
+ export default DateTimePicker;
@@ -0,0 +1,125 @@
1
+ import { BottomSheetModalMethods } from '@gorhom/bottom-sheet/lib/typescript/types';
2
+ import type { Dayjs } from 'dayjs';
3
+ import { Ref } from 'react';
4
+ import type { ImageStyle, TextStyle, ViewStyle } from 'react-native';
5
+ import type { CalendarActionKind, CalendarViews } from './enums';
6
+ export type DateType = string | number | Dayjs | Date | null | undefined;
7
+ export type CalendarType = 'gregory';
8
+ export type CalendarMode = 'single' | 'range' | 'multiple';
9
+ export type NavigationPosition = 'around' | 'right' | 'left';
10
+ export type WeekdayFormat = 'min' | 'short' | 'full';
11
+ export type MonthFormat = 'short' | 'full';
12
+ export type LocalState = {
13
+ date: DateType;
14
+ startDate: DateType;
15
+ endDate: DateType;
16
+ dates?: DateType[];
17
+ calendarView: CalendarViews;
18
+ currentDate: DateType;
19
+ currentYear: number;
20
+ };
21
+ export type CalendarAction = {
22
+ type: CalendarActionKind;
23
+ payload: any;
24
+ };
25
+ export type CalendarDay = {
26
+ number: number;
27
+ text: string;
28
+ date: string;
29
+ isDisabled: boolean;
30
+ isCurrentMonth: boolean;
31
+ dayOfMonth?: number;
32
+ isToday: boolean;
33
+ isSelected: boolean;
34
+ inRange: boolean;
35
+ leftCrop: boolean;
36
+ rightCrop: boolean;
37
+ isStartOfWeek: boolean;
38
+ isEndOfWeek: boolean;
39
+ isCrop: boolean;
40
+ inMiddle: boolean;
41
+ rangeStart: boolean;
42
+ rangeEnd: boolean;
43
+ };
44
+ export type CalendarWeek = {
45
+ index: number;
46
+ name: {
47
+ full: string;
48
+ short: string;
49
+ min: string;
50
+ };
51
+ };
52
+ export type CalendarMonth = {
53
+ index: number;
54
+ name: {
55
+ full: string;
56
+ short: string;
57
+ };
58
+ isSelected: boolean;
59
+ };
60
+ export type CalendarYear = {
61
+ number: number;
62
+ text: string;
63
+ isSelected: boolean;
64
+ isActivated: boolean;
65
+ };
66
+ export type SingleChange = (params: {
67
+ date: DateType;
68
+ }) => void;
69
+ export type RangeChange = (params: {
70
+ startDate: DateType;
71
+ endDate: DateType;
72
+ }) => void;
73
+ export type MultiChange = (params: {
74
+ dates: DateType[];
75
+ datePressed?: DateType;
76
+ change: 'added' | 'removed' | 'updated';
77
+ }) => void;
78
+ export type Styles = Partial<ViewStyle | TextStyle | ImageStyle>;
79
+ export interface DatePickerBaseProps {
80
+ mode?: CalendarMode;
81
+ timeZone?: string;
82
+ date?: DateType;
83
+ startDate?: DateType;
84
+ endDate?: DateType;
85
+ dates?: DateType[];
86
+ min?: number;
87
+ max?: number;
88
+ onChange?: SingleChange | RangeChange | MultiChange;
89
+ startYear?: number;
90
+ endYear?: number;
91
+ minDate?: DateType;
92
+ maxDate?: DateType;
93
+ enabledDates?: DateType[] | ((date: DateType) => boolean);
94
+ disabledDates?: DateType[] | ((date: DateType) => boolean);
95
+ firstDayOfWeek?: number;
96
+ showOutsideDays?: boolean;
97
+ timePicker?: boolean;
98
+ use12Hours?: boolean;
99
+ initialView?: CalendarViews;
100
+ containerHeight?: number;
101
+ weekdaysHeight?: number;
102
+ style?: ViewStyle;
103
+ navigationPosition?: NavigationPosition;
104
+ weekdaysFormat?: WeekdayFormat;
105
+ monthsFormat?: MonthFormat;
106
+ monthCaptionFormat?: MonthFormat;
107
+ multiRangeMode?: boolean;
108
+ hideHeader?: boolean;
109
+ hideFooter?: boolean;
110
+ hideWeekdays?: boolean;
111
+ disableMonthPicker?: boolean;
112
+ disableYearPicker?: boolean;
113
+ /** use to handle month and year selectors */
114
+ month?: number;
115
+ year?: number;
116
+ onMonthChange?: (month: number) => void;
117
+ onYearChange?: (year: number) => void;
118
+ ref?: Ref<BottomSheetModalMethods<any>>;
119
+ onCancel?: () => void;
120
+ }
121
+ export type Numerals = 'latn';
122
+ export type PickerOption = {
123
+ value: number | string;
124
+ text: string;
125
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ declare const Calendar: () => import("react/jsx-runtime").JSX.Element;
2
+ export default Calendar;
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { View } from 'react-native';
3
+ import { StyleSheet } from 'react-native-unistyles';
4
+ import { useDatePickerContext } from './DatePicker.context';
5
+ import Days from './DatePickerDays';
6
+ import Footer from './DatePickerFooter';
7
+ import Header from './DatePickerHeader';
8
+ import Months from './DatePickerMonths';
9
+ import Years from './DatePickerYears';
10
+ import TimePicker from './TimePicker';
11
+ const CalendarView = {
12
+ year: _jsx(Years, {}),
13
+ month: _jsx(Months, {}),
14
+ day: _jsx(Days, {}),
15
+ time: _jsx(TimePicker, {}),
16
+ };
17
+ const Calendar = () => {
18
+ const { hideHeader, hideFooter, calendarView, containerHeight, navigationPosition } = useDatePickerContext();
19
+ return (_jsxs(View, { style: [styles.container], testID: "calendar", children: [!hideHeader ? _jsx(Header, { navigationPosition: navigationPosition }) : null, _jsx(View, { style: styles.containerInner(containerHeight), children: CalendarView[calendarView] }), !hideFooter ? _jsx(Footer, {}) : null] }));
20
+ };
21
+ const styles = StyleSheet.create(theme => ({
22
+ container: {
23
+ backgroundColor: theme.color.background.secondary,
24
+ gap: theme.components.datePicker.calendar.gap,
25
+ },
26
+ containerInner: (height) => ({ height }),
27
+ }));
28
+ export default Calendar;
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { CalendarDay, DateType } from './DatePicker.props';
3
+ interface Props {
4
+ day: CalendarDay;
5
+ onSelectDate: (date: DateType) => void;
6
+ containerHeight?: number;
7
+ weekdaysHeight?: number;
8
+ }
9
+ export declare const EmptyDay: React.MemoExoticComponent<() => import("react/jsx-runtime").JSX.Element>;
10
+ declare const _default: React.MemoExoticComponent<({ day, onSelectDate, containerHeight, weekdaysHeight, }: Props) => import("react/jsx-runtime").JSX.Element>;
11
+ export default _default;