@cloud-ru/ds-calendar 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 (528) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/LICENSE +201 -0
  3. package/MIGRATION.md +5 -0
  4. package/README.md +685 -0
  5. package/dist/cjs/components/Calendar/Calendar.d.ts +128 -0
  6. package/dist/cjs/components/Calendar/Calendar.js +25 -0
  7. package/dist/cjs/components/Calendar/index.d.ts +1 -0
  8. package/dist/cjs/components/Calendar/index.js +17 -0
  9. package/dist/cjs/components/Calendar/utils.d.ts +3 -0
  10. package/dist/cjs/components/Calendar/utils.js +19 -0
  11. package/dist/cjs/components/CalendarDropdown/CalendarDropdown.d.ts +22 -0
  12. package/dist/cjs/components/CalendarDropdown/CalendarDropdown.js +11 -0
  13. package/dist/cjs/components/CalendarDropdown/index.d.ts +1 -0
  14. package/dist/cjs/components/CalendarDropdown/index.js +17 -0
  15. package/dist/cjs/components/CalendarDropdown/styles.module.css +9 -0
  16. package/dist/cjs/components/TimePicker/TimePicker.d.ts +34 -0
  17. package/dist/cjs/components/TimePicker/TimePicker.js +138 -0
  18. package/dist/cjs/components/TimePicker/constants.d.ts +1 -0
  19. package/dist/cjs/components/TimePicker/constants.js +4 -0
  20. package/dist/cjs/components/TimePicker/index.d.ts +1 -0
  21. package/dist/cjs/components/TimePicker/index.js +17 -0
  22. package/dist/cjs/components/TimePicker/styles.module.css +12 -0
  23. package/dist/cjs/components/TimePickerDropdown/TimePickerDropdown.d.ts +22 -0
  24. package/dist/cjs/components/TimePickerDropdown/TimePickerDropdown.js +11 -0
  25. package/dist/cjs/components/TimePickerDropdown/index.d.ts +1 -0
  26. package/dist/cjs/components/TimePickerDropdown/index.js +17 -0
  27. package/dist/cjs/components/TimePickerDropdown/styles.module.css +19 -0
  28. package/dist/cjs/components/index.d.ts +4 -0
  29. package/dist/cjs/components/index.js +20 -0
  30. package/dist/cjs/constants.d.ts +68 -0
  31. package/dist/cjs/constants.js +64 -0
  32. package/dist/cjs/helperComponents/CalendarBase/CalendarBase.d.ts +27 -0
  33. package/dist/cjs/helperComponents/CalendarBase/CalendarBase.js +151 -0
  34. package/dist/cjs/helperComponents/CalendarBase/hooks.d.ts +11 -0
  35. package/dist/cjs/helperComponents/CalendarBase/hooks.js +40 -0
  36. package/dist/cjs/helperComponents/CalendarBase/index.d.ts +1 -0
  37. package/dist/cjs/helperComponents/CalendarBase/index.js +17 -0
  38. package/dist/cjs/helperComponents/CalendarBase/styles.module.css +100 -0
  39. package/dist/cjs/helperComponents/CalendarBody/CalendarBody.d.ts +1 -0
  40. package/dist/cjs/helperComponents/CalendarBody/CalendarBody.js +21 -0
  41. package/dist/cjs/helperComponents/CalendarBody/index.d.ts +1 -0
  42. package/dist/cjs/helperComponents/CalendarBody/index.js +17 -0
  43. package/dist/cjs/helperComponents/CalendarContext/CalendarContext.d.ts +51 -0
  44. package/dist/cjs/helperComponents/CalendarContext/CalendarContext.js +47 -0
  45. package/dist/cjs/helperComponents/CalendarContext/index.d.ts +1 -0
  46. package/dist/cjs/helperComponents/CalendarContext/index.js +17 -0
  47. package/dist/cjs/helperComponents/DecadeView/DecadeView.d.ts +1 -0
  48. package/dist/cjs/helperComponents/DecadeView/DecadeView.js +45 -0
  49. package/dist/cjs/helperComponents/DecadeView/index.d.ts +1 -0
  50. package/dist/cjs/helperComponents/DecadeView/index.js +17 -0
  51. package/dist/cjs/helperComponents/DecadeView/utils.d.ts +2 -0
  52. package/dist/cjs/helperComponents/DecadeView/utils.js +19 -0
  53. package/dist/cjs/helperComponents/DesktopCalendarDropdown/DesktopCalendarDropdown.d.ts +2 -0
  54. package/dist/cjs/helperComponents/DesktopCalendarDropdown/DesktopCalendarDropdown.js +30 -0
  55. package/dist/cjs/helperComponents/DesktopCalendarDropdown/index.d.ts +1 -0
  56. package/dist/cjs/helperComponents/DesktopCalendarDropdown/index.js +17 -0
  57. package/dist/cjs/helperComponents/DesktopTimePickerDropdown/DesktopTimePickerDropdown.d.ts +2 -0
  58. package/dist/cjs/helperComponents/DesktopTimePickerDropdown/DesktopTimePickerDropdown.js +117 -0
  59. package/dist/cjs/helperComponents/DesktopTimePickerDropdown/index.d.ts +1 -0
  60. package/dist/cjs/helperComponents/DesktopTimePickerDropdown/index.js +17 -0
  61. package/dist/cjs/helperComponents/Footer/Footer.d.ts +20 -0
  62. package/dist/cjs/helperComponents/Footer/Footer.js +100 -0
  63. package/dist/cjs/helperComponents/Footer/index.d.ts +1 -0
  64. package/dist/cjs/helperComponents/Footer/index.js +17 -0
  65. package/dist/cjs/helperComponents/Footer/styles.module.css +15 -0
  66. package/dist/cjs/helperComponents/Grid/Grid.d.ts +5 -0
  67. package/dist/cjs/helperComponents/Grid/Grid.js +23 -0
  68. package/dist/cjs/helperComponents/Grid/index.d.ts +1 -0
  69. package/dist/cjs/helperComponents/Grid/index.js +17 -0
  70. package/dist/cjs/helperComponents/Grid/styles.module.css +5 -0
  71. package/dist/cjs/helperComponents/Header/Header.d.ts +1 -0
  72. package/dist/cjs/helperComponents/Header/Header.js +68 -0
  73. package/dist/cjs/helperComponents/Header/constants.d.ts +3 -0
  74. package/dist/cjs/helperComponents/Header/constants.js +6 -0
  75. package/dist/cjs/helperComponents/Header/hooks.d.ts +1 -0
  76. package/dist/cjs/helperComponents/Header/hooks.js +23 -0
  77. package/dist/cjs/helperComponents/Header/index.d.ts +1 -0
  78. package/dist/cjs/helperComponents/Header/index.js +17 -0
  79. package/dist/cjs/helperComponents/Header/styles.module.css +28 -0
  80. package/dist/cjs/helperComponents/Header/utils.d.ts +2 -0
  81. package/dist/cjs/helperComponents/Header/utils.js +17 -0
  82. package/dist/cjs/helperComponents/Item/Item.d.ts +21 -0
  83. package/dist/cjs/helperComponents/Item/Item.js +75 -0
  84. package/dist/cjs/helperComponents/Item/hooks.d.ts +30 -0
  85. package/dist/cjs/helperComponents/Item/hooks.js +71 -0
  86. package/dist/cjs/helperComponents/Item/index.d.ts +1 -0
  87. package/dist/cjs/helperComponents/Item/index.js +17 -0
  88. package/dist/cjs/helperComponents/Item/styles.module.css +355 -0
  89. package/dist/cjs/helperComponents/MobileCalendar/MobileCalendar.d.ts +25 -0
  90. package/dist/cjs/helperComponents/MobileCalendar/MobileCalendar.js +308 -0
  91. package/dist/cjs/helperComponents/MobileCalendar/index.d.ts +1 -0
  92. package/dist/cjs/helperComponents/MobileCalendar/index.js +17 -0
  93. package/dist/cjs/helperComponents/MobileCalendar/levelConfig.d.ts +30 -0
  94. package/dist/cjs/helperComponents/MobileCalendar/levelConfig.js +69 -0
  95. package/dist/cjs/helperComponents/MobileCalendar/styles.module.css +35 -0
  96. package/dist/cjs/helperComponents/MobileCalendarDropdown/MobileCalendarDropdown.d.ts +5 -0
  97. package/dist/cjs/helperComponents/MobileCalendarDropdown/MobileCalendarDropdown.js +32 -0
  98. package/dist/cjs/helperComponents/MobileCalendarDropdown/index.d.ts +1 -0
  99. package/dist/cjs/helperComponents/MobileCalendarDropdown/index.js +17 -0
  100. package/dist/cjs/helperComponents/MobileFooter/MobileFooter.d.ts +12 -0
  101. package/dist/cjs/helperComponents/MobileFooter/MobileFooter.js +35 -0
  102. package/dist/cjs/helperComponents/MobileFooter/format.d.ts +10 -0
  103. package/dist/cjs/helperComponents/MobileFooter/format.js +60 -0
  104. package/dist/cjs/helperComponents/MobileFooter/index.d.ts +1 -0
  105. package/dist/cjs/helperComponents/MobileFooter/index.js +17 -0
  106. package/dist/cjs/helperComponents/MobileFooter/styles.module.css +38 -0
  107. package/dist/cjs/helperComponents/MobilePeriodBlock/MobilePeriodBlock.d.ts +18 -0
  108. package/dist/cjs/helperComponents/MobilePeriodBlock/MobilePeriodBlock.js +40 -0
  109. package/dist/cjs/helperComponents/MobilePeriodBlock/index.d.ts +1 -0
  110. package/dist/cjs/helperComponents/MobilePeriodBlock/index.js +17 -0
  111. package/dist/cjs/helperComponents/MobilePeriodBlock/styles.module.css +56 -0
  112. package/dist/cjs/helperComponents/MobilePeriodScroller/MobilePeriodScroller.d.ts +21 -0
  113. package/dist/cjs/helperComponents/MobilePeriodScroller/MobilePeriodScroller.js +92 -0
  114. package/dist/cjs/helperComponents/MobilePeriodScroller/index.d.ts +1 -0
  115. package/dist/cjs/helperComponents/MobilePeriodScroller/index.js +17 -0
  116. package/dist/cjs/helperComponents/MobilePeriodScroller/styles.module.css +17 -0
  117. package/dist/cjs/helperComponents/MobilePresetsScreen/MobilePresetsScreen.d.ts +6 -0
  118. package/dist/cjs/helperComponents/MobilePresetsScreen/MobilePresetsScreen.js +8 -0
  119. package/dist/cjs/helperComponents/MobilePresetsScreen/index.d.ts +1 -0
  120. package/dist/cjs/helperComponents/MobilePresetsScreen/index.js +17 -0
  121. package/dist/cjs/helperComponents/MobileTimePickerDropdown/MobileTimePickerDropdown.d.ts +6 -0
  122. package/dist/cjs/helperComponents/MobileTimePickerDropdown/MobileTimePickerDropdown.js +69 -0
  123. package/dist/cjs/helperComponents/MobileTimePickerDropdown/index.d.ts +1 -0
  124. package/dist/cjs/helperComponents/MobileTimePickerDropdown/index.js +17 -0
  125. package/dist/cjs/helperComponents/MobileTimeScreen/MobileTimeScreen.d.ts +9 -0
  126. package/dist/cjs/helperComponents/MobileTimeScreen/MobileTimeScreen.js +14 -0
  127. package/dist/cjs/helperComponents/MobileTimeScreen/index.d.ts +1 -0
  128. package/dist/cjs/helperComponents/MobileTimeScreen/index.js +17 -0
  129. package/dist/cjs/helperComponents/MonthView/MonthView.d.ts +1 -0
  130. package/dist/cjs/helperComponents/MonthView/MonthView.js +76 -0
  131. package/dist/cjs/helperComponents/MonthView/constants.d.ts +2 -0
  132. package/dist/cjs/helperComponents/MonthView/constants.js +5 -0
  133. package/dist/cjs/helperComponents/MonthView/index.d.ts +1 -0
  134. package/dist/cjs/helperComponents/MonthView/index.js +17 -0
  135. package/dist/cjs/helperComponents/MonthView/utils.d.ts +2 -0
  136. package/dist/cjs/helperComponents/MonthView/utils.js +23 -0
  137. package/dist/cjs/helperComponents/NavButton/NavButton.d.ts +15 -0
  138. package/dist/cjs/helperComponents/NavButton/NavButton.js +49 -0
  139. package/dist/cjs/helperComponents/NavButton/index.d.ts +1 -0
  140. package/dist/cjs/helperComponents/NavButton/index.js +17 -0
  141. package/dist/cjs/helperComponents/PeriodPresetsList/PeriodPresetsList.d.ts +10 -0
  142. package/dist/cjs/helperComponents/PeriodPresetsList/PeriodPresetsList.js +21 -0
  143. package/dist/cjs/helperComponents/PeriodPresetsList/index.d.ts +1 -0
  144. package/dist/cjs/helperComponents/PeriodPresetsList/index.js +17 -0
  145. package/dist/cjs/helperComponents/PeriodPresetsList/utils.d.ts +5 -0
  146. package/dist/cjs/helperComponents/PeriodPresetsList/utils.js +56 -0
  147. package/dist/cjs/helperComponents/TimeList/TimeList.d.ts +16 -0
  148. package/dist/cjs/helperComponents/TimeList/TimeList.js +29 -0
  149. package/dist/cjs/helperComponents/TimeList/index.d.ts +1 -0
  150. package/dist/cjs/helperComponents/TimeList/index.js +17 -0
  151. package/dist/cjs/helperComponents/TimeList/styles.module.css +29 -0
  152. package/dist/cjs/helperComponents/TimePickerBase/TimePickerBase.d.ts +7 -0
  153. package/dist/cjs/helperComponents/TimePickerBase/TimePickerBase.js +132 -0
  154. package/dist/cjs/helperComponents/TimePickerBase/index.d.ts +1 -0
  155. package/dist/cjs/helperComponents/TimePickerBase/index.js +17 -0
  156. package/dist/cjs/helperComponents/TimePickerBase/styles.module.css +108 -0
  157. package/dist/cjs/helperComponents/TimePickerDrum/TimePickerDrum.d.ts +24 -0
  158. package/dist/cjs/helperComponents/TimePickerDrum/TimePickerDrum.js +77 -0
  159. package/dist/cjs/helperComponents/TimePickerDrum/TimePickerDrumWheelColumn.d.ts +34 -0
  160. package/dist/cjs/helperComponents/TimePickerDrum/TimePickerDrumWheelColumn.js +225 -0
  161. package/dist/cjs/helperComponents/TimePickerDrum/constants.d.ts +11 -0
  162. package/dist/cjs/helperComponents/TimePickerDrum/constants.js +15 -0
  163. package/dist/cjs/helperComponents/TimePickerDrum/index.d.ts +3 -0
  164. package/dist/cjs/helperComponents/TimePickerDrum/index.js +21 -0
  165. package/dist/cjs/helperComponents/TimePickerDrum/styles.module.css +297 -0
  166. package/dist/cjs/helperComponents/TimePickerDrum/types.d.ts +59 -0
  167. package/dist/cjs/helperComponents/TimePickerDrum/types.js +2 -0
  168. package/dist/cjs/helperComponents/TimePickerDrum/utils.d.ts +36 -0
  169. package/dist/cjs/helperComponents/TimePickerDrum/utils.js +122 -0
  170. package/dist/cjs/helperComponents/WeekRow/WeekRow.d.ts +1 -0
  171. package/dist/cjs/helperComponents/WeekRow/WeekRow.js +21 -0
  172. package/dist/cjs/helperComponents/WeekRow/index.d.ts +1 -0
  173. package/dist/cjs/helperComponents/WeekRow/index.js +17 -0
  174. package/dist/cjs/helperComponents/WeekRow/styles.module.css +3 -0
  175. package/dist/cjs/helperComponents/WeekRow/utils.d.ts +3 -0
  176. package/dist/cjs/helperComponents/WeekRow/utils.js +16 -0
  177. package/dist/cjs/helperComponents/YearView/YearView.d.ts +1 -0
  178. package/dist/cjs/helperComponents/YearView/YearView.js +57 -0
  179. package/dist/cjs/helperComponents/YearView/index.d.ts +1 -0
  180. package/dist/cjs/helperComponents/YearView/index.js +17 -0
  181. package/dist/cjs/helperComponents/YearView/utils.d.ts +2 -0
  182. package/dist/cjs/helperComponents/YearView/utils.js +19 -0
  183. package/dist/cjs/helperComponents/index.d.ts +4 -0
  184. package/dist/cjs/helperComponents/index.js +20 -0
  185. package/dist/cjs/hooks/classifyCell.d.ts +34 -0
  186. package/dist/cjs/hooks/classifyCell.js +45 -0
  187. package/dist/cjs/hooks/index.d.ts +7 -0
  188. package/dist/cjs/hooks/index.js +23 -0
  189. package/dist/cjs/hooks/useCalendarContext.d.ts +1 -0
  190. package/dist/cjs/hooks/useCalendarContext.js +8 -0
  191. package/dist/cjs/hooks/useDateAndTime.d.ts +14 -0
  192. package/dist/cjs/hooks/useDateAndTime.js +111 -0
  193. package/dist/cjs/hooks/useGrid.d.ts +13 -0
  194. package/dist/cjs/hooks/useGrid.js +80 -0
  195. package/dist/cjs/hooks/useOpenTrigger.d.ts +3 -0
  196. package/dist/cjs/hooks/useOpenTrigger.js +25 -0
  197. package/dist/cjs/hooks/useTimeDrumHandlers.d.ts +8 -0
  198. package/dist/cjs/hooks/useTimeDrumHandlers.js +20 -0
  199. package/dist/cjs/hooks/useTimePickerValueBridge.d.ts +22 -0
  200. package/dist/cjs/hooks/useTimePickerValueBridge.js +74 -0
  201. package/dist/cjs/index.d.ts +4 -0
  202. package/dist/cjs/index.js +20 -0
  203. package/dist/cjs/locale/index.d.ts +95 -0
  204. package/dist/cjs/locale/index.js +52 -0
  205. package/dist/cjs/package.json +3 -0
  206. package/dist/cjs/style.css +1126 -0
  207. package/dist/cjs/types.d.ts +78 -0
  208. package/dist/cjs/types.js +2 -0
  209. package/dist/cjs/utils.d.ts +36 -0
  210. package/dist/cjs/utils.js +130 -0
  211. package/dist/esm/components/Calendar/Calendar.d.ts +128 -0
  212. package/dist/esm/components/Calendar/Calendar.js +22 -0
  213. package/dist/esm/components/Calendar/index.d.ts +1 -0
  214. package/dist/esm/components/Calendar/index.js +1 -0
  215. package/dist/esm/components/Calendar/utils.d.ts +3 -0
  216. package/dist/esm/components/Calendar/utils.js +15 -0
  217. package/dist/esm/components/CalendarDropdown/CalendarDropdown.d.ts +22 -0
  218. package/dist/esm/components/CalendarDropdown/CalendarDropdown.js +8 -0
  219. package/dist/esm/components/CalendarDropdown/index.d.ts +1 -0
  220. package/dist/esm/components/CalendarDropdown/index.js +1 -0
  221. package/dist/esm/components/CalendarDropdown/styles.module.css +9 -0
  222. package/dist/esm/components/TimePicker/TimePicker.d.ts +34 -0
  223. package/dist/esm/components/TimePicker/TimePicker.js +132 -0
  224. package/dist/esm/components/TimePicker/constants.d.ts +1 -0
  225. package/dist/esm/components/TimePicker/constants.js +1 -0
  226. package/dist/esm/components/TimePicker/index.d.ts +1 -0
  227. package/dist/esm/components/TimePicker/index.js +1 -0
  228. package/dist/esm/components/TimePicker/styles.module.css +12 -0
  229. package/dist/esm/components/TimePickerDropdown/TimePickerDropdown.d.ts +22 -0
  230. package/dist/esm/components/TimePickerDropdown/TimePickerDropdown.js +8 -0
  231. package/dist/esm/components/TimePickerDropdown/index.d.ts +1 -0
  232. package/dist/esm/components/TimePickerDropdown/index.js +1 -0
  233. package/dist/esm/components/TimePickerDropdown/styles.module.css +19 -0
  234. package/dist/esm/components/index.d.ts +4 -0
  235. package/dist/esm/components/index.js +4 -0
  236. package/dist/esm/constants.d.ts +68 -0
  237. package/dist/esm/constants.js +61 -0
  238. package/dist/esm/helperComponents/CalendarBase/CalendarBase.d.ts +27 -0
  239. package/dist/esm/helperComponents/CalendarBase/CalendarBase.js +145 -0
  240. package/dist/esm/helperComponents/CalendarBase/hooks.d.ts +11 -0
  241. package/dist/esm/helperComponents/CalendarBase/hooks.js +36 -0
  242. package/dist/esm/helperComponents/CalendarBase/index.d.ts +1 -0
  243. package/dist/esm/helperComponents/CalendarBase/index.js +1 -0
  244. package/dist/esm/helperComponents/CalendarBase/styles.module.css +100 -0
  245. package/dist/esm/helperComponents/CalendarBody/CalendarBody.d.ts +1 -0
  246. package/dist/esm/helperComponents/CalendarBody/CalendarBody.js +18 -0
  247. package/dist/esm/helperComponents/CalendarBody/index.d.ts +1 -0
  248. package/dist/esm/helperComponents/CalendarBody/index.js +1 -0
  249. package/dist/esm/helperComponents/CalendarContext/CalendarContext.d.ts +51 -0
  250. package/dist/esm/helperComponents/CalendarContext/CalendarContext.js +44 -0
  251. package/dist/esm/helperComponents/CalendarContext/index.d.ts +1 -0
  252. package/dist/esm/helperComponents/CalendarContext/index.js +1 -0
  253. package/dist/esm/helperComponents/DecadeView/DecadeView.d.ts +1 -0
  254. package/dist/esm/helperComponents/DecadeView/DecadeView.js +42 -0
  255. package/dist/esm/helperComponents/DecadeView/index.d.ts +1 -0
  256. package/dist/esm/helperComponents/DecadeView/index.js +1 -0
  257. package/dist/esm/helperComponents/DecadeView/utils.d.ts +2 -0
  258. package/dist/esm/helperComponents/DecadeView/utils.js +15 -0
  259. package/dist/esm/helperComponents/DesktopCalendarDropdown/DesktopCalendarDropdown.d.ts +2 -0
  260. package/dist/esm/helperComponents/DesktopCalendarDropdown/DesktopCalendarDropdown.js +24 -0
  261. package/dist/esm/helperComponents/DesktopCalendarDropdown/index.d.ts +1 -0
  262. package/dist/esm/helperComponents/DesktopCalendarDropdown/index.js +1 -0
  263. package/dist/esm/helperComponents/DesktopTimePickerDropdown/DesktopTimePickerDropdown.d.ts +2 -0
  264. package/dist/esm/helperComponents/DesktopTimePickerDropdown/DesktopTimePickerDropdown.js +111 -0
  265. package/dist/esm/helperComponents/DesktopTimePickerDropdown/index.d.ts +1 -0
  266. package/dist/esm/helperComponents/DesktopTimePickerDropdown/index.js +1 -0
  267. package/dist/esm/helperComponents/Footer/Footer.d.ts +20 -0
  268. package/dist/esm/helperComponents/Footer/Footer.js +94 -0
  269. package/dist/esm/helperComponents/Footer/index.d.ts +1 -0
  270. package/dist/esm/helperComponents/Footer/index.js +1 -0
  271. package/dist/esm/helperComponents/Footer/styles.module.css +15 -0
  272. package/dist/esm/helperComponents/Grid/Grid.d.ts +5 -0
  273. package/dist/esm/helperComponents/Grid/Grid.js +17 -0
  274. package/dist/esm/helperComponents/Grid/index.d.ts +1 -0
  275. package/dist/esm/helperComponents/Grid/index.js +1 -0
  276. package/dist/esm/helperComponents/Grid/styles.module.css +5 -0
  277. package/dist/esm/helperComponents/Header/Header.d.ts +1 -0
  278. package/dist/esm/helperComponents/Header/Header.js +62 -0
  279. package/dist/esm/helperComponents/Header/constants.d.ts +3 -0
  280. package/dist/esm/helperComponents/Header/constants.js +3 -0
  281. package/dist/esm/helperComponents/Header/hooks.d.ts +1 -0
  282. package/dist/esm/helperComponents/Header/hooks.js +20 -0
  283. package/dist/esm/helperComponents/Header/index.d.ts +1 -0
  284. package/dist/esm/helperComponents/Header/index.js +1 -0
  285. package/dist/esm/helperComponents/Header/styles.module.css +28 -0
  286. package/dist/esm/helperComponents/Header/utils.d.ts +2 -0
  287. package/dist/esm/helperComponents/Header/utils.js +13 -0
  288. package/dist/esm/helperComponents/Item/Item.d.ts +21 -0
  289. package/dist/esm/helperComponents/Item/Item.js +69 -0
  290. package/dist/esm/helperComponents/Item/hooks.d.ts +30 -0
  291. package/dist/esm/helperComponents/Item/hooks.js +68 -0
  292. package/dist/esm/helperComponents/Item/index.d.ts +1 -0
  293. package/dist/esm/helperComponents/Item/index.js +1 -0
  294. package/dist/esm/helperComponents/Item/styles.module.css +355 -0
  295. package/dist/esm/helperComponents/MobileCalendar/MobileCalendar.d.ts +25 -0
  296. package/dist/esm/helperComponents/MobileCalendar/MobileCalendar.js +302 -0
  297. package/dist/esm/helperComponents/MobileCalendar/index.d.ts +1 -0
  298. package/dist/esm/helperComponents/MobileCalendar/index.js +1 -0
  299. package/dist/esm/helperComponents/MobileCalendar/levelConfig.d.ts +30 -0
  300. package/dist/esm/helperComponents/MobileCalendar/levelConfig.js +66 -0
  301. package/dist/esm/helperComponents/MobileCalendar/styles.module.css +35 -0
  302. package/dist/esm/helperComponents/MobileCalendarDropdown/MobileCalendarDropdown.d.ts +5 -0
  303. package/dist/esm/helperComponents/MobileCalendarDropdown/MobileCalendarDropdown.js +29 -0
  304. package/dist/esm/helperComponents/MobileCalendarDropdown/index.d.ts +1 -0
  305. package/dist/esm/helperComponents/MobileCalendarDropdown/index.js +1 -0
  306. package/dist/esm/helperComponents/MobileFooter/MobileFooter.d.ts +12 -0
  307. package/dist/esm/helperComponents/MobileFooter/MobileFooter.js +29 -0
  308. package/dist/esm/helperComponents/MobileFooter/format.d.ts +10 -0
  309. package/dist/esm/helperComponents/MobileFooter/format.js +57 -0
  310. package/dist/esm/helperComponents/MobileFooter/index.d.ts +1 -0
  311. package/dist/esm/helperComponents/MobileFooter/index.js +1 -0
  312. package/dist/esm/helperComponents/MobileFooter/styles.module.css +38 -0
  313. package/dist/esm/helperComponents/MobilePeriodBlock/MobilePeriodBlock.d.ts +18 -0
  314. package/dist/esm/helperComponents/MobilePeriodBlock/MobilePeriodBlock.js +34 -0
  315. package/dist/esm/helperComponents/MobilePeriodBlock/index.d.ts +1 -0
  316. package/dist/esm/helperComponents/MobilePeriodBlock/index.js +1 -0
  317. package/dist/esm/helperComponents/MobilePeriodBlock/styles.module.css +56 -0
  318. package/dist/esm/helperComponents/MobilePeriodScroller/MobilePeriodScroller.d.ts +21 -0
  319. package/dist/esm/helperComponents/MobilePeriodScroller/MobilePeriodScroller.js +86 -0
  320. package/dist/esm/helperComponents/MobilePeriodScroller/index.d.ts +1 -0
  321. package/dist/esm/helperComponents/MobilePeriodScroller/index.js +1 -0
  322. package/dist/esm/helperComponents/MobilePeriodScroller/styles.module.css +17 -0
  323. package/dist/esm/helperComponents/MobilePresetsScreen/MobilePresetsScreen.d.ts +6 -0
  324. package/dist/esm/helperComponents/MobilePresetsScreen/MobilePresetsScreen.js +5 -0
  325. package/dist/esm/helperComponents/MobilePresetsScreen/index.d.ts +1 -0
  326. package/dist/esm/helperComponents/MobilePresetsScreen/index.js +1 -0
  327. package/dist/esm/helperComponents/MobileTimePickerDropdown/MobileTimePickerDropdown.d.ts +6 -0
  328. package/dist/esm/helperComponents/MobileTimePickerDropdown/MobileTimePickerDropdown.js +66 -0
  329. package/dist/esm/helperComponents/MobileTimePickerDropdown/index.d.ts +1 -0
  330. package/dist/esm/helperComponents/MobileTimePickerDropdown/index.js +1 -0
  331. package/dist/esm/helperComponents/MobileTimeScreen/MobileTimeScreen.d.ts +9 -0
  332. package/dist/esm/helperComponents/MobileTimeScreen/MobileTimeScreen.js +11 -0
  333. package/dist/esm/helperComponents/MobileTimeScreen/index.d.ts +1 -0
  334. package/dist/esm/helperComponents/MobileTimeScreen/index.js +1 -0
  335. package/dist/esm/helperComponents/MonthView/MonthView.d.ts +1 -0
  336. package/dist/esm/helperComponents/MonthView/MonthView.js +73 -0
  337. package/dist/esm/helperComponents/MonthView/constants.d.ts +2 -0
  338. package/dist/esm/helperComponents/MonthView/constants.js +2 -0
  339. package/dist/esm/helperComponents/MonthView/index.d.ts +1 -0
  340. package/dist/esm/helperComponents/MonthView/index.js +1 -0
  341. package/dist/esm/helperComponents/MonthView/utils.d.ts +2 -0
  342. package/dist/esm/helperComponents/MonthView/utils.js +19 -0
  343. package/dist/esm/helperComponents/NavButton/NavButton.d.ts +15 -0
  344. package/dist/esm/helperComponents/NavButton/NavButton.js +46 -0
  345. package/dist/esm/helperComponents/NavButton/index.d.ts +1 -0
  346. package/dist/esm/helperComponents/NavButton/index.js +1 -0
  347. package/dist/esm/helperComponents/PeriodPresetsList/PeriodPresetsList.d.ts +10 -0
  348. package/dist/esm/helperComponents/PeriodPresetsList/PeriodPresetsList.js +18 -0
  349. package/dist/esm/helperComponents/PeriodPresetsList/index.d.ts +1 -0
  350. package/dist/esm/helperComponents/PeriodPresetsList/index.js +1 -0
  351. package/dist/esm/helperComponents/PeriodPresetsList/utils.d.ts +5 -0
  352. package/dist/esm/helperComponents/PeriodPresetsList/utils.js +53 -0
  353. package/dist/esm/helperComponents/TimeList/TimeList.d.ts +16 -0
  354. package/dist/esm/helperComponents/TimeList/TimeList.js +23 -0
  355. package/dist/esm/helperComponents/TimeList/index.d.ts +1 -0
  356. package/dist/esm/helperComponents/TimeList/index.js +1 -0
  357. package/dist/esm/helperComponents/TimeList/styles.module.css +29 -0
  358. package/dist/esm/helperComponents/TimePickerBase/TimePickerBase.d.ts +7 -0
  359. package/dist/esm/helperComponents/TimePickerBase/TimePickerBase.js +126 -0
  360. package/dist/esm/helperComponents/TimePickerBase/index.d.ts +1 -0
  361. package/dist/esm/helperComponents/TimePickerBase/index.js +1 -0
  362. package/dist/esm/helperComponents/TimePickerBase/styles.module.css +108 -0
  363. package/dist/esm/helperComponents/TimePickerDrum/TimePickerDrum.d.ts +24 -0
  364. package/dist/esm/helperComponents/TimePickerDrum/TimePickerDrum.js +71 -0
  365. package/dist/esm/helperComponents/TimePickerDrum/TimePickerDrumWheelColumn.d.ts +34 -0
  366. package/dist/esm/helperComponents/TimePickerDrum/TimePickerDrumWheelColumn.js +219 -0
  367. package/dist/esm/helperComponents/TimePickerDrum/constants.d.ts +11 -0
  368. package/dist/esm/helperComponents/TimePickerDrum/constants.js +11 -0
  369. package/dist/esm/helperComponents/TimePickerDrum/index.d.ts +3 -0
  370. package/dist/esm/helperComponents/TimePickerDrum/index.js +3 -0
  371. package/dist/esm/helperComponents/TimePickerDrum/styles.module.css +297 -0
  372. package/dist/esm/helperComponents/TimePickerDrum/types.d.ts +59 -0
  373. package/dist/esm/helperComponents/TimePickerDrum/types.js +1 -0
  374. package/dist/esm/helperComponents/TimePickerDrum/utils.d.ts +36 -0
  375. package/dist/esm/helperComponents/TimePickerDrum/utils.js +114 -0
  376. package/dist/esm/helperComponents/WeekRow/WeekRow.d.ts +1 -0
  377. package/dist/esm/helperComponents/WeekRow/WeekRow.js +15 -0
  378. package/dist/esm/helperComponents/WeekRow/index.d.ts +1 -0
  379. package/dist/esm/helperComponents/WeekRow/index.js +1 -0
  380. package/dist/esm/helperComponents/WeekRow/styles.module.css +3 -0
  381. package/dist/esm/helperComponents/WeekRow/utils.d.ts +3 -0
  382. package/dist/esm/helperComponents/WeekRow/utils.js +12 -0
  383. package/dist/esm/helperComponents/YearView/YearView.d.ts +1 -0
  384. package/dist/esm/helperComponents/YearView/YearView.js +54 -0
  385. package/dist/esm/helperComponents/YearView/index.d.ts +1 -0
  386. package/dist/esm/helperComponents/YearView/index.js +1 -0
  387. package/dist/esm/helperComponents/YearView/utils.d.ts +2 -0
  388. package/dist/esm/helperComponents/YearView/utils.js +15 -0
  389. package/dist/esm/helperComponents/index.d.ts +4 -0
  390. package/dist/esm/helperComponents/index.js +4 -0
  391. package/dist/esm/hooks/classifyCell.d.ts +34 -0
  392. package/dist/esm/hooks/classifyCell.js +42 -0
  393. package/dist/esm/hooks/index.d.ts +7 -0
  394. package/dist/esm/hooks/index.js +7 -0
  395. package/dist/esm/hooks/useCalendarContext.d.ts +1 -0
  396. package/dist/esm/hooks/useCalendarContext.js +5 -0
  397. package/dist/esm/hooks/useDateAndTime.d.ts +14 -0
  398. package/dist/esm/hooks/useDateAndTime.js +108 -0
  399. package/dist/esm/hooks/useGrid.d.ts +13 -0
  400. package/dist/esm/hooks/useGrid.js +77 -0
  401. package/dist/esm/hooks/useOpenTrigger.d.ts +3 -0
  402. package/dist/esm/hooks/useOpenTrigger.js +22 -0
  403. package/dist/esm/hooks/useTimeDrumHandlers.d.ts +8 -0
  404. package/dist/esm/hooks/useTimeDrumHandlers.js +17 -0
  405. package/dist/esm/hooks/useTimePickerValueBridge.d.ts +22 -0
  406. package/dist/esm/hooks/useTimePickerValueBridge.js +71 -0
  407. package/dist/esm/index.d.ts +4 -0
  408. package/dist/esm/index.js +4 -0
  409. package/dist/esm/locale/index.d.ts +95 -0
  410. package/dist/esm/locale/index.js +49 -0
  411. package/dist/esm/style.css +1126 -0
  412. package/dist/esm/types.d.ts +78 -0
  413. package/dist/esm/types.js +1 -0
  414. package/dist/esm/utils.d.ts +36 -0
  415. package/dist/esm/utils.js +100 -0
  416. package/dist/tsconfig.cjs.tsbuildinfo +1 -0
  417. package/dist/tsconfig.esm.tsbuildinfo +1 -0
  418. package/package.json +63 -0
  419. package/src/components/Calendar/Calendar.tsx +172 -0
  420. package/src/components/Calendar/index.ts +1 -0
  421. package/src/components/Calendar/utils.ts +22 -0
  422. package/src/components/CalendarDropdown/CalendarDropdown.tsx +51 -0
  423. package/src/components/CalendarDropdown/index.ts +1 -0
  424. package/src/components/CalendarDropdown/styles.module.scss +8 -0
  425. package/src/components/TimePicker/TimePicker.tsx +218 -0
  426. package/src/components/TimePicker/constants.ts +1 -0
  427. package/src/components/TimePicker/index.ts +1 -0
  428. package/src/components/TimePicker/styles.module.scss +13 -0
  429. package/src/components/TimePickerDropdown/TimePickerDropdown.tsx +55 -0
  430. package/src/components/TimePickerDropdown/index.ts +1 -0
  431. package/src/components/TimePickerDropdown/styles.module.scss +25 -0
  432. package/src/components/index.ts +4 -0
  433. package/src/constants.ts +68 -0
  434. package/src/helperComponents/CalendarBase/CalendarBase.tsx +299 -0
  435. package/src/helperComponents/CalendarBase/hooks.ts +48 -0
  436. package/src/helperComponents/CalendarBase/index.ts +1 -0
  437. package/src/helperComponents/CalendarBase/styles.module.scss +84 -0
  438. package/src/helperComponents/CalendarBody/CalendarBody.tsx +19 -0
  439. package/src/helperComponents/CalendarBody/index.ts +1 -0
  440. package/src/helperComponents/CalendarContext/CalendarContext.tsx +107 -0
  441. package/src/helperComponents/CalendarContext/index.ts +1 -0
  442. package/src/helperComponents/DecadeView/DecadeView.tsx +68 -0
  443. package/src/helperComponents/DecadeView/index.ts +1 -0
  444. package/src/helperComponents/DecadeView/utils.ts +19 -0
  445. package/src/helperComponents/DesktopCalendarDropdown/DesktopCalendarDropdown.tsx +80 -0
  446. package/src/helperComponents/DesktopCalendarDropdown/index.ts +1 -0
  447. package/src/helperComponents/DesktopTimePickerDropdown/DesktopTimePickerDropdown.tsx +209 -0
  448. package/src/helperComponents/DesktopTimePickerDropdown/index.ts +1 -0
  449. package/src/helperComponents/Footer/Footer.tsx +163 -0
  450. package/src/helperComponents/Footer/index.ts +1 -0
  451. package/src/helperComponents/Footer/styles.module.scss +19 -0
  452. package/src/helperComponents/Grid/Grid.tsx +52 -0
  453. package/src/helperComponents/Grid/index.ts +1 -0
  454. package/src/helperComponents/Grid/styles.module.scss +5 -0
  455. package/src/helperComponents/Header/Header.tsx +123 -0
  456. package/src/helperComponents/Header/constants.ts +5 -0
  457. package/src/helperComponents/Header/hooks.ts +22 -0
  458. package/src/helperComponents/Header/index.ts +1 -0
  459. package/src/helperComponents/Header/styles.module.scss +25 -0
  460. package/src/helperComponents/Header/utils.ts +15 -0
  461. package/src/helperComponents/Item/Item.tsx +175 -0
  462. package/src/helperComponents/Item/hooks.ts +91 -0
  463. package/src/helperComponents/Item/index.ts +1 -0
  464. package/src/helperComponents/Item/styles.module.scss +284 -0
  465. package/src/helperComponents/MobileCalendar/MobileCalendar.tsx +513 -0
  466. package/src/helperComponents/MobileCalendar/index.ts +1 -0
  467. package/src/helperComponents/MobileCalendar/levelConfig.ts +109 -0
  468. package/src/helperComponents/MobileCalendar/styles.module.scss +39 -0
  469. package/src/helperComponents/MobileCalendarDropdown/MobileCalendarDropdown.tsx +85 -0
  470. package/src/helperComponents/MobileCalendarDropdown/index.ts +1 -0
  471. package/src/helperComponents/MobileFooter/MobileFooter.tsx +58 -0
  472. package/src/helperComponents/MobileFooter/format.ts +82 -0
  473. package/src/helperComponents/MobileFooter/index.ts +1 -0
  474. package/src/helperComponents/MobileFooter/styles.module.scss +39 -0
  475. package/src/helperComponents/MobilePeriodBlock/MobilePeriodBlock.tsx +82 -0
  476. package/src/helperComponents/MobilePeriodBlock/index.ts +1 -0
  477. package/src/helperComponents/MobilePeriodBlock/styles.module.scss +37 -0
  478. package/src/helperComponents/MobilePeriodScroller/MobilePeriodScroller.tsx +129 -0
  479. package/src/helperComponents/MobilePeriodScroller/index.ts +1 -0
  480. package/src/helperComponents/MobilePeriodScroller/styles.module.scss +23 -0
  481. package/src/helperComponents/MobilePresetsScreen/MobilePresetsScreen.tsx +11 -0
  482. package/src/helperComponents/MobilePresetsScreen/index.ts +1 -0
  483. package/src/helperComponents/MobileTimePickerDropdown/MobileTimePickerDropdown.tsx +126 -0
  484. package/src/helperComponents/MobileTimePickerDropdown/index.ts +1 -0
  485. package/src/helperComponents/MobileTimeScreen/MobileTimeScreen.tsx +38 -0
  486. package/src/helperComponents/MobileTimeScreen/index.ts +1 -0
  487. package/src/helperComponents/MonthView/MonthView.tsx +114 -0
  488. package/src/helperComponents/MonthView/constants.ts +3 -0
  489. package/src/helperComponents/MonthView/index.ts +1 -0
  490. package/src/helperComponents/MonthView/utils.ts +25 -0
  491. package/src/helperComponents/NavButton/NavButton.tsx +109 -0
  492. package/src/helperComponents/NavButton/index.ts +1 -0
  493. package/src/helperComponents/PeriodPresetsList/PeriodPresetsList.tsx +44 -0
  494. package/src/helperComponents/PeriodPresetsList/index.ts +1 -0
  495. package/src/helperComponents/PeriodPresetsList/utils.ts +63 -0
  496. package/src/helperComponents/TimeList/TimeList.tsx +77 -0
  497. package/src/helperComponents/TimeList/index.ts +1 -0
  498. package/src/helperComponents/TimeList/styles.module.scss +19 -0
  499. package/src/helperComponents/TimePickerBase/TimePickerBase.tsx +223 -0
  500. package/src/helperComponents/TimePickerBase/index.ts +1 -0
  501. package/src/helperComponents/TimePickerBase/styles.module.scss +105 -0
  502. package/src/helperComponents/TimePickerDrum/TimePickerDrum.tsx +187 -0
  503. package/src/helperComponents/TimePickerDrum/TimePickerDrumWheelColumn.tsx +344 -0
  504. package/src/helperComponents/TimePickerDrum/constants.ts +13 -0
  505. package/src/helperComponents/TimePickerDrum/index.ts +3 -0
  506. package/src/helperComponents/TimePickerDrum/styles.module.scss +277 -0
  507. package/src/helperComponents/TimePickerDrum/types.ts +62 -0
  508. package/src/helperComponents/TimePickerDrum/utils.ts +130 -0
  509. package/src/helperComponents/WeekRow/WeekRow.tsx +34 -0
  510. package/src/helperComponents/WeekRow/index.ts +1 -0
  511. package/src/helperComponents/WeekRow/styles.module.scss +3 -0
  512. package/src/helperComponents/WeekRow/utils.ts +18 -0
  513. package/src/helperComponents/YearView/YearView.tsx +83 -0
  514. package/src/helperComponents/YearView/index.ts +1 -0
  515. package/src/helperComponents/YearView/utils.ts +19 -0
  516. package/src/helperComponents/index.ts +4 -0
  517. package/src/hooks/classifyCell.ts +104 -0
  518. package/src/hooks/index.ts +7 -0
  519. package/src/hooks/useCalendarContext.ts +7 -0
  520. package/src/hooks/useDateAndTime.ts +130 -0
  521. package/src/hooks/useGrid.ts +123 -0
  522. package/src/hooks/useOpenTrigger.tsx +35 -0
  523. package/src/hooks/useTimeDrumHandlers.ts +35 -0
  524. package/src/hooks/useTimePickerValueBridge.ts +125 -0
  525. package/src/index.ts +4 -0
  526. package/src/locale/index.ts +53 -0
  527. package/src/types.ts +88 -0
  528. package/src/utils.ts +151 -0
