@sberbusiness/triplex-next 1.40.0 → 1.41.1

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 (599) hide show
  1. package/chunks/{AlertProcessSpoiler-BNrk1vyk.js → AlertProcessSpoiler-Dnwmfds3.js} +16 -16
  2. package/chunks/{AlertProcessSpoiler-BNrk1vyk.js.map → AlertProcessSpoiler-Dnwmfds3.js.map} +1 -1
  3. package/chunks/{CalendarViewItem-knPscTce.js → CalendarViewItem-CeA4XADM.js} +30 -28
  4. package/chunks/CalendarViewItem-CeA4XADM.js.map +1 -0
  5. package/chunks/Card.module-CnX8TfnM.js +32 -0
  6. package/chunks/Card.module-CnX8TfnM.js.map +1 -0
  7. package/chunks/Carousel.module-By3qExUV.js +30 -0
  8. package/chunks/Carousel.module-By3qExUV.js.map +1 -0
  9. package/chunks/CheckboxTreeExtended.module-9l5Ifhk7.js +24 -0
  10. package/chunks/CheckboxTreeExtended.module-9l5Ifhk7.js.map +1 -0
  11. package/chunks/{Chip-CI8ALCUS.js → Chip-B5RNQL8v.js} +27 -27
  12. package/chunks/Chip-B5RNQL8v.js.map +1 -0
  13. package/chunks/Confirm.module-Cpg9tBFI.js +24 -0
  14. package/chunks/Confirm.module-Cpg9tBFI.js.map +1 -0
  15. package/chunks/{DropdownListItem-BqOoPFSx.js → DropdownListItem-BVgGltGX.js} +10 -10
  16. package/chunks/{DropdownListItem-BqOoPFSx.js.map → DropdownListItem-BVgGltGX.js.map} +1 -1
  17. package/chunks/DropdownMobile.module-DRF4HXhL.js +40 -0
  18. package/chunks/DropdownMobile.module-DRF4HXhL.js.map +1 -0
  19. package/chunks/Footer.module-C3ICz5DE.js +12 -0
  20. package/chunks/Footer.module-C3ICz5DE.js.map +1 -0
  21. package/chunks/{HeaderLayoutSidebar.module-MnhSBdiv.js → HeaderLayoutSidebar.module-CfWoWqQ1.js} +4 -4
  22. package/chunks/HeaderLayoutSidebar.module-CfWoWqQ1.js.map +1 -0
  23. package/chunks/HeaderTabs.module-CQ5eAWqH.js +12 -0
  24. package/chunks/HeaderTabs.module-CQ5eAWqH.js.map +1 -0
  25. package/chunks/{HeaderTitle.module-BGOYMt6r.js → HeaderTitle.module-DeWO1h-Y.js} +4 -4
  26. package/chunks/HeaderTitle.module-DeWO1h-Y.js.map +1 -0
  27. package/chunks/ImageGalleryExtendedMain.module-Ci9TjdxN.js +28 -0
  28. package/chunks/ImageGalleryExtendedMain.module-Ci9TjdxN.js.map +1 -0
  29. package/chunks/{ImageGalleryExtendedThumb-D6RAJpt8.js → ImageGalleryExtendedThumb-BWOvPHBA.js} +5 -5
  30. package/chunks/{ImageGalleryExtendedThumb-D6RAJpt8.js.map → ImageGalleryExtendedThumb-BWOvPHBA.js.map} +1 -1
  31. package/chunks/IslandAccordion.module-DDGI83_h.js +44 -0
  32. package/chunks/IslandAccordion.module-DDGI83_h.js.map +1 -0
  33. package/chunks/IslandWidgetFooter.module-DPeifuz4.js +12 -0
  34. package/chunks/IslandWidgetFooter.module-DPeifuz4.js.map +1 -0
  35. package/chunks/IslandWidgetHeader.module-6il25_jE.js +20 -0
  36. package/chunks/IslandWidgetHeader.module-6il25_jE.js.map +1 -0
  37. package/chunks/{LightBoxContent-d_LBU_ZW.js → LightBoxContent-CfT1YJ33.js} +14 -14
  38. package/chunks/{LightBoxContent-d_LBU_ZW.js.map → LightBoxContent-CfT1YJ33.js.map} +1 -1
  39. package/chunks/LightBoxControls.module-Cs64xjct.js +26 -0
  40. package/chunks/LightBoxControls.module-Cs64xjct.js.map +1 -0
  41. package/chunks/{LightBoxSideOverlayClose.module-eTdxNvSz.js → LightBoxSideOverlayClose.module-sV6yxJQT.js} +4 -4
  42. package/chunks/LightBoxSideOverlayClose.module-sV6yxJQT.js.map +1 -0
  43. package/chunks/{ListItemControlsButton-D2ONoqII.js → ListItemControlsButton-Cs8N-_FI.js} +9 -9
  44. package/chunks/{ListItemControlsButton-D2ONoqII.js.map → ListItemControlsButton-Cs8N-_FI.js.map} +1 -1
  45. package/chunks/ListItemTail.module-Cv3Fx6WM.js +18 -0
  46. package/chunks/ListItemTail.module-Cv3Fx6WM.js.map +1 -0
  47. package/chunks/ListMasterFooter.module-DcmWf5IP.js +14 -0
  48. package/chunks/ListMasterFooter.module-DcmWf5IP.js.map +1 -0
  49. package/chunks/ModalWindow.module-BsRM6pWm.js +28 -0
  50. package/chunks/ModalWindow.module-BsRM6pWm.js.map +1 -0
  51. package/chunks/Notification.module-Diy7bSw7.js +34 -0
  52. package/chunks/Notification.module-Diy7bSw7.js.map +1 -0
  53. package/chunks/Overlay.module-Bc3D2mQ-.js +30 -0
  54. package/chunks/Overlay.module-Bc3D2mQ-.js.map +1 -0
  55. package/chunks/Page.module-CqkiljCk.js +15 -0
  56. package/chunks/Page.module-CqkiljCk.js.map +1 -0
  57. package/chunks/SMSField.module-BY_XV_HG.js +26 -0
  58. package/chunks/SMSField.module-BY_XV_HG.js.map +1 -0
  59. package/chunks/SliderExtendedMarks.module-DXI6Xg6v.js +24 -0
  60. package/chunks/SliderExtendedMarks.module-DXI6Xg6v.js.map +1 -0
  61. package/chunks/{SliderExtendedRail-CVEwe6OK.js → SliderExtendedRail-D7gQetwK.js} +5 -5
  62. package/chunks/{SliderExtendedRail-CVEwe6OK.js.map → SliderExtendedRail-D7gQetwK.js.map} +1 -1
  63. package/chunks/StatusTracker.module-DYVyu4Qv.js +44 -0
  64. package/chunks/StatusTracker.module-DYVyu4Qv.js.map +1 -0
  65. package/chunks/{StepperStepArrowBorder-BO_ItxMh.js → StepperStepArrowBorder-CY-4Rorx.js} +16 -16
  66. package/chunks/{StepperStepArrowBorder-BO_ItxMh.js.map → StepperStepArrowBorder-CY-4Rorx.js.map} +1 -1
  67. package/chunks/{SuggestFieldMobileDropdownHint-DyfJuyUe.js → SuggestFieldMobileDropdownHint-B4k9UKDH.js} +3 -3
  68. package/chunks/{SuggestFieldMobileDropdownHint-DyfJuyUe.js.map → SuggestFieldMobileDropdownHint-B4k9UKDH.js.map} +1 -1
  69. package/chunks/TableFooter.module-C1BtmpbW.js +22 -0
  70. package/chunks/TableFooter.module-C1BtmpbW.js.map +1 -0
  71. package/chunks/TabsExtended.module-BVBDZGtj.js +26 -0
  72. package/chunks/TabsExtended.module-BVBDZGtj.js.map +1 -0
  73. package/chunks/TabsLine.module-DXgk6eNb.js +36 -0
  74. package/chunks/TabsLine.module-DXgk6eNb.js.map +1 -0
  75. package/chunks/TooltipDesktop.module-BKIRlstC.js +32 -0
  76. package/chunks/TooltipDesktop.module-BKIRlstC.js.map +1 -0
  77. package/chunks/TreeView.module-BZWQB1ox.js +12 -0
  78. package/chunks/TreeView.module-BZWQB1ox.js.map +1 -0
  79. package/chunks/{UploadZoneInput-BHUONqVR.js → UploadZoneInput-BdhIPJdP.js} +5 -5
  80. package/chunks/{UploadZoneInput-BHUONqVR.js.map → UploadZoneInput-BdhIPJdP.js.map} +1 -1
  81. package/chunks/{constants-C-WrqYH6.js → constants-Cn8ZrJM2.js} +27 -27
  82. package/chunks/{constants-C-WrqYH6.js.map → constants-Cn8ZrJM2.js.map} +1 -1
  83. package/chunks/{utils-BHxrQbA6.js → utils-Cr7DslJx.js} +8 -8
  84. package/chunks/utils-Cr7DslJx.js.map +1 -0
  85. package/chunks/{utils-D4UOxU49.js → utils-Dhu3zNqv.js} +27 -27
  86. package/chunks/{utils-D4UOxU49.js.map → utils-Dhu3zNqv.js.map} +1 -1
  87. package/chunks/{utils-BaakoACO.js → utils-Fg8ptXcX.js} +6 -6
  88. package/chunks/{utils-BaakoACO.js.map → utils-Fg8ptXcX.js.map} +1 -1
  89. package/chunks/{utils-g0xZYVuS.js → utils-QF2QqBDT.js} +11 -11
  90. package/chunks/{utils-g0xZYVuS.js.map → utils-QF2QqBDT.js.map} +1 -1
  91. package/components/Alert/AlertContext/AlertContext.js +7 -7
  92. package/components/Alert/AlertProcess/AlertProcess.js +2 -2
  93. package/components/Alert/AlertProcess/components/AlertProcessSpoiler.js +1 -1
  94. package/components/Amount/Amount.js +2 -2
  95. package/components/Avatar/Avatar.js +13 -13
  96. package/components/Badge/Badge.js +4 -4
  97. package/components/Badge/BadgeDot.js +4 -4
  98. package/components/Badge/components/BadgeContent.js +6 -6
  99. package/components/Badge/components/BadgePostfix.js +1 -1
  100. package/components/Badge/components/BadgePrefix.js +1 -1
  101. package/components/Body/Body.js +3 -3
  102. package/components/Button/Button.js +20 -20
  103. package/components/Button/ButtonBase.js +1 -1
  104. package/components/Button/ButtonDropdown.js +8 -8
  105. package/components/Button/ButtonDropdownExtended.js +2 -2
  106. package/components/Button/ButtonIcon.js +3 -3
  107. package/components/Calendar/Calendar.js +16 -16
  108. package/components/Calendar/Calendar.js.map +1 -1
  109. package/components/Calendar/CalendarContext.js.map +1 -1
  110. package/components/Calendar/CalendarViewContext.js.map +1 -1
  111. package/components/Calendar/components/CalendarControls.js +12 -32
  112. package/components/Calendar/components/CalendarControls.js.map +1 -1
  113. package/components/Calendar/components/CalendarFooter.js +3 -2
  114. package/components/Calendar/components/CalendarFooter.js.map +1 -1
  115. package/components/Calendar/components/CalendarView.js +1 -0
  116. package/components/Calendar/components/CalendarView.js.map +1 -1
  117. package/components/Calendar/components/CalendarViewDays.js +31 -55
  118. package/components/Calendar/components/CalendarViewDays.js.map +1 -1
  119. package/components/Calendar/components/CalendarViewItem.js +1 -1
  120. package/components/Calendar/components/CalendarViewMonths.js +30 -52
  121. package/components/Calendar/components/CalendarViewMonths.js.map +1 -1
  122. package/components/Calendar/components/CalendarViewYears.js +34 -55
  123. package/components/Calendar/components/CalendarViewYears.js.map +1 -1
  124. package/components/Calendar/utils.js +43 -10
  125. package/components/Calendar/utils.js.map +1 -1
  126. package/components/Card/CardAction.js +5 -5
  127. package/components/Card/CardStatic.js +2 -2
  128. package/components/Card/components/CardContent/CardContent.js +1 -1
  129. package/components/Card/components/CardContent/components/CardContentBody.js +1 -1
  130. package/components/Card/components/CardContent/components/CardContentFooter.js +1 -1
  131. package/components/Card/components/CardContent/components/CardContentHeader.js +1 -1
  132. package/components/Card/components/CardMedia.js +1 -1
  133. package/components/Card/enums.js +1 -0
  134. package/components/Card/enums.js.map +1 -1
  135. package/components/Card/utils.js +2 -1
  136. package/components/Card/utils.js.map +1 -1
  137. package/components/Carousel/Carousel.js +1 -1
  138. package/components/Carousel/CarouselButton.js +1 -1
  139. package/components/Carousel/CarouselIndicators.js +1 -1
  140. package/components/Carousel/CarouselItem.js +1 -1
  141. package/components/Carousel/CarouselTrack.js +1 -1
  142. package/components/Carousel/CarouselViewport.js +1 -1
  143. package/components/CarouselExtended/CarouselExtended.js +1 -1
  144. package/components/Checkbox/Checkbox.js +10 -10
  145. package/components/Checkbox/CheckboxXGroup.js +8 -8
  146. package/components/Checkbox/CheckboxYGroup.js +1 -1
  147. package/components/CheckboxTreeExtended/CheckboxTreeExtended.js +1 -1
  148. package/components/CheckboxTreeExtended/components/CheckboxTreeExtendedArrow.js +1 -1
  149. package/components/CheckboxTreeExtended/components/CheckboxTreeExtendedCheckbox.js +1 -1
  150. package/components/CheckboxTreeExtended/components/CheckboxTreeExtendedNode.js +1 -1
  151. package/components/Chip/Chip.js +1 -1
  152. package/components/Chip/ChipClearButton.js +1 -1
  153. package/components/Chip/ChipDatePicker/ChipDatePicker.js +1 -1
  154. package/components/Chip/ChipDatePicker/ChipDatePickerTarget.js +1 -1
  155. package/components/Chip/ChipDropdownArrow.js +2 -2
  156. package/components/Chip/ChipIcon.js +1 -1
  157. package/components/Chip/ChipMultiselect.js +1 -1
  158. package/components/Chip/ChipOptions.js +2 -2
  159. package/components/Chip/ChipSelect/ChipSelect.js +1 -1
  160. package/components/Chip/ChipSelect/ChipSelectTarget.js +1 -1
  161. package/components/Chip/ChipSort.js +1 -1
  162. package/components/Chip/ChipSuggest/ChipSuggest.js +1 -1
  163. package/components/Chip/ChipSuggest/ChipSuggestDropdown.js +1 -1
  164. package/components/Chip/ChipSuggest/ChipSuggestTarget.js +1 -1
  165. package/components/Chip/ChipSuggest/desktop/ChipSuggestDesktopDropdownField.js +1 -1
  166. package/components/Chip/index.js +1 -1
  167. package/components/ChipGroup/ChipGroup.js +7 -7
  168. package/components/Col/Col.js +132 -132
  169. package/components/CollapsibleTree/CollapsibleTree.js +1 -1
  170. package/components/CollapsibleTree/components/CollapsibleTreeLeafContent.js +1 -1
  171. package/components/CollapsibleTree/components/CollapsibleTreeLeafNode.js +1 -1
  172. package/components/CollapsibleTree/components/CollapsibleTreeNodeHeader.js +4 -4
  173. package/components/CollapsibleTreeExtended/components/CollapsibleTreeExtendedNode.js +1 -1
  174. package/components/Confirm/Confirm.js +1 -1
  175. package/components/Confirm/components/ConfirmCloseButton.js +1 -1
  176. package/components/Confirm/components/ConfirmContent.js +1 -1
  177. package/components/Confirm/components/ConfirmContentTitle.js +1 -1
  178. package/components/Confirm/components/ConfirmControls.js +1 -1
  179. package/components/DateField/utils.js +2 -2
  180. package/components/DateField/utils.js.map +1 -1
  181. package/components/DatePickerExtended/DatePickerExtended.js +2 -2
  182. package/components/DatePickerExtended/DatePickerExtendedDropdown.js +1 -1
  183. package/components/DateRange/DateRange.js +3 -3
  184. package/components/DesignTokens/DesignTokenUtils.js +25 -20
  185. package/components/DesignTokens/DesignTokenUtils.js.map +1 -1
  186. package/components/DesignTokens/components/Calendar.js +2 -2
  187. package/components/DesignTokens/components/Calendar.js.map +1 -1
  188. package/components/DesignTokens/components/StatusTracker.js +8 -2
  189. package/components/DesignTokens/components/StatusTracker.js.map +1 -1
  190. package/components/Divider/Divider.js +17 -17
  191. package/components/DocumentNumberEdit/DocumentNumberEdit.js +3 -3
  192. package/components/Dropdown/desktop/DropdownDesktop.js +6 -6
  193. package/components/Dropdown/desktop/DropdownList.js +1 -1
  194. package/components/Dropdown/desktop/DropdownListItem.js +1 -1
  195. package/components/Dropdown/desktop/index.js +1 -1
  196. package/components/Dropdown/index.js +1 -1
  197. package/components/Dropdown/mobile/DropdownMobile.js +2 -2
  198. package/components/Dropdown/mobile/DropdownMobileBody.js +1 -1
  199. package/components/Dropdown/mobile/DropdownMobileClose.js +1 -1
  200. package/components/Dropdown/mobile/DropdownMobileFooter.js +1 -1
  201. package/components/Dropdown/mobile/DropdownMobileHeader.js +1 -1
  202. package/components/Dropdown/mobile/DropdownMobileInner.js +1 -1
  203. package/components/Dropdown/mobile/DropdownMobileInput.js +1 -1
  204. package/components/Dropdown/mobile/DropdownMobileList.js +1 -1
  205. package/components/Dropdown/mobile/DropdownMobileListItem.js +1 -1
  206. package/components/Dropdown/mobile/DropdownMobileLoader.js +1 -1
  207. package/components/Dropdown/mobile/DropdownMobileMaskedInput.js +1 -1
  208. package/components/Ellipsis/Ellipsis.js +3 -3
  209. package/components/EmptyView/EmptyView.js +4 -4
  210. package/components/ExpandAnimation/ExpandAnimation.js +1 -1
  211. package/components/FocusTrapExtended/FocusTrapExtended.js +20 -8
  212. package/components/FocusTrapExtended/FocusTrapExtended.js.map +1 -1
  213. package/components/Footer/Footer.js +1 -1
  214. package/components/Footer/components/FooterDescription.js +1 -1
  215. package/components/Footer/components/FooterDescriptionContent.js +1 -1
  216. package/components/Footer/components/FooterDescriptionControls.js +1 -1
  217. package/components/FormField/FormField.js +20 -20
  218. package/components/FormField/FormField.js.map +1 -1
  219. package/components/FormField/FormFieldContext.js.map +1 -1
  220. package/components/FormField/FormFieldDescriptionContext.js.map +1 -1
  221. package/components/FormField/components/FormFieldClear.js +1 -1
  222. package/components/FormField/components/FormFieldClear.js.map +1 -1
  223. package/components/FormField/components/FormFieldCounter.js +5 -4
  224. package/components/FormField/components/FormFieldCounter.js.map +1 -1
  225. package/components/FormField/components/FormFieldDescription.js +13 -5
  226. package/components/FormField/components/FormFieldDescription.js.map +1 -1
  227. package/components/FormField/components/FormFieldInput.js +7 -8
  228. package/components/FormField/components/FormFieldInput.js.map +1 -1
  229. package/components/FormField/components/FormFieldLabel.js +10 -11
  230. package/components/FormField/components/FormFieldLabel.js.map +1 -1
  231. package/components/FormField/components/FormFieldMaskedInput.js +6 -6
  232. package/components/FormField/components/FormFieldPostfix.js +5 -29
  233. package/components/FormField/components/FormFieldPostfix.js.map +1 -1
  234. package/components/FormField/components/FormFieldPrefix.js +5 -29
  235. package/components/FormField/components/FormFieldPrefix.js.map +1 -1
  236. package/components/FormField/components/FormFieldTarget.js +8 -8
  237. package/components/FormField/components/FormFieldTextarea.js +4 -4
  238. package/components/FormField/components/useFormFieldAffixWidth.js +33 -0
  239. package/components/FormField/components/useFormFieldAffixWidth.js.map +1 -0
  240. package/components/FormField/components/utils.js +9 -1
  241. package/components/FormField/components/utils.js.map +1 -1
  242. package/components/FormField/consts.js.map +1 -1
  243. package/components/FormField/enums.js.map +1 -1
  244. package/components/FormField/index.js +2 -3
  245. package/components/Gap/Gap.js +8 -8
  246. package/components/Header/Header.js +1 -1
  247. package/components/Header/components/HeaderLayoutSidebar/HeaderLayoutSidebar.js +1 -1
  248. package/components/Header/components/HeaderLayoutSidebar/HeaderLayoutSidebarContent.js +1 -1
  249. package/components/Header/components/HeaderLayoutSidebar/HeaderLayoutSidebarSidebar.js +1 -1
  250. package/components/Header/components/HeaderSubheader/HeaderSubheader.js +2 -2
  251. package/components/Header/components/HeaderTabs/HeaderTabs.js +1 -1
  252. package/components/Header/components/HeaderTabs/HeaderTabsContent.js +1 -1
  253. package/components/Header/components/HeaderTabs/HeaderTabsControls.js +1 -1
  254. package/components/Header/components/HeaderTitle/HeaderTitle.js +1 -1
  255. package/components/Header/components/HeaderTitle/HeaderTitleContent.js +1 -1
  256. package/components/Header/components/HeaderTitle/HeaderTitleControls.js +1 -1
  257. package/components/HelpBox/HelpBox.js +1 -1
  258. package/components/IconWrapper/IconWrapper.js +7 -7
  259. package/components/IconWrapper/IconWrapper.js.map +1 -1
  260. package/components/ImageGallery/ImageGallery.js +1 -1
  261. package/components/ImageGalleryExtended/ImageGalleryExtended.js +2 -2
  262. package/components/ImageGalleryExtended/components/ImageGalleryExtendedArrow.js +1 -1
  263. package/components/ImageGalleryExtended/components/ImageGalleryExtendedDots.js +3 -3
  264. package/components/ImageGalleryExtended/components/ImageGalleryExtendedMain.js +1 -1
  265. package/components/ImageGalleryExtended/components/ImageGalleryExtendedSlide.js +1 -1
  266. package/components/ImageGalleryExtended/components/ImageGalleryExtendedSwipeTrack.js +1 -1
  267. package/components/ImageGalleryExtended/components/ImageGalleryExtendedThumb.js +1 -1
  268. package/components/ImageGalleryExtended/components/ImageGalleryExtendedThumbnails.js +1 -1
  269. package/components/ImageGalleryExtended/components/index.js +1 -1
  270. package/components/ImageGalleryExtended/index.js +1 -1
  271. package/components/Island/Island.js +3 -3
  272. package/components/Island/Island.js.map +1 -1
  273. package/components/Island/components/IslandBody.js +2 -1
  274. package/components/Island/components/IslandBody.js.map +1 -1
  275. package/components/Island/components/IslandFooter.js +7 -4
  276. package/components/Island/components/IslandFooter.js.map +1 -1
  277. package/components/Island/components/IslandHeader.js +7 -4
  278. package/components/Island/components/IslandHeader.js.map +1 -1
  279. package/components/Island/enums.js.map +1 -1
  280. package/components/Island/utils.js +1 -1
  281. package/components/IslandAccordion/IslandAccordion.js +2 -2
  282. package/components/IslandAccordion/components/IslandAccordionContent.js +1 -1
  283. package/components/IslandAccordion/components/IslandAccordionFooter.js +1 -1
  284. package/components/IslandAccordion/components/IslandAccordionItem.js +2 -2
  285. package/components/IslandWidget/IslandWidget.js +4 -4
  286. package/components/IslandWidget/components/IslandWidgetBody.js +1 -1
  287. package/components/IslandWidget/components/IslandWidgetExtraFooter.js +1 -1
  288. package/components/IslandWidget/components/IslandWidgetFooter.js +1 -1
  289. package/components/IslandWidget/components/IslandWidgetFooterContent.js +1 -1
  290. package/components/IslandWidget/components/IslandWidgetFooterControls.js +1 -1
  291. package/components/IslandWidget/components/IslandWidgetHeader.js +1 -1
  292. package/components/IslandWidget/components/IslandWidgetHeaderContent.js +1 -1
  293. package/components/IslandWidget/components/IslandWidgetHeaderControls.js +1 -1
  294. package/components/IslandWidget/components/IslandWidgetHeaderDescription.js +1 -1
  295. package/components/IslandWidget/components/IslandWidgetHeaderTitle.js +1 -1
  296. package/components/IslandWidget/components/IslandWidgetWrapper.js +1 -1
  297. package/components/KeyDownListener/ComposedKeyDownListener.js +7 -8
  298. package/components/KeyDownListener/ComposedKeyDownListener.js.map +1 -1
  299. package/components/KeyDownListener/KeyDownListener.js +3 -4
  300. package/components/KeyDownListener/KeyDownListener.js.map +1 -1
  301. package/components/LightBox/LightBox.js +5 -5
  302. package/components/LightBox/LightBoxContent.js +1 -1
  303. package/components/LightBox/LightBoxControls/LightBoxArrow.js +1 -1
  304. package/components/LightBox/LightBoxControls/LightBoxClose.js +1 -1
  305. package/components/LightBox/LightBoxControls/LightBoxControls.js +1 -1
  306. package/components/LightBox/LightBoxControls/LightBoxNext.js +1 -1
  307. package/components/LightBox/LightBoxControls/LightBoxPrev.js +1 -1
  308. package/components/LightBox/LightBoxSideOverlay/LightBoxSideOverlay.js +12 -13
  309. package/components/LightBox/LightBoxSideOverlay/LightBoxSideOverlay.js.map +1 -1
  310. package/components/LightBox/LightBoxSideOverlay/LightBoxSideOverlayCloseDesktop.js +1 -1
  311. package/components/LightBox/LightBoxSideOverlay/LightBoxSideOverlayCloseMobile.js +1 -1
  312. package/components/LightBox/LightBoxSideOverlay/LightBoxSideOverlayLoader.js +1 -1
  313. package/components/LightBox/LightBoxSidebars/LightBoxLeftSidebar.js +3 -3
  314. package/components/LightBox/LightBoxSidebars/LightBoxRightSidebar.js +3 -3
  315. package/components/Link/Link.js +5 -5
  316. package/components/List/List.js +3 -3
  317. package/components/List/components/ListActionItem.js +1 -1
  318. package/components/List/components/ListEmptyState.js +1 -1
  319. package/components/List/components/ListItem.js +1 -1
  320. package/components/List/components/ListItemContent.js +4 -4
  321. package/components/List/components/ListItemControls.js +1 -1
  322. package/components/List/components/ListItemControlsButton.js +1 -1
  323. package/components/List/components/ListItemControlsButtonDropdown.js +1 -1
  324. package/components/List/components/ListItemLoading.js +1 -1
  325. package/components/List/components/ListItemSelectable.js +6 -6
  326. package/components/List/components/ListItemTailLeft.js +1 -1
  327. package/components/List/components/ListItemTailRight.js +1 -1
  328. package/components/List/components/ListSortableItem.js +2 -2
  329. package/components/List/components/ListSortableItemControls.js +1 -1
  330. package/components/List/components/ListSortableItemTarget.js +4 -4
  331. package/components/List/components/ListTableItem.js +3 -3
  332. package/components/List/index.js +1 -1
  333. package/components/ListMaster/ListMaster.js +1 -1
  334. package/components/ListMaster/components/ListMasterBody.js +1 -1
  335. package/components/ListMaster/components/ListMasterChipGroup.js +1 -1
  336. package/components/ListMaster/components/ListMasterFooter.js +1 -1
  337. package/components/ListMaster/components/ListMasterFooterControls.js +1 -1
  338. package/components/ListMaster/components/ListMasterFooterDescription.js +1 -1
  339. package/components/ListMaster/components/ListMasterHeader.js +2 -2
  340. package/components/ListMaster/components/SelectionControls.js +2 -2
  341. package/components/Loader/LoaderMiddle/LoaderMiddle.js +10 -10
  342. package/components/Loader/LoaderMiddle/LoaderMiddle.js.map +1 -1
  343. package/components/Loader/LoaderSmall/LoaderSmall.js +10 -10
  344. package/components/LoaderScreen/LoaderScreen.js +13 -12
  345. package/components/LoaderScreen/LoaderScreen.js.map +1 -1
  346. package/components/Marker/Marker.js +1 -1
  347. package/components/Marker/utils.js +1 -1
  348. package/components/MarkerStatus/MarkerStatus.js +7 -7
  349. package/components/ModalWindow/ModalWindow.js +1 -1
  350. package/components/ModalWindow/components/ModalWindowBody.js +1 -1
  351. package/components/ModalWindow/components/ModalWindowClose.js +1 -1
  352. package/components/ModalWindow/components/ModalWindowContent.js +1 -1
  353. package/components/ModalWindow/components/ModalWindowHeader.js +1 -1
  354. package/components/ModalWindow/components/ModalWindowViewManager.js +1 -1
  355. package/components/MonthYearField/utils.js +2 -1
  356. package/components/MonthYearField/utils.js.map +1 -1
  357. package/components/MonthYearRange/MonthYearRange.js +3 -3
  358. package/components/MultiselectField/components/MultiselectFieldDropdown.js +1 -1
  359. package/components/MultiselectField/components/MultiselectFieldDropdownContent.js +5 -5
  360. package/components/MultiselectField/components/MultiselectFieldDropdownFooter.js +1 -1
  361. package/components/MultiselectField/components/MultiselectFieldDropdownHeader.js +1 -1
  362. package/components/Notification/Notification.js +2 -2
  363. package/components/Notification/NotificationGrouped.js +1 -1
  364. package/components/Notification/components/NotificationBody.js +1 -1
  365. package/components/Notification/components/NotificationBodyList.js +1 -1
  366. package/components/Notification/components/NotificationClose.js +1 -1
  367. package/components/Notification/components/NotificationFooter.js +1 -1
  368. package/components/Notification/components/NotificationGroupedFooter.js +1 -1
  369. package/components/Notification/components/NotificationHeader.js +1 -1
  370. package/components/Notification/components/NotificationIcon.js +1 -1
  371. package/components/Notification/components/NotificationTime.js +1 -1
  372. package/components/OrderedList/OrderedList.js +2 -2
  373. package/components/OrderedList/OrderedListItem.js +2 -2
  374. package/components/Overlay/Overlay.js +1 -1
  375. package/components/Overlay/OverlayMask.js +1 -1
  376. package/components/Overlay/OverlayPanel.js +1 -1
  377. package/components/Page/Page.js +1 -1
  378. package/components/Page/components/BodyPage.js +3 -3
  379. package/components/Page/components/FooterPage.js +1 -1
  380. package/components/Page/components/FooterPage.js.map +1 -1
  381. package/components/Page/components/HeaderPage.js +1 -1
  382. package/components/Page/components/HeaderPage.js.map +1 -1
  383. package/components/Pagination/components/PaginationExtended.js +2 -2
  384. package/components/Pagination/components/PaginationNavigation.js +1 -1
  385. package/components/Pagination/components/PaginationNavigation.js.map +1 -1
  386. package/components/Pagination/components/PaginationNavigationButton.js +2 -2
  387. package/components/Pagination/components/PaginationNavigationExtended.js +1 -1
  388. package/components/Pagination/components/PaginationPageButton.js +2 -2
  389. package/components/Pagination/components/PaginationPageEllipsis.js +1 -1
  390. package/components/Pagination/components/PaginationSelect.js +2 -2
  391. package/components/Pagination/{utils/paginationUtils.js → utils.js} +2 -2
  392. package/components/Pagination/utils.js.map +1 -0
  393. package/components/Radio/Radio.js +9 -9
  394. package/components/Radio/RadioXGroup.js +8 -8
  395. package/components/Radio/RadioYGroup.js +1 -1
  396. package/components/Row/Row.js +4 -4
  397. package/components/SMSField/SMSField.js +2 -2
  398. package/components/SMSField/components/RefreshIcon.js +1 -1
  399. package/components/SMSField/components/SMSFieldInput.js +1 -1
  400. package/components/SMSField/components/SMSFieldRefresh.js +1 -1
  401. package/components/SMSField/components/SMSFieldSubmit.js +1 -1
  402. package/components/SegmentedControl/SegmentedControl.js +9 -9
  403. package/components/SegmentedControl/SegmentedControlSegment.js +3 -3
  404. package/components/SelectExtendedField/SelectExtendedField.js +41 -46
  405. package/components/SelectExtendedField/SelectExtendedField.js.map +1 -1
  406. package/components/SelectExtendedField/components/SelectExtendedFieldDropdown.js +2 -1
  407. package/components/SelectExtendedField/components/SelectExtendedFieldDropdown.js.map +1 -1
  408. package/components/SelectExtendedField/components/SelectExtendedFieldDropdownDefault.js +18 -38
  409. package/components/SelectExtendedField/components/SelectExtendedFieldDropdownDefault.js.map +1 -1
  410. package/components/SelectExtendedField/components/SelectExtendedFieldTarget.js +47 -65
  411. package/components/SelectExtendedField/components/SelectExtendedFieldTarget.js.map +1 -1
  412. package/components/SelectField/SelectField.js +1 -1
  413. package/components/Skeleton/Skeleton.js +4 -4
  414. package/components/SliderExtended/SliderExtended.js +2 -2
  415. package/components/SliderExtended/components/SliderExtendedDot/SliderExtendedDot.js +6 -5
  416. package/components/SliderExtended/components/SliderExtendedDot/SliderExtendedDot.js.map +1 -1
  417. package/components/SliderExtended/components/SliderExtendedMarks/SliderExtendedMark.js +1 -1
  418. package/components/SliderExtended/components/SliderExtendedMarks/SliderExtendedMarks.js +1 -1
  419. package/components/SliderExtended/components/SliderExtendedRail.js +1 -1
  420. package/components/SliderExtended/components/SliderExtendedTooltip/SliderExtendedTooltip.js +4 -4
  421. package/components/SliderExtended/components/SliderExtendedTrack/SliderExtendedTrack.js +7 -6
  422. package/components/SliderExtended/components/SliderExtendedTrack/SliderExtendedTrack.js.map +1 -1
  423. package/components/SmallInput/SmallInput.js +1 -1
  424. package/components/Spoiler/Spoiler.js +10 -10
  425. package/components/StatusTracker/StatusTracker.js +7 -6
  426. package/components/StatusTracker/StatusTracker.js.map +1 -1
  427. package/components/StatusTracker/components/StatusTrackerAlert.js +1 -1
  428. package/components/StatusTracker/components/StatusTrackerBody.js +1 -1
  429. package/components/StatusTracker/components/StatusTrackerButton.js +1 -1
  430. package/components/StatusTracker/components/StatusTrackerDescription.js +1 -1
  431. package/components/StatusTracker/components/StatusTrackerFooter.js +1 -1
  432. package/components/StatusTracker/components/StatusTrackerHeader.js +1 -1
  433. package/components/StatusTracker/components/StatusTrackerMedia.js +1 -1
  434. package/components/StatusTracker/components/StatusTrackerStatus.js +1 -1
  435. package/components/StatusTracker/components/StatusTrackerStatusGroup.js +1 -1
  436. package/components/StatusTracker/components/StatusTrackerSum.js +1 -1
  437. package/components/StatusTracker/components/StatusTrackerTitle.js +1 -1
  438. package/components/Step/Step.js +10 -10
  439. package/components/Stepper/Stepper.js +8 -8
  440. package/components/Stepper/StepperExtended.js +1 -1
  441. package/components/Stepper/StepperStep.js +2 -2
  442. package/components/Stepper/StepperStepArrowBorder.js +1 -1
  443. package/components/Suggest/SuggestMobileDropdownContent.js +3 -3
  444. package/components/SuggestField/SuggestField.js +1 -1
  445. package/components/SuggestField/desktop/SuggestFieldDesktop.js +1 -1
  446. package/components/SuggestField/desktop/SuggestFieldDesktopDropdown.js +1 -1
  447. package/components/SuggestField/index.js +1 -1
  448. package/components/SuggestField/mobile/SuggestFieldMobile.js +1 -1
  449. package/components/SuggestField/mobile/SuggestFieldMobileDropdown.js +2 -2
  450. package/components/SuggestField/mobile/SuggestFieldMobileDropdownHint.js +1 -1
  451. package/components/SuggestField/mobile/index.js +1 -1
  452. package/components/SwipeableArea/SwipeableArea.js +8 -8
  453. package/components/Table/ChipPanel.js +1 -1
  454. package/components/Table/ChipPanelLinks.js +1 -1
  455. package/components/Table/FilterPanel.js +2 -2
  456. package/components/Table/MasterTable.js +2 -2
  457. package/components/Table/NoColumns.js +2 -2
  458. package/components/Table/PaginationPanel.js +2 -2
  459. package/components/Table/TableBasic/TableBasic.js +1 -1
  460. package/components/Table/TableBasic/components/TableBasicBody.js +1 -1
  461. package/components/Table/TableBasic/components/TableBasicHeader.js +1 -1
  462. package/components/Table/TableBasic/components/TableBasicRow.js +1 -1
  463. package/components/Table/TableBasicSettings/TableBasicSettings.js +2 -2
  464. package/components/Table/TableBasicSettings/components/ColumnSettingsSortableListItemTarget.js +2 -2
  465. package/components/Table/TableBasicSettings/components/ColumnSettingsStaticListItem.js +1 -1
  466. package/components/Table/TableBasicSettings/components/TableBasicSettingsBody.js +1 -1
  467. package/components/Table/TableBasicSettings/components/TableBasicSettingsFooter.js +1 -1
  468. package/components/Table/TableBasicSettings/components/TableBasicSettingsHeader.js +1 -1
  469. package/components/Table/TableFooter/TableFooter.js +1 -1
  470. package/components/Table/TableFooter/components/TableFooterSummary.js +1 -1
  471. package/components/Table/TableFooter/components/TableFooterSummaryAmount.js +1 -1
  472. package/components/Table/TableFooter/components/TableFooterSummarySelectAllButton.js +1 -1
  473. package/components/Table/TableFooter/components/TableFooterSummarySelectedCount.js +1 -1
  474. package/components/Table/utils.js +1 -1
  475. package/components/Tabs/Tabs.js +5 -5
  476. package/components/TabsExtended/TabsExtended.js +2 -2
  477. package/components/TabsExtended/components/TabsExtendedContent.js +1 -1
  478. package/components/TabsExtended/components/TabsExtendedDropdownWrapper.js +1 -1
  479. package/components/TabsExtended/components/TabsExtendedTab.js +1 -1
  480. package/components/TabsExtended/components/TabsExtendedTabButton.js +1 -1
  481. package/components/TabsExtended/components/TabsExtendedTabsWrapper.js +1 -1
  482. package/components/TabsExtended/utils.js +1 -1
  483. package/components/TabsLine/TabsLine.js +1 -1
  484. package/components/TabsLine/components/TabsLineDesktop.js +1 -1
  485. package/components/TabsLine/components/TabsLineDropdown.js +2 -2
  486. package/components/TabsLine/components/TabsLineItem.js +1 -1
  487. package/components/TabsLine/components/TabsLineMobile.js +2 -2
  488. package/components/Tag/Tag.js +5 -5
  489. package/components/TagColor/TagColor.js +10 -10
  490. package/components/TagGroup/TagGroup.js +4 -4
  491. package/components/ThemeProvider/ETriplexNextTheme.js.map +1 -1
  492. package/components/ThemeProvider/ThemeProvider.js +5 -3
  493. package/components/ThemeProvider/ThemeProvider.js.map +1 -1
  494. package/components/ThemeProvider/ThemeProviderContext.js.map +1 -1
  495. package/components/ThemeProvider/components/ThemeProviderView.js +6 -9
  496. package/components/ThemeProvider/components/ThemeProviderView.js.map +1 -1
  497. package/components/ThemeProvider/useToken.js.map +1 -1
  498. package/components/Tooltip/Tooltip.js +49 -52
  499. package/components/Tooltip/Tooltip.js.map +1 -1
  500. package/components/Tooltip/TootlipContext.js.map +1 -1
  501. package/components/Tooltip/components/common/TooltipBody.js +1 -1
  502. package/components/Tooltip/components/common/TooltipLink.js +7 -18
  503. package/components/Tooltip/components/common/TooltipLink.js.map +1 -1
  504. package/components/Tooltip/components/common/TooltipTarget.js.map +1 -1
  505. package/components/Tooltip/components/common/TooltipXButton.js +1 -1
  506. package/components/Tooltip/components/desktop/TooltipDesktop.js +24 -12
  507. package/components/Tooltip/components/desktop/TooltipDesktop.js.map +1 -1
  508. package/components/Tooltip/components/desktop/components/TooltipDesktopBase.js +25 -24
  509. package/components/Tooltip/components/desktop/components/TooltipDesktopBase.js.map +1 -1
  510. package/components/Tooltip/components/desktop/components/TooltipDesktopTip.js +8 -17
  511. package/components/Tooltip/components/desktop/components/TooltipDesktopTip.js.map +1 -1
  512. package/components/Tooltip/components/mobile/TooltipMobile.js +10 -6
  513. package/components/Tooltip/components/mobile/TooltipMobile.js.map +1 -1
  514. package/components/Tooltip/components/mobile/components/TooltipMobileHeader.js +2 -2
  515. package/components/Tooltip/components/mobile/components/TooltipMobileHeader.js.map +1 -1
  516. package/components/Tooltip/enums.js.map +1 -1
  517. package/components/Tooltip/utils/Positioning.js +18 -17
  518. package/components/Tooltip/utils/Positioning.js.map +1 -1
  519. package/components/Tooltip/utils/useTooltipTheme.js +40 -12
  520. package/components/Tooltip/utils/useTooltipTheme.js.map +1 -1
  521. package/components/TopOverlay/TopOverlay.js +6 -6
  522. package/components/TreeView/TreeView.js +1 -1
  523. package/components/TreeView/components/TreeViewGroup.js +1 -1
  524. package/components/TreeView/components/TreeViewNode.js +1 -1
  525. package/components/Typography/Caption.js +7 -7
  526. package/components/Typography/CodeText.js +2 -2
  527. package/components/Typography/Text.js +9 -9
  528. package/components/Typography/Title.js +9 -9
  529. package/components/Typography/constants.js +1 -1
  530. package/components/UnorderedList/UnorderedList.js +2 -2
  531. package/components/UnorderedList/UnorderedListItem.js +2 -2
  532. package/components/UploadZone/UploadZone.js +2 -2
  533. package/components/UploadZone/components/UploadZoneInput.js +1 -1
  534. package/components/UploadZone/index.js +1 -1
  535. package/components/index.js +7 -8
  536. package/consts/DateConst.js.map +1 -1
  537. package/index.d.ts +255 -107
  538. package/index.js +7 -8
  539. package/package.json +1 -1
  540. package/styles/triplex-next.css +2962 -2951
  541. package/chunks/CalendarViewItem-knPscTce.js.map +0 -1
  542. package/chunks/Card.module-Dd2_zoXF.js +0 -30
  543. package/chunks/Card.module-Dd2_zoXF.js.map +0 -1
  544. package/chunks/Carousel.module-LNo8o3qn.js +0 -30
  545. package/chunks/Carousel.module-LNo8o3qn.js.map +0 -1
  546. package/chunks/CheckboxTreeExtended.module-CKUO50mv.js +0 -24
  547. package/chunks/CheckboxTreeExtended.module-CKUO50mv.js.map +0 -1
  548. package/chunks/Chip-CI8ALCUS.js.map +0 -1
  549. package/chunks/Confirm.module-BtnLGqBz.js +0 -24
  550. package/chunks/Confirm.module-BtnLGqBz.js.map +0 -1
  551. package/chunks/DropdownMobile.module-xbkYiPM1.js +0 -40
  552. package/chunks/DropdownMobile.module-xbkYiPM1.js.map +0 -1
  553. package/chunks/Footer.module-CYELL0O7.js +0 -12
  554. package/chunks/Footer.module-CYELL0O7.js.map +0 -1
  555. package/chunks/HeaderLayoutSidebar.module-MnhSBdiv.js.map +0 -1
  556. package/chunks/HeaderTabs.module-D9u9xuSn.js +0 -12
  557. package/chunks/HeaderTabs.module-D9u9xuSn.js.map +0 -1
  558. package/chunks/HeaderTitle.module-BGOYMt6r.js.map +0 -1
  559. package/chunks/ImageGalleryExtendedMain.module-CQNClbso.js +0 -28
  560. package/chunks/ImageGalleryExtendedMain.module-CQNClbso.js.map +0 -1
  561. package/chunks/IslandAccordion.module-nyPnHohH.js +0 -44
  562. package/chunks/IslandAccordion.module-nyPnHohH.js.map +0 -1
  563. package/chunks/IslandWidgetFooter.module-CNyLawMh.js +0 -12
  564. package/chunks/IslandWidgetFooter.module-CNyLawMh.js.map +0 -1
  565. package/chunks/IslandWidgetHeader.module-ChE5SXll.js +0 -20
  566. package/chunks/IslandWidgetHeader.module-ChE5SXll.js.map +0 -1
  567. package/chunks/LightBoxControls.module-Buvm7RbG.js +0 -26
  568. package/chunks/LightBoxControls.module-Buvm7RbG.js.map +0 -1
  569. package/chunks/LightBoxSideOverlayClose.module-eTdxNvSz.js.map +0 -1
  570. package/chunks/ListItemTail.module-BhSOptJB.js +0 -18
  571. package/chunks/ListItemTail.module-BhSOptJB.js.map +0 -1
  572. package/chunks/ListMasterFooter.module-DrlO_YrT.js +0 -14
  573. package/chunks/ListMasterFooter.module-DrlO_YrT.js.map +0 -1
  574. package/chunks/ModalWindow.module-DrJpRuNK.js +0 -28
  575. package/chunks/ModalWindow.module-DrJpRuNK.js.map +0 -1
  576. package/chunks/Notification.module-tEh-vvv0.js +0 -34
  577. package/chunks/Notification.module-tEh-vvv0.js.map +0 -1
  578. package/chunks/Overlay.module-CPNLKKsF.js +0 -30
  579. package/chunks/Overlay.module-CPNLKKsF.js.map +0 -1
  580. package/chunks/Page.module-Dru0rPA5.js +0 -15
  581. package/chunks/Page.module-Dru0rPA5.js.map +0 -1
  582. package/chunks/SMSField.module-CjGkO6u6.js +0 -26
  583. package/chunks/SMSField.module-CjGkO6u6.js.map +0 -1
  584. package/chunks/SliderExtendedMarks.module-CAeqmSQq.js +0 -24
  585. package/chunks/SliderExtendedMarks.module-CAeqmSQq.js.map +0 -1
  586. package/chunks/StatusTracker.module-BD5zJfbg.js +0 -42
  587. package/chunks/StatusTracker.module-BD5zJfbg.js.map +0 -1
  588. package/chunks/TableFooter.module-DhudGmzN.js +0 -22
  589. package/chunks/TableFooter.module-DhudGmzN.js.map +0 -1
  590. package/chunks/TabsExtended.module-DNjJIne-.js +0 -26
  591. package/chunks/TabsExtended.module-DNjJIne-.js.map +0 -1
  592. package/chunks/TabsLine.module-CbVAypRw.js +0 -36
  593. package/chunks/TabsLine.module-CbVAypRw.js.map +0 -1
  594. package/chunks/TooltipDesktop.module-DBiY8cJJ.js +0 -32
  595. package/chunks/TooltipDesktop.module-DBiY8cJJ.js.map +0 -1
  596. package/chunks/TreeView.module-GA-NyzjK.js +0 -12
  597. package/chunks/TreeView.module-GA-NyzjK.js.map +0 -1
  598. package/chunks/utils-BHxrQbA6.js.map +0 -1
  599. package/components/Pagination/utils/paginationUtils.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"CalendarView.js","sources":["../../../../src/components/Calendar/components/CalendarView.tsx"],"sourcesContent":["import React, { useContext, useRef } from \"react\";\nimport { ICalendarViewProps } from \"../types\";\nimport { CalendarContext } from \"../CalendarContext\";\nimport { CalendarViewContext } from \"../CalendarViewContext\";\nimport { ECalendarViewMode } from \"../enums\";\nimport { CalendarViewDays } from \"./CalendarViewDays\";\nimport { CalendarViewMonths } from \"./CalendarViewMonths\";\nimport { CalendarViewYears } from \"./CalendarViewYears\";\n\n/** Вид календаря. */\nexport const CalendarView: React.FC<ICalendarViewProps> = ({\n dayHtmlAttributes,\n monthHtmlAttributes,\n yearHtmlAttributes,\n ...rest\n}) => {\n const { viewMode } = useContext(CalendarContext);\n const viewItemFocusedRef = useRef(false);\n\n /** Рендер текущего вида календаря. */\n const renderCurrentView = () => {\n switch (viewMode) {\n case ECalendarViewMode.DAYS:\n return <CalendarViewDays dayHtmlAttributes={dayHtmlAttributes} {...rest} />;\n case ECalendarViewMode.MONTHS:\n return <CalendarViewMonths monthHtmlAttributes={monthHtmlAttributes} {...rest} />;\n case ECalendarViewMode.YEARS:\n return <CalendarViewYears yearHtmlAttributes={yearHtmlAttributes} {...rest} />;\n }\n };\n\n return (\n <CalendarViewContext.Provider value={{ viewItemFocusedRef }}>\n {renderCurrentView()}\n </CalendarViewContext.Provider>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAUO,MAAM,eAA6C,CAAC;AAAA,EACvD;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACP,MAAM;AACF,QAAM,EAAE,SAAA,IAAa,WAAW,eAAe;AAC/C,QAAM,qBAAqB,OAAO,KAAK;AAGvC,QAAM,oBAAoB,MAAM;AAC5B,YAAQ,UAAA;AAAA,MACJ,KAAK,kBAAkB;AACnB,eAAO,oBAAC,kBAAA,EAAiB,mBAAuC,GAAG,KAAA,CAAM;AAAA,MAC7E,KAAK,kBAAkB;AACnB,eAAO,oBAAC,oBAAA,EAAmB,qBAA2C,GAAG,KAAA,CAAM;AAAA,MACnF,KAAK,kBAAkB;AACnB,eAAO,oBAAC,mBAAA,EAAkB,oBAAyC,GAAG,KAAA,CAAM;AAAA,IAAA;AAAA,EAExF;AAEA,SACI,oBAAC,oBAAoB,UAApB,EAA6B,OAAO,EAAE,sBAClC,UAAA,kBAAA,GACL;AAER;"}
