@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 @@
1
+ export * from './DecadeView';
@@ -0,0 +1,19 @@
1
+ import { GRID_SIZE, VIEW_MODE } from '../../constants';
2
+ import { BaseGrid, BaseGridItem } from '../../types';
3
+
4
+ export const buildDecadeGrid = (date: Date): BaseGrid => {
5
+ const result: BaseGrid = [];
6
+ const year = date.getFullYear();
7
+ let shift = -1;
8
+ const { rows, columns } = GRID_SIZE[VIEW_MODE.Decade];
9
+
10
+ for (let i = 0; i < rows; i++) {
11
+ const row: BaseGridItem[] = [];
12
+ for (let j = 0; j < columns; j++) {
13
+ row.push({ date: new Date(year + shift++, 0, 1), address: [i, j] });
14
+ }
15
+ result.push(row);
16
+ }
17
+
18
+ return result;
19
+ };
@@ -0,0 +1,80 @@
1
+ import { Dropdown } from '@cloud-ru/ds-dropdown';
2
+ import { useUncontrolledProp } from '@cloud-ru/ds-utils';
3
+ import cn from 'classnames';
4
+ import { useCallback, useMemo } from 'react';
5
+
6
+ import { Calendar } from '../../components/Calendar';
7
+ import { CalendarDropdownProps } from '../../components/CalendarDropdown/CalendarDropdown';
8
+ import styles from '../../components/CalendarDropdown/styles.module.scss';
9
+ import { getTestIdBuilder } from '../../utils';
10
+ import { Footer } from '../Footer';
11
+
12
+ export function DesktopCalendarDropdown({
13
+ children,
14
+ closeOnApply = false,
15
+ onApply,
16
+ onCurrent,
17
+ open: openProp,
18
+ onOpenChange,
19
+ triggerClassName,
20
+ trigger = 'click',
21
+ placement = 'bottom-start',
22
+ hoverDelayOpen,
23
+ hoverDelayClose,
24
+ closeOnEscapeKey,
25
+ triggerClickByKeys,
26
+ triggerRef,
27
+ outsideClick,
28
+ fallbackPlacements,
29
+ disableSpanWrapper,
30
+ closeOnPopstate,
31
+ className,
32
+ 'data-test-id': testId,
33
+ ...calendarProps
34
+ }: CalendarDropdownProps) {
35
+ const [open, setOpen] = useUncontrolledProp(openProp, false, onOpenChange);
36
+
37
+ const getTestId = useMemo(() => getTestIdBuilder(testId), [testId]);
38
+
39
+ const handleFooterApply = useCallback(() => {
40
+ onApply?.();
41
+
42
+ if (closeOnApply) {
43
+ setOpen(false);
44
+ }
45
+ }, [closeOnApply, onApply, setOpen]);
46
+
47
+ const content = (
48
+ <div className={cn(styles.calendarDropdownContent, className)} data-test-id={getTestId('content')}>
49
+ <Calendar {...calendarProps} bottomSlot={<Footer inline onApply={handleFooterApply} onCurrent={onCurrent} />} />
50
+ </div>
51
+ );
52
+
53
+ return (
54
+ <Dropdown
55
+ className={styles.dropdown}
56
+ // Календарь сам управляет внутренними отступами (header/body/footer) — общий padding
57
+ // dropdown-контейнера в макете отсутствует.
58
+ bodyPadding={false}
59
+ data-test-id={testId}
60
+ triggerClassName={triggerClassName}
61
+ trigger={trigger}
62
+ placement={placement}
63
+ hoverDelayOpen={hoverDelayOpen}
64
+ hoverDelayClose={hoverDelayClose}
65
+ closeOnEscapeKey={closeOnEscapeKey}
66
+ triggerClickByKeys={triggerClickByKeys}
67
+ triggerRef={triggerRef}
68
+ outsideClick={outsideClick}
69
+ fallbackPlacements={fallbackPlacements}
70
+ disableSpanWrapper={disableSpanWrapper}
71
+ closeOnPopstate={closeOnPopstate}
72
+ open={open}
73
+ onOpenChange={setOpen}
74
+ content={content}
75
+ widthStrategy='gte'
76
+ >
77
+ {children}
78
+ </Dropdown>
79
+ );
80
+ }
@@ -0,0 +1 @@
1
+ export * from './DesktopCalendarDropdown';
@@ -0,0 +1,209 @@
1
+ import { Dropdown } from '@cloud-ru/ds-dropdown';
2
+ import { ListProps } from '@cloud-ru/ds-list';
3
+ import { useLang } from '@cloud-ru/ds-locale';
4
+ import { useUncontrolledProp } from '@cloud-ru/ds-utils';
5
+ import cn from 'classnames';
6
+ import { useCallback, useMemo, useRef, useState } from 'react';
7
+
8
+ import { DEFAULT_LOCALE } from '../../components/TimePicker/constants';
9
+ import styles from '../../components/TimePickerDropdown/styles.module.scss';
10
+ import { TimePickerDropdownProps } from '../../components/TimePickerDropdown/TimePickerDropdown';
11
+ import { SIZE } from '../../constants';
12
+ import { useTimePickerValueBridge } from '../../hooks';
13
+ import { BuildCellPropsFunction } from '../../types';
14
+ import { getLocale, getTestIdBuilder } from '../../utils';
15
+ import { CalendarContext, CalendarContextType } from '../CalendarContext';
16
+ import { Footer } from '../Footer';
17
+ import { TimePickerBase } from '../TimePickerBase';
18
+
19
+ const stubFunc = () => {};
20
+ const stubBuildCellProps: BuildCellPropsFunction = () => ({ isDisabled: false, isHoliday: false });
21
+
22
+ export function DesktopTimePickerDropdown({
23
+ className,
24
+ size = SIZE.M,
25
+ fitToContainer = false,
26
+ value: valueProp,
27
+ defaultValue,
28
+ onChangeValue,
29
+ onFocusLeave,
30
+ 'data-test-id': testId,
31
+ navigationStartRef,
32
+ showSeconds = true,
33
+ today: todayProp,
34
+ children,
35
+ closeOnApply = false,
36
+ onApply,
37
+ onCurrent,
38
+ open: openProp,
39
+ onOpenChange,
40
+ triggerClassName,
41
+ trigger = 'click',
42
+ placement = 'bottom-start',
43
+ hoverDelayOpen,
44
+ hoverDelayClose,
45
+ closeOnEscapeKey,
46
+ triggerClickByKeys,
47
+ triggerRef,
48
+ outsideClick,
49
+ fallbackPlacements,
50
+ disableSpanWrapper,
51
+ closeOnPopstate,
52
+ }: TimePickerDropdownProps) {
53
+ const [open, setOpen] = useUncontrolledProp(openProp, false, onOpenChange);
54
+ const [focus, setFocus] = useState<string | undefined>(undefined);
55
+ const today = useMemo(() => (typeof todayProp === 'number' ? new Date(todayProp) : todayProp), [todayProp]);
56
+
57
+ const {
58
+ internalValue,
59
+ setValue,
60
+ dateAndTime,
61
+ onTimeChange,
62
+ onDateChange,
63
+ onDateAndTimeChange,
64
+ isDateFilled,
65
+ isTimeFilled,
66
+ isDateAndTimeFilled,
67
+ } = useTimePickerValueBridge({ value: valueProp, defaultValue, onChangeValue, showSeconds });
68
+
69
+ const applyButtonRef = useRef<HTMLButtonElement>(null);
70
+ const currentButtonRef = useRef<HTMLButtonElement>(null);
71
+ const hoursKeyboardNavigationRef: ListProps['keyboardNavigationRef'] = useRef({ focusItem: () => {} });
72
+ const minutesKeyboardNavigationRef: ListProps['keyboardNavigationRef'] = useRef({ focusItem: () => {} });
73
+ const secondsKeyboardNavigationRef: ListProps['keyboardNavigationRef'] = useRef({ focusItem: () => {} });
74
+
75
+ const getTestId = useMemo(() => getTestIdBuilder(testId), [testId]);
76
+
77
+ const ctxLang = useLang();
78
+
79
+ const locale = useMemo(() => getLocale({ localeProp: DEFAULT_LOCALE, ctxLang }), [ctxLang]);
80
+
81
+ const handleApply = useCallback(() => {
82
+ onApply?.();
83
+
84
+ if (closeOnApply) {
85
+ setOpen(false);
86
+ }
87
+ }, [closeOnApply, onApply, setOpen]);
88
+
89
+ const calendarContextValue = useMemo<CalendarContextType>(() => {
90
+ const stubDate = new Date();
91
+
92
+ return {
93
+ mode: 'time',
94
+ locale,
95
+ size,
96
+ value: internalValue,
97
+ fitToContainer,
98
+ focus,
99
+ setValue,
100
+ setFocus,
101
+ getTestId,
102
+ onFocusLeave,
103
+ navigationStartRef,
104
+ showSeconds,
105
+ dateAndTime,
106
+ onTimeChange,
107
+ onDateAndTimeChange,
108
+ isTimeFilled,
109
+ applyButtonRef,
110
+ currentButtonRef,
111
+ hoursKeyboardNavigationRef,
112
+ minutesKeyboardNavigationRef,
113
+ secondsKeyboardNavigationRef,
114
+ today,
115
+
116
+ // Stub props
117
+ viewMode: 'month',
118
+ showHolidays: false,
119
+ viewDate: stubDate,
120
+ referenceDate: stubDate,
121
+ preselectedRange: undefined,
122
+ viewShift: 0,
123
+ setViewMode: stubFunc,
124
+ setViewShift: stubFunc,
125
+ startPreselect: stubFunc,
126
+ continuePreselect: stubFunc,
127
+ completePreselect: stubFunc,
128
+ restartPreselect: stubFunc,
129
+ buildCellProps: stubBuildCellProps,
130
+ onDateChange,
131
+ isDateAndTimeFilled,
132
+ isDateFilled,
133
+ };
134
+ }, [
135
+ applyButtonRef,
136
+ currentButtonRef,
137
+ dateAndTime,
138
+ fitToContainer,
139
+ focus,
140
+ getTestId,
141
+ hoursKeyboardNavigationRef,
142
+ internalValue,
143
+ isDateAndTimeFilled,
144
+ isDateFilled,
145
+ isTimeFilled,
146
+ locale,
147
+ minutesKeyboardNavigationRef,
148
+ navigationStartRef,
149
+ onDateAndTimeChange,
150
+ onDateChange,
151
+ onFocusLeave,
152
+ onTimeChange,
153
+ secondsKeyboardNavigationRef,
154
+ setFocus,
155
+ setValue,
156
+ showSeconds,
157
+ size,
158
+ today,
159
+ ]);
160
+
161
+ const content = (
162
+ <div
163
+ className={cn(styles.timePickerDropdownContent, className)}
164
+ data-size={size}
165
+ data-test-id={getTestId('content')}
166
+ >
167
+ <CalendarContext.Provider value={calendarContextValue}>
168
+ <TimePickerBase className={styles.timePickerBaseLimited} />
169
+ </CalendarContext.Provider>
170
+ </div>
171
+ );
172
+
173
+ // Футер вынесен в `bottomBar` дропдауна (`footer` + `footerDivider`) — divider и
174
+ // паддинги даёт сам Dropdown. Провайдер контекста дублируется здесь, т.к. `footer` —
175
+ // отдельный от `content` регион.
176
+ const footer = (
177
+ <CalendarContext.Provider value={calendarContextValue}>
178
+ <Footer onApply={handleApply} onCurrent={onCurrent} />
179
+ </CalendarContext.Provider>
180
+ );
181
+
182
+ return (
183
+ <Dropdown
184
+ className={styles.dropdown}
185
+ data-test-id={testId}
186
+ triggerClassName={triggerClassName}
187
+ trigger={trigger}
188
+ placement={placement}
189
+ hoverDelayOpen={hoverDelayOpen}
190
+ hoverDelayClose={hoverDelayClose}
191
+ closeOnEscapeKey={closeOnEscapeKey}
192
+ triggerClickByKeys={triggerClickByKeys}
193
+ triggerRef={triggerRef}
194
+ outsideClick={outsideClick}
195
+ fallbackPlacements={fallbackPlacements}
196
+ disableSpanWrapper={disableSpanWrapper}
197
+ closeOnPopstate={closeOnPopstate}
198
+ open={open}
199
+ onOpenChange={setOpen}
200
+ content={content}
201
+ footer={footer}
202
+ footerDivider
203
+ bodyPadding={false}
204
+ widthStrategy='gte'
205
+ >
206
+ {children}
207
+ </Dropdown>
208
+ );
209
+ }
@@ -0,0 +1 @@
1
+ export * from './DesktopTimePickerDropdown';
@@ -0,0 +1,163 @@
1
+ import { FooterActions } from '@cloud-ru/ds-bottom-sheet';
2
+ import { VIEW } from '@cloud-ru/ds-button';
3
+ import { Divider } from '@cloud-ru/ds-divider';
4
+ import { getDefaultItemId } from '@cloud-ru/ds-list';
5
+ import { KeyboardEventHandler, RefObject } from 'react';
6
+
7
+ import { CALENDAR_MODE } from '../../constants';
8
+ import { useCalendarContext } from '../../hooks';
9
+ import { calendarLocale } from '../../locale';
10
+ import { getMonthShift } from '../../utils';
11
+ import styles from './styles.module.scss';
12
+
13
+ export type FooterProps = {
14
+ /** Колбек по клику на Apply */
15
+ onApply?(): void;
16
+ /** Колбек по клику на Current */
17
+ onCurrent?(): void;
18
+ /**
19
+ * Inline-раскладка: футер рендерится внутри тела дропдауна (bottomSlot календаря),
20
+ * поэтому сам рисует divider, паддинги и полную ширину. По умолчанию (`false`)
21
+ * возвращает голые кнопки для `bottomBar`-слота дропдауна (`footer` + `footerDivider`),
22
+ * где обвязку даёт сам Dropdown.
23
+ */
24
+ inline?: boolean;
25
+ };
26
+
27
+ /**
28
+ * Футер календарных дропдаунов (Apply / Current). Кнопки собираются общим
29
+ * `FooterActions` из `@cloud-ru/ds-bottom-sheet` — единый источник правды с футерами
30
+ * modal / drawer / bottom-sheet (Figma `popupDropdownFooter`). Читает состояние из
31
+ * `CalendarContext`, поэтому рендерится только внутри провайдера контекста.
32
+ */
33
+ export function Footer({ onApply, onCurrent, inline = false }: FooterProps) {
34
+ const {
35
+ viewMode,
36
+ mode,
37
+ today,
38
+ setValue,
39
+ dateAndTime,
40
+ isTimeFilled,
41
+ isDateAndTimeFilled,
42
+ onDateAndTimeChange,
43
+ applyButtonRef,
44
+ currentButtonRef,
45
+ hoursKeyboardNavigationRef,
46
+ minutesKeyboardNavigationRef,
47
+ secondsKeyboardNavigationRef,
48
+ showSeconds,
49
+ getTestId,
50
+ referenceDate,
51
+ setViewShift,
52
+ onFocusLeave,
53
+ size,
54
+ } = useCalendarContext();
55
+
56
+ const { t } = calendarLocale.useTranslations();
57
+
58
+ if (![CALENDAR_MODE.DateTime, 'time'].includes(mode) || viewMode !== 'month') {
59
+ return null;
60
+ }
61
+
62
+ const isApplyButtonDisabled = mode === 'time' ? !isTimeFilled() : !isDateAndTimeFilled();
63
+
64
+ const handleCurrentKeyDown: KeyboardEventHandler = event => {
65
+ if (event.key === 'Tab') {
66
+ if (event.shiftKey) {
67
+ event.preventDefault();
68
+
69
+ if (showSeconds) {
70
+ secondsKeyboardNavigationRef.current?.focusItem(getDefaultItemId(dateAndTime?.seconds ?? 0));
71
+ } else {
72
+ minutesKeyboardNavigationRef.current?.focusItem(getDefaultItemId(dateAndTime?.minutes ?? 0));
73
+ }
74
+ } else {
75
+ if (isApplyButtonDisabled) {
76
+ onFocusLeave?.('next');
77
+ }
78
+ }
79
+ }
80
+ };
81
+
82
+ const handleApplyKeyDown: KeyboardEventHandler = event => {
83
+ if (event.key === 'Tab' && !event.shiftKey) {
84
+ onFocusLeave?.('next');
85
+ }
86
+ };
87
+
88
+ const handleCurrentClick = () => {
89
+ const todayDate = today || new Date();
90
+
91
+ onDateAndTimeChange(todayDate);
92
+ setViewShift(getMonthShift(referenceDate, todayDate));
93
+
94
+ hoursKeyboardNavigationRef.current?.focusItem(getDefaultItemId(todayDate.getHours() ?? 0));
95
+ minutesKeyboardNavigationRef.current?.focusItem(getDefaultItemId(todayDate.getMinutes() ?? 0));
96
+ secondsKeyboardNavigationRef.current?.focusItem(getDefaultItemId(todayDate.getSeconds() ?? 0));
97
+
98
+ applyButtonRef.current?.focus();
99
+ onCurrent?.();
100
+ };
101
+
102
+ const handleApplySelection = () => {
103
+ if (!dateAndTime) {
104
+ return;
105
+ }
106
+
107
+ const todayDate = today || new Date();
108
+
109
+ const {
110
+ year = todayDate.getFullYear(),
111
+ month = todayDate.getMonth(),
112
+ day = todayDate.getDay(),
113
+ hours,
114
+ minutes,
115
+ seconds,
116
+ } = dateAndTime;
117
+
118
+ const newDate = new Date(year, month, day, hours, minutes, showSeconds ? seconds : 0);
119
+
120
+ setValue([newDate, newDate]);
121
+ onApply?.();
122
+ };
123
+
124
+ const actions = (
125
+ <FooterActions
126
+ // Кнопки футера следуют размеру календаря: в мастере дропдаунов они 24 / 32 / 40 при s / m / l.
127
+ size={size}
128
+ approveButton={{
129
+ label: t('apply'),
130
+ disabled: isApplyButtonDisabled,
131
+ innerRef: applyButtonRef as RefObject<HTMLButtonElement>,
132
+ onClick: handleApplySelection,
133
+ onKeyDown: handleApplyKeyDown,
134
+ }}
135
+ additionalButton={{
136
+ label: t('current'),
137
+ // `popupDropdownFooter` держит третью кнопку на `function`, а не на дефолтном
138
+ // из `FooterActions` `simple`: у `simple` остаётся горизонтальный паддинг.
139
+ view: VIEW.Function,
140
+ innerRef: currentButtonRef as RefObject<HTMLButtonElement>,
141
+ onClick: handleCurrentClick,
142
+ onKeyDown: handleCurrentKeyDown,
143
+ }}
144
+ testIds={{
145
+ approve: getTestId('apply-button') ?? '',
146
+ additional: getTestId('current-button') ?? '',
147
+ cancel: '',
148
+ }}
149
+ actionsClassName={inline ? styles.actions : undefined}
150
+ />
151
+ );
152
+
153
+ if (!inline) {
154
+ return actions;
155
+ }
156
+
157
+ return (
158
+ <div className={styles.inline}>
159
+ <Divider className={styles.divider} />
160
+ {actions}
161
+ </div>
162
+ );
163
+ }
@@ -0,0 +1 @@
1
+ export * from './Footer';
@@ -0,0 +1,19 @@
1
+ @use '@cloud-ru/ds-figma-variables/build/scss/styles/styles.module' as base;
2
+ @use '@cloud-ru/ds-figma-variables/build/scss/components/popupPrivate.module' as popupPrivate;
3
+
4
+ // Inline-раскладка футера для календарного дропдауна: футер живёт внутри `bodyWrapper`
5
+ // дропдауна (bottomSlot календаря), поэтому сам рисует divider, паддинги и полную
6
+ // ширину — в отличие от `bottomBar`-слота дропдауна (time-picker), где это делает сам
7
+ // Dropdown (`footer` + `footerDivider`).
8
+ .inline {
9
+ display: flex;
10
+ flex-direction: column;
11
+ }
12
+
13
+ .divider {
14
+ flex-shrink: 0;
15
+ }
16
+
17
+ .actions {
18
+ @include base.composite-var(popupPrivate.$popupPrivate, 'anatomy', 'dropdown', 'footer');
19
+ }
@@ -0,0 +1,52 @@
1
+ import { CSSProperties, useMemo } from 'react';
2
+
3
+ import { GRID_SIZE, VIEW_MODE } from '../../constants';
4
+ import { useCalendarContext } from '../../hooks';
5
+ import { Cell } from '../../types';
6
+ import { Item } from '../Item';
7
+ import { WeekRow } from '../WeekRow';
8
+ import styles from './styles.module.scss';
9
+
10
+ export type GridProps = {
11
+ grid: Cell[][];
12
+ };
13
+
14
+ export function Grid({ grid }: GridProps) {
15
+ const { size, viewMode, fitToContainer } = useCalendarContext();
16
+
17
+ const gridConfig: CSSProperties = useMemo(() => {
18
+ const { columns } = GRID_SIZE[viewMode];
19
+ return {
20
+ gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))`,
21
+ };
22
+ }, [viewMode]);
23
+
24
+ return (
25
+ <div className={styles.grid} data-fit-to-container={fitToContainer || undefined} style={gridConfig}>
26
+ {viewMode === VIEW_MODE.Month && <WeekRow />}
27
+ {grid.map((row, rowIndex) =>
28
+ row.map((cell, colIndex) => (
29
+ <Item
30
+ key={`${cell.label}_${rowIndex}_${colIndex}`}
31
+ label={cell.label}
32
+ size={size}
33
+ checked={cell.checked}
34
+ rangePosition={cell.rangePosition}
35
+ disabled={cell.disabled}
36
+ holiday={cell.holiday}
37
+ another={cell.another}
38
+ current={cell.current}
39
+ visible
40
+ tabIndex={cell.tabIndex}
41
+ address={cell.address}
42
+ date={cell.date}
43
+ onSelect={cell.onSelect}
44
+ onPreselect={cell.onPreselect}
45
+ onLeave={cell.onLeave}
46
+ onKeyDown={cell.onKeyDown}
47
+ />
48
+ )),
49
+ )}
50
+ </div>
51
+ );
52
+ }
@@ -0,0 +1 @@
1
+ export * from './Grid';
@@ -0,0 +1,5 @@
1
+ .grid {
2
+ display: grid;
3
+ width: 100%;
4
+ height: 100%;
5
+ }
@@ -0,0 +1,123 @@
1
+ import { ChevronDownSVG, ChevronUpSVG } from '@cloud-ru/ds-icons/interface/system';
2
+
3
+ import { GRID_SIZE, SIZE, VIEW_MODE } from '../../constants';
4
+ import { useCalendarContext } from '../../hooks';
5
+ import { calendarLocale } from '../../locale';
6
+ import { stringifyAddress } from '../../utils';
7
+ import { NavButton } from '../NavButton';
8
+ import { LEVEL_BUTTON_FOCUS_NAME, NEXT_PERIOD_BUTTON_FOCUS_NAME, PREV_PERIOD_BUTTON_FOCUS_NAME } from './constants';
9
+ import { usePeriodName } from './hooks';
10
+ import styles from './styles.module.scss';
11
+ import { getShift } from './utils';
12
+
13
+ const VIEW_MODE_MAP = {
14
+ [VIEW_MODE.Month]: VIEW_MODE.Year,
15
+ [VIEW_MODE.Year]: VIEW_MODE.Decade,
16
+ [VIEW_MODE.Decade]: VIEW_MODE.Decade,
17
+ };
18
+
19
+ const PERIOD_NAV_ARIA_KEYS = {
20
+ prev: {
21
+ [VIEW_MODE.Month]: 'prevPeriodMonth',
22
+ [VIEW_MODE.Year]: 'prevPeriodYear',
23
+ [VIEW_MODE.Decade]: 'prevPeriodDecade',
24
+ },
25
+ next: {
26
+ [VIEW_MODE.Month]: 'nextPeriodMonth',
27
+ [VIEW_MODE.Year]: 'nextPeriodYear',
28
+ [VIEW_MODE.Decade]: 'nextPeriodDecade',
29
+ },
30
+ } as const;
31
+
32
+ const ICONS = {
33
+ UP: {
34
+ [SIZE.S]: <ChevronUpSVG size={16} />,
35
+ [SIZE.M]: <ChevronUpSVG />,
36
+ [SIZE.L]: <ChevronUpSVG />,
37
+ },
38
+ DOWN: {
39
+ [SIZE.S]: <ChevronDownSVG size={16} />,
40
+ [SIZE.M]: <ChevronDownSVG />,
41
+ [SIZE.L]: <ChevronDownSVG />,
42
+ },
43
+ };
44
+
45
+ export function Header() {
46
+ const {
47
+ referenceDate,
48
+ viewDate,
49
+ viewShift,
50
+ setViewShift,
51
+ viewMode,
52
+ setViewMode,
53
+ focus,
54
+ setFocus,
55
+ getTestId,
56
+ size,
57
+ firstNotDisableCell,
58
+ } = useCalendarContext();
59
+ const periodName = usePeriodName();
60
+ const { t } = calendarLocale.useTranslations();
61
+
62
+ const prevPeriodAriaLabel = t(PERIOD_NAV_ARIA_KEYS.prev[viewMode]);
63
+ const nextPeriodAriaLabel = t(PERIOD_NAV_ARIA_KEYS.next[viewMode]);
64
+
65
+ const levelButtonDisabled = viewMode === VIEW_MODE.Decade;
66
+
67
+ const isArrowButtonFocused = focus && [NEXT_PERIOD_BUTTON_FOCUS_NAME, PREV_PERIOD_BUTTON_FOCUS_NAME].includes(focus);
68
+
69
+ const gridForMode = GRID_SIZE[viewMode];
70
+
71
+ return (
72
+ <div className={styles.header} data-size={size}>
73
+ <NavButton
74
+ disabled={levelButtonDisabled}
75
+ onClick={() => {
76
+ if (viewMode === VIEW_MODE.Year) {
77
+ setFocus(PREV_PERIOD_BUTTON_FOCUS_NAME);
78
+ }
79
+ setViewShift(getShift(referenceDate, viewDate, viewMode));
80
+ setViewMode(VIEW_MODE_MAP[viewMode]);
81
+ }}
82
+ label={periodName}
83
+ data-test-id={getTestId('period-level')}
84
+ focusName={LEVEL_BUTTON_FOCUS_NAME}
85
+ tabIndex={levelButtonDisabled || isArrowButtonFocused ? -1 : 0}
86
+ icon={viewMode !== VIEW_MODE.Decade ? ICONS.DOWN[size] : undefined}
87
+ onRightArrowKeyDown={() => setFocus(PREV_PERIOD_BUTTON_FOCUS_NAME)}
88
+ onDownArrowKeyDown={() => setFocus(stringifyAddress(firstNotDisableCell?.current ?? [0, 0]))}
89
+ useNavigationStartRef
90
+ />
91
+ <div className={styles.scrollControlWrapper}>
92
+ <NavButton
93
+ onClick={() => setViewShift(viewShift - 1)}
94
+ aria-label={prevPeriodAriaLabel}
95
+ data-test-id={getTestId('period-prev')}
96
+ focusName={PREV_PERIOD_BUTTON_FOCUS_NAME}
97
+ tabIndex={
98
+ focus === PREV_PERIOD_BUTTON_FOCUS_NAME || (levelButtonDisabled && focus !== NEXT_PERIOD_BUTTON_FOCUS_NAME)
99
+ ? 0
100
+ : -1
101
+ }
102
+ icon={ICONS.UP[size]}
103
+ onRightArrowKeyDown={() => setFocus(NEXT_PERIOD_BUTTON_FOCUS_NAME)}
104
+ onLeftArrowKeyDown={() => setFocus(LEVEL_BUTTON_FOCUS_NAME)}
105
+ onDownArrowKeyDown={() => {
106
+ const rightGap = viewMode === VIEW_MODE.Month ? 2 : 1;
107
+ setFocus(stringifyAddress([0, gridForMode.columns - rightGap]));
108
+ }}
109
+ />
110
+ <NavButton
111
+ onClick={() => setViewShift(viewShift + 1)}
112
+ aria-label={nextPeriodAriaLabel}
113
+ data-test-id={getTestId('period-next')}
114
+ focusName={NEXT_PERIOD_BUTTON_FOCUS_NAME}
115
+ tabIndex={focus === NEXT_PERIOD_BUTTON_FOCUS_NAME ? 0 : -1}
116
+ icon={ICONS.DOWN[size]}
117
+ onLeftArrowKeyDown={() => setFocus(PREV_PERIOD_BUTTON_FOCUS_NAME)}
118
+ onDownArrowKeyDown={() => setFocus(stringifyAddress([0, gridForMode.columns - 1]))}
119
+ />
120
+ </div>
121
+ </div>
122
+ );
123
+ }