@@ -0,0 +1,78 @@
1
+ import { ValueOf } from '@cloud-ru/ds-utils';
2
+ import { KeyboardEventHandler } from 'react';
3
+ import { CALENDAR_MODE, RANGE_POSITION, SIZE, VIEW_MODE } from './constants';
4
+ export type RangePosition = ValueOf<typeof RANGE_POSITION>;
5
+ export type ViewMode = ValueOf<typeof VIEW_MODE>;
6
+ export type Size = ValueOf<typeof SIZE>;
7
+ export type CalendarMode = ValueOf<typeof CALENDAR_MODE>;
8
+ export type Range = [Date, Date];
9
+ export type BaseGridItem = {
10
+ date: Date;
11
+ address: [number, number];
12
+ };
13
+ export type BaseGrid = BaseGridItem[][];
14
+ export type Cell = {
15
+ /** Дата ячейки (для колбэков выбора) */
16
+ date: Date;
17
+ /** Адрес ячейки в сетке — синхронизация фокуса и клавиатуры */
18
+ address: [number, number];
19
+ /** Значение */
20
+ label: string;
21
+ /** Является ли сегодняшним днем */
22
+ current: boolean;
23
+ /** Выбран ли элемент */
24
+ checked: boolean;
25
+ /** Деактивирован ли */
26
+ disabled?: boolean;
27
+ /** Является ли выходным/праздником */
28
+ holiday?: boolean;
29
+ /**
30
+ * Относится ли к иному периоду (не к просматриваемому в данный момент)
31
+ */
32
+ another: boolean;
33
+ /**
34
+ * Является ли частью range
35
+ * @default out
36
+ */
37
+ rangePosition: RangePosition;
38
+ /** Индекс фокуса кнопки */
39
+ tabIndex: -1 | 0;
40
+ onSelect?(date: Date): void;
41
+ onPreselect?(date: Date): void;
42
+ onLeave?(): void;
43
+ onKeyDown?: KeyboardEventHandler;
44
+ };
45
+ export type FocusDirection = 'prev' | 'next';
46
+ export type BuildCellProps = {
47
+ isDisabled?: boolean;
48
+ isHoliday?: boolean;
49
+ };
50
+ export type BuildCellPropsFunction = (date: Date, viewMode: ViewMode) => BuildCellProps;
51
+ export type TimeValue = {
52
+ hours?: number;
53
+ minutes?: number;
54
+ seconds?: number;
55
+ };
56
+ export type DateAndTime = TimeValue & {
57
+ year?: number;
58
+ month?: number;
59
+ day?: number;
60
+ };
61
+ export type PresetItem = {
62
+ /** Лейбл пресета */
63
+ label: string;
64
+ /** ID периода */
65
+ id: string;
66
+ /** Период */
67
+ range: Range;
68
+ };
69
+ export type PresetsOptions = {
70
+ /**
71
+ * Включение отображения секции с пресетами
72
+ * @default false
73
+ */
74
+ enabled?: boolean;
75
+ /** Кастомные пресеты быстрого выбора периода относительно текущего момента */
76
+ items?: PresetItem[];
77
+ };
78
+ export type OnKeyDownGetter = (id: number) => KeyboardEventHandler;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,36 @@
1
+ import { Lang } from '@cloud-ru/ds-locale';
2
+ import { CalendarMode, DateAndTime, Range, RangePosition, TimeValue, ViewMode } from './types';
3
+ export declare const isTheSameDecade: (date1: Date, date2: Date) => boolean;
4
+ export declare const isTheSameYear: (date1: Date, date2: Date) => boolean;
5
+ export declare const isTheSameMonth: (date1: Date, date2: Date) => boolean;
6
+ export declare function isTheSameDate(date1: Date, date2: Date): boolean;
7
+ export declare function timeValuesEqual(current: TimeValue | undefined, next: TimeValue): boolean;
8
+ export declare const capitalize: (str: string) => string;
9
+ export declare const getMonthName: (date: Date, locale?: Intl.Locale) => string;
10
+ export declare const getDateLabel: (date: Date) => string;
11
+ export declare const getYearLabel: (date: Date) => string;
12
+ export declare const getMonthShift: (today: Date, targetDate: Date) => number;
13
+ export declare const getYearShift: (today: Date, targetDate: Date) => number;
14
+ export declare const getDecadeShift: (today: Date, targetDate: Date) => number;
15
+ export declare const isTheSameItem: (viewMode: ViewMode, date1: Date, date2: Date) => boolean;
16
+ export declare const sortDates: (dates: Date[]) => Date[];
17
+ export declare const getInRangePosition: (date: Date, viewMode: ViewMode, range?: Range) => RangePosition;
18
+ export declare const getEndOfTheDay: (date: Date) => Date;
19
+ export declare const getStartOfTheMonth: (date: Date) => Date;
20
+ export declare const getEndOfTheMonth: (date: Date) => Date;
21
+ export declare const getStartOfTheYear: (date: Date) => Date;
22
+ export declare const getEndOfTheYear: (date: Date) => Date;
23
+ /**
24
+ * Нормализует выбранный период под границы режима (`setValue` десктопа и мобайла дают одинаковый результат):
25
+ * month/month-range — границы месяца, year/year-range — границы года, иначе — конец дня для верхней границы.
26
+ */
27
+ export declare function normalizeRangeForMode(mode: CalendarMode | 'time', dates: Range): Range;
28
+ export declare const getTestIdBuilder: (testId?: string) => (prefix: string) => string | undefined;
29
+ export declare const getLocale: ({ localeProp, ctxLang }?: {
30
+ localeProp?: Intl.Locale;
31
+ ctxLang?: Lang;
32
+ }) => Intl.Locale;
33
+ export declare const getStartOfWeek: (locale: Intl.Locale) => import("weekstart").DayOfWeek;
34
+ export declare const isWeekend: (date: Date, viewMode: ViewMode) => boolean;
35
+ export declare function isTimePortionComplete(dateAndTime: Pick<DateAndTime, 'hours' | 'minutes' | 'seconds'>, showSeconds?: boolean): boolean;
36
+ export declare const stringifyAddress: (address: [number, number]) => string;
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.stringifyAddress = exports.isWeekend = exports.getStartOfWeek = exports.getLocale = exports.getTestIdBuilder = exports.getEndOfTheYear = exports.getStartOfTheYear = exports.getEndOfTheMonth = exports.getStartOfTheMonth = exports.getEndOfTheDay = exports.getInRangePosition = exports.sortDates = exports.isTheSameItem = exports.getDecadeShift = exports.getYearShift = exports.getMonthShift = exports.getYearLabel = exports.getDateLabel = exports.getMonthName = exports.capitalize = exports.isTheSameMonth = exports.isTheSameYear = exports.isTheSameDecade = void 0;
4
+ exports.isTheSameDate = isTheSameDate;
5
+ exports.timeValuesEqual = timeValuesEqual;
6
+ exports.normalizeRangeForMode = normalizeRangeForMode;
7
+ exports.isTimePortionComplete = isTimePortionComplete;
8
+ const utils_1 = require("@cloud-ru/ds-utils");
9
+ const weekstart_1 = require("weekstart");
10
+ const constants_1 = require("./constants");
11
+ const isTheSameDecade = (date1, date2) => Math.floor(date1.getFullYear() / 10) === Math.floor(date2.getFullYear() / 10);
12
+ exports.isTheSameDecade = isTheSameDecade;
13
+ const isTheSameYear = (date1, date2) => date1.getFullYear() === date2.getFullYear();
14
+ exports.isTheSameYear = isTheSameYear;
15
+ const isTheSameMonth = (date1, date2) => (0, exports.isTheSameYear)(date1, date2) && date1.getMonth() === date2.getMonth();
16
+ exports.isTheSameMonth = isTheSameMonth;
17
+ function isTheSameDate(date1, date2) {
18
+ return (0, exports.isTheSameMonth)(date1, date2) && date1.getDate() === date2.getDate();
19
+ }
20
+ function timeValuesEqual(current, next) {
21
+ if (current === undefined) {
22
+ return false;
23
+ }
24
+ return ((current.hours ?? 0) === (next.hours ?? 0) &&
25
+ (current.minutes ?? 0) === (next.minutes ?? 0) &&
26
+ (current.seconds ?? 0) === (next.seconds ?? 0));
27
+ }
28
+ const capitalize = (str) => str.substring(0, 1).toUpperCase() + str.substring(1);
29
+ exports.capitalize = capitalize;
30
+ const getMonthName = (date, locale) => {
31
+ const monthName = date.toLocaleString(locale, { month: 'long' });
32
+ return (0, exports.capitalize)(monthName);
33
+ };
34
+ exports.getMonthName = getMonthName;
35
+ const getDateLabel = (date) => date.getDate().toString();
36
+ exports.getDateLabel = getDateLabel;
37
+ const getYearLabel = (date) => date.getFullYear().toString();
38
+ exports.getYearLabel = getYearLabel;
39
+ const getMonthShift = (today, targetDate) => {
40
+ const overYearDiff = (targetDate.getFullYear() - today.getFullYear()) * 12;
41
+ const monthsDiff = targetDate.getMonth() - today.getMonth();
42
+ return overYearDiff + monthsDiff;
43
+ };
44
+ exports.getMonthShift = getMonthShift;
45
+ const getYearShift = (today, targetDate) => targetDate.getFullYear() - today.getFullYear();
46
+ exports.getYearShift = getYearShift;
47
+ const getDecadeShift = (today, targetDate) => Math.trunc((targetDate.getFullYear() - today.getFullYear()) / 10);
48
+ exports.getDecadeShift = getDecadeShift;
49
+ const isTheSameItem = (viewMode, date1, date2) => {
50
+ switch (viewMode) {
51
+ case constants_1.VIEW_MODE.Month:
52
+ return isTheSameDate(date1, date2);
53
+ case constants_1.VIEW_MODE.Year:
54
+ return (0, exports.isTheSameMonth)(date1, date2);
55
+ case constants_1.VIEW_MODE.Decade:
56
+ return (0, exports.isTheSameYear)(date1, date2);
57
+ default:
58
+ return false;
59
+ }
60
+ };
61
+ exports.isTheSameItem = isTheSameItem;
62
+ const sortDates = (dates) => [...dates].sort((d1, d2) => d1.valueOf() - d2.valueOf());
63
+ exports.sortDates = sortDates;
64
+ const getInRangePosition = (date, viewMode, range) => {
65
+ if (!range) {
66
+ return constants_1.RANGE_POSITION.Out;
67
+ }
68
+ const [startDate, endDate] = (0, exports.sortDates)(range);
69
+ const isStart = (0, exports.isTheSameItem)(viewMode, date, startDate);
70
+ const isEnd = (0, exports.isTheSameItem)(viewMode, date, endDate);
71
+ if (isStart && isEnd) {
72
+ return constants_1.RANGE_POSITION.StartEnd;
73
+ }
74
+ if (isStart) {
75
+ return constants_1.RANGE_POSITION.Start;
76
+ }
77
+ if (isEnd) {
78
+ return constants_1.RANGE_POSITION.End;
79
+ }
80
+ const [start, end] = [startDate.valueOf(), endDate.valueOf()];
81
+ return date.valueOf() >= start && date.valueOf() <= end ? constants_1.RANGE_POSITION.In : constants_1.RANGE_POSITION.Out;
82
+ };
83
+ exports.getInRangePosition = getInRangePosition;
84
+ const getEndOfTheDay = (date) => new Date(new Date(date.getFullYear(), date.getMonth(), date.getDate() + 1).valueOf() - 1);
85
+ exports.getEndOfTheDay = getEndOfTheDay;
86
+ const getStartOfTheMonth = (date) => new Date(new Date(date.getFullYear(), date.getMonth(), 1).valueOf());
87
+ exports.getStartOfTheMonth = getStartOfTheMonth;
88
+ const getEndOfTheMonth = (date) => new Date(new Date(date.getFullYear(), date.getMonth() + 1, 1).valueOf() - 1);
89
+ exports.getEndOfTheMonth = getEndOfTheMonth;
90
+ const getStartOfTheYear = (date) => new Date(new Date(date.getFullYear(), 0, 1).valueOf());
91
+ exports.getStartOfTheYear = getStartOfTheYear;
92
+ const getEndOfTheYear = (date) => new Date(new Date(date.getFullYear() + 1, 0, 1).valueOf() - 1);
93
+ exports.getEndOfTheYear = getEndOfTheYear;
94
+ /**
95
+ * Нормализует выбранный период под границы режима (`setValue` десктопа и мобайла дают одинаковый результат):
96
+ * month/month-range — границы месяца, year/year-range — границы года, иначе — конец дня для верхней границы.
97
+ */
98
+ function normalizeRangeForMode(mode, dates) {
99
+ const [first, last] = (0, exports.sortDates)(dates);
100
+ switch (mode) {
101
+ case constants_1.CALENDAR_MODE.Month:
102
+ case constants_1.CALENDAR_MODE.MonthRange:
103
+ return [(0, exports.getStartOfTheMonth)(first), (0, exports.getEndOfTheMonth)(last)];
104
+ case constants_1.CALENDAR_MODE.Year:
105
+ case constants_1.CALENDAR_MODE.YearRange:
106
+ return [(0, exports.getStartOfTheYear)(first), (0, exports.getEndOfTheYear)(last)];
107
+ default:
108
+ return [first, (0, exports.getEndOfTheDay)(last)];
109
+ }
110
+ }
111
+ const getTestIdBuilder = (testId) => (prefix) => (testId ? `${prefix}-${testId}` : undefined);
112
+ exports.getTestIdBuilder = getTestIdBuilder;
113
+ const getNavigatorLocale = () => ((0, utils_1.isBrowser)() ? (navigator?.language ?? 'ru-RU') : 'ru-RU');
114
+ const getLocale = ({ localeProp, ctxLang } = {}) => localeProp || new Intl.Locale(ctxLang ? ctxLang.replace('_', '-') : getNavigatorLocale());
115
+ exports.getLocale = getLocale;
116
+ const getStartOfWeek = (locale) => (0, weekstart_1.getWeekStartByLocale)(locale.language);
117
+ exports.getStartOfWeek = getStartOfWeek;
118
+ const isWeekend = (date, viewMode) => {
119
+ if (viewMode === 'month') {
120
+ return date.getDay() === 0 || date.getDay() === 6;
121
+ }
122
+ return false;
123
+ };
124
+ exports.isWeekend = isWeekend;
125
+ function isTimePortionComplete(dateAndTime, showSeconds) {
126
+ const { hours, minutes, seconds } = dateAndTime;
127
+ return [hours, minutes, ...(showSeconds ? [seconds] : [])].every(v => v !== undefined);
128
+ }
129
+ const stringifyAddress = (address) => address.join('-');
130
+ exports.stringifyAddress = stringifyAddress;
@@ -0,0 +1,128 @@
1
+ import { WithSupportProps } from '@cloud-ru/ds-utils';
2
+ import { CSSProperties, ReactNode, RefObject } from 'react';
3
+ import { CALENDAR_MODE } from '../../constants.js';
4
+ import { BuildCellPropsFunction, FocusDirection, PresetsOptions, Range, Size } from '../../types.js';
5
+ type CommonCalendarProps = {
6
+ /**
7
+ * Размер
8
+ * @default m
9
+ */
10
+ size?: Size;
11
+ /** Дата сегодняшнего дня */
12
+ today?: Date | number;
13
+ /** Раскрашивает субботу и воскресенье */
14
+ showHolidays?: boolean;
15
+ /**
16
+ * Колбек установки свойств ячеек календаря. Вызывается на построение каждой ячейки. Принимает два параметра:
17
+ * <br> `Date` - дата ячейки
18
+ * <br> `ViewMode`:
19
+ * <br> - `month` отображение месяца, каждая ячейка - 1 день
20
+ * <br> - `year` отображение года, каждая ячейка - 1 месяц
21
+ * <br> - `decade` отображение декады, каждая ячейка - 1 год
22
+ * <br><br> Колбек должен возвращать объект с полями, отвечающими за отключение и подкраску ячейки.
23
+ * @type (date: Date, viewMode: ViewMode) => { isDisabled?: boolean; isHoliday?: boolean };
24
+ */
25
+ buildCellProps?: BuildCellPropsFunction;
26
+ /** CSS-класс контейнера */
27
+ className?: string;
28
+ /**
29
+ * Отключает предустановленный размер, заставляя компонент подстраиваться к размеру контейнра: (width: 100%, height: 100%).
30
+ * @default true
31
+ */
32
+ fitToContainer?: boolean;
33
+ /** Объект со стилями на контейнер. */
34
+ style?: CSSProperties;
35
+ /** Автофокус */
36
+ autofocus?: boolean;
37
+ /**
38
+ * Локаль, в соответствие с которой выставляется язык названий и первый день недели
39
+ * @default Проставляется в соответствие с языком в настройках браузера
40
+ * @type Intl.Locale
41
+ */
42
+ locale?: Intl.Locale;
43
+ /** Колбек потери фокуса. Вызывается со значением `next`, когда фокус покидает компонент, передвигаясь вперед, по клавише `tab`. Со значением `prev` - по клавише стрелки вверх или `shift + tab`. */
44
+ onFocusLeave?(direction: FocusDirection): void;
45
+ /** Ссылка на управление первым элементом навигации */
46
+ navigationStartRef?: RefObject<{
47
+ focus(): void;
48
+ }>;
49
+ /** Настройки секции с пресетами быстрого выбора периода. Доступны только при mode === 'date-range' и отсутствии buildCellProps (временно PDS-3139) */
50
+ presets?: PresetsOptions;
51
+ /** Рендерится после основной разметки календаря, внутри `CalendarContext` (например футер с Apply в дропдауне). */
52
+ bottomSlot?: ReactNode;
53
+ };
54
+ type DateCalendarProps = CommonCalendarProps & {
55
+ /** Режим работы календаря: <br> - `date` - режим выбора даты */
56
+ mode: typeof CALENDAR_MODE.Date;
57
+ /** Выбранное значение.<br> - в режиме date тип `Date` */
58
+ value?: Date;
59
+ /** Значение по-умолчанию для uncontrolled.<br> - в режиме date тип `Date` */
60
+ defaultValue?: Date;
61
+ /** Колбек выбора значения.<br> - в режиме date принимает тип `Date` */
62
+ onChangeValue?(value: Date): void;
63
+ };
64
+ type MonthCalendarProps = CommonCalendarProps & {
65
+ /** <br> - `month` - режим выбора месяца */
66
+ mode: typeof CALENDAR_MODE.Month;
67
+ /** <br> - в режиме month тип `Date` */
68
+ value?: Date;
69
+ /** <br> - в режиме month тип `Date` */
70
+ defaultValue?: Date;
71
+ /** <br> - в режиме month принимает тип `Date` */
72
+ onChangeValue?(value: Date): void;
73
+ };
74
+ type YearCalendarProps = CommonCalendarProps & {
75
+ /** <br> - `year` - режим выбора года */
76
+ mode: typeof CALENDAR_MODE.Year;
77
+ /** <br> - в режиме year тип `Date` */
78
+ value?: Date;
79
+ /** <br> - в режиме year тип `Date` */
80
+ defaultValue?: Date;
81
+ /** <br> - в режиме year принимает тип `Date` */
82
+ onChangeValue?(value: Date): void;
83
+ };
84
+ type DateTimeCalendarProps = CommonCalendarProps & {
85
+ /** <br> - `date-time` - режим выбора даты и времени */
86
+ mode: typeof CALENDAR_MODE.DateTime;
87
+ /** <br> - в режиме date-time тип `Date` */
88
+ value?: Date;
89
+ /** <br> - в режиме date-time тип `Date` */
90
+ defaultValue?: Date;
91
+ /** <br> - в режиме date-time принимает тип `Date` */
92
+ onChangeValue?(value: Date): void;
93
+ /** Показывать ли секунды (только в режиме date-time) */
94
+ showSeconds?: boolean;
95
+ };
96
+ type RangeCalendarProps = CommonCalendarProps & {
97
+ /** <br> - `date-range` - режим выбора периода */
98
+ mode: typeof CALENDAR_MODE.DateRange;
99
+ /** <br> - в режиме date-range тип `Range` (`[Date, Date]`) */
100
+ value?: Range;
101
+ /** <br> - в режиме date-range тип `Range` (`[Date, Date]`) */
102
+ defaultValue?: Range;
103
+ /** <br> - в режиме date-range принимает тип `Range` */
104
+ onChangeValue?(value: Range): void;
105
+ };
106
+ type MonthRangeCalendarProps = CommonCalendarProps & {
107
+ /** <br> - `month-range` - режим выбора периода из месяцев */
108
+ mode: typeof CALENDAR_MODE.MonthRange;
109
+ /** <br> - в режиме month-range тип `Range` (`[Date, Date]`) */
110
+ value?: Range;
111
+ /** <br> - в режиме month-range тип `Range` (`[Date, Date]`) */
112
+ defaultValue?: Range;
113
+ /** <br> - в режиме month-range принимает тип `Range` */
114
+ onChangeValue?(value: Range): void;
115
+ };
116
+ type YearRangeCalendarProps = CommonCalendarProps & {
117
+ /** <br> - `year-range` - режим выбора периода из лет */
118
+ mode: typeof CALENDAR_MODE.YearRange;
119
+ /** <br> - в режиме year-range тип `Range` (`[Date, Date]`) */
120
+ value?: Range;
121
+ /** <br> - в режиме year-range тип `Range` (`[Date, Date]`) */
122
+ defaultValue?: Range;
123
+ /** <br> - в режиме year-range принимает тип `Range` */
124
+ onChangeValue?(value: Range): void;
125
+ };
126
+ export type CalendarProps = WithSupportProps<DateCalendarProps | RangeCalendarProps | MonthRangeCalendarProps | YearRangeCalendarProps | MonthCalendarProps | DateTimeCalendarProps | YearCalendarProps>;
127
+ export declare function Calendar(props: CalendarProps): import("react/jsx-runtime").JSX.Element;
128
+ export {};
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useCallback, useMemo } from 'react';
3
+ import { CALENDAR_MODE } from '../../constants.js';
4
+ import { CalendarBase } from '../../helperComponents/index.js';
5
+ import { getNormalizedValue } from './utils.js';
6
+ export function Calendar(props) {
7
+ const { onChangeValue, mode, ...rest } = props;
8
+ const changeValueHandler = useCallback((value) => {
9
+ if (mode === CALENDAR_MODE.Date ||
10
+ mode === CALENDAR_MODE.Month ||
11
+ mode === CALENDAR_MODE.Year ||
12
+ mode === CALENDAR_MODE.DateTime) {
13
+ const [date] = value;
14
+ onChangeValue?.(date);
15
+ return;
16
+ }
17
+ onChangeValue?.(value);
18
+ }, [onChangeValue, mode]);
19
+ const value = useMemo(() => getNormalizedValue(props.value), [props.value]);
20
+ const defaultValue = useMemo(() => getNormalizedValue(props.defaultValue), [props.defaultValue]);
21
+ return (_jsx(CalendarBase, { ...rest, mode: mode, value: value, defaultValue: defaultValue, onChangeValue: changeValueHandler }));
22
+ }
@@ -0,0 +1 @@
1
+ export * from './Calendar.js';
@@ -0,0 +1 @@
1
+ export * from './Calendar.js';
@@ -0,0 +1,3 @@
1
+ import { Range } from '../../types.js';
2
+ import { CalendarProps } from './Calendar.js';
3
+ export declare const getNormalizedValue: (value: CalendarProps["value"]) => Range | undefined;
@@ -0,0 +1,15 @@
1
+ function isRangeValue(value) {
2
+ return Array.isArray(value) && value.length === 2 && value[0] instanceof Date && value[1] instanceof Date;
3
+ }
4
+ function isDateValue(value) {
5
+ return value instanceof Date;
6
+ }
7
+ export const getNormalizedValue = (value) => {
8
+ if (isRangeValue(value)) {
9
+ return value;
10
+ }
11
+ if (isDateValue(value)) {
12
+ return [value, value];
13
+ }
14
+ return value;
15
+ };
@@ -0,0 +1,22 @@
1
+ import { DropdownProps } from '@cloud-ru/ds-dropdown';
2
+ import { WithSupportProps } from '@cloud-ru/ds-utils';
3
+ import { ReactNode } from 'react';
4
+ import { CalendarProps } from '../Calendar/index.js';
5
+ type DropdownBridgeProps = Pick<DropdownProps, 'triggerClassName' | 'trigger' | 'placement' | 'hoverDelayOpen' | 'hoverDelayClose' | 'closeOnEscapeKey' | 'triggerClickByKeys' | 'triggerRef' | 'outsideClick' | 'fallbackPlacements' | 'disableSpanWrapper' | 'closeOnPopstate' | 'open' | 'onOpenChange'>;
6
+ /**
7
+ * Адаптивный календарь в триггере. На desktop открывается в popover (`@cloud-ru/ds-dropdown`), на mobile —
8
+ * в `@cloud-ru/ds-bottom-sheet` (раскладка берётся из `@cloud-ru/ds-adaptive`; собственного пропа `layoutType` нет).
9
+ * Пропы позиционирования popover (`placement`, `fallbackPlacements`, `triggerRef`, …) на mobile игнорируются.
10
+ */
11
+ export type CalendarDropdownProps = WithSupportProps<CalendarProps & DropdownBridgeProps & {
12
+ /** Элемент открытия dropdown (триггер). */
13
+ children?: ReactNode;
14
+ /** Закрыть dropdown после нажатия Apply. */
15
+ closeOnApply?: boolean;
16
+ /** Колбек после подтверждения в футере. */
17
+ onApply?(): void;
18
+ /** Колбек по кнопке Current в футере. */
19
+ onCurrent?(): void;
20
+ }>;
21
+ export declare function CalendarDropdown(props: CalendarDropdownProps): import("react/jsx-runtime").JSX.Element;
22
+ export {};
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { isMobileLayout, useAdaptiveLayout } from '@cloud-ru/ds-adaptive';
3
+ import { DesktopCalendarDropdown } from '../../helperComponents/DesktopCalendarDropdown/index.js';
4
+ import { MobileCalendarDropdown } from '../../helperComponents/MobileCalendarDropdown/index.js';
5
+ export function CalendarDropdown(props) {
6
+ const { layoutType } = useAdaptiveLayout();
7
+ return isMobileLayout(layoutType) ? _jsx(MobileCalendarDropdown, { ...props }) : _jsx(DesktopCalendarDropdown, { ...props });
8
+ }
@@ -0,0 +1 @@
1
+ export * from './CalendarDropdown.js';
@@ -0,0 +1 @@
1
+ export * from './CalendarDropdown.js';
@@ -0,0 +1,9 @@
1
+ .dropdown{
2
+ width:-moz-fit-content;
3
+ width:fit-content;
4
+ }
5
+
6
+ .calendarDropdownContent{
7
+ display:flex;
8
+ flex-direction:column;
9
+ }
@@ -0,0 +1,34 @@
1
+ import { WithSupportProps } from '@cloud-ru/ds-utils';
2
+ import { RefObject } from 'react';
3
+ import { FocusDirection, Size, TimeValue } from '../../types.js';
4
+ export type TimePickerProps = WithSupportProps<{
5
+ /** Выбранное значение.*/
6
+ value?: TimeValue;
7
+ /** Дата сегодняшнего дня */
8
+ today?: Date | number;
9
+ /** Значение по-умолчанию для uncontrolled. */
10
+ defaultValue?: TimeValue;
11
+ /** Колбек выбора значения */
12
+ onChangeValue?(value?: TimeValue): void;
13
+ /** Показывать ли секунды */
14
+ showSeconds?: boolean;
15
+ /**
16
+ * Размер
17
+ * @default m
18
+ */
19
+ size?: Size;
20
+ /** CSS-класс контейнера */
21
+ className?: string;
22
+ /**
23
+ * Отключает предустановленный размер, заставляя компонент подстраиваться к размеру контейнра: (width: 100%, height: 100%).
24
+ * @default true
25
+ */
26
+ fitToContainer?: boolean;
27
+ /** Колбек потери фокуса. Вызывается со значением `next`, когда фокус покидает компонент, передвигаясь вперед, по клавише `tab`. Со значением `prev` - по клавише стрелки вверх или `shift + tab`. */
28
+ onFocusLeave?(direction: FocusDirection): void;
29
+ /** Ссылка на управление первым элементом навигации */
30
+ navigationStartRef?: RefObject<{
31
+ focus(): void;
32
+ }>;
33
+ }>;
34
+ export declare function TimePicker({ className, size, fitToContainer, value: valueProp, defaultValue, onChangeValue, onFocusLeave, 'data-test-id': testId, navigationStartRef, showSeconds, today: todayProp, }: TimePickerProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,132 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useLang } from '@cloud-ru/ds-locale';
3
+ import { useEventHandler, useUncontrolledProp } from '@cloud-ru/ds-utils';
4
+ import cn from 'classnames';
5
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
6
+ import { SIZE } from '../../constants.js';
7
+ import { CalendarContext, TimePickerBase } from '../../helperComponents/index.js';
8
+ import { useDateAndTime } from '../../hooks/index.js';
9
+ import { getLocale, getTestIdBuilder, isTimePortionComplete, timeValuesEqual } from '../../utils.js';
10
+ import { DEFAULT_LOCALE } from './constants.js';
11
+ import styles from './styles.module.css';
12
+ const stubFunc = () => { };
13
+ const stubBuildCellProps = () => ({ isDisabled: false, isHoliday: false });
14
+ export function TimePicker({ className, size = SIZE.M, fitToContainer = true, value: valueProp, defaultValue, onChangeValue, onFocusLeave, 'data-test-id': testId, navigationStartRef, showSeconds = true, today: todayProp, }) {
15
+ const [value, setValueState] = useUncontrolledProp(valueProp, defaultValue, onChangeValue);
16
+ const setValueEventHandler = useEventHandler(setValueState);
17
+ const [internalValue, setInternalValue] = useState();
18
+ const [focus, setFocus] = useState(undefined);
19
+ const today = useMemo(() => (typeof todayProp === 'number' ? new Date(todayProp) : todayProp), [todayProp]);
20
+ const previousValueRef = useRef(value);
21
+ useEffect(() => {
22
+ if (!internalValue?.[0]) {
23
+ return;
24
+ }
25
+ const hours = internalValue[0].getHours() ?? 0;
26
+ const minutes = internalValue[0].getMinutes() ?? 0;
27
+ const seconds = internalValue[0].getSeconds() ?? 0;
28
+ setValueEventHandler({ hours, minutes, seconds });
29
+ }, [internalValue, setValueEventHandler]);
30
+ const setValue = useCallback((dates) => {
31
+ const newDate = dates[0];
32
+ setInternalValue([newDate, newDate]);
33
+ }, []);
34
+ const { dateAndTime, onTimeChange, onDateChange, onDateAndTimeChange, isDateFilled, isTimeFilled, isDateAndTimeFilled, } = useDateAndTime({ showSeconds, value });
35
+ useEffect(() => {
36
+ const wasValueCleared = value === undefined && previousValueRef.current !== undefined;
37
+ previousValueRef.current = value;
38
+ if (wasValueCleared) {
39
+ return;
40
+ }
41
+ if (!isTimePortionComplete(dateAndTime, showSeconds)) {
42
+ return;
43
+ }
44
+ const next = {
45
+ hours: dateAndTime.hours ?? 0,
46
+ minutes: dateAndTime.minutes ?? 0,
47
+ seconds: dateAndTime.seconds ?? 0,
48
+ };
49
+ if (timeValuesEqual(value, next)) {
50
+ return;
51
+ }
52
+ setValueEventHandler(next);
53
+ }, [dateAndTime, showSeconds, setValueEventHandler, value]);
54
+ const applyButtonRef = useRef(null);
55
+ const currentButtonRef = useRef(null);
56
+ const hoursKeyboardNavigationRef = useRef({ focusItem: () => { } });
57
+ const minutesKeyboardNavigationRef = useRef({ focusItem: () => { } });
58
+ const secondsKeyboardNavigationRef = useRef({ focusItem: () => { } });
59
+ const getTestId = useMemo(() => getTestIdBuilder(testId), [testId]);
60
+ const ctxLang = useLang();
61
+ const locale = useMemo(() => getLocale({ localeProp: DEFAULT_LOCALE, ctxLang }), [ctxLang]);
62
+ const calendarContextValue = useMemo(() => {
63
+ const stubDate = new Date();
64
+ return {
65
+ mode: 'time',
66
+ locale,
67
+ size,
68
+ value: internalValue,
69
+ fitToContainer,
70
+ focus,
71
+ setValue,
72
+ setFocus,
73
+ getTestId,
74
+ onFocusLeave,
75
+ navigationStartRef,
76
+ showSeconds,
77
+ dateAndTime,
78
+ onTimeChange,
79
+ onDateAndTimeChange,
80
+ isTimeFilled,
81
+ applyButtonRef,
82
+ currentButtonRef,
83
+ hoursKeyboardNavigationRef,
84
+ minutesKeyboardNavigationRef,
85
+ secondsKeyboardNavigationRef,
86
+ today,
87
+ // Stub props
88
+ viewMode: 'month',
89
+ showHolidays: false,
90
+ viewDate: stubDate,
91
+ referenceDate: stubDate,
92
+ preselectedRange: undefined,
93
+ viewShift: 0,
94
+ setViewMode: stubFunc,
95
+ setViewShift: stubFunc,
96
+ startPreselect: stubFunc,
97
+ continuePreselect: stubFunc,
98
+ completePreselect: stubFunc,
99
+ restartPreselect: stubFunc,
100
+ buildCellProps: stubBuildCellProps,
101
+ onDateChange,
102
+ isDateAndTimeFilled,
103
+ isDateFilled,
104
+ };
105
+ }, [
106
+ applyButtonRef,
107
+ currentButtonRef,
108
+ dateAndTime,
109
+ fitToContainer,
110
+ focus,
111
+ getTestId,
112
+ hoursKeyboardNavigationRef,
113
+ internalValue,
114
+ isDateAndTimeFilled,
115
+ isDateFilled,
116
+ isTimeFilled,
117
+ locale,
118
+ minutesKeyboardNavigationRef,
119
+ navigationStartRef,
120
+ onDateAndTimeChange,
121
+ onDateChange,
122
+ onFocusLeave,
123
+ onTimeChange,
124
+ secondsKeyboardNavigationRef,
125
+ setFocus,
126
+ setValue,
127
+ showSeconds,
128
+ size,
129
+ today,
130
+ ]);
131
+ return (_jsx("div", { className: cn(styles.timePickerWrapper, className), "data-fit-to-container": fitToContainer || undefined, "data-show-seconds": String(showSeconds), "data-size": size, "data-test-id": testId, children: _jsx(CalendarContext.Provider, { value: calendarContextValue, children: _jsx(TimePickerBase, {}) }) }));
132
+ }
@@ -0,0 +1 @@
1
+ export declare const DEFAULT_LOCALE: Intl.Locale;
@@ -0,0 +1 @@
1
+ export const DEFAULT_LOCALE = new Intl.Locale('ru-RU');
@@ -0,0 +1 @@
1
+ export * from './TimePicker.js';