1
+ {"version":3,"file":"CalendarView.js","sources":["../../../../src/components/Calendar/components/CalendarView.tsx"],"sourcesContent":["import React, { useContext, useRef } from \"react\";\nimport { ICalendarViewProps } from \"../types\";\nimport { CalendarContext } from \"../CalendarContext\";\nimport { CalendarViewContext } from \"../CalendarViewContext\";\nimport { ECalendarViewMode } from \"../enums\";\nimport { CalendarViewDays } from \"./CalendarViewDays\";\nimport { CalendarViewMonths } from \"./CalendarViewMonths\";\nimport { CalendarViewYears } from \"./CalendarViewYears\";\n\n/** Вид календаря. */\nexport const CalendarView: React.FC<ICalendarViewProps> = ({\n dayHtmlAttributes,\n monthHtmlAttributes,\n yearHtmlAttributes,\n ...rest\n}) => {\n const { viewMode } = useContext(CalendarContext);\n const viewItemFocusedRef = useRef(false);\n\n /** Рендер текущего вида календаря. */\n const renderCurrentView = () => {\n switch (viewMode) {\n case ECalendarViewMode.DAYS:\n return <CalendarViewDays dayHtmlAttributes={dayHtmlAttributes} {...rest} />;\n case ECalendarViewMode.MONTHS:\n return <CalendarViewMonths monthHtmlAttributes={monthHtmlAttributes} {...rest} />;\n case ECalendarViewMode.YEARS:\n return <CalendarViewYears yearHtmlAttributes={yearHtmlAttributes} {...rest} />;\n }\n };\n\n return (\n <CalendarViewContext.Provider value={{ viewItemFocusedRef }}>\n {renderCurrentView()}\n </CalendarViewContext.Provider>\n );\n};\n\nCalendarView.displayName = \"CalendarView\";\n"],"names":[],"mappings":";;;;;;;;AAUO,MAAM,eAA6C,CAAC;AAAA,EACvD;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACP,MAAM;AACF,QAAM,EAAE,SAAA,IAAa,WAAW,eAAe;AAC/C,QAAM,qBAAqB,OAAO,KAAK;AAGvC,QAAM,oBAAoB,MAAM;AAC5B,YAAQ,UAAA;AAAA,MACJ,KAAK,kBAAkB;AACnB,eAAO,oBAAC,kBAAA,EAAiB,mBAAuC,GAAG,KAAA,CAAM;AAAA,MAC7E,KAAK,kBAAkB;AACnB,eAAO,oBAAC,oBAAA,EAAmB,qBAA2C,GAAG,KAAA,CAAM;AAAA,MACnF,KAAK,kBAAkB;AACnB,eAAO,oBAAC,mBAAA,EAAkB,oBAAyC,GAAG,KAAA,CAAM;AAAA,IAAA;AAAA,EAExF;AAEA,SACI,oBAAC,oBAAoB,UAApB,EAA6B,OAAO,EAAE,sBAClC,UAAA,kBAAA,GACL;AAER;AAEA,aAAa,cAAc;"}
@@ -2,13 +2,17 @@ import { jsxs, jsx } from "react/jsx-runtime";
2
2
  import { useContext, useCallback, useState, useEffect } from "react";
3
3
  import moment from "moment";
4
4
  import { c as clsx } from "../../../chunks/vendor-CtuAQuEN.js";
5
- import { isDateOutOfRange, isDayDisabled } from "../utils.js";
6
- import { WEEKDAYS_SET } from "../../../consts/DateConst.js";
5
+ import { isDateOutOfRange, isDayDisabled, getFirstEnabledDate, getNavigationShift, shiftDate } from "../utils.js";
6
+ import { WEEKDAYS_SET, WEEKS_SET } from "../../../consts/DateConst.js";
7
7
  import { CalendarViewContext } from "../CalendarViewContext.js";
8
- import { s as styles, C as CalendarViewItem } from "../../../chunks/CalendarViewItem-knPscTce.js";
9
- import { isKey } from "../../../utils/keyboard.js";
8
+ import { s as styles, C as CalendarViewItem } from "../../../chunks/CalendarViewItem-CeA4XADM.js";
10
9
  import { ECalendarDateMarkType, ECalendarViewMode } from "../enums.js";
11
10
  import { CalendarContext } from "../CalendarContext.js";
11
+ const NAVIGATION_STEPS = {
12
+ horizontal: { amount: 1, unit: "day" },
13
+ vertical: { amount: 1, unit: "week" },
14
+ page: { amount: 1, unit: "month" }
15
+ };
12
16
  const CalendarViewDays = ({ pickedDate, dayHtmlAttributes = {} }) => {
13
17
  const { format, periodId, limitRange, viewDate, markedDays, disabledDays, onDateSelect, onPageChange } = useContext(CalendarContext);
14
18
  const { viewItemFocusedRef } = useContext(CalendarViewContext);
@@ -20,15 +24,9 @@ const CalendarViewDays = ({ pickedDate, dayHtmlAttributes = {} }) => {
20
24
  const getInitialTabbableDate = useCallback(() => {
21
25
  if (pickedDate && pickedDate.isSame(viewDate, "month")) {
22
26
  return pickedDate;
23
- } else {
24
- const date = viewDate.clone().startOf("month");
25
- for (let i = 0; i < date.daysInMonth(); i++) {
26
- date.add(i, "day");
27
- if (!isDisabledDate(date)) {
28
- return date;
29
- }
30
- }
31
27
  }
28
+ const startOfMonth = viewDate.clone().startOf("month");
29
+ return getFirstEnabledDate(startOfMonth, startOfMonth.daysInMonth(), "day", isDisabledDate);
32
30
  }, [pickedDate, viewDate, isDisabledDate]);
33
31
  const [tabbableDate, setTabbableDate] = useState(getInitialTabbableDate());
34
32
  useEffect(() => {
@@ -49,7 +47,7 @@ const CalendarViewDays = ({ pickedDate, dayHtmlAttributes = {} }) => {
49
47
  `calendar-table-header-${header}`
50
48
  )) }) });
51
49
  };
52
- const renderTableBody = () => /* @__PURE__ */ jsx("tbody", { className: styles.calendarViewDaysBody, children: [0, 1, 2, 3, 4, 5].map((row) => /* @__PURE__ */ jsx("tr", { children: [0, 1, 2, 3, 4, 5, 6].map((cell) => renderTableData(row, cell)) }, `calendar-table-row-${row}`)) });
50
+ const renderTableBody = () => /* @__PURE__ */ jsx("tbody", { className: styles.calendarViewDaysBody, children: WEEKS_SET.map((row) => /* @__PURE__ */ jsx("tr", { children: WEEKDAYS_SET.map((cell) => renderTableData(row, cell)) }, `calendar-table-row-${row}`)) });
53
51
  const renderTableData = (row, cell) => {
54
52
  const date = moment(startDate).add(row * 7 + cell, "day");
55
53
  const classNames = clsx({ [styles.current]: isCurrentDate(date) });
@@ -71,7 +69,7 @@ const CalendarViewDays = ({ pickedDate, dayHtmlAttributes = {} }) => {
71
69
  muted,
72
70
  markType,
73
71
  onKeyDown: handleItemKeyDown(date),
74
- onDateSelect: handleDateSelect,
72
+ onDateSelect,
75
73
  children: date.date()
76
74
  },
77
75
  `calendar-table-data-${cell}`
@@ -100,63 +98,40 @@ const CalendarViewDays = ({ pickedDate, dayHtmlAttributes = {} }) => {
100
98
  return ECalendarDateMarkType.BASIC;
101
99
  }
102
100
  } else if (day in markedDays) {
103
- return markedDays[date.format(format)];
101
+ return markedDays[day];
104
102
  }
105
103
  }
106
104
  };
107
- const getShiftedDate = (currentDate, operation, amount, unit) => {
105
+ const getShiftedDate = (currentDate, shift) => {
108
106
  const day = currentDate.clone();
109
- const shiftDay = {
110
- add: moment.fn.add.bind(day),
111
- subtract: moment.fn.subtract.bind(day)
112
- }[operation];
113
- while (shiftDay(amount, unit)) {
107
+ do {
108
+ shiftDate(day, shift);
114
109
  if (isDateOutOfRange(day, limitRange, "day")) {
115
110
  return currentDate;
116
111
  }
117
- if (!isDisabledDate(day)) {
118
- break;
119
- }
120
- }
112
+ } while (isDisabledDate(day));
121
113
  return day;
122
114
  };
123
115
  const handleItemKeyDown = (date) => (event) => {
124
- const key = event.code || event.keyCode;
125
- let nextFocusedDate;
126
- if (isKey(key, "ARROW_RIGHT")) {
127
- nextFocusedDate = getShiftedDate(date, "add", 1, "day");
128
- event.preventDefault();
129
- } else if (isKey(key, "ARROW_LEFT")) {
130
- nextFocusedDate = getShiftedDate(date, "subtract", 1, "day");
131
- event.preventDefault();
132
- } else if (isKey(key, "ARROW_DOWN")) {
133
- nextFocusedDate = getShiftedDate(date, "add", 1, "week");
134
- event.preventDefault();
135
- } else if (isKey(key, "ARROW_UP")) {
136
- nextFocusedDate = getShiftedDate(date, "subtract", 1, "week");
137
- event.preventDefault();
138
- } else if (isKey(key, "PAGE_DOWN")) {
139
- nextFocusedDate = getShiftedDate(date, "add", 1, "month");
140
- event.preventDefault();
141
- } else if (isKey(key, "PAGE_UP")) {
142
- nextFocusedDate = getShiftedDate(date, "subtract", 1, "month");
143
- event.preventDefault();
144
- }
145
- if (nextFocusedDate) {
146
- changeTabbableDate(nextFocusedDate);
116
+ const shift = getNavigationShift(event.code || event.keyCode, NAVIGATION_STEPS);
117
+ if (!shift) {
118
+ return;
147
119
  }
148
- };
149
- const handleDateSelect = (date) => {
150
- onDateSelect(date);
120
+ event.preventDefault();
121
+ changeTabbableDate(getShiftedDate(date, shift));
151
122
  };
152
123
  const changeTabbableDate = (date) => {
153
124
  setTabbableDate(date);
154
125
  if (date.isBefore(viewDate, "month")) {
155
- date = viewDate.clone().subtract(1, "month");
156
- onPageChange(date, ECalendarViewMode.DAYS);
126
+ onPageChange(
127
+ shiftDate(viewDate.clone(), { operation: "subtract", ...NAVIGATION_STEPS.page }),
128
+ ECalendarViewMode.DAYS
129
+ );
157
130
  } else if (date.isAfter(viewDate, "month")) {
158
- date = viewDate.clone().add(1, "month");
159
- onPageChange(date, ECalendarViewMode.DAYS);
131
+ onPageChange(
132
+ shiftDate(viewDate.clone(), { operation: "add", ...NAVIGATION_STEPS.page }),
133
+ ECalendarViewMode.DAYS
134
+ );
160
135
  }
161
136
  };
162
137
  return /* @__PURE__ */ jsxs("table", { className: styles.calendarViewDays, role: "grid", "aria-labelledby": periodId, children: [
@@ -164,6 +139,7 @@ const CalendarViewDays = ({ pickedDate, dayHtmlAttributes = {} }) => {
164
139
  renderTableBody()
165
140
  ] });
166
141
  };
142
+ CalendarViewDays.displayName = "CalendarViewDays";
167
143
  export {
168
144
  CalendarViewDays
169
145
  };
@@ -1 +1 @@
1
- {"version":3,"file":"CalendarViewDays.js","sources":["../../../../src/components/Calendar/components/CalendarViewDays.tsx"],"sourcesContent":["import React, { useState, useEffect, useContext, useCallback } from \"react\";\nimport moment from \"moment\";\nimport clsx from \"clsx\";\nimport { isDateOutOfRange, isDayDisabled } from \"../utils\";\nimport { WEEKDAYS_SET } from \"../../../consts/DateConst\";\nimport { CalendarViewContext } from \"../CalendarViewContext\";\nimport { CalendarViewItem } from \"./CalendarViewItem\";\nimport { isKey } from \"../../../utils/keyboard\";\nimport { ECalendarDateMarkType, ECalendarViewMode } from \"../enums\";\nimport { CalendarContext } from \"../CalendarContext\";\nimport { ICalendarViewProps } from \"../types\";\nimport styles from \"../styles/CalendarView.module.less\";\n\n/** Свойства компонента CalendarViewDays. */\nexport interface ICalendarViewDaysProps extends Omit<\n ICalendarViewProps,\n \"monthHtmlAttributes\" | \"yearHtmlAttributes\"\n> {}\n\n/** Вид календаря с выбором дня. */\nexport const CalendarViewDays: React.FC<ICalendarViewDaysProps> = ({ pickedDate, dayHtmlAttributes = {} }) => {\n const { format, periodId, limitRange, viewDate, markedDays, disabledDays, onDateSelect, onPageChange } =\n useContext(CalendarContext);\n const { viewItemFocusedRef } = useContext(CalendarViewContext);\n const startDate = viewDate.clone().startOf(\"month\").startOf(\"week\");\n\n /** Проверяет, является ли дата отключенной. */\n const isDisabledDate = useCallback(\n (date: moment.Moment) =>\n isDateOutOfRange(date, limitRange, \"day\") || isDayDisabled(date.format(format), disabledDays),\n [limitRange, disabledDays, format],\n );\n\n /** Получить первую доступную для фокуса дату. */\n const getInitialTabbableDate = useCallback(() => {\n if (pickedDate && pickedDate.isSame(viewDate, \"month\")) {\n return pickedDate;\n } else {\n const date = viewDate.clone().startOf(\"month\");\n\n for (let i = 0; i < date.daysInMonth(); i++) {\n date.add(i, \"day\");\n\n if (!isDisabledDate(date)) {\n return date;\n }\n }\n }\n }, [pickedDate, viewDate, isDisabledDate]);\n\n const [tabbableDate, setTabbableDate] = useState(getInitialTabbableDate());\n\n useEffect(() => {\n if (!viewItemFocusedRef.current) {\n setTabbableDate(getInitialTabbableDate());\n }\n }, [viewDate, viewItemFocusedRef, getInitialTabbableDate]);\n\n /** Рендер заголовка таблицы. */\n const renderTableHead = () => {\n const weekdays = moment.weekdays(true);\n const weekdaysMin = moment.weekdaysMin(true);\n\n return (\n <thead>\n <tr>\n {WEEKDAYS_SET.map((header) => (\n <th\n key={`calendar-table-header-${header}`}\n className={styles.calendarViewDaysHeader}\n abbr={weekdays[header]}\n >\n {weekdaysMin[header]}\n </th>\n ))}\n </tr>\n </thead>\n );\n };\n\n /** Рендер тела таблицы. */\n const renderTableBody = () => (\n <tbody className={styles.calendarViewDaysBody}>\n {[0, 1, 2, 3, 4, 5].map((row) => (\n <tr key={`calendar-table-row-${row}`}>\n {[0, 1, 2, 3, 4, 5, 6].map((cell) => renderTableData(row, cell))}\n </tr>\n ))}\n </tbody>\n );\n\n /** Рендер ячейки таблицы. */\n const renderTableData = (row: number, cell: number) => {\n const date = moment(startDate).add(row * 7 + cell, \"day\");\n const classNames = clsx({ [styles.current]: isCurrentDate(date) });\n const active = isActiveDate(date);\n const disabled = isDisabledDate(date);\n const tabbable = !disabled && isTabbableDay(date);\n const muted = isMutedDate(date);\n const markType = getMarkType(date);\n\n return (\n <CalendarViewItem\n key={`calendar-table-data-${cell}`}\n className={classNames}\n {...(typeof dayHtmlAttributes === \"function\"\n ? dayHtmlAttributes({ marked: markType !== undefined })\n : dayHtmlAttributes)}\n date={date}\n unit=\"day\"\n active={active}\n disabled={disabled}\n tabbable={tabbable}\n muted={muted}\n markType={markType}\n onKeyDown={handleItemKeyDown(date)}\n onDateSelect={handleDateSelect}\n >\n {date.date()}\n </CalendarViewItem>\n );\n };\n\n /** Проверяет, может ли дата получить фокус при навигации. */\n const isTabbableDay = (date: moment.Moment) => {\n if (tabbableDate) {\n return date.isSame(tabbableDate, \"day\");\n }\n\n return false;\n };\n\n /** Проверяет, относится ли дата к текущему месяцу. */\n const isMutedDate = (date: moment.Moment) => {\n return !date.isSame(viewDate, \"month\");\n };\n\n /** Проверяет, является ли дата сегодняшней. */\n const isCurrentDate = (date: moment.Moment) => {\n return date.isSame(moment(), \"day\");\n };\n\n /** Проверяет, является ли дата активной. */\n const isActiveDate = (date: moment.Moment) => {\n return !!pickedDate && date.isSame(pickedDate, \"day\");\n };\n\n /** Проверяет, является ли дата отмеченной. */\n const getMarkType = (date: moment.Moment) => {\n if (markedDays) {\n const day = date.format(format);\n\n if (Array.isArray(markedDays)) {\n if (markedDays.includes(day)) {\n return ECalendarDateMarkType.BASIC;\n }\n } else if (day in markedDays) {\n return markedDays[date.format(format)];\n }\n }\n };\n\n /** Возвращает доступную для выбора дату после сдвига. */\n const getShiftedDate = (\n currentDate: moment.Moment,\n operation: \"add\" | \"subtract\",\n amount: number,\n unit: \"day\" | \"week\" | \"month\",\n ) => {\n const day = currentDate.clone();\n const shiftDay = {\n add: moment.fn.add.bind(day),\n subtract: moment.fn.subtract.bind(day),\n }[operation];\n\n while (shiftDay(amount, unit)) {\n // Если вышли за пределы доступного периода – возвращаем текущий день.\n if (isDateOutOfRange(day, limitRange, \"day\")) {\n return currentDate;\n }\n // Если день доступен для выбора – выходим из поиска.\n if (!isDisabledDate(day)) {\n break;\n }\n }\n\n return day;\n };\n\n /** Обработчик нажатия клавиши CalendarViewItem. */\n const handleItemKeyDown = (date: moment.Moment) => (event: React.KeyboardEvent<HTMLTableCellElement>) => {\n const key = event.code || event.keyCode;\n let nextFocusedDate;\n\n if (isKey(key, \"ARROW_RIGHT\")) {\n nextFocusedDate = getShiftedDate(date, \"add\", 1, \"day\");\n event.preventDefault();\n } else if (isKey(key, \"ARROW_LEFT\")) {\n nextFocusedDate = getShiftedDate(date, \"subtract\", 1, \"day\");\n event.preventDefault();\n } else if (isKey(key, \"ARROW_DOWN\")) {\n nextFocusedDate = getShiftedDate(date, \"add\", 1, \"week\");\n event.preventDefault();\n } else if (isKey(key, \"ARROW_UP\")) {\n nextFocusedDate = getShiftedDate(date, \"subtract\", 1, \"week\");\n event.preventDefault();\n } else if (isKey(key, \"PAGE_DOWN\")) {\n nextFocusedDate = getShiftedDate(date, \"add\", 1, \"month\");\n event.preventDefault();\n } else if (isKey(key, \"PAGE_UP\")) {\n nextFocusedDate = getShiftedDate(date, \"subtract\", 1, \"month\");\n event.preventDefault();\n }\n\n if (nextFocusedDate) {\n changeTabbableDate(nextFocusedDate);\n }\n };\n\n /** Обработчик клика по дате. */\n const handleDateSelect = (date: moment.Moment) => {\n onDateSelect(date);\n };\n\n /** Изменение фокусируемой даты. */\n const changeTabbableDate = (date: moment.Moment) => {\n setTabbableDate(date);\n\n if (date.isBefore(viewDate, \"month\")) {\n date = viewDate.clone().subtract(1, \"month\");\n onPageChange(date, ECalendarViewMode.DAYS);\n } else if (date.isAfter(viewDate, \"month\")) {\n date = viewDate.clone().add(1, \"month\");\n onPageChange(date, ECalendarViewMode.DAYS);\n }\n };\n\n return (\n <table className={styles.calendarViewDays} role=\"grid\" aria-labelledby={periodId}>\n {renderTableHead()}\n {renderTableBody()}\n </table>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CalendarViewDays.js","sources":["../../../../src/components/Calendar/components/CalendarViewDays.tsx"],"sourcesContent":["import React, { useState, useEffect, useContext, useCallback } from \"react\";\nimport moment from \"moment\";\nimport clsx from \"clsx\";\nimport {\n ICalendarNavigationShift,\n ICalendarNavigationSteps,\n getFirstEnabledDate,\n getNavigationShift,\n isDateOutOfRange,\n isDayDisabled,\n shiftDate,\n} from \"../utils\";\nimport { WEEKDAYS_SET, WEEKS_SET } from \"../../../consts/DateConst\";\nimport { CalendarViewContext } from \"../CalendarViewContext\";\nimport { CalendarViewItem } from \"./CalendarViewItem\";\nimport { ECalendarDateMarkType, ECalendarViewMode } from \"../enums\";\nimport { CalendarContext } from \"../CalendarContext\";\nimport { ICalendarViewProps } from \"../types\";\nimport styles from \"../styles/CalendarView.module.less\";\n\n/** Свойства компонента CalendarViewDays. */\nexport interface ICalendarViewDaysProps extends Omit<\n ICalendarViewProps,\n \"monthHtmlAttributes\" | \"yearHtmlAttributes\"\n> {}\n\n/** Величины сдвига даты при клавиатурной навигации по сетке дней. */\nconst NAVIGATION_STEPS: ICalendarNavigationSteps = {\n horizontal: { amount: 1, unit: \"day\" },\n vertical: { amount: 1, unit: \"week\" },\n page: { amount: 1, unit: \"month\" },\n};\n\n/** Вид календаря с выбором дня. */\nexport const CalendarViewDays: React.FC<ICalendarViewDaysProps> = ({ pickedDate, dayHtmlAttributes = {} }) => {\n const { format, periodId, limitRange, viewDate, markedDays, disabledDays, onDateSelect, onPageChange } =\n useContext(CalendarContext);\n const { viewItemFocusedRef } = useContext(CalendarViewContext);\n const startDate = viewDate.clone().startOf(\"month\").startOf(\"week\");\n\n /** Проверяет, является ли дата отключенной. */\n const isDisabledDate = useCallback(\n (date: moment.Moment) =>\n isDateOutOfRange(date, limitRange, \"day\") || isDayDisabled(date.format(format), disabledDays),\n [limitRange, disabledDays, format],\n );\n\n /** Получить первую доступную для фокуса дату. */\n const getInitialTabbableDate = useCallback(() => {\n if (pickedDate && pickedDate.isSame(viewDate, \"month\")) {\n return pickedDate;\n }\n\n const startOfMonth = viewDate.clone().startOf(\"month\");\n\n return getFirstEnabledDate(startOfMonth, startOfMonth.daysInMonth(), \"day\", isDisabledDate);\n }, [pickedDate, viewDate, isDisabledDate]);\n\n const [tabbableDate, setTabbableDate] = useState(getInitialTabbableDate());\n\n useEffect(() => {\n if (!viewItemFocusedRef.current) {\n setTabbableDate(getInitialTabbableDate());\n }\n }, [viewDate, viewItemFocusedRef, getInitialTabbableDate]);\n\n /** Рендер заголовка таблицы. */\n const renderTableHead = () => {\n const weekdays = moment.weekdays(true);\n const weekdaysMin = moment.weekdaysMin(true);\n\n return (\n <thead>\n <tr>\n {WEEKDAYS_SET.map((header) => (\n <th\n key={`calendar-table-header-${header}`}\n className={styles.calendarViewDaysHeader}\n abbr={weekdays[header]}\n >\n {weekdaysMin[header]}\n </th>\n ))}\n </tr>\n </thead>\n );\n };\n\n /** Рендер тела таблицы. */\n const renderTableBody = () => (\n <tbody className={styles.calendarViewDaysBody}>\n {WEEKS_SET.map((row) => (\n <tr key={`calendar-table-row-${row}`}>{WEEKDAYS_SET.map((cell) => renderTableData(row, cell))}</tr>\n ))}\n </tbody>\n );\n\n /** Рендер ячейки таблицы. */\n const renderTableData = (row: number, cell: number) => {\n const date = moment(startDate).add(row * 7 + cell, \"day\");\n const classNames = clsx({ [styles.current]: isCurrentDate(date) });\n const active = isActiveDate(date);\n const disabled = isDisabledDate(date);\n const tabbable = !disabled && isTabbableDay(date);\n const muted = isMutedDate(date);\n const markType = getMarkType(date);\n\n return (\n <CalendarViewItem\n key={`calendar-table-data-${cell}`}\n className={classNames}\n {...(typeof dayHtmlAttributes === \"function\"\n ? dayHtmlAttributes({ marked: markType !== undefined })\n : dayHtmlAttributes)}\n date={date}\n unit=\"day\"\n active={active}\n disabled={disabled}\n tabbable={tabbable}\n muted={muted}\n markType={markType}\n onKeyDown={handleItemKeyDown(date)}\n onDateSelect={onDateSelect}\n >\n {date.date()}\n </CalendarViewItem>\n );\n };\n\n /** Проверяет, может ли дата получить фокус при навигации. */\n const isTabbableDay = (date: moment.Moment) => {\n if (tabbableDate) {\n return date.isSame(tabbableDate, \"day\");\n }\n\n return false;\n };\n\n /** Проверяет, относится ли дата к текущему месяцу. */\n const isMutedDate = (date: moment.Moment) => {\n return !date.isSame(viewDate, \"month\");\n };\n\n /** Проверяет, является ли дата сегодняшней. */\n const isCurrentDate = (date: moment.Moment) => {\n return date.isSame(moment(), \"day\");\n };\n\n /** Проверяет, является ли дата активной. */\n const isActiveDate = (date: moment.Moment) => {\n return !!pickedDate && date.isSame(pickedDate, \"day\");\n };\n\n /** Проверяет, является ли дата отмеченной. */\n const getMarkType = (date: moment.Moment) => {\n if (markedDays) {\n const day = date.format(format);\n\n if (Array.isArray(markedDays)) {\n if (markedDays.includes(day)) {\n return ECalendarDateMarkType.BASIC;\n }\n } else if (day in markedDays) {\n return markedDays[day];\n }\n }\n };\n\n /** Возвращает доступную для выбора дату после сдвига. Недоступные дни пропускаются. */\n const getShiftedDate = (currentDate: moment.Moment, shift: ICalendarNavigationShift) => {\n const day = currentDate.clone();\n\n do {\n shiftDate(day, shift);\n\n // Если вышли за пределы доступного периода – возвращаем текущий день.\n if (isDateOutOfRange(day, limitRange, \"day\")) {\n return currentDate;\n }\n // Если день недоступен для выбора – продолжаем поиск в том же направлении.\n } while (isDisabledDate(day));\n\n return day;\n };\n\n /** Обработчик нажатия клавиши CalendarViewItem. */\n const handleItemKeyDown = (date: moment.Moment) => (event: React.KeyboardEvent<HTMLTableCellElement>) => {\n const shift = getNavigationShift(event.code || event.keyCode, NAVIGATION_STEPS);\n\n if (!shift) {\n return;\n }\n\n event.preventDefault();\n changeTabbableDate(getShiftedDate(date, shift));\n };\n\n /** Изменение фокусируемой даты. При уходе даты за пределы страницы перелистывает страницу на шаг NAVIGATION_STEPS.page. */\n const changeTabbableDate = (date: moment.Moment) => {\n setTabbableDate(date);\n\n if (date.isBefore(viewDate, \"month\")) {\n onPageChange(\n shiftDate(viewDate.clone(), { operation: \"subtract\", ...NAVIGATION_STEPS.page }),\n ECalendarViewMode.DAYS,\n );\n } else if (date.isAfter(viewDate, \"month\")) {\n onPageChange(\n shiftDate(viewDate.clone(), { operation: \"add\", ...NAVIGATION_STEPS.page }),\n ECalendarViewMode.DAYS,\n );\n }\n };\n\n return (\n <table className={styles.calendarViewDays} role=\"grid\" aria-labelledby={periodId}>\n {renderTableHead()}\n {renderTableBody()}\n </table>\n );\n};\n\nCalendarViewDays.displayName = \"CalendarViewDays\";\n"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import "../../../chunks/vendor-CtuAQuEN.js";
4
4
  import "../enums.js";
5
5
  import "../CalendarViewContext.js";
6
6
  import "../../../utils/keyboard.js";
7
- import { C } from "../../../chunks/CalendarViewItem-knPscTce.js";
7
+ import { C } from "../../../chunks/CalendarViewItem-CeA4XADM.js";
8
8
  export {
9
9
  C as CalendarViewItem
10
10
  };
@@ -3,10 +3,14 @@ import { useContext, useCallback, useState, useEffect } from "react";
3
3
  import moment from "moment";
4
4
  import { CalendarContext } from "../CalendarContext.js";
5
5
  import { CalendarViewContext } from "../CalendarViewContext.js";
6
- import { isDateOutOfRange } from "../utils.js";
7
- import { s as styles, C as CalendarViewItem } from "../../../chunks/CalendarViewItem-knPscTce.js";
8
- import { isKey } from "../../../utils/keyboard.js";
6
+ import { isDateOutOfRange, getFirstEnabledDate, VIEW_GRID_ROWS, VIEW_GRID_COLUMNS, getNavigationShift, shiftDate, getShiftedDateInRange } from "../utils.js";
7
+ import { s as styles, C as CalendarViewItem } from "../../../chunks/CalendarViewItem-CeA4XADM.js";
9
8
  import { ECalendarPickType, ECalendarViewMode } from "../enums.js";
9
+ const NAVIGATION_STEPS = {
10
+ horizontal: { amount: 1, unit: "month" },
11
+ vertical: { amount: 3, unit: "month" },
12
+ page: { amount: 1, unit: "year" }
13
+ };
10
14
  const CalendarViewMonths = ({ pickedDate, monthHtmlAttributes = {} }) => {
11
15
  const { pickType, periodId, limitRange, viewDate, onDateSelect, onPageChange, onViewChange } = useContext(CalendarContext);
12
16
  const { viewItemFocusedRef } = useContext(CalendarViewContext);
@@ -18,15 +22,13 @@ const CalendarViewMonths = ({ pickedDate, monthHtmlAttributes = {} }) => {
18
22
  const getInitialTabbableDate = useCallback(() => {
19
23
  if (pickedDate && pickedDate.isSame(viewDate, "year")) {
20
24
  return pickedDate;
21
- } else {
22
- const date = viewDate.clone().startOf("year");
23
- for (let i = 0; i < 12; i++) {
24
- date.add(i, "month");
25
- if (!isDisabledDate(date)) {
26
- return date;
27
- }
28
- }
29
25
  }
26
+ return getFirstEnabledDate(
27
+ viewDate.clone().startOf("year"),
28
+ VIEW_GRID_ROWS.length * VIEW_GRID_COLUMNS.length,
29
+ "month",
30
+ isDisabledDate
31
+ );
30
32
  }, [pickedDate, viewDate, isDisabledDate]);
31
33
  const [tabbableDate, setTabbableDate] = useState(getInitialTabbableDate());
32
34
  useEffect(() => {
@@ -34,9 +36,9 @@ const CalendarViewMonths = ({ pickedDate, monthHtmlAttributes = {} }) => {
34
36
  setTabbableDate(getInitialTabbableDate());
35
37
  }
36
38
  }, [viewDate, viewItemFocusedRef, getInitialTabbableDate]);
37
- const renderTableBody = () => /* @__PURE__ */ jsx("tbody", { children: [0, 1, 2, 3].map((row) => /* @__PURE__ */ jsx("tr", { children: [0, 1, 2].map((cell) => renderTableData(row, cell)) }, `calendar-view-months-row-${row}`)) });
39
+ const renderTableBody = () => /* @__PURE__ */ jsx("tbody", { children: VIEW_GRID_ROWS.map((row) => /* @__PURE__ */ jsx("tr", { children: VIEW_GRID_COLUMNS.map((cell) => renderTableData(row, cell)) }, `calendar-view-months-row-${row}`)) });
38
40
  const renderTableData = (row, cell) => {
39
- const month = row * 3 + cell;
41
+ const month = row * VIEW_GRID_COLUMNS.length + cell;
40
42
  const date = viewDate.clone().startOf("month").month(month);
41
43
  const active = isActiveDate(date);
42
44
  const disabled = isDisabledDate(date);
@@ -70,43 +72,14 @@ const CalendarViewMonths = ({ pickedDate, monthHtmlAttributes = {} }) => {
70
72
  return false;
71
73
  };
72
74
  const handleItemKeyDown = (date) => (event) => {
73
- const key = event.code || event.keyCode;
74
- let nextFocusedDate;
75
- if (isKey(key, "ARROW_RIGHT")) {
76
- nextFocusedDate = getShiftedDate(date, "add", 1, "month");
77
- event.preventDefault();
78
- } else if (isKey(key, "ARROW_LEFT")) {
79
- nextFocusedDate = getShiftedDate(date, "subtract", 1, "month");
80
- event.preventDefault();
81
- } else if (isKey(key, "ARROW_DOWN")) {
82
- nextFocusedDate = getShiftedDate(date, "add", 3, "month");
83
- event.preventDefault();
84
- } else if (isKey(key, "ARROW_UP")) {
85
- nextFocusedDate = getShiftedDate(date, "subtract", 3, "month");
86
- event.preventDefault();
87
- } else if (isKey(key, "PAGE_DOWN")) {
88
- nextFocusedDate = getShiftedDate(date, "add", 1, "year");
89
- event.preventDefault();
90
- } else if (isKey(key, "PAGE_UP")) {
91
- nextFocusedDate = getShiftedDate(date, "subtract", 1, "year");
92
- event.preventDefault();
93
- }
94
- if (nextFocusedDate) {
95
- changeTabbableDate(nextFocusedDate);
96
- }
97
- };
98
- const getShiftedDate = (currentDate, operation, amount, unit) => {
99
- const date = currentDate.clone();
100
- const shiftDate = {
101
- add: moment.fn.add.bind(date),
102
- subtract: moment.fn.subtract.bind(date)
103
- }[operation];
104
- shiftDate(amount, unit);
105
- if (isDateOutOfRange(date, limitRange, "month")) {
106
- return currentDate;
75
+ const shift = getNavigationShift(event.code || event.keyCode, NAVIGATION_STEPS);
76
+ if (!shift) {
77
+ return;
107
78
  }
108
- return date;
79
+ event.preventDefault();
80
+ changeTabbableDate(getShiftedDate(date, shift));
109
81
  };
82
+ const getShiftedDate = (currentDate, shift) => getShiftedDateInRange(currentDate, shift, limitRange, "month");
110
83
  const handleDateSelect = (date) => {
111
84
  if (pickType === ECalendarPickType.MONTH_YEAR) {
112
85
  onDateSelect(date);
@@ -117,15 +90,20 @@ const CalendarViewMonths = ({ pickedDate, monthHtmlAttributes = {} }) => {
117
90
  const changeTabbableDate = (date) => {
118
91
  setTabbableDate(date);
119
92
  if (date.isBefore(viewDate, "year")) {
120
- date = viewDate.clone().subtract(1, "year");
121
- onPageChange(date, ECalendarViewMode.MONTHS);
93
+ onPageChange(
94
+ shiftDate(viewDate.clone(), { operation: "subtract", ...NAVIGATION_STEPS.page }),
95
+ ECalendarViewMode.MONTHS
96
+ );
122
97
  } else if (date.isAfter(viewDate, "year")) {
123
- date = viewDate.clone().add(1, "year");
124
- onPageChange(date, ECalendarViewMode.MONTHS);
98
+ onPageChange(
99
+ shiftDate(viewDate.clone(), { operation: "add", ...NAVIGATION_STEPS.page }),
100
+ ECalendarViewMode.MONTHS
101
+ );
125
102
  }
126
103
  };
127
104
  return /* @__PURE__ */ jsx("table", { className: styles.calendarViewMonths, role: "grid", "aria-labelledby": periodId, children: renderTableBody() });
128
105
  };
106
+ CalendarViewMonths.displayName = "CalendarViewMonths";
129
107
  export {
130
108
  CalendarViewMonths
131
109
  };
@@ -1 +1 @@
1
- {"version":3,"file":"CalendarViewMonths.js","sources":["../../../../src/components/Calendar/components/CalendarViewMonths.tsx"],"sourcesContent":["import React, { useState, useEffect, useContext, useCallback } from \"react\";\nimport moment from \"moment\";\nimport { CalendarContext } from \"../CalendarContext\";\nimport { CalendarViewContext } from \"../CalendarViewContext\";\nimport { isDateOutOfRange } from \"../utils\";\nimport { CalendarViewItem } from \"./CalendarViewItem\";\nimport { isKey } from \"../../../utils/keyboard\";\nimport { ECalendarPickType, ECalendarViewMode } from \"../enums\";\nimport { ICalendarViewProps } from \"../types\";\nimport styles from \"../styles/CalendarView.module.less\";\n\n/** Свойства компонента CalendarViewMonths. */\nexport interface ICalendarViewMonthsProps extends Omit<\n ICalendarViewProps,\n \"dayHtmlAttributes\" | \"yearHtmlAttributes\"\n> {}\n\n/** Вид календаря с выбором месяца. */\nexport const CalendarViewMonths: React.FC<ICalendarViewMonthsProps> = ({ pickedDate, monthHtmlAttributes = {} }) => {\n const { pickType, periodId, limitRange, viewDate, onDateSelect, onPageChange, onViewChange } =\n useContext(CalendarContext);\n const { viewItemFocusedRef } = useContext(CalendarViewContext);\n const monthsShort = moment.monthsShort();\n\n /** Проверяет, является ли дата отключенной. */\n const isDisabledDate = useCallback(\n (date: moment.Moment) => isDateOutOfRange(date, limitRange, \"month\"),\n [limitRange],\n );\n\n /** Получить первую доступную для фокуса дату. */\n const getInitialTabbableDate = useCallback(() => {\n if (pickedDate && pickedDate.isSame(viewDate, \"year\")) {\n return pickedDate;\n } else {\n const date = viewDate.clone().startOf(\"year\");\n\n for (let i = 0; i < 12; i++) {\n date.add(i, \"month\");\n\n if (!isDisabledDate(date)) {\n return date;\n }\n }\n }\n }, [pickedDate, viewDate, isDisabledDate]);\n\n const [tabbableDate, setTabbableDate] = useState(getInitialTabbableDate());\n\n useEffect(() => {\n if (!viewItemFocusedRef.current) {\n setTabbableDate(getInitialTabbableDate());\n }\n }, [viewDate, viewItemFocusedRef, getInitialTabbableDate]);\n\n /** Рендер тела таблицы. */\n const renderTableBody = () => (\n <tbody>\n {[0, 1, 2, 3].map((row) => (\n <tr key={`calendar-view-months-row-${row}`}>{[0, 1, 2].map((cell) => renderTableData(row, cell))}</tr>\n ))}\n </tbody>\n );\n\n /** Рендер ячейки таблицы. */\n const renderTableData = (row: number, cell: number) => {\n const month = row * 3 + cell;\n const date = viewDate.clone().startOf(\"month\").month(month);\n const active = isActiveDate(date);\n const disabled = isDisabledDate(date);\n const tabbable = !disabled && isTabbableDate(date);\n\n return (\n <CalendarViewItem\n key={`calendar-table-data-${cell}`}\n {...monthHtmlAttributes}\n date={date}\n unit=\"month\"\n active={active}\n disabled={disabled}\n tabbable={tabbable}\n onKeyDown={handleItemKeyDown(date)}\n onDateSelect={handleDateSelect}\n >\n {monthsShort[month]}\n </CalendarViewItem>\n );\n };\n\n /** Проверяет, является ли дата активной. */\n const isActiveDate = (date: moment.Moment) => {\n if (pickedDate == null) {\n return false;\n }\n\n return pickedDate.isSame(date, \"month\");\n };\n\n /** Проверяет, может ли дата получить фокус при навигации. */\n const isTabbableDate = (date: moment.Moment) => {\n if (tabbableDate) {\n return date.isSame(tabbableDate, \"month\");\n }\n\n return false;\n };\n\n /** Обработчик нажатия клавиши CalendarViewItem. */\n const handleItemKeyDown = (date: moment.Moment) => (event: React.KeyboardEvent<HTMLTableCellElement>) => {\n const key = event.code || event.keyCode;\n let nextFocusedDate;\n\n if (isKey(key, \"ARROW_RIGHT\")) {\n nextFocusedDate = getShiftedDate(date, \"add\", 1, \"month\");\n event.preventDefault();\n } else if (isKey(key, \"ARROW_LEFT\")) {\n nextFocusedDate = getShiftedDate(date, \"subtract\", 1, \"month\");\n event.preventDefault();\n } else if (isKey(key, \"ARROW_DOWN\")) {\n nextFocusedDate = getShiftedDate(date, \"add\", 3, \"month\");\n event.preventDefault();\n } else if (isKey(key, \"ARROW_UP\")) {\n nextFocusedDate = getShiftedDate(date, \"subtract\", 3, \"month\");\n event.preventDefault();\n } else if (isKey(key, \"PAGE_DOWN\")) {\n nextFocusedDate = getShiftedDate(date, \"add\", 1, \"year\");\n event.preventDefault();\n } else if (isKey(key, \"PAGE_UP\")) {\n nextFocusedDate = getShiftedDate(date, \"subtract\", 1, \"year\");\n event.preventDefault();\n }\n\n if (nextFocusedDate) {\n changeTabbableDate(nextFocusedDate);\n }\n };\n\n /** Возвращает доступную для выбора дату после сдвига. */\n const getShiftedDate = (\n currentDate: moment.Moment,\n operation: \"add\" | \"subtract\",\n amount: number,\n unit: \"month\" | \"year\",\n ) => {\n const date = currentDate.clone();\n const shiftDate = {\n add: moment.fn.add.bind(date),\n subtract: moment.fn.subtract.bind(date),\n }[operation];\n\n shiftDate(amount, unit);\n\n if (isDateOutOfRange(date, limitRange, \"month\")) {\n return currentDate;\n }\n\n return date;\n };\n\n /** Обработчик выбора даты. */\n const handleDateSelect = (date: moment.Moment) => {\n if (pickType === ECalendarPickType.MONTH_YEAR) {\n onDateSelect(date);\n } else {\n onViewChange(date, ECalendarViewMode.DAYS);\n }\n };\n\n /** Изменение фокусируемой даты. */\n const changeTabbableDate = (date: moment.Moment) => {\n setTabbableDate(date);\n\n if (date.isBefore(viewDate, \"year\")) {\n date = viewDate.clone().subtract(1, \"year\");\n onPageChange(date, ECalendarViewMode.MONTHS);\n } else if (date.isAfter(viewDate, \"year\")) {\n date = viewDate.clone().add(1, \"year\");\n onPageChange(date, ECalendarViewMode.MONTHS);\n }\n };\n\n return (\n <table className={styles.calendarViewMonths} role=\"grid\" aria-labelledby={periodId}>\n {renderTableBody()}\n </table>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CalendarViewMonths.js","sources":["../../../../src/components/Calendar/components/CalendarViewMonths.tsx"],"sourcesContent":["import React, { useState, useEffect, useContext, useCallback } from \"react\";\nimport moment from \"moment\";\nimport { CalendarContext } from \"../CalendarContext\";\nimport { CalendarViewContext } from \"../CalendarViewContext\";\nimport {\n ICalendarNavigationShift,\n ICalendarNavigationSteps,\n getFirstEnabledDate,\n getNavigationShift,\n getShiftedDateInRange,\n isDateOutOfRange,\n shiftDate,\n VIEW_GRID_COLUMNS,\n VIEW_GRID_ROWS,\n} from \"../utils\";\nimport { CalendarViewItem } from \"./CalendarViewItem\";\nimport { ECalendarPickType, ECalendarViewMode } from \"../enums\";\nimport { ICalendarViewProps } from \"../types\";\nimport styles from \"../styles/CalendarView.module.less\";\n\n/** Свойства компонента CalendarViewMonths. */\nexport interface ICalendarViewMonthsProps extends Omit<\n ICalendarViewProps,\n \"dayHtmlAttributes\" | \"yearHtmlAttributes\"\n> {}\n\n/** Величины сдвига даты при клавиатурной навигации по сетке месяцев. */\nconst NAVIGATION_STEPS: ICalendarNavigationSteps = {\n horizontal: { amount: 1, unit: \"month\" },\n vertical: { amount: 3, unit: \"month\" },\n page: { amount: 1, unit: \"year\" },\n};\n\n/** Вид календаря с выбором месяца. */\nexport const CalendarViewMonths: React.FC<ICalendarViewMonthsProps> = ({ pickedDate, monthHtmlAttributes = {} }) => {\n const { pickType, periodId, limitRange, viewDate, onDateSelect, onPageChange, onViewChange } =\n useContext(CalendarContext);\n const { viewItemFocusedRef } = useContext(CalendarViewContext);\n const monthsShort = moment.monthsShort();\n\n /** Проверяет, является ли дата отключенной. */\n const isDisabledDate = useCallback(\n (date: moment.Moment) => isDateOutOfRange(date, limitRange, \"month\"),\n [limitRange],\n );\n\n /** Получить первую доступную для фокуса дату. */\n const getInitialTabbableDate = useCallback(() => {\n if (pickedDate && pickedDate.isSame(viewDate, \"year\")) {\n return pickedDate;\n }\n\n return getFirstEnabledDate(\n viewDate.clone().startOf(\"year\"),\n VIEW_GRID_ROWS.length * VIEW_GRID_COLUMNS.length,\n \"month\",\n isDisabledDate,\n );\n }, [pickedDate, viewDate, isDisabledDate]);\n\n const [tabbableDate, setTabbableDate] = useState(getInitialTabbableDate());\n\n useEffect(() => {\n if (!viewItemFocusedRef.current) {\n setTabbableDate(getInitialTabbableDate());\n }\n }, [viewDate, viewItemFocusedRef, getInitialTabbableDate]);\n\n /** Рендер тела таблицы. */\n const renderTableBody = () => (\n <tbody>\n {VIEW_GRID_ROWS.map((row) => (\n <tr key={`calendar-view-months-row-${row}`}>\n {VIEW_GRID_COLUMNS.map((cell) => renderTableData(row, cell))}\n </tr>\n ))}\n </tbody>\n );\n\n /** Рендер ячейки таблицы. */\n const renderTableData = (row: number, cell: number) => {\n const month = row * VIEW_GRID_COLUMNS.length + cell;\n const date = viewDate.clone().startOf(\"month\").month(month);\n const active = isActiveDate(date);\n const disabled = isDisabledDate(date);\n const tabbable = !disabled && isTabbableDate(date);\n\n return (\n <CalendarViewItem\n key={`calendar-table-data-${cell}`}\n {...monthHtmlAttributes}\n date={date}\n unit=\"month\"\n active={active}\n disabled={disabled}\n tabbable={tabbable}\n onKeyDown={handleItemKeyDown(date)}\n onDateSelect={handleDateSelect}\n >\n {monthsShort[month]}\n </CalendarViewItem>\n );\n };\n\n /** Проверяет, является ли дата активной. */\n const isActiveDate = (date: moment.Moment) => {\n if (pickedDate == null) {\n return false;\n }\n\n return pickedDate.isSame(date, \"month\");\n };\n\n /** Проверяет, может ли дата получить фокус при навигации. */\n const isTabbableDate = (date: moment.Moment) => {\n if (tabbableDate) {\n return date.isSame(tabbableDate, \"month\");\n }\n\n return false;\n };\n\n /** Обработчик нажатия клавиши CalendarViewItem. */\n const handleItemKeyDown = (date: moment.Moment) => (event: React.KeyboardEvent<HTMLTableCellElement>) => {\n const shift = getNavigationShift(event.code || event.keyCode, NAVIGATION_STEPS);\n\n if (!shift) {\n return;\n }\n\n event.preventDefault();\n changeTabbableDate(getShiftedDate(date, shift));\n };\n\n /** Возвращает доступную для выбора дату после сдвига. */\n const getShiftedDate = (currentDate: moment.Moment, shift: ICalendarNavigationShift) =>\n getShiftedDateInRange(currentDate, shift, limitRange, \"month\");\n\n /** Обработчик выбора даты. */\n const handleDateSelect = (date: moment.Moment) => {\n if (pickType === ECalendarPickType.MONTH_YEAR) {\n onDateSelect(date);\n } else {\n onViewChange(date, ECalendarViewMode.DAYS);\n }\n };\n\n /** Изменение фокусируемой даты. При уходе даты за пределы страницы перелистывает страницу на шаг NAVIGATION_STEPS.page. */\n const changeTabbableDate = (date: moment.Moment) => {\n setTabbableDate(date);\n\n if (date.isBefore(viewDate, \"year\")) {\n onPageChange(\n shiftDate(viewDate.clone(), { operation: \"subtract\", ...NAVIGATION_STEPS.page }),\n ECalendarViewMode.MONTHS,\n );\n } else if (date.isAfter(viewDate, \"year\")) {\n onPageChange(\n shiftDate(viewDate.clone(), { operation: \"add\", ...NAVIGATION_STEPS.page }),\n ECalendarViewMode.MONTHS,\n );\n }\n };\n\n return (\n <table className={styles.calendarViewMonths} role=\"grid\" aria-labelledby={periodId}>\n {renderTableBody()}\n </table>\n );\n};\n\nCalendarViewMonths.displayName = \"CalendarViewMonths\";\n"],"names":[],"mappings":"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"}
@@ -1,12 +1,17 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { useContext, useCallback, useState, useEffect } from "react";
3
- import moment from "moment";
4
3
  import { CalendarContext } from "../CalendarContext.js";
5
4
  import { CalendarViewContext } from "../CalendarViewContext.js";
6
- import { isDateOutOfRange } from "../utils.js";
7
- import { s as styles, C as CalendarViewItem } from "../../../chunks/CalendarViewItem-knPscTce.js";
8
- import { isKey } from "../../../utils/keyboard.js";
5
+ import { isDateOutOfRange, getFirstEnabledDate, VIEW_GRID_ROWS, VIEW_GRID_COLUMNS, getNavigationShift, shiftDate, getShiftedDateInRange } from "../utils.js";
6
+ import { s as styles, C as CalendarViewItem } from "../../../chunks/CalendarViewItem-CeA4XADM.js";
9
7
  import { ECalendarViewMode } from "../enums.js";
8
+ const YEARS_BEFORE_VIEW_DATE = 5;
9
+ const YEARS_AFTER_VIEW_DATE = 6;
10
+ const NAVIGATION_STEPS = {
11
+ horizontal: { amount: 1, unit: "year" },
12
+ vertical: { amount: 3, unit: "year" },
13
+ page: { amount: 12, unit: "year" }
14
+ };
10
15
  const CalendarViewYears = ({ pickedDate, yearHtmlAttributes = {} }) => {
11
16
  const { periodId, limitRange, viewDate, onPageChange, onViewChange } = useContext(CalendarContext);
12
17
  const { viewItemFocusedRef } = useContext(CalendarViewContext);
@@ -18,15 +23,13 @@ const CalendarViewYears = ({ pickedDate, yearHtmlAttributes = {} }) => {
18
23
  const getInitialTabbableDate = useCallback(() => {
19
24
  if (pickedDate && pickedDate.isSame(viewDate, "year")) {
20
25
  return pickedDate;
21
- } else {
22
- const date = viewDate.clone().subtract(5, "year");
23
- for (let i = 0; i < 12; i++) {
24
- date.add(i, "month");
25
- if (!isDisabledDate(date)) {
26
- return date;
27
- }
28
- }
29
26
  }
27
+ return getFirstEnabledDate(
28
+ viewDate.clone().subtract(YEARS_BEFORE_VIEW_DATE, "year"),
29
+ VIEW_GRID_ROWS.length * VIEW_GRID_COLUMNS.length,
30
+ "year",
31
+ isDisabledDate
32
+ );
30
33
  }, [pickedDate, viewDate, isDisabledDate]);
31
34
  const [tabbableDate, setTabbableDate] = useState(getInitialTabbableDate());
32
35
  useEffect(() => {
@@ -34,9 +37,9 @@ const CalendarViewYears = ({ pickedDate, yearHtmlAttributes = {} }) => {
34
37
  setTabbableDate(getInitialTabbableDate());
35
38
  }
36
39
  }, [viewDate, viewItemFocusedRef, getInitialTabbableDate]);
37
- const renderTableBody = () => /* @__PURE__ */ jsx("tbody", { children: [0, 1, 2, 3].map((row) => /* @__PURE__ */ jsx("tr", { children: [0, 1, 2].map((cell) => renderTableData(row, cell)) }, `calendar-view-years-row-${row}`)) });
40
+ const renderTableBody = () => /* @__PURE__ */ jsx("tbody", { children: VIEW_GRID_ROWS.map((row) => /* @__PURE__ */ jsx("tr", { children: VIEW_GRID_COLUMNS.map((cell) => renderTableData(row, cell)) }, `calendar-view-years-row-${row}`)) });
38
41
  const renderTableData = (row, cell) => {
39
- const year = currentYear + row * 3 + cell - 5;
42
+ const year = currentYear + row * VIEW_GRID_COLUMNS.length + cell - YEARS_BEFORE_VIEW_DATE;
40
43
  const date = viewDate.clone().startOf("year").year(year);
41
44
  const active = isActiveDate(date);
42
45
  const disabled = isDisabledDate(date);
@@ -70,58 +73,34 @@ const CalendarViewYears = ({ pickedDate, yearHtmlAttributes = {} }) => {
70
73
  return false;
71
74
  };
72
75
  const handleItemKeyDown = (date) => (event) => {
73
- const key = event.code || event.keyCode;
74
- let nextFocusedDate;
75
- if (isKey(key, "ARROW_RIGHT")) {
76
- nextFocusedDate = getShiftedDate(date, "add", 1, "year");
77
- event.preventDefault();
78
- } else if (isKey(key, "ARROW_LEFT")) {
79
- nextFocusedDate = getShiftedDate(date, "subtract", 1, "year");
80
- event.preventDefault();
81
- } else if (isKey(key, "ARROW_DOWN")) {
82
- nextFocusedDate = getShiftedDate(date, "add", 3, "year");
83
- event.preventDefault();
84
- } else if (isKey(key, "ARROW_UP")) {
85
- nextFocusedDate = getShiftedDate(date, "subtract", 3, "year");
86
- event.preventDefault();
87
- } else if (isKey(key, "PAGE_DOWN")) {
88
- nextFocusedDate = getShiftedDate(date, "add", 12, "year");
89
- event.preventDefault();
90
- } else if (isKey(key, "PAGE_UP")) {
91
- nextFocusedDate = getShiftedDate(date, "subtract", 12, "year");
92
- event.preventDefault();
93
- }
94
- if (nextFocusedDate) {
95
- changeFocusedDate(nextFocusedDate);
96
- }
97
- };
98
- const getShiftedDate = (currentDate, operation, amount, unit) => {
99
- const date = currentDate.clone();
100
- const shiftDate = {
101
- add: moment.fn.add.bind(date),
102
- subtract: moment.fn.subtract.bind(date)
103
- }[operation];
104
- shiftDate(amount, unit);
105
- if (isDateOutOfRange(date, limitRange, "year")) {
106
- return currentDate;
76
+ const shift = getNavigationShift(event.code || event.keyCode, NAVIGATION_STEPS);
77
+ if (!shift) {
78
+ return;
107
79
  }
108
- return date;
80
+ event.preventDefault();
81
+ changeFocusedDate(getShiftedDate(date, shift));
109
82
  };
83
+ const getShiftedDate = (currentDate, shift) => getShiftedDateInRange(currentDate, shift, limitRange, "year");
110
84
  const handleDateSelect = (date) => {
111
85
  onViewChange(date, ECalendarViewMode.MONTHS);
112
86
  };
113
87
  const changeFocusedDate = (date) => {
114
88
  setTabbableDate(date);
115
- if (date.year() + 5 < viewDate.year()) {
116
- date = viewDate.clone().subtract(12, "years");
117
- onPageChange(date, ECalendarViewMode.YEARS);
118
- } else if (date.year() - 6 > viewDate.year()) {
119
- date = viewDate.clone().add(12, "years");
120
- onPageChange(date, ECalendarViewMode.YEARS);
89
+ if (date.year() < viewDate.year() - YEARS_BEFORE_VIEW_DATE) {
90
+ onPageChange(
91
+ shiftDate(viewDate.clone(), { operation: "subtract", ...NAVIGATION_STEPS.page }),
92
+ ECalendarViewMode.YEARS
93
+ );
94
+ } else if (date.year() > viewDate.year() + YEARS_AFTER_VIEW_DATE) {
95
+ onPageChange(
96
+ shiftDate(viewDate.clone(), { operation: "add", ...NAVIGATION_STEPS.page }),
97
+ ECalendarViewMode.YEARS
98
+ );
121
99
  }
122
100
  };
123
101
  return /* @__PURE__ */ jsx("table", { className: styles.calendarViewYears, role: "grid", "aria-labelledby": periodId, children: renderTableBody() });
124
102
  };
103
+ CalendarViewYears.displayName = "CalendarViewYears";
125
104
  export {
126
105
  CalendarViewYears
127
106
  };
@@ -1 +1 @@
1
- {"version":3,"file":"CalendarViewYears.js","sources":["../../../../src/components/Calendar/components/CalendarViewYears.tsx"],"sourcesContent":["import React, { useState, useEffect, useContext, useCallback } from \"react\";\nimport moment from \"moment\";\nimport { CalendarContext } from \"../CalendarContext\";\nimport { CalendarViewContext } from \"../CalendarViewContext\";\nimport { isDateOutOfRange } from \"../utils\";\nimport { CalendarViewItem } from \"./CalendarViewItem\";\nimport { isKey } from \"../../../utils/keyboard\";\nimport { ECalendarViewMode } from \"../enums\";\nimport { ICalendarViewProps } from \"../types\";\nimport styles from \"../styles/CalendarView.module.less\";\n\n/** Свойства компонента CalendarViewMonths. */\nexport interface ICalendarViewYearsProps extends Omit<\n ICalendarViewProps,\n \"viewMode\" | \"dayHtmlAttributes\" | \"monthHtmlAttributes\"\n> {}\n\n/** Вид календаря с выбором года. */\nexport const CalendarViewYears: React.FC<ICalendarViewYearsProps> = ({ pickedDate, yearHtmlAttributes = {} }) => {\n const { periodId, limitRange, viewDate, onPageChange, onViewChange } = useContext(CalendarContext);\n const { viewItemFocusedRef } = useContext(CalendarViewContext);\n const currentYear = viewDate.year();\n\n /** Проверяет, является ли дата отключенной. */\n const isDisabledDate = useCallback(\n (date: moment.Moment) => isDateOutOfRange(date, limitRange, \"year\"),\n [limitRange],\n );\n\n /** Получить первую доступную для фокуса дату. */\n const getInitialTabbableDate = useCallback(() => {\n if (pickedDate && pickedDate.isSame(viewDate, \"year\")) {\n return pickedDate;\n } else {\n const date = viewDate.clone().subtract(5, \"year\");\n\n for (let i = 0; i < 12; i++) {\n date.add(i, \"month\");\n\n if (!isDisabledDate(date)) {\n return date;\n }\n }\n }\n }, [pickedDate, viewDate, isDisabledDate]);\n\n const [tabbableDate, setTabbableDate] = useState(getInitialTabbableDate());\n\n useEffect(() => {\n if (!viewItemFocusedRef.current) {\n setTabbableDate(getInitialTabbableDate());\n }\n }, [viewDate, viewItemFocusedRef, getInitialTabbableDate]);\n\n /** Рендер тела таблицы. */\n const renderTableBody = () => (\n <tbody>\n {[0, 1, 2, 3].map((row) => (\n <tr key={`calendar-view-years-row-${row}`}>{[0, 1, 2].map((cell) => renderTableData(row, cell))}</tr>\n ))}\n </tbody>\n );\n\n /** Рендер ячейки таблицы. */\n const renderTableData = (row: number, cell: number) => {\n const year = currentYear + row * 3 + cell - 5;\n const date = viewDate.clone().startOf(\"year\").year(year);\n const active = isActiveDate(date);\n const disabled = isDisabledDate(date);\n const tabbable = !disabled && isTabbableDate(date);\n\n return (\n <CalendarViewItem\n key={`calendar-table-data-${cell}`}\n {...yearHtmlAttributes}\n date={date}\n unit=\"year\"\n active={active}\n disabled={disabled}\n tabbable={tabbable}\n onKeyDown={handleItemKeyDown(date)}\n onDateSelect={handleDateSelect}\n >\n {year}\n </CalendarViewItem>\n );\n };\n\n /** Проверяет, является ли дата активной. */\n const isActiveDate = (date: moment.Moment) => {\n if (pickedDate == null) {\n return false;\n }\n\n return pickedDate.isSame(date, \"year\");\n };\n\n /** Проверяет, может ли дата получить фокус при навигации. */\n const isTabbableDate = (date: moment.Moment) => {\n if (tabbableDate) {\n return date.isSame(tabbableDate, \"year\");\n }\n\n return false;\n };\n\n /** Обработчик нажатия клавиши CalendarViewItem. */\n const handleItemKeyDown = (date: moment.Moment) => (event: React.KeyboardEvent<HTMLTableCellElement>) => {\n const key = event.code || event.keyCode;\n let nextFocusedDate;\n\n if (isKey(key, \"ARROW_RIGHT\")) {\n nextFocusedDate = getShiftedDate(date, \"add\", 1, \"year\");\n event.preventDefault();\n } else if (isKey(key, \"ARROW_LEFT\")) {\n nextFocusedDate = getShiftedDate(date, \"subtract\", 1, \"year\");\n event.preventDefault();\n } else if (isKey(key, \"ARROW_DOWN\")) {\n nextFocusedDate = getShiftedDate(date, \"add\", 3, \"year\");\n event.preventDefault();\n } else if (isKey(key, \"ARROW_UP\")) {\n nextFocusedDate = getShiftedDate(date, \"subtract\", 3, \"year\");\n event.preventDefault();\n } else if (isKey(key, \"PAGE_DOWN\")) {\n nextFocusedDate = getShiftedDate(date, \"add\", 12, \"year\");\n event.preventDefault();\n } else if (isKey(key, \"PAGE_UP\")) {\n nextFocusedDate = getShiftedDate(date, \"subtract\", 12, \"year\");\n event.preventDefault();\n }\n\n if (nextFocusedDate) {\n changeFocusedDate(nextFocusedDate);\n }\n };\n\n /** Возвращает доступную для выбора дату после сдвига. */\n const getShiftedDate = (\n currentDate: moment.Moment,\n operation: \"add\" | \"subtract\",\n amount: number,\n unit: \"month\" | \"year\",\n ) => {\n const date = currentDate.clone();\n const shiftDate = {\n add: moment.fn.add.bind(date),\n subtract: moment.fn.subtract.bind(date),\n }[operation];\n\n shiftDate(amount, unit);\n\n if (isDateOutOfRange(date, limitRange, \"year\")) {\n return currentDate;\n }\n\n return date;\n };\n\n /** Обработчик выбора даты. */\n const handleDateSelect = (date: moment.Moment) => {\n onViewChange(date, ECalendarViewMode.MONTHS);\n };\n\n /** Изменение фокусируемой даты. */\n const changeFocusedDate = (date: moment.Moment) => {\n setTabbableDate(date);\n\n if (date.year() + 5 < viewDate.year()) {\n date = viewDate.clone().subtract(12, \"years\");\n onPageChange(date, ECalendarViewMode.YEARS);\n } else if (date.year() - 6 > viewDate.year()) {\n date = viewDate.clone().add(12, \"years\");\n onPageChange(date, ECalendarViewMode.YEARS);\n }\n };\n\n return (\n <table className={styles.calendarViewYears} role=\"grid\" aria-labelledby={periodId}>\n {renderTableBody()}\n </table>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CalendarViewYears.js","sources":["../../../../src/components/Calendar/components/CalendarViewYears.tsx"],"sourcesContent":["import React, { useState, useEffect, useContext, useCallback } from \"react\";\nimport moment from \"moment\";\nimport { CalendarContext } from \"../CalendarContext\";\nimport { CalendarViewContext } from \"../CalendarViewContext\";\nimport {\n ICalendarNavigationShift,\n ICalendarNavigationSteps,\n getFirstEnabledDate,\n getNavigationShift,\n getShiftedDateInRange,\n isDateOutOfRange,\n shiftDate,\n VIEW_GRID_COLUMNS,\n VIEW_GRID_ROWS,\n} from \"../utils\";\nimport { CalendarViewItem } from \"./CalendarViewItem\";\nimport { ECalendarViewMode } from \"../enums\";\nimport { ICalendarViewProps } from \"../types\";\nimport styles from \"../styles/CalendarView.module.less\";\n\n/** Свойства компонента CalendarViewYears. */\nexport interface ICalendarViewYearsProps extends Omit<\n ICalendarViewProps,\n \"dayHtmlAttributes\" | \"monthHtmlAttributes\"\n> {}\n\n/** Количество лет до отображаемого года, попадающих на страницу. */\nconst YEARS_BEFORE_VIEW_DATE = 5;\n\n/** Количество лет после отображаемого года, попадающих на страницу. */\nconst YEARS_AFTER_VIEW_DATE = 6;\n\n/** Величины сдвига даты при клавиатурной навигации по сетке годов. */\nconst NAVIGATION_STEPS: ICalendarNavigationSteps = {\n horizontal: { amount: 1, unit: \"year\" },\n vertical: { amount: 3, unit: \"year\" },\n page: { amount: 12, unit: \"year\" },\n};\n\n/** Вид календаря с выбором года. */\nexport const CalendarViewYears: React.FC<ICalendarViewYearsProps> = ({ pickedDate, yearHtmlAttributes = {} }) => {\n const { periodId, limitRange, viewDate, onPageChange, onViewChange } = useContext(CalendarContext);\n const { viewItemFocusedRef } = useContext(CalendarViewContext);\n const currentYear = viewDate.year();\n\n /** Проверяет, является ли дата отключенной. */\n const isDisabledDate = useCallback(\n (date: moment.Moment) => isDateOutOfRange(date, limitRange, \"year\"),\n [limitRange],\n );\n\n /** Получить первую доступную для фокуса дату. */\n const getInitialTabbableDate = useCallback(() => {\n if (pickedDate && pickedDate.isSame(viewDate, \"year\")) {\n return pickedDate;\n }\n\n return getFirstEnabledDate(\n viewDate.clone().subtract(YEARS_BEFORE_VIEW_DATE, \"year\"),\n VIEW_GRID_ROWS.length * VIEW_GRID_COLUMNS.length,\n \"year\",\n isDisabledDate,\n );\n }, [pickedDate, viewDate, isDisabledDate]);\n\n const [tabbableDate, setTabbableDate] = useState(getInitialTabbableDate());\n\n useEffect(() => {\n if (!viewItemFocusedRef.current) {\n setTabbableDate(getInitialTabbableDate());\n }\n }, [viewDate, viewItemFocusedRef, getInitialTabbableDate]);\n\n /** Рендер тела таблицы. */\n const renderTableBody = () => (\n <tbody>\n {VIEW_GRID_ROWS.map((row) => (\n <tr key={`calendar-view-years-row-${row}`}>\n {VIEW_GRID_COLUMNS.map((cell) => renderTableData(row, cell))}\n </tr>\n ))}\n </tbody>\n );\n\n /** Рендер ячейки таблицы. */\n const renderTableData = (row: number, cell: number) => {\n const year = currentYear + row * VIEW_GRID_COLUMNS.length + cell - YEARS_BEFORE_VIEW_DATE;\n const date = viewDate.clone().startOf(\"year\").year(year);\n const active = isActiveDate(date);\n const disabled = isDisabledDate(date);\n const tabbable = !disabled && isTabbableDate(date);\n\n return (\n <CalendarViewItem\n key={`calendar-table-data-${cell}`}\n {...yearHtmlAttributes}\n date={date}\n unit=\"year\"\n active={active}\n disabled={disabled}\n tabbable={tabbable}\n onKeyDown={handleItemKeyDown(date)}\n onDateSelect={handleDateSelect}\n >\n {year}\n </CalendarViewItem>\n );\n };\n\n /** Проверяет, является ли дата активной. */\n const isActiveDate = (date: moment.Moment) => {\n if (pickedDate == null) {\n return false;\n }\n\n return pickedDate.isSame(date, \"year\");\n };\n\n /** Проверяет, может ли дата получить фокус при навигации. */\n const isTabbableDate = (date: moment.Moment) => {\n if (tabbableDate) {\n return date.isSame(tabbableDate, \"year\");\n }\n\n return false;\n };\n\n /** Обработчик нажатия клавиши CalendarViewItem. */\n const handleItemKeyDown = (date: moment.Moment) => (event: React.KeyboardEvent<HTMLTableCellElement>) => {\n const shift = getNavigationShift(event.code || event.keyCode, NAVIGATION_STEPS);\n\n if (!shift) {\n return;\n }\n\n event.preventDefault();\n changeFocusedDate(getShiftedDate(date, shift));\n };\n\n /** Возвращает доступную для выбора дату после сдвига. */\n const getShiftedDate = (currentDate: moment.Moment, shift: ICalendarNavigationShift) =>\n getShiftedDateInRange(currentDate, shift, limitRange, \"year\");\n\n /** Обработчик выбора даты. */\n const handleDateSelect = (date: moment.Moment) => {\n onViewChange(date, ECalendarViewMode.MONTHS);\n };\n\n /** Изменение фокусируемой даты. При уходе даты за пределы страницы перелистывает страницу на шаг NAVIGATION_STEPS.page. */\n const changeFocusedDate = (date: moment.Moment) => {\n setTabbableDate(date);\n\n if (date.year() < viewDate.year() - YEARS_BEFORE_VIEW_DATE) {\n onPageChange(\n shiftDate(viewDate.clone(), { operation: \"subtract\", ...NAVIGATION_STEPS.page }),\n ECalendarViewMode.YEARS,\n );\n } else if (date.year() > viewDate.year() + YEARS_AFTER_VIEW_DATE) {\n onPageChange(\n shiftDate(viewDate.clone(), { operation: \"add\", ...NAVIGATION_STEPS.page }),\n ECalendarViewMode.YEARS,\n );\n }\n };\n\n return (\n <table className={styles.calendarViewYears} role=\"grid\" aria-labelledby={periodId}>\n {renderTableBody()}\n </table>\n );\n};\n\nCalendarViewYears.displayName = \"CalendarViewYears\";\n"],"names":[],"mappings":"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"}