@ryuzaki13/react-foundation-ui 3.5.0 → 3.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (594) hide show
  1. package/dist/badge/index.js +1 -1
  2. package/dist/barcode-scanner/index.js +2 -2
  3. package/dist/base-table/index.js +1 -1
  4. package/dist/button/Button.d.ts +4 -2
  5. package/dist/button/Button.d.ts.map +1 -1
  6. package/dist/button/index.js +1 -1
  7. package/dist/chunks/{CalendarView-CwbPJG2Y.js → CalendarView-BCXVjLFz.js} +23 -13
  8. package/dist/chunks/CalendarView-BCXVjLFz.js.map +1 -0
  9. package/dist/chunks/OptionContentContainer-CWHlfm5Z.js +14 -0
  10. package/dist/chunks/OptionContentContainer-CWHlfm5Z.js.map +1 -0
  11. package/dist/chunks/{TextEditorLexicalClient-BRp8jHId.js → TextEditorLexicalClient-DrSVnvOe.js} +4 -4
  12. package/dist/chunks/{TextEditorLexicalClient-BRp8jHId.js.map → TextEditorLexicalClient-DrSVnvOe.js.map} +1 -1
  13. package/dist/chunks/{base-table-BHmboNzl.js → base-table-BBp5WMDM.js} +5 -5
  14. package/dist/chunks/{base-table-BHmboNzl.js.map → base-table-BBp5WMDM.js.map} +1 -1
  15. package/dist/chunks/button-DudCl375.js +75 -0
  16. package/dist/chunks/button-DudCl375.js.map +1 -0
  17. package/dist/chunks/context-menu-CrSXJxQL.js +621 -0
  18. package/dist/chunks/context-menu-CrSXJxQL.js.map +1 -0
  19. package/dist/chunks/{date-input-Crijdmmq.js → date-input-CzCDou4s.js} +10 -7
  20. package/dist/chunks/{date-input-Crijdmmq.js.map → date-input-CzCDou4s.js.map} +1 -1
  21. package/dist/chunks/flex-D86M_h-0.js +222 -0
  22. package/dist/chunks/flex-D86M_h-0.js.map +1 -0
  23. package/dist/chunks/{floating-arrow-DKUKx2ZQ.js → floating-arrow-B_iSbzUZ.js} +19 -18
  24. package/dist/chunks/{floating-arrow-DKUKx2ZQ.js.map → floating-arrow-B_iSbzUZ.js.map} +1 -1
  25. package/dist/chunks/{grid-dI94AAbi.js → grid-CFuzBigM.js} +77 -68
  26. package/dist/chunks/grid-CFuzBigM.js.map +1 -0
  27. package/dist/chunks/{misc-CGQOXXCy.js → misc-Cm_LDrUD.js} +120 -97
  28. package/dist/chunks/misc-Cm_LDrUD.js.map +1 -0
  29. package/dist/chunks/{modal-febBsMyR.js → modal-Dz5TzkTB.js} +36 -27
  30. package/dist/chunks/modal-Dz5TzkTB.js.map +1 -0
  31. package/dist/chunks/{picker-BA6okKnz.js → picker-SJXnHwsj.js} +144 -121
  32. package/dist/chunks/picker-SJXnHwsj.js.map +1 -0
  33. package/dist/chunks/popover-BJH-yHvb.js +263 -0
  34. package/dist/chunks/popover-BJH-yHvb.js.map +1 -0
  35. package/dist/chunks/{select-DblNSc5H.js → select--oIrv7SC.js} +98 -104
  36. package/dist/chunks/select--oIrv7SC.js.map +1 -0
  37. package/dist/chunks/separator-CHpBud1e.js +18 -0
  38. package/dist/chunks/separator-CHpBud1e.js.map +1 -0
  39. package/dist/chunks/{sortable-CQmMHAF8.js → sortable-BujAJgFa.js} +5 -3
  40. package/dist/chunks/{sortable-CQmMHAF8.js.map → sortable-BujAJgFa.js.map} +1 -1
  41. package/dist/chunks/{table-BnvjPaE1.js → table-BDY9Zw--.js} +2 -2
  42. package/dist/chunks/{table-BnvjPaE1.js.map → table-BDY9Zw--.js.map} +1 -1
  43. package/dist/chunks/ui.module-oRwY3Zli.js.map +1 -1
  44. package/dist/context-menu/components/ContextMenu.d.ts +16 -9
  45. package/dist/context-menu/components/ContextMenu.d.ts.map +1 -1
  46. package/dist/context-menu/components/ContextMenuTrigger.d.ts +6 -4
  47. package/dist/context-menu/components/ContextMenuTrigger.d.ts.map +1 -1
  48. package/dist/context-menu/components/DropdownMenu.d.ts +12 -7
  49. package/dist/context-menu/components/DropdownMenu.d.ts.map +1 -1
  50. package/dist/context-menu/components/DropdownMenuTrigger.d.ts +6 -4
  51. package/dist/context-menu/components/DropdownMenuTrigger.d.ts.map +1 -1
  52. package/dist/context-menu/components/MenuContent.d.ts +6 -4
  53. package/dist/context-menu/components/MenuContent.d.ts.map +1 -1
  54. package/dist/context-menu/components/MenuContext.d.ts +12 -7
  55. package/dist/context-menu/components/MenuContext.d.ts.map +1 -1
  56. package/dist/context-menu/components/MenuGroupLabel.d.ts +1 -1
  57. package/dist/context-menu/components/MenuGroupLabel.d.ts.map +1 -1
  58. package/dist/context-menu/components/MenuItem.d.ts.map +1 -1
  59. package/dist/context-menu/components/MenuRoot.d.ts +5 -5
  60. package/dist/context-menu/components/MenuRoot.d.ts.map +1 -1
  61. package/dist/context-menu/components/MenuSeparator.d.ts +1 -2
  62. package/dist/context-menu/components/MenuSeparator.d.ts.map +1 -1
  63. package/dist/context-menu/components/RadialMenuContent.d.ts +6 -4
  64. package/dist/context-menu/components/RadialMenuContent.d.ts.map +1 -1
  65. package/dist/context-menu/components/RadialMenuItem.d.ts +1 -1
  66. package/dist/context-menu/components/RadialMenuItem.d.ts.map +1 -1
  67. package/dist/context-menu/index.js +1 -1
  68. package/dist/date-input/index.js +2 -2
  69. package/dist/date-input/ui/CalendarDayView.d.ts +1 -1
  70. package/dist/date-input/ui/CalendarDayView.d.ts.map +1 -1
  71. package/dist/date-input/ui/CalendarMonthView.d.ts +1 -1
  72. package/dist/date-input/ui/CalendarMonthView.d.ts.map +1 -1
  73. package/dist/date-input/ui/CalendarView.d.ts.map +1 -1
  74. package/dist/date-input/ui/CalendarYearView.d.ts +1 -1
  75. package/dist/date-input/ui/CalendarYearView.d.ts.map +1 -1
  76. package/dist/date-input/ui/DateInput.d.ts.map +1 -1
  77. package/dist/date-time-input/index.js +10 -7
  78. package/dist/date-time-input/index.js.map +1 -1
  79. package/dist/date-time-input/ui/SingleDateTimeInput.d.ts.map +1 -1
  80. package/dist/detail/Detail.d.ts +6 -1
  81. package/dist/detail/Detail.d.ts.map +1 -1
  82. package/dist/detail/index.js +2 -2
  83. package/dist/detail/index.js.map +1 -1
  84. package/dist/disclosure/index.js +1 -1
  85. package/dist/errors/BadRequestPage.d.ts +1 -1
  86. package/dist/errors/BadRequestPage.d.ts.map +1 -1
  87. package/dist/errors/ErrorDisplay.d.ts +2 -2
  88. package/dist/errors/ErrorDisplay.d.ts.map +1 -1
  89. package/dist/errors/ErrorExplosion.d.ts +1 -2
  90. package/dist/errors/ErrorExplosion.d.ts.map +1 -1
  91. package/dist/errors/ForbiddenPage.d.ts +1 -1
  92. package/dist/errors/ForbiddenPage.d.ts.map +1 -1
  93. package/dist/errors/NotFoundPage.d.ts +1 -1
  94. package/dist/errors/NotFoundPage.d.ts.map +1 -1
  95. package/dist/errors/PageError.d.ts +1 -2
  96. package/dist/errors/PageError.d.ts.map +1 -1
  97. package/dist/errors/UnauthorizedPage.d.ts +1 -1
  98. package/dist/errors/UnauthorizedPage.d.ts.map +1 -1
  99. package/dist/errors/ViewNotChanged.d.ts +1 -2
  100. package/dist/errors/ViewNotChanged.d.ts.map +1 -1
  101. package/dist/errors/index.js +74 -44
  102. package/dist/errors/index.js.map +1 -1
  103. package/dist/expandable-action-panel/index.js +2 -2
  104. package/dist/flex/Flex.d.ts +6 -3
  105. package/dist/flex/Flex.d.ts.map +1 -1
  106. package/dist/flex/FlexCenter.d.ts +1 -1
  107. package/dist/flex/FlexCenter.d.ts.map +1 -1
  108. package/dist/flex/FlexContainer.d.ts +7 -1
  109. package/dist/flex/FlexContainer.d.ts.map +1 -1
  110. package/dist/flex/FlexItem.d.ts +7 -1
  111. package/dist/flex/FlexItem.d.ts.map +1 -1
  112. package/dist/flex/FlexSpacer.d.ts +7 -1
  113. package/dist/flex/FlexSpacer.d.ts.map +1 -1
  114. package/dist/flex/PredefinedFlex.d.ts +7 -1
  115. package/dist/flex/PredefinedFlex.d.ts.map +1 -1
  116. package/dist/flex/index.js +1 -1
  117. package/dist/floating-arrow/FloatingArrow.d.ts +4 -1
  118. package/dist/floating-arrow/FloatingArrow.d.ts.map +1 -1
  119. package/dist/floating-arrow/index.js +1 -1
  120. package/dist/grid/Grid.d.ts +4 -2
  121. package/dist/grid/Grid.d.ts.map +1 -1
  122. package/dist/grid/GridContainer.d.ts +7 -1
  123. package/dist/grid/GridContainer.d.ts.map +1 -1
  124. package/dist/grid/GridItem.d.ts +7 -1
  125. package/dist/grid/GridItem.d.ts.map +1 -1
  126. package/dist/grid/index.js +1 -1
  127. package/dist/image/index.js +3 -3
  128. package/dist/layout-picker/index.js +11 -13
  129. package/dist/layout-picker/index.js.map +1 -1
  130. package/dist/layout-picker/ui/LayoutPicker.d.ts.map +1 -1
  131. package/dist/list/List.d.ts +9 -9
  132. package/dist/list/List.d.ts.map +1 -1
  133. package/dist/list/index.js +23 -16
  134. package/dist/list/index.js.map +1 -1
  135. package/dist/listbox/Listbox.d.ts.map +1 -1
  136. package/dist/listbox/index.js +10 -16
  137. package/dist/listbox/index.js.map +1 -1
  138. package/dist/misc/CopyTextWrapper.d.ts +1 -1
  139. package/dist/misc/CopyTextWrapper.d.ts.map +1 -1
  140. package/dist/misc/OneStepScroller.d.ts +1 -1
  141. package/dist/misc/OneStepScroller.d.ts.map +1 -1
  142. package/dist/misc/Scrollable.d.ts +9 -7
  143. package/dist/misc/Scrollable.d.ts.map +1 -1
  144. package/dist/misc/SkeletonLine.d.ts +1 -1
  145. package/dist/misc/SkeletonLine.d.ts.map +1 -1
  146. package/dist/misc/StateIcon.d.ts +6 -7
  147. package/dist/misc/StateIcon.d.ts.map +1 -1
  148. package/dist/misc/index.d.ts +1 -0
  149. package/dist/misc/index.d.ts.map +1 -1
  150. package/dist/misc/index.js +1 -1
  151. package/dist/modal/Modal.d.ts +14 -5
  152. package/dist/modal/Modal.d.ts.map +1 -1
  153. package/dist/modal/index.js +1 -1
  154. package/dist/multi-select/index.js +247 -232
  155. package/dist/multi-select/index.js.map +1 -1
  156. package/dist/multi-select/ui/MultiSelect.d.ts +7 -2
  157. package/dist/multi-select/ui/MultiSelect.d.ts.map +1 -1
  158. package/dist/multi-select/ui/ODataMultiSelect.d.ts +1 -2
  159. package/dist/multi-select/ui/ODataMultiSelect.d.ts.map +1 -1
  160. package/dist/notifications/index.d.ts +1 -1
  161. package/dist/notifications/index.d.ts.map +1 -1
  162. package/dist/notifications/index.js +45 -31
  163. package/dist/notifications/index.js.map +1 -1
  164. package/dist/notifications/model/NotificationsProvider.d.ts +2 -18
  165. package/dist/notifications/model/NotificationsProvider.d.ts.map +1 -1
  166. package/dist/notifications/model/index.d.ts +4 -0
  167. package/dist/notifications/model/index.d.ts.map +1 -1
  168. package/dist/notifications/model/notificationsContext.d.ts +4 -0
  169. package/dist/notifications/model/notificationsContext.d.ts.map +1 -0
  170. package/dist/notifications/model/useNotificationById.d.ts +4 -0
  171. package/dist/notifications/model/useNotificationById.d.ts.map +1 -0
  172. package/dist/notifications/model/useNotificationHistory.d.ts +6 -0
  173. package/dist/notifications/model/useNotificationHistory.d.ts.map +1 -0
  174. package/dist/notifications/model/useNotifications.d.ts +3 -0
  175. package/dist/notifications/model/useNotifications.d.ts.map +1 -0
  176. package/dist/notifications/model/useNotificationsStore.d.ts +3 -0
  177. package/dist/notifications/model/useNotificationsStore.d.ts.map +1 -0
  178. package/dist/notifications/model/useNotify.d.ts +17 -0
  179. package/dist/notifications/model/useNotify.d.ts.map +1 -0
  180. package/dist/notifications/ui/NotificationsHost.d.ts +2 -1
  181. package/dist/notifications/ui/NotificationsHost.d.ts.map +1 -1
  182. package/dist/option/Option.d.ts +3 -3
  183. package/dist/option/OptionContentContainer.d.ts +7 -0
  184. package/dist/option/OptionContentContainer.d.ts.map +1 -0
  185. package/dist/option/index.js.map +1 -1
  186. package/dist/picker/PickerOptions.d.ts +3 -1
  187. package/dist/picker/PickerOptions.d.ts.map +1 -1
  188. package/dist/picker/PickerPopup.d.ts +1 -1
  189. package/dist/picker/PickerPopup.d.ts.map +1 -1
  190. package/dist/picker/PickerTriggerActions.d.ts +7 -2
  191. package/dist/picker/PickerTriggerActions.d.ts.map +1 -1
  192. package/dist/picker/PickerTriggerInput.d.ts +7 -2
  193. package/dist/picker/PickerTriggerInput.d.ts.map +1 -1
  194. package/dist/picker/index.js +1 -1
  195. package/dist/polymorphic/PolymorphicComponent.d.ts +1 -1
  196. package/dist/polymorphic/PolymorphicComponent.d.ts.map +1 -1
  197. package/dist/polymorphic/index.js +3 -1
  198. package/dist/polymorphic/index.js.map +1 -1
  199. package/dist/popover/FloatingPopover.d.ts +1 -1
  200. package/dist/popover/FloatingPopover.d.ts.map +1 -1
  201. package/dist/popover/FloatingTooltip.d.ts +2 -2
  202. package/dist/popover/FloatingTooltip.d.ts.map +1 -1
  203. package/dist/popover/components/Popover.d.ts +11 -10
  204. package/dist/popover/components/Popover.d.ts.map +1 -1
  205. package/dist/popover/components/PopoverContent.d.ts +6 -4
  206. package/dist/popover/components/PopoverContent.d.ts.map +1 -1
  207. package/dist/popover/components/PopoverContext.d.ts +2 -1
  208. package/dist/popover/components/PopoverContext.d.ts.map +1 -1
  209. package/dist/popover/components/PopoverTrigger.d.ts +1 -1
  210. package/dist/popover/components/PopoverTrigger.d.ts.map +1 -1
  211. package/dist/popover/index.js +1 -1
  212. package/dist/preset-range-date-input/index.js +2 -2
  213. package/dist/preset-select/index.js +1 -1
  214. package/dist/radio-button/RadioButton.d.ts +1 -1
  215. package/dist/radio-button/RadioButton.d.ts.map +1 -1
  216. package/dist/radio-button/index.js +5 -2
  217. package/dist/radio-button/index.js.map +1 -1
  218. package/dist/select/ODataSelect.d.ts +1 -2
  219. package/dist/select/ODataSelect.d.ts.map +1 -1
  220. package/dist/select/Select.d.ts.map +1 -1
  221. package/dist/select/index.js +1 -1
  222. package/dist/separator/Separator.d.ts +1 -1
  223. package/dist/separator/Separator.d.ts.map +1 -1
  224. package/dist/separator/index.js +1 -1
  225. package/dist/simple-table/index.js +1 -1
  226. package/dist/slider/Slider.d.ts.map +1 -1
  227. package/dist/slider/SliderInput.d.ts.map +1 -1
  228. package/dist/slider/SliderPopoverToggle.d.ts +11 -0
  229. package/dist/slider/SliderPopoverToggle.d.ts.map +1 -0
  230. package/dist/slider/index.js +299 -278
  231. package/dist/slider/index.js.map +1 -1
  232. package/dist/sortable/Sortable.d.ts.map +1 -1
  233. package/dist/sortable/SortableDragHandle.d.ts +1 -1
  234. package/dist/sortable/SortableDragHandle.d.ts.map +1 -1
  235. package/dist/sortable/index.js +1 -1
  236. package/dist/state-select/index.js +1 -1
  237. package/dist/styles.css +1 -1
  238. package/dist/table/index.js +1 -1
  239. package/dist/table-editor/index.js +1 -1
  240. package/dist/table-sorting/index.js +1 -1
  241. package/dist/tabs/index.js +27 -28
  242. package/dist/tabs/index.js.map +1 -1
  243. package/dist/tabs/ui/TabsBox.d.ts +1 -1
  244. package/dist/tabs/ui/TabsBox.d.ts.map +1 -1
  245. package/dist/tabs/ui/TabsLayout.d.ts +11 -7
  246. package/dist/tabs/ui/TabsLayout.d.ts.map +1 -1
  247. package/dist/tabs/ui/TabsPanel.d.ts +3 -3
  248. package/dist/tabs/ui/TabsPanel.d.ts.map +1 -1
  249. package/dist/tabs/ui/TabsTabList.d.ts +2 -2
  250. package/dist/tabs/ui/TabsTabList.d.ts.map +1 -1
  251. package/dist/text/HighlightText.d.ts +2 -2
  252. package/dist/text/HighlightText.d.ts.map +1 -1
  253. package/dist/text/index.js +7 -2
  254. package/dist/text/index.js.map +1 -1
  255. package/dist/text-editor/index.js +2 -2
  256. package/dist/toolbar/Toolbar.d.ts +8 -2
  257. package/dist/toolbar/Toolbar.d.ts.map +1 -1
  258. package/dist/toolbar/index.js +8 -4
  259. package/dist/toolbar/index.js.map +1 -1
  260. package/dist/tree-select/TreeNodeContent.d.ts +3 -1
  261. package/dist/tree-select/TreeNodeContent.d.ts.map +1 -1
  262. package/dist/tree-select/TreePickerBase.d.ts.map +1 -1
  263. package/dist/tree-select/index.js +409 -332
  264. package/dist/tree-select/index.js.map +1 -1
  265. package/dist/tree-table/index.js +1 -1
  266. package/package.json +3 -3
  267. package/storybook-static/assets/{Badge-BKRvorSi.js → Badge-CV3f-YLa.js} +1 -1
  268. package/storybook-static/assets/{Badge.stories-19yFfupy.js → Badge.stories-BUPuimKi.js} +1 -1
  269. package/storybook-static/assets/{BadgeList-DMkfxply.js → BadgeList-CDDAItI6.js} +1 -1
  270. package/storybook-static/assets/{BarcodeScannerDialog.stories-DdnHxu5x.js → BarcodeScannerDialog.stories-teB8ep3A.js} +1 -1
  271. package/storybook-static/assets/{Button-Di-0Ionw.js → Button-BW8cBp03.js} +1 -1
  272. package/storybook-static/assets/{Button-CoOZeR_z.js → Button-CV4tslOZ.js} +2 -2
  273. package/storybook-static/assets/{Button.stories-Bd1To5BN.js → Button.stories-DKlzPZqU.js} +1 -1
  274. package/storybook-static/assets/CalendarView-CX2J7c6F.js +1 -0
  275. package/storybook-static/assets/{CheckBox-DfRTTXg1.js → CheckBox-BTr4z78V.js} +1 -1
  276. package/storybook-static/assets/{CheckBox-DSmGYEML.js → CheckBox-BWZ_P_3Q.js} +1 -1
  277. package/storybook-static/assets/{CheckBox.stories-DaldWgEI.js → CheckBox.stories-BUaJvDIu.js} +1 -1
  278. package/storybook-static/assets/{Color-6AOWCN3U-DIhia6KS.js → Color-6AOWCN3U-DmrUSa8T.js} +1 -1
  279. package/storybook-static/assets/{ContextMenu-BGMQHT9V.js → ContextMenu-DsJnOtZ9.js} +6 -2
  280. package/storybook-static/assets/ContextMenu-wBO-KcfV.js +33 -0
  281. package/storybook-static/assets/ContextMenu.stories-CNOrf21k.js +37 -0
  282. package/storybook-static/assets/{DateInput-DUl5Bb0j.js → DateInput-DbZNB8s8.js} +8 -1
  283. package/storybook-static/assets/{DateInput-MgdMtvtr.js → DateInput-xQJfyfF-.js} +1 -1
  284. package/storybook-static/assets/{DateInput.stories-B6Ol0Ak3.js → DateInput.stories-DAku4mZt.js} +1 -1
  285. package/storybook-static/assets/{DateRangePresetSelect-CPj0pSGc.js → DateRangePresetSelect-BPlpCA6c.js} +1 -1
  286. package/storybook-static/assets/{DateRangePresetSelect-C4MVqjXa.js → DateRangePresetSelect-DHoyZyQT.js} +1 -1
  287. package/storybook-static/assets/{DateRangePresetSelect.stories-tPaMURtH.js → DateRangePresetSelect.stories-DRvogj0c.js} +1 -1
  288. package/storybook-static/assets/{Detail-DnHTVRb5.js → Detail-mXagpId3.js} +1 -1
  289. package/storybook-static/assets/Detail.stories-D7Iwy0-s.js +56 -0
  290. package/storybook-static/assets/{Dialog-COpvqcXi.js → Dialog-CMqH_KAI.js} +1 -1
  291. package/storybook-static/assets/{Dialog-LMnrvBpx.js → Dialog-qRvPPGeh.js} +1 -1
  292. package/storybook-static/assets/{Dialog.stories-BE2I5ny2.js → Dialog.stories-J_OyVz3O.js} +1 -1
  293. package/storybook-static/assets/{Disclosure-BZ3jd5nu.js → Disclosure-TdbPZNSu.js} +1 -1
  294. package/storybook-static/assets/{Disclosure.stories-cMcF8a8I.js → Disclosure.stories-DRoDp_Fu.js} +1 -1
  295. package/storybook-static/assets/DisclosureGroup-CeBLtSCA.js +2 -0
  296. package/storybook-static/assets/{DocsRenderer-JROSPFPF-CurHdzu8.js → DocsRenderer-JROSPFPF-BdyHYSwz.js} +1 -1
  297. package/storybook-static/assets/{DropZone-DGMAbY1z.js → DropZone-BzRKfOtd.js} +1 -1
  298. package/storybook-static/assets/{DropZone-VEmgdfs6.js → DropZone-CODtJSpF.js} +1 -1
  299. package/storybook-static/assets/{DropZone.stories-B8N17-bV.js → DropZone.stories-BzNj9PbZ.js} +1 -1
  300. package/storybook-static/assets/DropdownMenu-Db-sh5Gd.js +21 -0
  301. package/storybook-static/assets/{ExpandableActionPanel-C7CFQZLD.js → ExpandableActionPanel-fOfO1fQV.js} +1 -1
  302. package/storybook-static/assets/{ExpandableActionPanel.stories-CnBr0s9R.js → ExpandableActionPanel.stories-C6Si_Nqk.js} +1 -1
  303. package/storybook-static/assets/{Flex-RpqsC-gQ.js → Flex-B9KnOucm.js} +1 -1
  304. package/storybook-static/assets/Flex.stories-ApvEyW4R.js +300 -0
  305. package/storybook-static/assets/FlexContainer-B1y3dds2.js +1 -0
  306. package/storybook-static/assets/{FlexItem-pu3E11Sf.js → FlexItem-pEuFUX72.js} +2 -2
  307. package/storybook-static/assets/FloatingPopover-CjNAEFQy.js +1 -0
  308. package/storybook-static/assets/FormattedTableCell-DZM2eYz5.js +15 -0
  309. package/storybook-static/assets/{Grid-CzO0Ae1r.js → Grid-CI6OKKu8.js} +2 -2
  310. package/storybook-static/assets/{Grid-BRnqEtg1.js → Grid-NnstE-Tl.js} +1 -1
  311. package/storybook-static/assets/{Grid.stories-DXY7Cvfu.js → Grid.stories-tklnzZVg.js} +4 -4
  312. package/storybook-static/assets/{GridContainer-fKYgDsLl.js → GridContainer-wl6R6ToY.js} +2 -2
  313. package/storybook-static/assets/{ImageCropper.stories-ZnvbFN71.js → ImageCropper.stories-DFN1M8eV.js} +1 -1
  314. package/storybook-static/assets/{ImageRenderer-DUOhCfac.js → ImageRenderer-CsIh2Gps.js} +1 -1
  315. package/storybook-static/assets/{ImageRenderer.stories-Dj6NQm2k.js → ImageRenderer.stories-CFg_ibLF.js} +1 -1
  316. package/storybook-static/assets/{ImageView.stories-QTzOsByD.js → ImageView.stories-HHd7jrjM.js} +1 -1
  317. package/storybook-static/assets/{ImageViewer.stories-CpnUEgZW.js → ImageViewer.stories-DgWkr466.js} +2 -2
  318. package/storybook-static/assets/{ImageViewerRuntime-B1PicLUw.js → ImageViewerRuntime-6z6zV9jF.js} +1 -1
  319. package/storybook-static/assets/{Input-DnFc_Pwx.js → Input-B7_Qlowr.js} +1 -1
  320. package/storybook-static/assets/{Input-B8eGQXlp.js → Input-Bvw9Sw0g.js} +1 -1
  321. package/storybook-static/assets/{Input.stories-C6CbYvZP.js → Input.stories-Dc2sDy4p.js} +1 -1
  322. package/storybook-static/assets/{InputDateTime-DoMduRde.js → InputDateTime-DUkFFY2j.js} +1 -1
  323. package/storybook-static/assets/{InputDateTime.stories--LHpvJjY.js → InputDateTime.stories-WZXWHrjO.js} +1 -1
  324. package/storybook-static/assets/{InputFile-CunQ8F4s.js → InputFile-CR2m2VQy.js} +1 -1
  325. package/storybook-static/assets/{InputFile-DFv3WAWa.js → InputFile-DJE39TQT.js} +1 -1
  326. package/storybook-static/assets/{InputFile.stories-B0WZhic1.js → InputFile.stories-BxE2jR8X.js} +1 -1
  327. package/storybook-static/assets/{InputFiles-DyiPQ_tH.js → InputFiles-CMkLLJOH.js} +1 -1
  328. package/storybook-static/assets/{InputFiles-CKDPmjWY.js → InputFiles-CTD2obOb.js} +1 -1
  329. package/storybook-static/assets/{InputFiles.stories-BbP_bEnL.js → InputFiles.stories-CeLIDMcH.js} +1 -1
  330. package/storybook-static/assets/{InputFilesList-BAIGwV7V.js → InputFilesList-tUr9ob4W.js} +1 -1
  331. package/storybook-static/assets/{InputImage-2G1pRNbw.js → InputImage-C0cIhVXy.js} +1 -1
  332. package/storybook-static/assets/{InputImage-ZvEB_TIT.js → InputImage-CoAYtfEV.js} +1 -1
  333. package/storybook-static/assets/{InputImage.stories-BiShLRcw.js → InputImage.stories-DpXv7PID.js} +1 -1
  334. package/storybook-static/assets/{InteractiveComponents-CT99QfHX.js → InteractiveComponents-Dmyiy24S.js} +1 -1
  335. package/storybook-static/assets/{InteractiveComponents.stories-BPTICQZz.js → InteractiveComponents.stories-B77oJ-sY.js} +1 -1
  336. package/storybook-static/assets/{LayoutPicker-BDpc8LBa.js → LayoutPicker-CJcSQqwn.js} +2 -2
  337. package/storybook-static/assets/{LayoutPicker-Cg_AM-pj.js → LayoutPicker-MTeK4NeO.js} +2 -1
  338. package/storybook-static/assets/{LayoutPicker.stories-Ca9WZdPW.js → LayoutPicker.stories-CcY356LI.js} +1 -1
  339. package/storybook-static/assets/Listbox-BGYVb_Ct.js +1 -0
  340. package/storybook-static/assets/{Listbox-LbbFtte9.js → Listbox-Cv9AQzQU.js} +2 -1
  341. package/storybook-static/assets/{Listbox.stories-xDpbFNZk.js → Listbox.stories-C9_cOdMY.js} +1 -1
  342. package/storybook-static/assets/Modal-CHcZjpHv.js +1 -0
  343. package/storybook-static/assets/{Modal-CXd2j0up.js → Modal-CnMZc0y1.js} +1 -1
  344. package/storybook-static/assets/{Modal.stories-cNLvFjmT.js → Modal.stories-DxITHZDl.js} +1 -1
  345. package/storybook-static/assets/{ModalManagerProvider-ClXvSB9a.js → ModalManagerProvider-vGXTuniv.js} +1 -1
  346. package/storybook-static/assets/MultiSelect-DDC0Nrrq.js +2 -0
  347. package/storybook-static/assets/{MultiSelect-Na2VdNy3.js → MultiSelect-DqdwstLi.js} +4 -1
  348. package/storybook-static/assets/MultiSelect-SJBp1Ymv.css +1 -0
  349. package/storybook-static/assets/{MultiSelect.stories-4nFshdtz.js → MultiSelect.stories-BPsGXWR2.js} +1 -1
  350. package/storybook-static/assets/NoData-BlGdaWe6.js +1 -0
  351. package/storybook-static/assets/NotificationsHost-gXnNQDp7.js +75 -0
  352. package/storybook-static/assets/NotificationsHost.stories-BdkJz6WZ.js +30 -0
  353. package/storybook-static/assets/{ODataMultiSelect-Cc09uTB8.js → ODataMultiSelect-C_Qs3Nl4.js} +1 -1
  354. package/storybook-static/assets/{ODataMultiSelect.stories-CzGzREa9.js → ODataMultiSelect.stories-DfmeONnP.js} +2 -2
  355. package/storybook-static/assets/{ODataSelect-DqoRg5pz.js → ODataSelect-C5fwwi_V.js} +1 -1
  356. package/storybook-static/assets/{ODataSelect.stories-BCcxERn3.js → ODataSelect.stories-BCDjW9Of.js} +2 -2
  357. package/storybook-static/assets/{ODataTreeMultiSelect-qZEcSE5O.js → ODataTreeMultiSelect-bU2QW5pt.js} +1 -1
  358. package/storybook-static/assets/{ODataTreeMultiSelect.stories-Bfees7Qr.js → ODataTreeMultiSelect.stories-FRT1vULJ.js} +1 -1
  359. package/storybook-static/assets/{ODataTreeSelect-IOVS6uQc.js → ODataTreeSelect-DmNcnlbz.js} +1 -1
  360. package/storybook-static/assets/{ODataTreeSelect.stories-CO7DClzd.js → ODataTreeSelect.stories-B9Mq-Iq-.js} +1 -1
  361. package/storybook-static/assets/OneStepScroller-X_sOKCiI.js +5 -0
  362. package/storybook-static/assets/Option-CSut1BkS.js +10 -0
  363. package/storybook-static/assets/OptionButton-B7wOhE1V.js +1 -0
  364. package/storybook-static/assets/OptionContent-DyxUQFu3.js +1 -0
  365. package/storybook-static/assets/OptionContentContainer-DnzI9J61.js +2 -0
  366. package/storybook-static/assets/{PeriodSelect-D-jXJf5C.js → PeriodSelect-C1Rh75We.js} +1 -1
  367. package/storybook-static/assets/{PeriodSelect-BAVDztkI.js → PeriodSelect-SjGK6Esp.js} +1 -1
  368. package/storybook-static/assets/{PeriodSelect.stories-CscsENT9.js → PeriodSelect.stories-Bch3cN5l.js} +1 -1
  369. package/storybook-static/assets/{PickerField-CRtltoce.js → PickerField-B8_SoyYo.js} +1 -1
  370. package/storybook-static/assets/PickerTriggerActions-DP0ZKD9L.js +2 -0
  371. package/storybook-static/assets/PolymorphicComponent-NBvIz9JD.js +1 -0
  372. package/storybook-static/assets/Popover-DF-J3Kwx.js +55 -0
  373. package/storybook-static/assets/Popover-NBKcB7nc.js +46 -0
  374. package/storybook-static/assets/Popover.stories-BGcAWbjW.js +63 -0
  375. package/storybook-static/assets/{PresetRangeDateInput-VZnM8RNV.js → PresetRangeDateInput-BAbrOHdm.js} +1 -1
  376. package/storybook-static/assets/{PresetRangeDateInput-CVPMYlEV.js → PresetRangeDateInput-DajjeSUc.js} +1 -1
  377. package/storybook-static/assets/{PresetRangeDateInput.stories-DdBWlSV-.js → PresetRangeDateInput.stories-Bf7YKKIQ.js} +1 -1
  378. package/storybook-static/assets/{PresetSelect-C7YYBjlL.js → PresetSelect-CfmPZsZF.js} +1 -1
  379. package/storybook-static/assets/{README-CeNQeTK-.js → README--xvSptx6.js} +1 -1
  380. package/storybook-static/assets/{README-DWzfTSuq.js → README-02MdhoYj.js} +1 -1
  381. package/storybook-static/assets/{README-w9FMhq0X.js → README-23NGVX-l.js} +1 -1
  382. package/storybook-static/assets/{README-CTF9mVZL.js → README-3bVCOGDc.js} +1 -1
  383. package/storybook-static/assets/{README-DkBG5Azm.js → README-5JPwN5I3.js} +1 -1
  384. package/storybook-static/assets/{README-DC0vNdOD.js → README-B35CL6W4.js} +1 -1
  385. package/storybook-static/assets/{README-Wli4AXG5.js → README-B4-JBF7Z.js} +1 -1
  386. package/storybook-static/assets/{README-BZlnzGAh.js → README-B5cX2glk.js} +1 -1
  387. package/storybook-static/assets/{README-DoxVtmRh.js → README-BGZN87_w.js} +1 -1
  388. package/storybook-static/assets/{README-Bvo0Qxde.js → README-BNTTx0rf.js} +1 -1
  389. package/storybook-static/assets/{README-Dmu5lsNT.js → README-BRvVmpDS.js} +1 -1
  390. package/storybook-static/assets/{README-UcyyK9jn.js → README-BUhZmzyX.js} +1 -1
  391. package/storybook-static/assets/{README-C-IUw1gX.js → README-Bb5AJH8-.js} +1 -1
  392. package/storybook-static/assets/{README-jvtwVY_n.js → README-Bew3UK8F.js} +1 -1
  393. package/storybook-static/assets/{README-DOBIWrus.js → README-Bk_A3mYt.js} +1 -1
  394. package/storybook-static/assets/{README-C_lKreF9.js → README-BlTlxb7s.js} +1 -1
  395. package/storybook-static/assets/{README-DyWhmOFY.js → README-BqHDKN3N.js} +1 -1
  396. package/storybook-static/assets/{README-B0FbTpix.js → README-BwhJA_em.js} +1 -1
  397. package/storybook-static/assets/{README-DMwF_O1R.js → README-BzhO6nn7.js} +1 -1
  398. package/storybook-static/assets/{README-8L1vpZcz.js → README-C-fD13Eo.js} +1 -1
  399. package/storybook-static/assets/{README-BL8ZNGNi.js → README-C2dMbb8z.js} +1 -1
  400. package/storybook-static/assets/{README-jQcGKqqm.js → README-C79arOAr.js} +1 -1
  401. package/storybook-static/assets/{README-C7N5_6-c.js → README-C7gQVhLI.js} +1 -1
  402. package/storybook-static/assets/{README-DADnaXLy.js → README-CBYHjEjb.js} +1 -1
  403. package/storybook-static/assets/{README-oKLTQYfV.js → README-CCqwPYoe.js} +1 -1
  404. package/storybook-static/assets/{README-DIWsYBR7.js → README-CJKEEjnI.js} +1 -1
  405. package/storybook-static/assets/{README-DrTR5pSr.js → README-CKDAq2L0.js} +1 -1
  406. package/storybook-static/assets/{README-BdsFByUw.js → README-CXNyh6Hq.js} +1 -1
  407. package/storybook-static/assets/{README-DlfWWC7n.js → README-Ce9KyfEM.js} +1 -1
  408. package/storybook-static/assets/{README-BGBxEe4u.js → README-CijcMn5M.js} +1 -1
  409. package/storybook-static/assets/{README-B0Nb0jf2.js → README-Cj8rKrp5.js} +1 -1
  410. package/storybook-static/assets/{README-DgXAMdBY.js → README-CkYzrLaV.js} +1 -1
  411. package/storybook-static/assets/{README-Bk1oSDWQ.js → README-CvqMprlS.js} +1 -1
  412. package/storybook-static/assets/{README-BGmO6U9j.js → README-CxURTiLk.js} +1 -1
  413. package/storybook-static/assets/{README-6XPUoxFl.js → README-DBsUCpqI.js} +1 -1
  414. package/storybook-static/assets/{README-CvaizZr1.js → README-DD2eTjZe.js} +1 -1
  415. package/storybook-static/assets/{README-D2AT2-yD.js → README-DJ53d7sm.js} +6 -3
  416. package/storybook-static/assets/{README-HWuoKwKL.js → README-DLlWedYv.js} +1 -1
  417. package/storybook-static/assets/{README-2NTkucdH.js → README-DRxLVin-.js} +1 -1
  418. package/storybook-static/assets/{README-b3wA6wFr.js → README-DTE8nUeJ.js} +1 -1
  419. package/storybook-static/assets/{README-Dm7CwuVP.js → README-DUh3QGlI.js} +14 -8
  420. package/storybook-static/assets/{README-ZxRwqfIH.js → README-DfrkaWMN.js} +1 -1
  421. package/storybook-static/assets/{README-DOi6rx7n.js → README-DlJZHUr9.js} +1 -1
  422. package/storybook-static/assets/{README-g1VWHzAJ.js → README-Dm0fH6Ac.js} +1 -1
  423. package/storybook-static/assets/{README-GChrAHFQ.js → README-DvgeFwUN.js} +1 -1
  424. package/storybook-static/assets/{README-CqiNQGIJ.js → README-DzfnNMhi.js} +1 -1
  425. package/storybook-static/assets/{README-Dr8TxFTe.js → README-EjFzMh6K.js} +1 -1
  426. package/storybook-static/assets/{README-BD-WSEvQ.js → README-Yp7ckVfi.js} +1 -1
  427. package/storybook-static/assets/{README-Brn9Tjjc.js → README-ZzFd6eCk.js} +1 -1
  428. package/storybook-static/assets/{README-na5mQX4V.js → README-cBsDQvLg.js} +1 -1
  429. package/storybook-static/assets/{README-CB5BpIBF.js → README-hq5hkADm.js} +1 -1
  430. package/storybook-static/assets/{README-_KzyG4dS.js → README-kYUqgwYs.js} +1 -1
  431. package/storybook-static/assets/{README-CTwfFqJG.js → README-l9uKtPiZ.js} +1 -1
  432. package/storybook-static/assets/{RadioButton-Dgkz1EWU.js → RadioButton-BDpUjCQB.js} +1 -1
  433. package/storybook-static/assets/RadioButton-BWpGjwT9.js +1 -0
  434. package/storybook-static/assets/{RadioButton.stories-DO14jTfm.js → RadioButton.stories-DrOP5Alc.js} +1 -1
  435. package/storybook-static/assets/{RadioGroup-Db0AhiKo.js → RadioGroup-BljW3G4c.js} +1 -1
  436. package/storybook-static/assets/{RadioGroup-BSiqjVai.js → RadioGroup-wzlE1seI.js} +1 -1
  437. package/storybook-static/assets/{RadioGroup.stories-C0D6n83q.js → RadioGroup.stories-6h1qt8DI.js} +1 -1
  438. package/storybook-static/assets/Scrollable-C7dBSd5R.js +1 -0
  439. package/storybook-static/assets/Scrollable-Dhpelsb3.js +18 -0
  440. package/storybook-static/assets/Scrollable.stories-Cj1mRfdX.js +1 -0
  441. package/storybook-static/assets/Select-BI1R-0nK.js +12 -0
  442. package/storybook-static/assets/{Select-D8X-SkP2.js → Select-n3InYkr7.js} +3 -1
  443. package/storybook-static/assets/{Select.stories-8_zvonmc.js → Select.stories-pppfr6nn.js} +1 -1
  444. package/storybook-static/assets/Separator-Bx2BKztN.js +1 -0
  445. package/storybook-static/assets/Separator-GtZBq7gL.js +14 -0
  446. package/storybook-static/assets/Separator.stories-DxY_qbJt.js +14 -0
  447. package/storybook-static/assets/{SerializableSelect-ii6T140l.js → SerializableSelect-DogkO2Bz.js} +1 -1
  448. package/storybook-static/assets/{SerializableSelect.stories-Ba3ABMGt.js → SerializableSelect.stories-C3OU-Qlh.js} +1 -1
  449. package/storybook-static/assets/{ShimmerText-C6vkZwUV.js → ShimmerText-XI1rbKrT.js} +1 -1
  450. package/storybook-static/assets/{ShimmerText.stories-CVpSxXHJ.js → ShimmerText.stories-lvn1uLl_.js} +1 -1
  451. package/storybook-static/assets/{SingleDateTimeInput-DpETPR89.js → SingleDateTimeInput-DK8vuf-o.js} +1 -1
  452. package/storybook-static/assets/{SingleDateTimeInput-96-mrjq8.js → SingleDateTimeInput-HNBKELgZ.js} +8 -1
  453. package/storybook-static/assets/{SingleDateTimeInput.stories-JhviurJO.js → SingleDateTimeInput.stories-DrV6WMT9.js} +1 -1
  454. package/storybook-static/assets/{Slider-B27TdvRV.js → Slider-D4ec91gY.js} +8 -1
  455. package/storybook-static/assets/Slider-bg4iXFEy.js +1 -0
  456. package/storybook-static/assets/{Slider.stories-d1YeKe5r.js → Slider.stories-DhJUqLP3.js} +1 -1
  457. package/storybook-static/assets/{SliderInput-D2d23mEI.js → SliderInput-CScKm1eT.js} +8 -1
  458. package/storybook-static/assets/SliderInput-o9cFbZ18.js +3 -0
  459. package/storybook-static/assets/{SliderInput.stories-CwqT79oE.js → SliderInput.stories-CDNoleib.js} +1 -1
  460. package/storybook-static/assets/{Sortable-DiJuiI6V.js → Sortable-DHqDBQQd.js} +4 -2
  461. package/storybook-static/assets/Sortable.stories-CEhPetnR.js +44 -0
  462. package/storybook-static/assets/{Splitter-QwdfWNbm.js → Splitter-BU9vPggP.js} +1 -1
  463. package/storybook-static/assets/{Splitter.stories-C2iDPz8c.js → Splitter.stories-BxKoQqiy.js} +1 -1
  464. package/storybook-static/assets/{StateSelect-D1ZDM6bC.js → StateSelect-Cp-vkDd6.js} +1 -1
  465. package/storybook-static/assets/{StateSelect-Bw9H1Cus.js → StateSelect-ez77Inqm.js} +1 -1
  466. package/storybook-static/assets/{StateSelect.stories-DEFvQ15O.js → StateSelect.stories-CpZV5ol8.js} +1 -1
  467. package/storybook-static/assets/{StatusIndicator-D6Pbdz37.js → StatusIndicator-BM7o68m0.js} +1 -1
  468. package/storybook-static/assets/{StatusIndicator.stories-COgpy5cK.js → StatusIndicator.stories-DmP9Drw5.js} +1 -1
  469. package/storybook-static/assets/{StringToggle.stories-BFwMh0Yd.js → StringToggle.stories-TO-VXZOK.js} +1 -1
  470. package/storybook-static/assets/{Switch-DyDk152g.js → Switch-BnYvYOX5.js} +1 -1
  471. package/storybook-static/assets/{Switch-Bmj2AItH.js → Switch-CfDHmCm8.js} +1 -1
  472. package/storybook-static/assets/{Switch.stories-C10NxPL4.js → Switch.stories-CX92UhBc.js} +1 -1
  473. package/storybook-static/assets/{Table-YcEwF4aO.js → Table-DkrNiq_n.js} +1 -1
  474. package/storybook-static/assets/{Table.stories-DgxFS9Sa.js → Table.stories-DsGm0-i7.js} +1 -1
  475. package/storybook-static/assets/{TableEditor.stories-CSMoxO4O.js → TableEditor.stories-sxgtoDe3.js} +1 -1
  476. package/storybook-static/assets/{Tabs-DOsPN2X1.js → Tabs-wMDcBXIR.js} +2 -3
  477. package/storybook-static/assets/Tabs.stories-BVXrXbOp.js +57 -0
  478. package/storybook-static/assets/{TabsBox-Ovukgo9G.js → TabsBox-5NiiCrDc.js} +1 -1
  479. package/storybook-static/assets/{TabsBox-B3REnb6D.css → TabsBox-DuBKU62M.css} +1 -1
  480. package/storybook-static/assets/{TagInput-BQBOGr9G.js → TagInput-BATz4lHU.js} +1 -1
  481. package/storybook-static/assets/{TagInput.stories-DAAyJlgm.js → TagInput.stories-D9IJIG_P.js} +1 -1
  482. package/storybook-static/assets/{Text-fdwuak_J.js → Text-Bswu5PVP.js} +1 -1
  483. package/storybook-static/assets/{Textarea-A22Efyk-.js → Textarea-AqkGgrCZ.js} +1 -1
  484. package/storybook-static/assets/{Textarea-D80ZPpEy.js → Textarea-CrkCHaE2.js} +1 -1
  485. package/storybook-static/assets/{Textarea.stories-DfaOYMoN.js → Textarea.stories-dtpJFQAX.js} +1 -1
  486. package/storybook-static/assets/{TimePanel-Bd5T_SfL.js → TimePanel-DGcJeL-M.js} +1 -1
  487. package/storybook-static/assets/{TimePanel.stories-D6TIpKp4.js → TimePanel.stories-DxPuKGPZ.js} +1 -1
  488. package/storybook-static/assets/{Toggle-DUyCRH0o.js → Toggle-DLZn_nZe.js} +1 -1
  489. package/storybook-static/assets/{Toggle-BvHMq6f_.js → Toggle-Dd08B6s5.js} +1 -1
  490. package/storybook-static/assets/{Toggle.stories-ZPgC-EWw.js → Toggle.stories-4h-5zxJC.js} +1 -1
  491. package/storybook-static/assets/{TreeMultiSelect-DTmB9s8s.js → TreeMultiSelect-4XUsw-my.js} +2 -1
  492. package/storybook-static/assets/{TreeMultiSelect-DTMybWfP.js → TreeMultiSelect-CF9O5XGt.js} +1 -1
  493. package/storybook-static/assets/{TreeMultiSelect.stories-1_HB74Gf.js → TreeMultiSelect.stories-m5UlkTdr.js} +1 -1
  494. package/storybook-static/assets/TreePickerBase-8R1GFz9r.js +76 -0
  495. package/storybook-static/assets/TreePickerBase-ClWTQVKW.css +1 -0
  496. package/storybook-static/assets/{TreeSelect-CTN6cRRr.js → TreeSelect-BPc7kRdh.js} +1 -1
  497. package/storybook-static/assets/{TreeSelect-UsZGYhUO.js → TreeSelect-CZme7Tu-.js} +2 -1
  498. package/storybook-static/assets/{TreeSelect.stories-B01pZcR9.js → TreeSelect.stories-DRVi0xZP.js} +1 -1
  499. package/storybook-static/assets/{TreeTable-dr3jK3Ih.js → TreeTable-CTBSrT9l.js} +1 -1
  500. package/storybook-static/assets/{TreeTable.stories-B1DPasDc.js → TreeTable.stories-oILl7PkB.js} +1 -1
  501. package/storybook-static/assets/{blocks-Cw5Dm88b.js → blocks-TIr5_lNX.js} +3 -3
  502. package/storybook-static/assets/{check-028VTQ8f.js → check-Du8FuQ6e.js} +1 -1
  503. package/storybook-static/assets/{chevron-down-CjXVIhzi.js → chevron-down-rt2_lu7i.js} +1 -1
  504. package/storybook-static/assets/{chevron-left-CktI1oFP.js → chevron-left-SdIvDBzr.js} +1 -1
  505. package/storybook-static/assets/{chevron-right-CF10QSRI.js → chevron-right-BU-pTQL2.js} +1 -1
  506. package/storybook-static/assets/{chunk-W22LQPXL-C0ehDnCq.js → chunk-W22LQPXL-C5x9oI8u.js} +1 -1
  507. package/storybook-static/assets/{circle-alert-s0HpHvQO.js → circle-alert-C-51hrK9.js} +1 -1
  508. package/storybook-static/assets/{circle-check-C7Lv1fv9.js → circle-check-DZ3A5xhF.js} +1 -1
  509. package/storybook-static/assets/{components-ClxgOUq5.js → components-DLKEXX2n.js} +3 -3
  510. package/storybook-static/assets/contextMenu-Cwftox4w.js +2 -0
  511. package/storybook-static/assets/{dom-DBd_DWF8.js → dom-D9_dPJ4G.js} +1 -1
  512. package/storybook-static/assets/{download-B1U5w3LU.js → download-BIHyCgGp.js} +1 -1
  513. package/storybook-static/assets/{floating-ui.react-CyNWkXBV.js → floating-ui.react-bcuT6Qw6.js} +1 -1
  514. package/storybook-static/assets/{foundationApi-CY0sxk8w.js → foundationApi-C5uBuKS6.js} +1 -1
  515. package/storybook-static/assets/{foundationLib-BCpSUA25.js → foundationLib-DRvN1n2m.js} +1 -1
  516. package/storybook-static/assets/{hooks-DjR-EyBl.js → hooks-DovKTAOG.js} +1 -1
  517. package/storybook-static/assets/iframe-CxmZ1iUO.js +1 -0
  518. package/storybook-static/assets/{iframe-woVbsQH3.js → iframe-DfqtMMgG.js} +4 -4
  519. package/storybook-static/assets/{info-DKbXBIbQ.js → info-CgVG4e4u.js} +1 -1
  520. package/storybook-static/assets/{odata-CMCuN2Rx.js → odata-BGOCt2tD.js} +1 -1
  521. package/storybook-static/assets/{odataStoryFixtures-a4Q2PLas.js → odataStoryFixtures--hE0dv-U.js} +1 -1
  522. package/storybook-static/assets/{react-D3CyilRt.js → react-CZ1I4PcW.js} +1 -1
  523. package/storybook-static/assets/{refresh-cw-DXEJelAO.js → refresh-cw-CGuUzrYs.js} +1 -1
  524. package/storybook-static/assets/{settings-2-CKbiQBX8.js → settings-2-BnIPgWLg.js} +1 -1
  525. package/storybook-static/assets/sortable-CSXMP4VV.js +1 -0
  526. package/storybook-static/assets/{syntaxhighlighter-QEQV7K2Y-CLptde2b.js → syntaxhighlighter-QEQV7K2Y-BXIJBARj.js} +1 -1
  527. package/storybook-static/assets/{trash-2-CPWRIQlJ.js → trash-2-25yeOC8e.js} +1 -1
  528. package/storybook-static/assets/{triangle-alert-XjzWCHp5.js → triangle-alert-0L7_o0IU.js} +1 -1
  529. package/storybook-static/assets/{ui-FA-1R8mO.css → ui-Bpz_yxm8.css} +1 -1
  530. package/storybook-static/assets/{uiClasses-DNnVkKPr.js → uiClasses-Bar5W7-L.js} +1 -1
  531. package/storybook-static/assets/{useODataSelectBase-ZGFa3pdT.js → useODataSelectBase-D9KnZAJ2.js} +1 -1
  532. package/storybook-static/assets/{useODataTreeData-DAdLowou.js → useODataTreeData-BRlsCagQ.js} +1 -1
  533. package/storybook-static/assets/usePickerQuery-B05uUMJ9.js +1 -0
  534. package/storybook-static/assets/usePickerTriggerController-YWagu6f6.js +6 -0
  535. package/storybook-static/assets/{x-D2Q9PGsq.js → x-i4zUW10Y.js} +1 -1
  536. package/storybook-static/iframe.html +2 -2
  537. package/storybook-static/index.json +1 -1
  538. package/storybook-static/project.json +1 -1
  539. package/dist/chunks/CalendarView-CwbPJG2Y.js.map +0 -1
  540. package/dist/chunks/button-D7GAU2Wa.js +0 -72
  541. package/dist/chunks/button-D7GAU2Wa.js.map +0 -1
  542. package/dist/chunks/context-menu-BQePxRpu.js +0 -532
  543. package/dist/chunks/context-menu-BQePxRpu.js.map +0 -1
  544. package/dist/chunks/flex-DtXK7OM4.js +0 -207
  545. package/dist/chunks/flex-DtXK7OM4.js.map +0 -1
  546. package/dist/chunks/grid-dI94AAbi.js.map +0 -1
  547. package/dist/chunks/misc-CGQOXXCy.js.map +0 -1
  548. package/dist/chunks/modal-febBsMyR.js.map +0 -1
  549. package/dist/chunks/picker-BA6okKnz.js.map +0 -1
  550. package/dist/chunks/popover-yl5DVe06.js +0 -245
  551. package/dist/chunks/popover-yl5DVe06.js.map +0 -1
  552. package/dist/chunks/select-DblNSc5H.js.map +0 -1
  553. package/dist/chunks/separator-CIqnk2z9.js +0 -15
  554. package/dist/chunks/separator-CIqnk2z9.js.map +0 -1
  555. package/storybook-static/assets/CalendarView-Dz8cY1fo.js +0 -1
  556. package/storybook-static/assets/ContextMenu-XS7B8QUC.js +0 -1
  557. package/storybook-static/assets/ContextMenu.stories-Dp2t2BZa.js +0 -37
  558. package/storybook-static/assets/CustomOptionButton-DNd0GDWp.js +0 -1
  559. package/storybook-static/assets/Detail.stories-CXg_w4qM.js +0 -56
  560. package/storybook-static/assets/DisclosureGroup-JNnTj18G.js +0 -2
  561. package/storybook-static/assets/DropdownMenu-xjOtBneA.js +0 -1
  562. package/storybook-static/assets/Flex.stories-CCVNsX23.js +0 -300
  563. package/storybook-static/assets/FlexContainer-BWyPlTMB.js +0 -1
  564. package/storybook-static/assets/FloatingPopover-D6tO24aO.js +0 -1
  565. package/storybook-static/assets/FormattedTableCell-CDaDfaXy.js +0 -15
  566. package/storybook-static/assets/Listbox-3Npc4PI_.js +0 -1
  567. package/storybook-static/assets/Modal-Ddmc8-2-.js +0 -1
  568. package/storybook-static/assets/MultiSelect-BkLCM22R.js +0 -2
  569. package/storybook-static/assets/MultiSelect-DI_UD1B-.css +0 -1
  570. package/storybook-static/assets/NoData-bUonNuRR.js +0 -1
  571. package/storybook-static/assets/NotificationsHost-CrLL4WK9.js +0 -44
  572. package/storybook-static/assets/NotificationsHost.stories-Ci2q0W9-.js +0 -29
  573. package/storybook-static/assets/OneStepScroller-B_IRz2Rw.js +0 -5
  574. package/storybook-static/assets/Option-fRoOLqLF.js +0 -10
  575. package/storybook-static/assets/OptionButton--hnpJ-88.js +0 -1
  576. package/storybook-static/assets/PickerTriggerActions-BDGEQPvP.js +0 -1
  577. package/storybook-static/assets/Popover-BYO0DlBg.js +0 -45
  578. package/storybook-static/assets/Popover-Byy9_Twt.js +0 -2
  579. package/storybook-static/assets/Popover.stories-8RhemIQg.js +0 -47
  580. package/storybook-static/assets/RadioButton-DMn-soQD.js +0 -1
  581. package/storybook-static/assets/Scrollable-BI3OE8gc.js +0 -1
  582. package/storybook-static/assets/Select-1MNiFkxm.js +0 -12
  583. package/storybook-static/assets/Slider-DbiDvmoV.js +0 -1
  584. package/storybook-static/assets/SliderInput-CzYn9gor.js +0 -2
  585. package/storybook-static/assets/Sortable.stories-DFCzTok0.js +0 -44
  586. package/storybook-static/assets/Tabs.stories-BdZilcp2.js +0 -57
  587. package/storybook-static/assets/TreePickerBase-CmFF9pWE.css +0 -1
  588. package/storybook-static/assets/TreePickerBase-Cu2mneBS.js +0 -76
  589. package/storybook-static/assets/contextMenu-CWGju9qn.js +0 -2
  590. package/storybook-static/assets/iframe-Dyd6jnSv.js +0 -1
  591. package/storybook-static/assets/sortable-CXLU2ip-.js +0 -1
  592. package/storybook-static/assets/usePickerQuery-CaO8hXyH.js +0 -1
  593. package/storybook-static/assets/usePickerTriggerController-DWjrt_q_.js +0 -6
  594. /package/storybook-static/assets/{ui.module-CyEEibCu.js → ui.module-0uniSGT-.js} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-menu-CrSXJxQL.js","names":[],"sources":["../../src/context-menu/components/helpers.ts","../../src/context-menu/components/MenuContext.tsx","../../src/context-menu/components/ContextMenuTrigger.tsx","../../src/context-menu/ContextMenu.module.scss","../../src/context-menu/components/MenuContent.tsx","../../src/context-menu/components/MenuGroupLabel.tsx","../../src/context-menu/components/MenuItem.tsx","../../src/context-menu/components/MenuRoot.tsx","../../src/context-menu/components/MenuSeparator.tsx","../../src/context-menu/components/RadialMenuContent.tsx","../../src/context-menu/components/RadialMenuItem.tsx","../../src/context-menu/components/ContextMenu.tsx","../../src/context-menu/components/DropdownMenuTrigger.tsx","../../src/context-menu/components/DropdownMenu.tsx"],"sourcesContent":["import React from \"react\";\n\nexport function assignRef<T>(ref: React.Ref<T> | undefined, value: T) {\n\tif (!ref) return;\n\n\tif (typeof ref === \"function\") {\n\t\tref(value);\n\t\treturn;\n\t}\n\n\t(ref as React.MutableRefObject<T>).current = value;\n}\n\nexport function composeMouseHandlers<T extends HTMLElement>(\n\tuserHandler: ((event: React.MouseEvent<T>) => void) | undefined,\n\tlibraryHandler: (event: React.MouseEvent<T>) => void\n) {\n\treturn (event: React.MouseEvent<T>) => {\n\t\tuserHandler?.(event);\n\t\tif (event.defaultPrevented) return;\n\t\tlibraryHandler(event);\n\t};\n}\n\nexport function composeKeyboardHandlers<T extends HTMLElement>(\n\tuserHandler: ((event: React.KeyboardEvent<T>) => void) | undefined,\n\tlibraryHandler: (event: React.KeyboardEvent<T>) => void\n) {\n\treturn (event: React.KeyboardEvent<T>) => {\n\t\tuserHandler?.(event);\n\t\tif (event.defaultPrevented) return;\n\t\tlibraryHandler(event);\n\t};\n}\n","import { createContext, type CSSProperties, type KeyboardEvent, type MouseEvent, type RefObject, useContext } from \"react\";\n\nimport { type MenuOpenSource, type MenuPoint } from \"@ryuzaki13/react-foundation-lib/context-menu\";\nimport { createMissingContextError } from \"@ryuzaki13/react-foundation-lib/error\";\n\nexport type MenuTriggerMode = \"click\" | \"contextmenu\";\nexport type MenuInitialFocus = \"first\" | \"last\";\n\ninterface MenuContextValue {\n\tmode: MenuTriggerMode;\n\topen: boolean;\n\topenSource: MenuOpenSource | null;\n\tinitialFocus: MenuInitialFocus;\n\tmenuId: string;\n\ttriggerId: string;\n\tanchorPoint: MenuPoint | null;\n\tfloatingStyles: CSSProperties;\n\tfloatingRef: RefObject<HTMLElement | null>;\n\ttriggerRef: RefObject<HTMLElement | null>;\n\tsetFloating: (node: HTMLElement | null) => void;\n\tregisterTriggerElement: (node: HTMLElement | null) => void;\n\tonTriggerClick: (event: MouseEvent<HTMLElement>) => void;\n\tonTriggerContextMenu: (event: MouseEvent<HTMLElement>, triggerElement?: HTMLElement) => void;\n\tonTriggerKeyDown: (event: KeyboardEvent<HTMLElement>, triggerElement?: HTMLElement) => void;\n\tcloseMenu: () => void;\n}\n\nexport const MenuContext = createContext<MenuContextValue | null>(null);\n\nexport function useMenuContext() {\n\tconst context = useContext(MenuContext);\n\tif (!context) {\n\t\tthrow createMissingContextError({\n\t\t\thookName: \"useMenuContext\",\n\t\t\tproviderName: \"MenuRoot\"\n\t\t});\n\t}\n\treturn context;\n}\n","import { cloneElement, type HTMLAttributes, type KeyboardEvent, type MouseEvent, type ReactElement, type Ref } from \"react\";\n\nimport { assignRef } from \"./helpers\";\nimport { useMenuContext } from \"./MenuContext\";\n\nexport interface ContextMenuTriggerProps {\n\tchildren: ReactElement<HTMLAttributes<HTMLElement> & { ref?: Ref<HTMLElement> }>;\n\t/** Позволяет одному ContextMenu обслуживать множество вложенных целей без отдельного floating-ui runtime на каждую строку или ячейку. */\n\tresolveTrigger?: (eventTarget: EventTarget | null) => HTMLElement | null;\n}\n\nexport function ContextMenuTrigger({ children, resolveTrigger }: ContextMenuTriggerProps) {\n\tconst { mode, open, menuId, triggerId, registerTriggerElement, onTriggerContextMenu, onTriggerKeyDown } = useMenuContext();\n\n\tif (mode !== \"contextmenu\") {\n\t\tthrow new Error(\"ContextMenu.Trigger must be used within <ContextMenu>\");\n\t}\n\n\treturn cloneElement(children, {\n\t\tid: children.props.id ?? triggerId,\n\t\tref: (node: HTMLElement | null) => {\n\t\t\tconst childRef = (children.props as { ref?: Ref<HTMLElement> }).ref;\n\t\t\tassignRef(childRef, node);\n\t\t\tregisterTriggerElement(node);\n\t\t},\n\t\ttabIndex: resolveTrigger ? children.props.tabIndex : (children.props.tabIndex ?? 0),\n\t\t\"aria-haspopup\": \"menu\",\n\t\t\"aria-controls\": open ? menuId : undefined,\n\t\t\"aria-keyshortcuts\": children.props[\"aria-keyshortcuts\"] ?? \"Shift+F10\",\n\t\tonContextMenu: (event: MouseEvent<HTMLElement>) => {\n\t\t\tchildren.props.onContextMenu?.(event);\n\t\t\tif (event.defaultPrevented) return;\n\t\t\tconst triggerElement = resolveTrigger ? resolveTrigger(event.target) : event.currentTarget;\n\t\t\tif (triggerElement) onTriggerContextMenu(event, triggerElement);\n\t\t},\n\t\tonKeyDown: (event: KeyboardEvent<HTMLElement>) => {\n\t\t\tchildren.props.onKeyDown?.(event);\n\t\t\tif (event.defaultPrevented) return;\n\t\t\tconst triggerElement = resolveTrigger ? resolveTrigger(event.target) : event.currentTarget;\n\t\t\tif (triggerElement) onTriggerKeyDown(event, triggerElement);\n\t\t}\n\t});\n}\n","@use \"@/styles/mixins\" as *;\n\n.menuPositioner {\n\tz-index: var(--z-dropdown);\n\toutline: none;\n}\n\n.menuOptions {\n\t--menu-max-height: calc(100dvh - var(--space-xl));\n\t--menu-min-width: 14em;\n\t--menu-max-width: min(24em, calc(100dvw - var(--space-xl)));\n\n\tmin-width: var(--menu-min-width);\n\tmax-width: var(--menu-max-width);\n\tmax-height: var(--menu-max-height);\n}\n\n.radialPanel {\n\tposition: fixed;\n\twidth: var(--radial-panel-size);\n\theight: var(--radial-panel-size);\n\tz-index: var(--z-context-menu, var(--z-dropdown));\n\toutline: none;\n\tpointer-events: none;\n}\n\n.radialRing {\n\tposition: absolute;\n\tinset: calc(var(--radial-item-size) / 2);\n\tborder: var(--border);\n\tborder-radius: 50%;\n\tbackground:\n\t\tradial-gradient(circle, color-mix(in srgb, var(--surface-0) 96%, transparent) 0 36%, transparent 37%),\n\t\tcolor-mix(in srgb, var(--surface-0) 88%, transparent);\n\tbox-shadow: var(--shadow-md);\n\tpointer-events: none;\n}\n\n.radialCenterButton {\n\tposition: absolute;\n\tleft: 50%;\n\ttop: 50%;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: calc(var(--radial-item-size) * 0.72);\n\theight: calc(var(--radial-item-size) * 0.72);\n\tpadding: var(--space-xs);\n\ttransform: translate(-50%, -50%);\n\tborder: var(--border);\n\tborder-radius: 50%;\n\tbackground-color: var(--surface-0);\n\tcolor: var(--content-0);\n\tbox-shadow: var(--shadow-sm);\n\tpointer-events: auto;\n\ttransition:\n\t\tbackground-color var(--transition-fast) ease,\n\t\tborder-color var(--transition-fast) ease,\n\t\tcolor var(--transition-fast) ease,\n\t\ttransform var(--transition-fast) ease;\n\n\t&:focus {\n\t\tbackground-color: var(--surface-1);\n\t\tborder-color: var(--border-1);\n\t}\n\n\t@include hover(true) {\n\t\tbackground-color: var(--accent-fill);\n\t\tcolor: var(--accent-text);\n\t\tcursor: pointer;\n\t\ttransform: translate(-50%, -50%) scale(1.06);\n\t}\n}\n\n.radialCenterButtonText {\n\tmax-width: 100%;\n\toverflow: hidden;\n\ttext-align: center;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n\tfont-size: var(--font-size-sm);\n\tline-height: 1.1;\n}\n\n.radialItems {\n\tposition: absolute;\n\tinset: 0;\n\tpointer-events: none;\n}\n\n.radialItemSlot {\n\tposition: absolute;\n\tleft: 50%;\n\ttop: 50%;\n\twidth: var(--radial-item-size);\n\theight: var(--radial-item-size);\n\ttransform: rotate(var(--radial-item-angle)) translate(var(--radial-radius)) rotate(calc(var(--radial-item-angle) * -1))\n\t\ttranslate(-50%, -50%);\n\tpointer-events: none;\n}\n\n.radialItem {\n\tdisplay: grid;\n\tgrid-template-rows: 1fr auto;\n\talign-items: center;\n\tjustify-items: center;\n\tgap: 0.15rem;\n\twidth: 100%;\n\theight: 100%;\n\tpadding: var(--space-xs);\n\tborder: var(--border);\n\tborder-radius: 50%;\n\tbackground-color: var(--surface-0);\n\tcolor: var(--content-0);\n\tbox-shadow: var(--shadow-sm);\n\tpointer-events: auto;\n\ttransition:\n\t\tbackground-color var(--transition-fast) ease,\n\t\tborder-color var(--transition-fast) ease,\n\t\tcolor var(--transition-fast) ease,\n\t\ttransform var(--transition-fast) ease;\n\n\t&:focus {\n\t\tbackground-color: var(--surface-1);\n\t\tborder-color: var(--border-1);\n\t}\n\n\t&:disabled,\n\t&[aria-disabled=\"true\"] {\n\t\tcursor: default;\n\t\tcolor: var(--content-2);\n\t\topacity: 0.52;\n\t\tpointer-events: none;\n\t}\n\n\t@include hover(true) {\n\t\tbackground-color: var(--accent-fill);\n\t\tcolor: var(--accent-text);\n\t\tcursor: pointer;\n\t\ttransform: scale(1.06);\n\t}\n}\n\n.radialItemIcon {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tmin-width: var(--space-md);\n\tmin-height: var(--space-md);\n\n\t> svg {\n\t\twidth: var(--space-md);\n\t\theight: var(--space-md);\n\t}\n}\n\n.radialItemText {\n\tmax-width: 100%;\n\toverflow: hidden;\n\ttext-align: center;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n\tfont-size: var(--font-size-sm);\n}\n","import { type KeyboardEvent, type ReactNode, type RefObject, useCallback, useEffect } from \"react\";\n\nimport { useClickOutside, useEscapeDismiss, useOverlayFocus } from \"@ryuzaki13/react-foundation-lib/dom\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { createPortal } from \"react-dom\";\n\nimport { PickerOptions } from \"../../picker\";\nimport styles from \"../ContextMenu.module.scss\";\n\nimport { useMenuContext } from \"./MenuContext\";\n\nexport interface MenuContentProps {\n\tchildren: ReactNode | ((ctx: { closeMenu: () => void }) => ReactNode);\n\tclassName?: string;\n\t\"aria-label\"?: string;\n\t\"aria-labelledby\"?: string;\n\tcloseOnOutside?: boolean;\n\tcloseOnEscape?: boolean;\n\tdisableOutsideClick?: boolean;\n\trestoreFocus?: boolean;\n}\n\nexport function MenuContent({\n\tchildren,\n\tclassName,\n\t\"aria-label\": ariaLabel,\n\t\"aria-labelledby\": ariaLabelledBy,\n\tcloseOnOutside = true,\n\tcloseOnEscape = true,\n\tdisableOutsideClick = false,\n\trestoreFocus = true\n}: MenuContentProps) {\n\tconst {\n\t\topen,\n\t\topenSource,\n\t\tinitialFocus,\n\t\tmenuId,\n\t\ttriggerId,\n\t\tanchorPoint,\n\t\tfloatingStyles,\n\t\tfloatingRef,\n\t\ttriggerRef,\n\t\tsetFloating,\n\t\tcloseMenu\n\t} = useMenuContext();\n\n\tconst getNavigableItems = useCallback(() => {\n\t\tconst floatingElement = floatingRef.current;\n\t\tif (!floatingElement) return [];\n\n\t\treturn Array.from(floatingElement.querySelectorAll<HTMLElement>('[data-menu-item=\"true\"]:not([data-disabled=\"true\"])'));\n\t}, [floatingRef]);\n\n\tuseOverlayFocus<HTMLElement>({\n\t\tactive: open,\n\t\tinitialFocus: (container) => {\n\t\t\tconst items = getNavigableItems();\n\t\t\treturn (initialFocus === \"last\" ? items[items.length - 1] : items[0]) ?? container;\n\t\t},\n\t\trestoreFocus,\n\t\trestoreFocusTarget: () => triggerRef.current,\n\t\tcontainerRef: floatingRef\n\t});\n\n\tuseEffect(() => {\n\t\tif (!open || openSource !== \"contextmenu\" || !anchorPoint) return;\n\n\t\tconst rafId = window.requestAnimationFrame(() => {\n\t\t\tconst focusTarget = getNavigableItems()[0] ?? floatingRef.current;\n\t\t\tfocusTarget?.focus({ preventScroll: true });\n\t\t});\n\n\t\treturn () => window.cancelAnimationFrame(rafId);\n\t}, [open, openSource, anchorPoint, getNavigableItems, floatingRef]);\n\n\tuseEscapeDismiss({\n\t\tactive: open,\n\t\tenabled: closeOnEscape,\n\t\tonDismiss: closeMenu,\n\t\tcontainerRef: floatingRef\n\t});\n\n\tconst outsideClose = useCallback(() => {\n\t\tif (!open || disableOutsideClick) return;\n\t\tif (closeOnOutside) {\n\t\t\tcloseMenu();\n\t\t}\n\t}, [open, disableOutsideClick, closeOnOutside, closeMenu]);\n\n\tuseClickOutside([floatingRef as RefObject<HTMLElement>, triggerRef as RefObject<HTMLElement>], outsideClose);\n\n\tconst onMenuKeyDown = useCallback(\n\t\t(event: KeyboardEvent<HTMLElement>) => {\n\t\t\tif (event.key === \"Tab\") {\n\t\t\t\t// Возвращаем точку отсчёта в tab-порядок до browser default action:\n\t\t\t\t// так Tab и Shift+Tab продолжают обход относительно trigger, а не portal в конце body.\n\t\t\t\ttriggerRef.current?.focus({ preventScroll: true });\n\t\t\t\tcloseMenu();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst items = getNavigableItems();\n\t\t\tif (items.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst activeElement = document.activeElement as HTMLElement | null;\n\t\t\tconst currentIndex = activeElement ? items.indexOf(activeElement) : -1;\n\n\t\t\tif (event.key === \"ArrowDown\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst nextIndex = currentIndex >= 0 ? (currentIndex + 1) % items.length : 0;\n\t\t\t\titems[nextIndex]?.focus();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key === \"ArrowUp\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst nextIndex = currentIndex >= 0 ? (currentIndex - 1 + items.length) % items.length : items.length - 1;\n\t\t\t\titems[nextIndex]?.focus();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key === \"Home\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\titems[0]?.focus();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key === \"End\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\titems[items.length - 1]?.focus();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key.length === 1 && event.key !== \" \" && !event.altKey && !event.ctrlKey && !event.metaKey) {\n\t\t\t\tconst query = event.key.toLocaleLowerCase();\n\t\t\t\tconst nextItems = [...items.slice(currentIndex + 1), ...items.slice(0, currentIndex + 1)];\n\t\t\t\tconst match = nextItems.find((item) => item.textContent?.trim().toLocaleLowerCase().startsWith(query));\n\t\t\t\tif (match) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tmatch.focus();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[getNavigableItems, triggerRef, closeMenu]\n\t);\n\n\tif (typeof document === \"undefined\") return null;\n\n\treturn createPortal(\n\t\t<AnimatePresence>\n\t\t\t{open && (\n\t\t\t\t<motion.div\n\t\t\t\t\tid={menuId}\n\t\t\t\t\tref={setFloating}\n\t\t\t\t\tstyle={floatingStyles}\n\t\t\t\t\trole=\"menu\"\n\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\taria-labelledby={ariaLabel ? undefined : (ariaLabelledBy ?? triggerId)}\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\tclassName={styles.menuPositioner}\n\t\t\t\t\tonKeyDown={onMenuKeyDown}\n\t\t\t\t\tinitial={{ opacity: 0, scale: 0.96, y: -2 }}\n\t\t\t\t\tanimate={{ opacity: 1, scale: 1, y: 0 }}\n\t\t\t\t\texit={{ opacity: 0, scale: 0.96, y: -2 }}\n\t\t\t\t\ttransition={{ duration: 0.14, ease: \"easeOut\" }}>\n\t\t\t\t\t<PickerOptions className={cn(styles.menuOptions, className)}>\n\t\t\t\t\t\t{typeof children === \"function\" ? children({ closeMenu }) : children}\n\t\t\t\t\t</PickerOptions>\n\t\t\t\t</motion.div>\n\t\t\t)}\n\t\t</AnimatePresence>,\n\t\tdocument.body\n\t);\n}\n","import React from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport uiStyles from \"../../ui.module.scss\";\n\nexport interface MenuGroupLabelProps {\n\tchildren: React.ReactNode;\n\tclassName?: string;\n}\n\nexport function MenuGroupLabel({ children, className }: MenuGroupLabelProps) {\n\treturn <div className={cn(uiStyles.uiPopupGroupLabel, className)}>{children}</div>;\n}\n","import { type HTMLAttributeAnchorTarget, type MouseEvent, type ReactNode, useCallback } from \"react\";\n\nimport { Option, OptionButton, OptionLink } from \"../../option\";\n\nimport { useMenuContext } from \"./MenuContext\";\n\nexport interface MenuItemProps {\n\tchildren: string;\n\ticon?: ReactNode;\n\thotKey?: string;\n\tclassName?: string;\n\tdisabled?: boolean;\n\thref?: string;\n\ttarget?: HTMLAttributeAnchorTarget;\n\trel?: string;\n\tcloseOnSelect?: boolean;\n\tonSelect?: (event: MouseEvent<HTMLElement>) => void;\n}\n\nexport function MenuItem({\n\tchildren,\n\ticon,\n\thotKey,\n\tclassName,\n\tdisabled,\n\thref,\n\ttarget,\n\trel,\n\tcloseOnSelect = true,\n\tonSelect\n}: MenuItemProps) {\n\tconst { closeMenu } = useMenuContext();\n\n\tconst handleClick = useCallback(\n\t\t(event: React.MouseEvent<HTMLElement>) => {\n\t\t\tif (disabled) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tonSelect?.(event);\n\t\t\tif (event.defaultPrevented) return;\n\n\t\t\tif (closeOnSelect) {\n\t\t\t\tcloseMenu();\n\t\t\t}\n\t\t},\n\t\t[disabled, onSelect, closeOnSelect, closeMenu]\n\t);\n\n\tif (href) {\n\t\treturn (\n\t\t\t<Option disabled={disabled} className={className}>\n\t\t\t\t<OptionLink\n\t\t\t\t\ticon={icon}\n\t\t\t\t\thotkey={hotKey}\n\t\t\t\t\ttext={children}\n\t\t\t\t\thref={href}\n\t\t\t\t\ttarget={target}\n\t\t\t\t\trel={rel}\n\t\t\t\t\trole=\"menuitem\"\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\taria-disabled={disabled}\n\t\t\t\t\tdata-menu-item=\"true\"\n\t\t\t\t\tdata-disabled={disabled ? \"true\" : undefined}\n\t\t\t\t\tdata-ui=\"context-menu-item\"\n\t\t\t\t\tdata-action=\"select-context-menu-item\"\n\t\t\t\t\tonKeyDown={(event) => {\n\t\t\t\t\t\tif (event.key !== \" \") return;\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tevent.currentTarget.click();\n\t\t\t\t\t}}\n\t\t\t\t\tonClick={handleClick as React.MouseEventHandler<HTMLAnchorElement>}\n\t\t\t\t/>\n\t\t\t</Option>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Option disabled={disabled} className={className}>\n\t\t\t<OptionButton\n\t\t\t\ticon={icon}\n\t\t\t\thotkey={hotKey}\n\t\t\t\ttext={children}\n\t\t\t\trole=\"menuitem\"\n\t\t\t\ttabIndex={-1}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tdata-menu-item=\"true\"\n\t\t\t\tdata-disabled={disabled ? \"true\" : undefined}\n\t\t\t\tdata-ui=\"context-menu-item\"\n\t\t\t\tdata-action=\"select-context-menu-item\"\n\t\t\t\tonClick={handleClick as React.MouseEventHandler<HTMLButtonElement>}\n\t\t\t/>\n\t\t</Option>\n\t);\n}\n","import { type KeyboardEvent, type MouseEvent, type ReactNode, useCallback, useId, useMemo, useRef, useState } from \"react\";\n\nimport { autoUpdate, flip, offset, type Placement, shift, useFloating } from \"@floating-ui/react\";\nimport {\n\tcloseMenu,\n\tcreateVirtualAnchor,\n\tgetMenuPointFromEvent,\n\tgetMenuPointFromRect,\n\tinitialMenuState,\n\topenMenu\n} from \"@ryuzaki13/react-foundation-lib/context-menu\";\n\nimport { MenuContext, type MenuInitialFocus, type MenuTriggerMode } from \"./MenuContext\";\n\ninterface MenuRootProps {\n\tchildren: ReactNode;\n\tmode: MenuTriggerMode;\n\tplacement?: Placement;\n\topen?: boolean;\n\tdefaultOpen?: boolean;\n\tonOpenChange?: (open: boolean) => void;\n}\n\nexport function MenuRoot({\n\tchildren,\n\tmode,\n\tplacement = mode === \"click\" ? \"bottom-start\" : \"right-start\",\n\topen: controlledOpen,\n\tdefaultOpen,\n\tonOpenChange\n}: MenuRootProps) {\n\tconst generatedId = useId();\n\tconst menuId = `${generatedId}-menu`;\n\tconst defaultTriggerId = `${generatedId}-trigger`;\n\tconst [menuState, setMenuState] = useState(initialMenuState);\n\tconst [initialFocus, setInitialFocus] = useState<MenuInitialFocus>(\"first\");\n\tconst [triggerId, setTriggerId] = useState(defaultTriggerId);\n\tconst [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen ?? false);\n\tconst isControlled = controlledOpen !== undefined;\n\tconst open = isControlled ? controlledOpen : uncontrolledOpen;\n\tconst triggerElementRef = useRef<HTMLElement | null>(null);\n\tconst registeredTriggerElementRef = useRef<HTMLElement | null>(null);\n\n\tconst { refs, floatingStyles, update } = useFloating({\n\t\tplacement,\n\t\tstrategy: mode === \"contextmenu\" ? \"fixed\" : \"absolute\",\n\t\ttransform: false,\n\t\tmiddleware: [offset(6), flip({ padding: 8 }), shift({ padding: 8 })],\n\t\twhileElementsMounted: autoUpdate\n\t});\n\n\tconst setOpen = useCallback(\n\t\t(nextOpen: boolean) => {\n\t\t\tif (!isControlled) {\n\t\t\t\tsetUncontrolledOpen(nextOpen);\n\t\t\t}\n\t\t\tonOpenChange?.(nextOpen);\n\t\t\tif (!nextOpen) {\n\t\t\t\tsetMenuState((state) => closeMenu(state));\n\t\t\t}\n\t\t},\n\t\t[isControlled, onOpenChange]\n\t);\n\n\tconst closeMenuHandler = useCallback(() => {\n\t\tsetOpen(false);\n\t}, [setOpen]);\n\n\tconst openAtElement = useCallback(\n\t\t(element: HTMLElement, source: \"click\" | \"keyboard\", nextInitialFocus: MenuInitialFocus = \"first\") => {\n\t\t\trefs.setReference(element);\n\t\t\tsetInitialFocus(nextInitialFocus);\n\t\t\tsetMenuState(\n\t\t\t\topenMenu({\n\t\t\t\t\tsource,\n\t\t\t\t\tanchor: {\n\t\t\t\t\t\ttype: \"element\",\n\t\t\t\t\t\telement\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t\tsetOpen(true);\n\t\t},\n\t\t[refs, setOpen]\n\t);\n\n\tconst openAtPoint = useCallback(\n\t\t(point: { x: number; y: number }, source: \"contextmenu\" | \"keyboard\", contextElement?: HTMLElement | null) => {\n\t\t\trefs.setReference(createVirtualAnchor(point, contextElement));\n\t\t\tsetInitialFocus(\"first\");\n\t\t\tsetMenuState(\n\t\t\t\topenMenu({\n\t\t\t\t\tsource,\n\t\t\t\t\tanchor: {\n\t\t\t\t\t\ttype: \"point\",\n\t\t\t\t\t\tpoint,\n\t\t\t\t\t\tcontextElement\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t\tsetOpen(true);\n\t\t\tupdate();\n\t\t},\n\t\t[refs, setOpen, update]\n\t);\n\n\tconst registerTriggerElement = useCallback(\n\t\t(node: HTMLElement | null) => {\n\t\t\tconst previous = registeredTriggerElementRef.current;\n\t\t\tregisteredTriggerElementRef.current = node;\n\t\t\tif (node) {\n\t\t\t\tsetTriggerId(node.id || defaultTriggerId);\n\t\t\t}\n\t\t\t// Повторный ref-callback общего контейнера не должен заменить делегированную цель,\n\t\t\t// иначе после закрытия фокус вернётся на всю таблицу вместо исходной ячейки.\n\t\t\tif (triggerElementRef.current === null || triggerElementRef.current === previous) {\n\t\t\t\ttriggerElementRef.current = node;\n\t\t\t}\n\t\t\tif (mode === \"click\") {\n\t\t\t\trefs.setReference(node);\n\t\t\t}\n\t\t},\n\t\t[defaultTriggerId, mode, refs]\n\t);\n\n\tconst onTriggerClick = useCallback(\n\t\t(event: MouseEvent<HTMLElement>) => {\n\t\t\tif (mode !== \"click\") return;\n\t\t\tconst element = event.currentTarget;\n\n\t\t\tif (open && menuState.anchor?.type === \"element\" && menuState.anchor.element === element) {\n\t\t\t\tcloseMenuHandler();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\topenAtElement(element, \"click\");\n\t\t},\n\t\t[mode, open, menuState.anchor, closeMenuHandler, openAtElement]\n\t);\n\n\tconst onTriggerContextMenu = useCallback(\n\t\t(event: MouseEvent<HTMLElement>, triggerElement = event.currentTarget) => {\n\t\t\tif (mode !== \"contextmenu\") return;\n\t\t\tevent.preventDefault();\n\n\t\t\tconst point = getMenuPointFromEvent(event);\n\t\t\ttriggerElementRef.current = triggerElement;\n\t\t\topenAtPoint(point, \"contextmenu\", triggerElement);\n\t\t},\n\t\t[mode, openAtPoint]\n\t);\n\n\tconst onTriggerKeyDown = useCallback(\n\t\t(event: KeyboardEvent<HTMLElement>, triggerElement = event.currentTarget) => {\n\t\t\tif (mode === \"click\" && (event.key === \"ArrowDown\" || event.key === \"ArrowUp\")) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\ttriggerElementRef.current = triggerElement;\n\t\t\t\topenAtElement(triggerElement, \"keyboard\", event.key === \"ArrowUp\" ? \"last\" : \"first\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst isContextMenuKeyboardOpen = event.key === \"ContextMenu\" || (event.shiftKey && event.key === \"F10\");\n\t\t\tif (!isContextMenuKeyboardOpen) return;\n\n\t\t\tevent.preventDefault();\n\t\t\ttriggerElementRef.current = triggerElement;\n\n\t\t\tif (mode === \"click\") {\n\t\t\t\topenAtElement(triggerElement, \"keyboard\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst point = getMenuPointFromRect(triggerElement.getBoundingClientRect());\n\t\t\topenAtPoint(point, \"keyboard\", triggerElement);\n\t\t},\n\t\t[mode, openAtElement, openAtPoint]\n\t);\n\n\tconst visible = open && menuState.anchor !== null;\n\tconst anchorPoint = useMemo(() => {\n\t\tif (!menuState.anchor) return null;\n\n\t\tif (menuState.anchor.type === \"point\") {\n\t\t\treturn menuState.anchor.point;\n\t\t}\n\n\t\tconst rect = menuState.anchor.element.getBoundingClientRect();\n\t\treturn getMenuPointFromRect(rect);\n\t}, [menuState.anchor]);\n\n\tconst value = useMemo(\n\t\t() => ({\n\t\t\tmode,\n\t\t\topen: visible,\n\t\t\topenSource: menuState.source,\n\t\t\tinitialFocus,\n\t\t\tmenuId,\n\t\t\ttriggerId,\n\t\t\tanchorPoint,\n\t\t\tfloatingStyles,\n\t\t\tfloatingRef: refs.floating,\n\t\t\ttriggerRef: triggerElementRef,\n\t\t\tsetFloating: refs.setFloating,\n\t\t\tregisterTriggerElement,\n\t\t\tonTriggerClick,\n\t\t\tonTriggerContextMenu,\n\t\t\tonTriggerKeyDown,\n\t\t\tcloseMenu: closeMenuHandler\n\t\t}),\n\t\t[\n\t\t\tmode,\n\t\t\tvisible,\n\t\t\tmenuState.source,\n\t\t\tinitialFocus,\n\t\t\tmenuId,\n\t\t\ttriggerId,\n\t\t\tanchorPoint,\n\t\t\tfloatingStyles,\n\t\t\trefs.floating,\n\t\t\trefs.setFloating,\n\t\t\tregisterTriggerElement,\n\t\t\tonTriggerClick,\n\t\t\tonTriggerContextMenu,\n\t\t\tonTriggerKeyDown,\n\t\t\tcloseMenuHandler\n\t\t]\n\t);\n\n\treturn <MenuContext.Provider value={value}>{children}</MenuContext.Provider>;\n}\n","import { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport uiStyles from \"../../ui.module.scss\";\n\nexport interface MenuSeparatorProps {\n\tclassName?: string;\n}\n\nexport function MenuSeparator({ className }: MenuSeparatorProps) {\n\treturn <div role=\"separator\" className={cn(uiStyles.uiPopupOptionSeparator, className)} />;\n}\n","import { Children, type CSSProperties, type KeyboardEvent, type ReactNode, type RefObject, useCallback, useEffect, useMemo } from \"react\";\n\nimport { useClickOutside, useEscapeDismiss, useOverlayFocus } from \"@ryuzaki13/react-foundation-lib/dom\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { createPortal } from \"react-dom\";\n\nimport styles from \"../ContextMenu.module.scss\";\n\nimport { useMenuContext } from \"./MenuContext\";\n\nexport interface RadialMenuContentProps {\n\tchildren: ReactNode | ((ctx: { closeMenu: () => void }) => ReactNode);\n\tclassName?: string;\n\t\"aria-label\"?: string;\n\t\"aria-labelledby\"?: string;\n\tcloseOnOutside?: boolean;\n\tcloseOnEscape?: boolean;\n\tdisableOutsideClick?: boolean;\n\trestoreFocus?: boolean;\n\tradius?: number;\n\titemSize?: number;\n\tcloseLabel?: string;\n}\n\nfunction clamp(value: number, min: number, max: number) {\n\tif (max < min) return min;\n\treturn Math.min(Math.max(value, min), max);\n}\n\nexport function RadialMenuContent({\n\tchildren,\n\tclassName,\n\t\"aria-label\": ariaLabel,\n\t\"aria-labelledby\": ariaLabelledBy,\n\tcloseOnOutside = true,\n\tcloseOnEscape = true,\n\tdisableOutsideClick = false,\n\trestoreFocus = true,\n\tradius = 76,\n\titemSize = 64,\n\tcloseLabel = \"Закрыть\"\n}: RadialMenuContentProps) {\n\tconst { open, menuId, triggerId, anchorPoint, floatingRef, triggerRef, setFloating, closeMenu } = useMenuContext();\n\n\tconst resolvedChildren = typeof children === \"function\" ? children({ closeMenu }) : children;\n\tconst itemNodes = useMemo(() => Children.toArray(resolvedChildren), [resolvedChildren]);\n\tconst itemCount = itemNodes.length;\n\tconst panelSize = radius * 2 + itemSize;\n\n\tconst panelPoint = useMemo(() => {\n\t\tif (typeof window === \"undefined\" || !anchorPoint) return null;\n\n\t\t// Радиальное меню центрируется на точке вызова, но не выходит за границы viewport.\n\t\tconst safeOffset = panelSize / 2 + 8;\n\t\treturn {\n\t\t\tx: clamp(anchorPoint.x, safeOffset, window.innerWidth - safeOffset),\n\t\t\ty: clamp(anchorPoint.y, safeOffset, window.innerHeight - safeOffset)\n\t\t};\n\t}, [anchorPoint, panelSize]);\n\n\tconst getNavigableItems = useCallback(() => {\n\t\tconst floatingElement = floatingRef.current;\n\t\tif (!floatingElement) return [];\n\n\t\treturn Array.from(floatingElement.querySelectorAll<HTMLElement>('[data-menu-item=\"true\"]:not([data-disabled=\"true\"])'));\n\t}, [floatingRef]);\n\n\tuseOverlayFocus<HTMLElement>({\n\t\tactive: open,\n\t\tinitialFocus: (container) => getNavigableItems()[0] ?? container,\n\t\trestoreFocus,\n\t\trestoreFocusTarget: () => triggerRef.current,\n\t\tcontainerRef: floatingRef\n\t});\n\n\tuseEffect(() => {\n\t\tif (!open || !anchorPoint) return;\n\n\t\tlet rafId = 0;\n\n\t\t/**\n\t\t * Повторный правый клик при уже открытом меню меняет только якорь, поэтому общий\n\t\t * эффект начального фокуса не перезапускается. Возвращаем фокус в меню явно.\n\t\t */\n\t\tconst focusMenuOnReposition = () => {\n\t\t\tconst focusTarget = getNavigableItems()[0] ?? floatingRef.current;\n\t\t\tfocusTarget?.focus();\n\t\t};\n\n\t\trafId = window.requestAnimationFrame(focusMenuOnReposition);\n\t\treturn () => window.cancelAnimationFrame(rafId);\n\t}, [open, anchorPoint, getNavigableItems, floatingRef]);\n\n\tuseEscapeDismiss({\n\t\tactive: open,\n\t\tenabled: closeOnEscape,\n\t\tonDismiss: closeMenu,\n\t\tcontainerRef: floatingRef\n\t});\n\n\tconst outsideClose = useCallback(() => {\n\t\tif (!open || disableOutsideClick) return;\n\t\tif (closeOnOutside) {\n\t\t\tcloseMenu();\n\t\t}\n\t}, [open, disableOutsideClick, closeOnOutside, closeMenu]);\n\n\tuseClickOutside([floatingRef as RefObject<HTMLElement>, triggerRef as RefObject<HTMLElement>], outsideClose);\n\n\tconst onMenuKeyDown = useCallback(\n\t\t(event: KeyboardEvent<HTMLElement>) => {\n\t\t\tif (event.key === \"Tab\") {\n\t\t\t\t// Portal расположен в конце body, поэтому перед browser default action\n\t\t\t\t// продолжаем tab-порядок от исходного trigger.\n\t\t\t\ttriggerRef.current?.focus({ preventScroll: true });\n\t\t\t\tcloseMenu();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst items = getNavigableItems();\n\t\t\tif (items.length === 0) return;\n\n\t\t\tconst activeElement = document.activeElement as HTMLElement | null;\n\t\t\tconst currentIndex = activeElement ? items.indexOf(activeElement) : -1;\n\n\t\t\tif (event.key === \"ArrowRight\" || event.key === \"ArrowDown\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst nextIndex = currentIndex >= 0 ? (currentIndex + 1) % items.length : 0;\n\t\t\t\titems[nextIndex]?.focus();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key === \"ArrowLeft\" || event.key === \"ArrowUp\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst nextIndex = currentIndex >= 0 ? (currentIndex - 1 + items.length) % items.length : items.length - 1;\n\t\t\t\titems[nextIndex]?.focus();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key === \"Home\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\titems[0]?.focus();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key === \"End\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\titems[items.length - 1]?.focus();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key.length === 1 && event.key !== \" \" && !event.altKey && !event.ctrlKey && !event.metaKey) {\n\t\t\t\tconst query = event.key.toLocaleLowerCase();\n\t\t\t\tconst nextItems = [...items.slice(currentIndex + 1), ...items.slice(0, currentIndex + 1)];\n\t\t\t\tconst match = nextItems.find((item) => item.textContent?.trim().toLocaleLowerCase().startsWith(query));\n\t\t\t\tif (match) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tmatch.focus();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[getNavigableItems, triggerRef, closeMenu]\n\t);\n\n\tif (typeof document === \"undefined\") return null;\n\n\treturn createPortal(\n\t\t<AnimatePresence>\n\t\t\t{open && panelPoint && (\n\t\t\t\t<motion.div\n\t\t\t\t\tid={menuId}\n\t\t\t\t\tref={setFloating}\n\t\t\t\t\tstyle={\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"--radial-panel-size\": `${panelSize}px`,\n\t\t\t\t\t\t\t\"--radial-radius\": `${radius}px`,\n\t\t\t\t\t\t\t\"--radial-item-size\": `${itemSize}px`,\n\t\t\t\t\t\t\tleft: panelPoint.x - panelSize / 2,\n\t\t\t\t\t\t\ttop: panelPoint.y - panelSize / 2,\n\t\t\t\t\t\t\ttransformOrigin: \"center\"\n\t\t\t\t\t\t} as CSSProperties\n\t\t\t\t\t}\n\t\t\t\t\trole=\"menu\"\n\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\taria-labelledby={ariaLabel ? undefined : (ariaLabelledBy ?? triggerId)}\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\tclassName={cn(styles.radialPanel, className)}\n\t\t\t\t\tonKeyDown={onMenuKeyDown}\n\t\t\t\t\tinitial={{ opacity: 0, scale: 0.78 }}\n\t\t\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\t\t\texit={{ opacity: 0, scale: 0.78 }}\n\t\t\t\t\ttransition={{ duration: 0.16, ease: \"easeOut\" }}>\n\t\t\t\t\t<div className={styles.radialRing} aria-hidden=\"true\" />\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\trole=\"menuitem\"\n\t\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\t\tclassName={styles.radialCenterButton}\n\t\t\t\t\t\taria-label={closeLabel}\n\t\t\t\t\t\tdata-menu-item=\"true\"\n\t\t\t\t\t\tdata-radial-close=\"true\"\n\t\t\t\t\t\tonClick={closeMenu}>\n\t\t\t\t\t\t<span className={styles.radialCenterButtonText}>{closeLabel}</span>\n\t\t\t\t\t</button>\n\t\t\t\t\t<div className={styles.radialItems}>\n\t\t\t\t\t\t{itemNodes.map((item, index) => {\n\t\t\t\t\t\t\tconst angle = itemCount > 0 ? -90 + (360 / itemCount) * index : -90;\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t// Индекс допустим: порядок пунктов полностью задает геометрию кольца.\n\t\t\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\t\t\tclassName={styles.radialItemSlot}\n\t\t\t\t\t\t\t\t\tstyle={{ \"--radial-item-angle\": `${angle}deg` } as CSSProperties}>\n\t\t\t\t\t\t\t\t\t{item}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</div>\n\t\t\t\t</motion.div>\n\t\t\t)}\n\t\t</AnimatePresence>,\n\t\tdocument.body\n\t);\n}\n","import React, { useCallback } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport styles from \"../ContextMenu.module.scss\";\n\nimport { useMenuContext } from \"./MenuContext\";\n\nexport interface RadialMenuItemProps {\n\tchildren: React.ReactNode;\n\ticon?: React.ReactNode;\n\tclassName?: string;\n\tdisabled?: boolean;\n\tcloseOnSelect?: boolean;\n\tonSelect?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n}\n\nexport function RadialMenuItem({ children, icon, className, disabled, closeOnSelect = true, onSelect }: RadialMenuItemProps) {\n\tconst { closeMenu } = useMenuContext();\n\n\tconst handleClick = useCallback(\n\t\t(event: React.MouseEvent<HTMLButtonElement>) => {\n\t\t\tif (disabled) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tonSelect?.(event);\n\t\t\tif (event.defaultPrevented) return;\n\n\t\t\tif (closeOnSelect) {\n\t\t\t\tcloseMenu();\n\t\t\t}\n\t\t},\n\t\t[disabled, onSelect, closeOnSelect, closeMenu]\n\t);\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\trole=\"menuitem\"\n\t\t\ttabIndex={-1}\n\t\t\tdisabled={disabled}\n\t\t\taria-disabled={disabled}\n\t\t\tdata-menu-item=\"true\"\n\t\t\tdata-disabled={disabled ? \"true\" : undefined}\n\t\t\tdata-ui=\"radial-menu-item\"\n\t\t\tdata-action=\"select-radial-menu-item\"\n\t\t\tclassName={cn(styles.radialItem, className)}\n\t\t\tonClick={handleClick}>\n\t\t\t{icon && <span className={styles.radialItemIcon}>{icon}</span>}\n\t\t\t<span className={styles.radialItemText}>{children}</span>\n\t\t</button>\n\t);\n}\n","import React from \"react\";\n\nimport { Placement } from \"@floating-ui/react\";\n\nimport { ContextMenuTrigger } from \"./ContextMenuTrigger\";\nimport { MenuContent } from \"./MenuContent\";\nimport { MenuGroupLabel } from \"./MenuGroupLabel\";\nimport { MenuItem } from \"./MenuItem\";\nimport { MenuRoot } from \"./MenuRoot\";\nimport { MenuSeparator } from \"./MenuSeparator\";\nimport { RadialMenuContent } from \"./RadialMenuContent\";\nimport { RadialMenuItem } from \"./RadialMenuItem\";\n\nexport interface ContextMenuProps {\n\tchildren: React.ReactNode;\n\tplacement?: Placement;\n\topen?: boolean;\n\tdefaultOpen?: boolean;\n\tonOpenChange?: (open: boolean) => void;\n}\n\nexport function ContextMenu({ children, placement, open, defaultOpen, onOpenChange }: ContextMenuProps) {\n\treturn (\n\t\t<MenuRoot mode=\"contextmenu\" placement={placement} open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange}>\n\t\t\t{children}\n\t\t</MenuRoot>\n\t);\n}\n\nContextMenu.Trigger = ContextMenuTrigger;\nContextMenu.Content = MenuContent;\nContextMenu.RadialContent = RadialMenuContent;\nContextMenu.Item = MenuItem;\nContextMenu.RadialItem = RadialMenuItem;\nContextMenu.Separator = MenuSeparator;\nContextMenu.GroupLabel = MenuGroupLabel;\n","import { cloneElement, type HTMLAttributes, type ReactElement, type Ref } from \"react\";\n\nimport { assignRef, composeKeyboardHandlers, composeMouseHandlers } from \"./helpers\";\nimport { useMenuContext } from \"./MenuContext\";\n\nexport interface DropdownMenuTriggerProps {\n\tchildren: ReactElement<HTMLAttributes<HTMLElement> & { ref?: Ref<HTMLElement> }>;\n}\n\nexport function DropdownMenuTrigger({ children }: DropdownMenuTriggerProps) {\n\tconst { mode, open, menuId, triggerId, registerTriggerElement, onTriggerClick, onTriggerKeyDown } = useMenuContext();\n\n\tif (mode !== \"click\") {\n\t\tthrow new Error(\"DropdownMenu.Trigger must be used within <DropdownMenu>\");\n\t}\n\n\treturn cloneElement(children, {\n\t\tid: children.props.id ?? triggerId,\n\t\tref: (node: HTMLElement | null) => {\n\t\t\tconst childRef = (children.props as { ref?: Ref<HTMLElement> }).ref;\n\t\t\tassignRef(childRef, node);\n\t\t\tregisterTriggerElement(node);\n\t\t},\n\t\t\"aria-haspopup\": \"menu\",\n\t\t\"aria-expanded\": open,\n\t\t\"aria-controls\": open ? menuId : undefined,\n\t\tonClick: composeMouseHandlers(children.props.onClick, onTriggerClick),\n\t\tonKeyDown: composeKeyboardHandlers(children.props.onKeyDown, onTriggerKeyDown)\n\t});\n}\n","import React from \"react\";\n\nimport { Placement } from \"@floating-ui/react\";\n\nimport { DropdownMenuTrigger } from \"./DropdownMenuTrigger\";\nimport { MenuContent } from \"./MenuContent\";\nimport { MenuGroupLabel } from \"./MenuGroupLabel\";\nimport { MenuItem } from \"./MenuItem\";\nimport { MenuRoot } from \"./MenuRoot\";\nimport { MenuSeparator } from \"./MenuSeparator\";\n\nexport interface DropdownMenuProps {\n\tchildren: React.ReactNode;\n\tplacement?: Placement;\n\topen?: boolean;\n\tdefaultOpen?: boolean;\n\tonOpenChange?: (open: boolean) => void;\n}\n\nexport function DropdownMenu({ children, placement, open, defaultOpen, onOpenChange }: DropdownMenuProps) {\n\treturn (\n\t\t<MenuRoot mode=\"click\" placement={placement} open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange}>\n\t\t\t{children}\n\t\t</MenuRoot>\n\t);\n}\n\nDropdownMenu.Trigger = DropdownMenuTrigger;\nDropdownMenu.Content = MenuContent;\nDropdownMenu.Item = MenuItem;\nDropdownMenu.Separator = MenuSeparator;\nDropdownMenu.GroupLabel = MenuGroupLabel;\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import { r as e } from "./popover-yl5DVe06.js";
1
+ import { r as e } from "./popover-BJH-yHvb.js";
2
2
  import { t } from "./ui.module-oRwY3Zli.js";
3
3
  import { s as n } from "./input-CuRK9Vbz.js";
4
- import { a as r, o as i, t as a } from "./CalendarView-CwbPJG2Y.js";
4
+ import { a as r, o as i, t as a } from "./CalendarView-BCXVjLFz.js";
5
5
  import { n as o } from "./radio-group-CW-K1n9c.js";
6
6
  import { CalendarDaysIcon as s } from "lucide-react";
7
7
  import { jsx as c, jsxs as l } from "react/jsx-runtime";
@@ -320,18 +320,21 @@ function Z({ placeholder: d, disabled: m, error: h, onClearError: g, minDate: _,
320
320
  error: h,
321
321
  onClearError: g,
322
322
  endAdornmentWidth: "var(--control-height)",
323
- endAdornment: /* @__PURE__ */ c(e.Trigger, { children: /* @__PURE__ */ c("div", {
323
+ endAdornment: /* @__PURE__ */ c("div", {
324
324
  className: t.uiToggleButtonContainer,
325
- children: /* @__PURE__ */ c("button", {
325
+ children: /* @__PURE__ */ c(e.Trigger, { children: /* @__PURE__ */ c("button", {
326
326
  type: "button",
327
327
  disabled: m,
328
328
  "aria-label": "Открыть календарь",
329
+ "aria-haspopup": "dialog",
329
330
  className: t.uiToggleButton,
330
331
  children: /* @__PURE__ */ c(s, {})
331
- })
332
- }) })
332
+ }) })
333
+ })
333
334
  }), /* @__PURE__ */ l(e.Content, {
334
335
  background: "primary",
336
+ role: "dialog",
337
+ "aria-label": A.selectsRange ? "Выбор диапазона дат" : "Выбор даты",
335
338
  children: [/* @__PURE__ */ c(a, {
336
339
  view: W,
337
340
  datePickerLevel: R,
@@ -371,4 +374,4 @@ function ie(e) {
371
374
  //#endregion
372
375
  export { T as _, U as a, k as b, G as c, B as d, R as f, w as g, q as h, A as i, W as l, Y as m, Q as n, H as o, J as p, j as r, K as s, ie as t, z as u, D as v, O as y };
373
376
 
374
- //# sourceMappingURL=date-input-Crijdmmq.js.map
377
+ //# sourceMappingURL=date-input-CzCDou4s.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"date-input-Crijdmmq.js","names":[],"sources":["../../src/date-input/lib/dateInputSelectionModes.ts","../../src/date-input/lib/dateInputValue.ts","../../src/date-input/model/useDateInput.ts","../../src/date-input/ui/DateInput.module.scss","../../src/date-input/ui/DateInput.tsx"],"sourcesContent":["import { normalizePresetIds, resolvePresetOptionsByIds, type PresetOption } from \"@ryuzaki13/react-foundation-lib/presets\";\n\nimport type { DateInputSelectionMode } from \"./types\";\n\n/**\n * Описание встроенного режима выбора даты для runtime-переключателя и внешних конфигураторов.\n */\nexport interface DateInputSelectionModeOption extends PresetOption<DateInputSelectionMode> {}\n\n/**\n * Канонический список режимов выбора даты.\n */\nexport const DATE_INPUT_SELECTION_MODES = Object.freeze([\n\t\"day\",\n\t\"week\",\n\t\"month\",\n\t\"year\"\n] as const satisfies readonly DateInputSelectionMode[]);\n\n/**\n * Встроенные режимы выбора даты с пользовательскими подписями.\n */\nexport const DATE_INPUT_SELECTION_MODE_OPTIONS: readonly DateInputSelectionModeOption[] = Object.freeze([\n\t{ id: \"day\", label: \"День\" },\n\t{ id: \"week\", label: \"Неделя\" },\n\t{ id: \"month\", label: \"Месяц\" },\n\t{ id: \"year\", label: \"Год\" }\n]);\n\nconst DATE_INPUT_SELECTION_MODE_SET: ReadonlySet<string> = new Set(DATE_INPUT_SELECTION_MODES);\n\n/**\n * Проверяет, что внешнее значение является поддерживаемым режимом выбора даты.\n */\nexport function isDateInputSelectionMode(value: unknown): value is DateInputSelectionMode {\n\treturn typeof value === \"string\" && DATE_INPUT_SELECTION_MODE_SET.has(value);\n}\n\n/**\n * Нормализует сохранённый список режимов, сохраняя пользовательский порядок и удаляя дубли.\n */\nexport function normalizeDateInputSelectionModes(\n\tvalue: unknown,\n\tfallbackModes: readonly DateInputSelectionMode[] = DATE_INPUT_SELECTION_MODES\n): DateInputSelectionMode[] {\n\treturn normalizePresetIds(value, isDateInputSelectionMode, fallbackModes);\n}\n\n/**\n * Формирует упорядоченный список описаний по сохранённым режимам выбора.\n */\nexport function resolveDateInputSelectionModeOptionsByModes(\n\tmodes: readonly DateInputSelectionMode[],\n\toptions: readonly DateInputSelectionModeOption[] = DATE_INPUT_SELECTION_MODE_OPTIONS\n): DateInputSelectionModeOption[] {\n\treturn resolvePresetOptionsByIds(modes, options);\n}\n","import {\n\tDEFAULT_DATE_PRESET_NAMES,\n\tformatDate,\n\tformatDateRange,\n\tgetCalendarPeriod,\n\tgetDatePreset,\n\tisDateRangeTuple,\n\tparseDateByFormat,\n\tresolveDateFormatName,\n\ttype CalendarPeriodOptions,\n\ttype DateFormatPrecision,\n\ttype DateRangeInput,\n\ttype NullableDateRange\n} from \"@ryuzaki13/react-foundation-lib/formatters\";\n\n/**\n * Пресет даты по умолчанию для текстового поля.\n */\nexport const DEFAULT_DATE_INPUT_PRESET = DEFAULT_DATE_PRESET_NAMES.date;\n\n/**\n * @deprecated Используйте `DEFAULT_DATE_INPUT_PRESET`.\n */\nexport const DEFAULT_DATE_INPUT_FORMAT = \"dd.MM.yyyy\";\n\nconst RANGE_SEPARATOR = \" - \";\n\nexport type DateInputValueOptions = {\n\t/**\n\t * Имя пресета форматирования даты.\n\t */\n\tdatePreset?: string;\n\t/**\n\t * Точность календарного значения.\n\t */\n\tdatePickerLevel?: DateFormatPrecision;\n\t/**\n\t * Размер периода, который выбирается и нормализуется полем.\n\t */\n\tselectionMode?: CalendarPeriodOptions[\"selectionMode\"];\n\t/**\n\t * Последний включённый день недели для режима выбора недели.\n\t */\n\tweekEndDay?: CalendarPeriodOptions[\"weekEndDay\"];\n\t/**\n\t * Опорная дата для пресетов без года, например `month-long`.\n\t */\n\treferenceDate?: Date;\n};\n\nexport type DateInputValueOptionsInput = string | DateInputValueOptions | undefined;\n\n/**\n * Возвращает точность форматирования поля даты.\n */\nfunction resolveDateInputPrecision(options: DateInputValueOptions): DateFormatPrecision {\n\tif (options.selectionMode === \"day\" || options.selectionMode === \"week\") {\n\t\treturn \"day\";\n\t}\n\n\tif (options.selectionMode === \"month\" || options.selectionMode === \"year\") {\n\t\treturn options.selectionMode;\n\t}\n\n\treturn options.datePickerLevel ?? \"day\";\n}\n\nfunction resolveCalendarPeriodOptions(options?: DateInputValueOptions): CalendarPeriodOptions {\n\treturn {\n\t\tselectionMode: options?.selectionMode,\n\t\tweekEndDay: options?.weekEndDay\n\t};\n}\n\n/**\n * Нормализует объектные опции и позиционный вызов с именем пресета.\n */\nfunction normalizeDateInputValueOptions(\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): DateInputValueOptions {\n\tif (typeof optionsOrPreset === \"string\" || optionsOrPreset === undefined) {\n\t\treturn {\n\t\t\tdatePreset: optionsOrPreset,\n\t\t\tdatePickerLevel\n\t\t};\n\t}\n\n\tif (datePickerLevel && optionsOrPreset.datePickerLevel === undefined) {\n\t\treturn {\n\t\t\t...optionsOrPreset,\n\t\t\tdatePickerLevel\n\t\t};\n\t}\n\n\treturn optionsOrPreset;\n}\n\n/**\n * Проверяет новый `datePreset` и возвращает только зарегистрированное имя пресета.\n */\nfunction resolveDateInputPresetName(datePreset?: string): string {\n\tconst resolvedPresetName = resolveDateFormatName(datePreset, DEFAULT_DATE_INPUT_PRESET);\n\treturn getDatePreset(resolvedPresetName) ? resolvedPresetName : DEFAULT_DATE_INPUT_PRESET;\n}\n\n/**\n * Приводит результат универсального парсинга к календарной дате.\n */\nfunction parseDateTimeValue(value: string, options: DateInputValueOptions): Date | null {\n\treturn (\n\t\tparseDateByFormat(value, resolveDateInputPresetName(options.datePreset), {\n\t\t\tdefaultFormat: DEFAULT_DATE_INPUT_PRESET,\n\t\t\tprecision: resolveDateInputPrecision(options),\n\t\t\treferenceDate: options.referenceDate\n\t\t})?.date ?? null\n\t);\n}\n\n/**\n * Приводит одиночную дату к началу выбранного календарного периода.\n */\nexport function normalizeSingleDateValue(date: Date | null, options?: DateInputValueOptions): Date | null {\n\treturn getCalendarPeriod(date, resolveCalendarPeriodOptions(options))?.start ?? null;\n}\n\n/**\n * Приводит диапазон дат к границам выбранных календарных периодов.\n */\nexport function normalizeRangeDateValue(range: NullableDateRange | null, options?: DateInputValueOptions): NullableDateRange | null {\n\tif (!isDateRangeTuple(range)) return null;\n\n\tconst [startDate, endDate] = range;\n\treturn [normalizeSingleDateValue(startDate, options), normalizeRangeEndDateValue(endDate, options)];\n}\n\n/**\n * Приводит конечную дату диапазона к концу выбранного календарного периода.\n */\nexport function normalizeRangeEndDateValue(date: Date | null, options?: DateInputValueOptions): Date | null {\n\treturn getCalendarPeriod(date, resolveCalendarPeriodOptions(options))?.end ?? null;\n}\n\nfunction getDateTime(date: Date | null): number | null {\n\treturn date?.getTime() ?? null;\n}\n\n/**\n * Сравнивает одиночные даты после нормализации к точности поля ввода.\n */\nexport function areSingleDateValuesEqual(left: Date | null, right: Date | null, options?: DateInputValueOptions): boolean {\n\treturn getDateTime(normalizeSingleDateValue(left, options)) === getDateTime(normalizeSingleDateValue(right, options));\n}\n\n/**\n * Сравнивает диапазоны дат после нормализации к границам выбранных периодов.\n */\nexport function areRangeDateValuesEqual(\n\tleft: NullableDateRange | null,\n\tright: NullableDateRange | null,\n\toptions?: DateInputValueOptions\n): boolean {\n\tconst normalizedLeft = normalizeRangeDateValue(left, options);\n\tconst normalizedRight = normalizeRangeDateValue(right, options);\n\n\treturn (\n\t\tgetDateTime(normalizedLeft?.[0] ?? null) === getDateTime(normalizedRight?.[0] ?? null) &&\n\t\tgetDateTime(normalizedLeft?.[1] ?? null) === getDateTime(normalizedRight?.[1] ?? null)\n\t);\n}\n\n/**\n * Форматирует одиночную дату для текстового поля.\n */\nexport function formatSingleDateValue(\n\tdate: Date | null,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): string {\n\tif (!date) return \"\";\n\n\tconst options = normalizeDateInputValueOptions(optionsOrPreset, datePickerLevel);\n\tconst period = getCalendarPeriod(date, resolveCalendarPeriodOptions(options));\n\n\t// Single-поле хранит начало недели, но показывает обе включительные границы выбранного периода.\n\tif (options.selectionMode === \"week\" && period) {\n\t\treturn formatDateRange(period.start, period.end, resolveDateInputPresetName(options.datePreset), {\n\t\t\tprecision: resolveDateInputPrecision(options)\n\t\t});\n\t}\n\n\treturn formatDate(date, resolveDateInputPresetName(options.datePreset), {\n\t\tprecision: resolveDateInputPrecision(options)\n\t});\n}\n\n/**\n * Форматирует диапазон дат для текстового поля.\n */\nexport function formatRangeDateValue(\n\trange: NullableDateRange | null,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): string {\n\tif (!isDateRangeTuple(range)) return \"\";\n\n\tconst options = normalizeDateInputValueOptions(optionsOrPreset, datePickerLevel);\n\tconst [startDate, endDate] = range;\n\tif (startDate && endDate) {\n\t\treturn formatDateRange(startDate, endDate, resolveDateInputPresetName(options.datePreset), {\n\t\t\tprecision: resolveDateInputPrecision(options)\n\t\t});\n\t}\n\n\tif (startDate) {\n\t\treturn `${formatDate(startDate, resolveDateInputPresetName(options.datePreset), {\n\t\t\tprecision: resolveDateInputPrecision(options)\n\t\t})}${RANGE_SEPARATOR}`;\n\t}\n\n\treturn \"\";\n}\n\n/**\n * Унифицирует форматирование значения поля даты.\n */\nexport function formatDateInputValue(\n\tvalue: DateRangeInput,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): string {\n\tif (isDateRangeTuple(value)) {\n\t\treturn formatRangeDateValue(value, optionsOrPreset, datePickerLevel);\n\t}\n\n\treturn formatSingleDateValue(value, optionsOrPreset, datePickerLevel);\n}\n\n/**\n * Парсит строку одиночной даты по заданному пресету.\n */\nexport function parseSingleDateValue(\n\tvalue: string,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): Date | null {\n\tconst options = normalizeDateInputValueOptions(optionsOrPreset, datePickerLevel);\n\t// Для отображаемого диапазона single-week источником значения остаётся его первая граница.\n\tconst singleValue = options.selectionMode === \"week\" ? (value.split(RANGE_SEPARATOR)[0] ?? \"\") : value;\n\n\treturn normalizeSingleDateValue(parseDateTimeValue(singleValue, options), options);\n}\n\n/**\n * Парсит строку диапазона дат по заданному пресету.\n */\nexport function parseRangeDateValue(\n\tvalue: string,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): NullableDateRange {\n\tconst options = normalizeDateInputValueOptions(optionsOrPreset, datePickerLevel);\n\tconst [startPart = \"\", endPart = \"\"] = value.split(RANGE_SEPARATOR);\n\n\treturn [parseSingleDateValue(startPart, options), parseRangeEndDateValue(endPart, options)];\n}\n\n/**\n * Парсит конечную дату диапазона и нормализует её к концу суток.\n */\nexport function parseRangeEndDateValue(\n\tvalue: string,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): Date | null {\n\tconst options = normalizeDateInputValueOptions(optionsOrPreset, datePickerLevel);\n\treturn normalizeRangeEndDateValue(parseDateTimeValue(value, options), options);\n}\n","import { useMemo, useState } from \"react\";\n\nimport { isDateRangeTuple, type NullableDateRange } from \"@ryuzaki13/react-foundation-lib/formatters\";\n\nimport {\n\tDateInputValueOptions,\n\tformatDateInputValue,\n\tnormalizeRangeDateValue,\n\tnormalizeRangeEndDateValue,\n\tnormalizeSingleDateValue,\n\tparseRangeDateValue,\n\tparseSingleDateValue,\n\ttype DateInputOptions\n} from \"../lib\";\n\nfunction resolveReferenceDate(value: Date | NullableDateRange | null): Date | undefined {\n\tif (isDateRangeTuple(value)) {\n\t\treturn value[0] ?? value[1] ?? undefined;\n\t}\n\n\treturn value ?? undefined;\n}\n\n/**\n * Хук управляет текстовым представлением и выбранным значением поля даты.\n */\nexport const useDateInput = (options: DateInputOptions) => {\n\tconst externalSelectedDate = useMemo(() => {\n\t\tconst selectionOptions: DateInputValueOptions = {\n\t\t\tselectionMode: options.selectionMode,\n\t\t\tweekEndDay: options.weekEndDay\n\t\t};\n\n\t\tif (options.selectsRange) {\n\t\t\treturn normalizeRangeDateValue(options.value as NullableDateRange | null, selectionOptions);\n\t\t}\n\n\t\treturn normalizeSingleDateValue(options.value as Date | null, selectionOptions);\n\t}, [options.selectsRange, options.selectionMode, options.value, options.weekEndDay]);\n\tconst formatOptions = useMemo<DateInputValueOptions>(\n\t\t() => ({\n\t\t\tdatePreset: options.datePreset,\n\t\t\tdatePickerLevel: options.datePickerLevel,\n\t\t\tselectionMode: options.selectionMode,\n\t\t\tweekEndDay: options.weekEndDay\n\t\t}),\n\t\t[options.datePickerLevel, options.datePreset, options.selectionMode, options.weekEndDay]\n\t);\n\tconst externalInputValue = formatDateInputValue(externalSelectedDate, formatOptions);\n\tconst externalStateSignature = JSON.stringify([\n\t\toptions.selectsRange,\n\t\toptions.datePreset ?? null,\n\t\toptions.datePickerLevel ?? null,\n\t\toptions.selectionMode ?? null,\n\t\toptions.weekEndDay ?? null,\n\t\tisDateRangeTuple(externalSelectedDate)\n\t\t\t? [externalSelectedDate[0]?.getTime() ?? null, externalSelectedDate[1]?.getTime() ?? null]\n\t\t\t: (externalSelectedDate?.getTime() ?? null)\n\t]);\n\tconst [draftState, setDraftState] = useState(() => ({\n\t\tsourceSignature: externalStateSignature,\n\t\tselectedDate: externalSelectedDate,\n\t\tinputValue: externalInputValue\n\t}));\n\tconst hasCurrentDraft = draftState.sourceSignature === externalStateSignature;\n\tconst selectedDate = hasCurrentDraft ? draftState.selectedDate : externalSelectedDate;\n\tconst inputValue = hasCurrentDraft ? draftState.inputValue : externalInputValue;\n\n\t/**\n\t * Сохраняет пользовательский текст только относительно текущего controlled-снимка.\n\t * При внешней смене value или формата отображение сразу выводится из новых props.\n\t */\n\tconst setInputValue = (nextInputValue: string) => {\n\t\tsetDraftState((currentState) => {\n\t\t\tconst currentSelectedDate =\n\t\t\t\tcurrentState.sourceSignature === externalStateSignature ? currentState.selectedDate : externalSelectedDate;\n\n\t\t\treturn {\n\t\t\t\tsourceSignature: externalStateSignature,\n\t\t\t\tselectedDate: currentSelectedDate,\n\t\t\t\tinputValue: nextInputValue\n\t\t\t};\n\t\t});\n\t};\n\n\t/**\n\t * Обновляет локальный незавершённый выбор, не зеркаля controlled value через effect.\n\t */\n\tconst setSelectedDate = (nextSelectedDate: Date | NullableDateRange | null) => {\n\t\tsetDraftState((currentState) => {\n\t\t\tconst currentInputValue =\n\t\t\t\tcurrentState.sourceSignature === externalStateSignature ? currentState.inputValue : externalInputValue;\n\n\t\t\treturn {\n\t\t\t\tsourceSignature: externalStateSignature,\n\t\t\t\tselectedDate: nextSelectedDate,\n\t\t\t\tinputValue: currentInputValue\n\t\t\t};\n\t\t});\n\t};\n\n\t/**\n\t * Форматирует значение поля даты согласно текущему пресету.\n\t */\n\tconst formatValue = (value: Date | NullableDateRange | null): string => formatDateInputValue(value, formatOptions);\n\n\t/**\n\t * Парсит строковое значение поля в дату или диапазон дат.\n\t */\n\tconst parseDate = (dateString: string): Date | NullableDateRange | null => {\n\t\tconst parseOptions: DateInputValueOptions = {\n\t\t\t...formatOptions,\n\t\t\treferenceDate: resolveReferenceDate(selectedDate)\n\t\t};\n\n\t\tif (options.selectsRange) {\n\t\t\treturn parseRangeDateValue(dateString, parseOptions);\n\t\t}\n\n\t\treturn parseSingleDateValue(dateString, parseOptions);\n\t};\n\n\t/**\n\t * Обрабатывает выбор даты из календаря.\n\t */\n\tconst handleSelect = (date: Date | NullableDateRange) => {\n\t\tconst [selectedStartDate, selectedEndDate] = (Array.isArray(date) ? date : [date, null]) as NullableDateRange;\n\n\t\tif (options.selectsRange) {\n\t\t\tconst normalizedStartDate = normalizeSingleDateValue(selectedStartDate, formatOptions);\n\t\t\tconst normalizedEndDate = normalizeRangeEndDateValue(selectedEndDate, formatOptions);\n\n\t\t\tif (normalizedStartDate && normalizedEndDate) {\n\t\t\t\tif (normalizedEndDate < normalizedStartDate) {\n\t\t\t\t\tconst swappedRange: NullableDateRange = [\n\t\t\t\t\t\tnormalizeSingleDateValue(selectedEndDate, formatOptions),\n\t\t\t\t\t\tnormalizeRangeEndDateValue(selectedStartDate, formatOptions)\n\t\t\t\t\t];\n\t\t\t\t\tsetDraftState({\n\t\t\t\t\t\tsourceSignature: externalStateSignature,\n\t\t\t\t\t\tselectedDate: swappedRange,\n\t\t\t\t\t\tinputValue: formatValue(swappedRange)\n\t\t\t\t\t});\n\t\t\t\t\toptions.onChange(swappedRange);\n\t\t\t\t} else {\n\t\t\t\t\tconst nextRange: NullableDateRange = [normalizedStartDate, normalizedEndDate];\n\t\t\t\t\tsetDraftState({\n\t\t\t\t\t\tsourceSignature: externalStateSignature,\n\t\t\t\t\t\tselectedDate: nextRange,\n\t\t\t\t\t\tinputValue: formatValue(nextRange)\n\t\t\t\t\t});\n\t\t\t\t\toptions.onChange(nextRange);\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tconst nextRange: NullableDateRange = [normalizedStartDate, null];\n\t\t\tsetDraftState({\n\t\t\t\tsourceSignature: externalStateSignature,\n\t\t\t\tselectedDate: nextRange,\n\t\t\t\tinputValue: formatValue(nextRange)\n\t\t\t});\n\t\t\treturn false;\n\t\t}\n\n\t\tconst normalizedDate = normalizeSingleDateValue(selectedStartDate, formatOptions);\n\t\tsetDraftState({\n\t\t\tsourceSignature: externalStateSignature,\n\t\t\tselectedDate: normalizedDate,\n\t\t\tinputValue: formatValue(normalizedDate)\n\t\t});\n\t\toptions.onChange(normalizedDate);\n\n\t\treturn true;\n\t};\n\n\treturn {\n\t\tinputValue,\n\t\tsetInputValue,\n\t\tselectedDate,\n\t\tsetSelectedDate,\n\t\thandleSelect,\n\t\tformatDate: formatValue,\n\t\tparseDate\n\t};\n};\n",".selectionModeControl {\n\tmargin-top: var(--space-sm);\n\tpadding-top: var(--space-sm);\n\tborder-top: var(--border);\n}\n","import { JSX, useCallback, useEffect, useRef, useState } from \"react\";\n\nimport { isDateRangeTuple, type NullableDateRange } from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport { CalendarDaysIcon } from \"lucide-react\";\n\nimport { InputText } from \"../../input\";\nimport { Popover } from \"../../popover\";\nimport { RadioGroup } from \"../../radio-group\";\nimport { UiBaseProps } from \"../../types\";\nimport uiStyles from \"../../ui.module.scss\";\nimport {\n\tareRangeDateValuesEqual,\n\tareSingleDateValuesEqual,\n\tDATE_INPUT_SELECTION_MODES,\n\tisDatePickerLevelAvailable,\n\tnormalizeDateInputSelectionModes,\n\tresolveAvailableDatePickerLevel,\n\tresolveDateInputSelectionModeOptionsByModes,\n\ttype DateInputSelectionMode,\n\ttype DateInputSelectionModeDatePresets,\n\ttype DateInputSelectionModeOption,\n\ttype DateInputWeekEndDay,\n\ttype DatePickerLevel\n} from \"../lib\";\nimport { useDateInput } from \"../model\";\n\nimport { CalendarView } from \"./CalendarView\";\nimport styles from \"./DateInput.module.scss\";\n\ninterface BaseDateInputProps {\n\terror?: string;\n\tonClearError?: () => void;\n\n\tminDate?: Date;\n\tmaxDate?: Date;\n\n\tdatePreset?: string;\n\n\t/**\n\t * Минимальный уровень календарной навигации. Размер выбранного периода задаёт `selectionMode`.\n\t */\n\tdatePickerLevel?: DatePickerLevel;\n\t/**\n\t * Размер периода, который выбирает поле: день, неделя, месяц или год.\n\t */\n\tselectionMode?: DateInputSelectionMode;\n\t/**\n\t * Последний включённый день недели для `selectionMode=\"week\"`.\n\t */\n\tweekEndDay?: DateInputWeekEndDay;\n\t/**\n\t * Показывает переключатель `selectionMode` под календарём.\n\t */\n\tallowSelectionModeChange?: boolean;\n\t/**\n\t * Ограничивает набор режимов в runtime-переключателе.\n\t */\n\tselectionModeOptions?: readonly DateInputSelectionMode[];\n\t/**\n\t * Задаёт отдельный пресет форматирования для каждого runtime-режима выбора.\n\t * Общий `datePreset` используется как fallback для отсутствующих значений.\n\t */\n\tselectionModeDatePresets?: DateInputSelectionModeDatePresets;\n\t/**\n\t * Сообщает наружу о runtime-смене режима выбора.\n\t */\n\tonSelectionModeChange?: (selectionMode: DateInputSelectionMode) => void;\n}\n\nexport interface DateSingleInputProps extends BaseDateInputProps, UiBaseProps<Date | null> {\n\tselectsRange?: false;\n}\nexport interface DateRangeInputProps extends BaseDateInputProps, UiBaseProps<NullableDateRange | null> {\n\tselectsRange: true;\n}\n\ntype DateInputProps = DateSingleInputProps | DateRangeInputProps;\n\ninterface CalendarTypeState {\n\treadonly view: DatePickerLevel;\n\treadonly selectionMode: DateInputSelectionMode;\n\treadonly minDatePickerLevel: DatePickerLevel;\n}\n\nfunction resolveSelectionModeOptions(\n\tselectionModeOptions: readonly DateInputSelectionMode[] | undefined,\n\tselectionMode: DateInputSelectionMode\n): readonly DateInputSelectionModeOption[] {\n\tconst configuredModes = normalizeDateInputSelectionModes(selectionModeOptions, DATE_INPUT_SELECTION_MODES);\n\tconst availableModes = configuredModes.includes(selectionMode) ? configuredModes : [...configuredModes, selectionMode];\n\n\treturn resolveDateInputSelectionModeOptionsByModes(availableModes);\n}\n\nfunction DateInput(props: DateSingleInputProps): JSX.Element;\nfunction DateInput(props: DateRangeInputProps): JSX.Element;\nfunction DateInput({\n\tplaceholder,\n\tdisabled,\n\terror,\n\tonClearError,\n\tminDate,\n\tmaxDate,\n\tdatePreset,\n\tdatePickerLevel,\n\tselectionMode: controlledSelectionMode,\n\tweekEndDay = \"sunday\",\n\tallowSelectionModeChange,\n\tselectionModeOptions,\n\tselectionModeDatePresets,\n\tonSelectionModeChange,\n\t...props\n}: DateInputProps) {\n\tconst [open, setOpen] = useState(false);\n\tconst configuredSelectionModes = normalizeDateInputSelectionModes(selectionModeOptions, DATE_INPUT_SELECTION_MODES);\n\tconst [uncontrolledSelectionMode, setUncontrolledSelectionMode] = useState<DateInputSelectionMode>(\n\t\t() => controlledSelectionMode ?? configuredSelectionModes[0] ?? \"day\"\n\t);\n\tconst selectionMode = controlledSelectionMode ?? uncontrolledSelectionMode;\n\tconst activeDatePreset = allowSelectionModeChange ? (selectionModeDatePresets?.[selectionMode] ?? datePreset) : datePreset;\n\tconst minDatePickerLevel = datePickerLevel ?? \"day\";\n\tconst preferredCalendarType = resolveAvailableDatePickerLevel(selectionMode, minDatePickerLevel);\n\tconst [calendarTypeState, setCalendarTypeState] = useState<CalendarTypeState>(() => ({\n\t\tview: preferredCalendarType,\n\t\tselectionMode,\n\t\tminDatePickerLevel\n\t}));\n\tconst calendarType =\n\t\tcalendarTypeState.selectionMode === selectionMode &&\n\t\tcalendarTypeState.minDatePickerLevel === minDatePickerLevel &&\n\t\tisDatePickerLevelAvailable(calendarTypeState.view, minDatePickerLevel)\n\t\t\t? calendarTypeState.view\n\t\t\t: preferredCalendarType;\n\n\tconst initialDateRef = useRef(props.value);\n\tconst dateInputValueOptions = {\n\t\tselectionMode,\n\t\tweekEndDay\n\t};\n\n\tconst { inputValue, setInputValue, selectedDate, setSelectedDate, handleSelect, formatDate, parseDate } = useDateInput({\n\t\t...props,\n\t\tdatePreset: activeDatePreset,\n\t\tdatePickerLevel: minDatePickerLevel,\n\t\tselectionMode,\n\t\tweekEndDay\n\t});\n\tconst rangeOnChange = props.selectsRange ? props.onChange : undefined;\n\n\tconst updateCalendarType = useCallback(\n\t\t(calendarType: DatePickerLevel) => {\n\t\t\tif (isDatePickerLevelAvailable(calendarType, minDatePickerLevel)) {\n\t\t\t\tsetCalendarTypeState({\n\t\t\t\t\tview: calendarType,\n\t\t\t\t\tselectionMode,\n\t\t\t\t\tminDatePickerLevel\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t[minDatePickerLevel, selectionMode]\n\t);\n\n\tuseEffect(() => {\n\t\tinitialDateRef.current = props.value;\n\t}, [props.value]);\n\n\tconst handleInputBlur = () => {\n\t\tif (inputValue) {\n\t\t\tconst parsedDate = parseDate(inputValue);\n\t\t\tif (parsedDate) {\n\t\t\t\tsetInputValue(formatDate(parsedDate));\n\n\t\t\t\tif (props.selectsRange && isDateRangeTuple(parsedDate)) {\n\t\t\t\t\tconst selectedRange = isDateRangeTuple(selectedDate) ? selectedDate : null;\n\n\t\t\t\t\tif (areRangeDateValuesEqual(parsedDate, selectedRange, dateInputValueOptions)) return;\n\n\t\t\t\t\tsetSelectedDate(parsedDate);\n\t\t\t\t\tprops.onChange(parsedDate);\n\t\t\t\t} else if (!props.selectsRange && parsedDate instanceof Date) {\n\t\t\t\t\tconst selectedSingleDate = selectedDate instanceof Date ? selectedDate : null;\n\n\t\t\t\t\tif (areSingleDateValuesEqual(parsedDate, selectedSingleDate, dateInputValueOptions)) return;\n\n\t\t\t\t\tsetSelectedDate(parsedDate);\n\t\t\t\t\tprops.onChange(parsedDate);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n\t\tif (event.key === \"Enter\") {\n\t\t\tevent.preventDefault();\n\t\t\thandleInputBlur();\n\t\t}\n\t};\n\n\tconst handleCalendarDateSelect = useCallback(\n\t\t(value: Date | NullableDateRange) => {\n\t\t\tif (handleSelect(value)) {\n\t\t\t\tsetOpen(false);\n\t\t\t}\n\t\t},\n\t\t[handleSelect]\n\t);\n\n\tconst handleSelectionModeChange = useCallback(\n\t\t(nextSelectionMode: DateInputSelectionMode) => {\n\t\t\tif (controlledSelectionMode === undefined) {\n\t\t\t\tsetUncontrolledSelectionMode(nextSelectionMode);\n\t\t\t}\n\n\t\t\tonSelectionModeChange?.(nextSelectionMode);\n\t\t\tsetCalendarTypeState({\n\t\t\t\tview: resolveAvailableDatePickerLevel(nextSelectionMode, minDatePickerLevel),\n\t\t\t\tselectionMode: nextSelectionMode,\n\t\t\t\tminDatePickerLevel\n\t\t\t});\n\t\t},\n\t\t[controlledSelectionMode, minDatePickerLevel, onSelectionModeChange]\n\t);\n\n\tconst handleCancel = useCallback(() => {\n\t\t// Восстановить исходное состояние при отмене\n\t\tif (rangeOnChange) {\n\t\t\tconst [, selectedEndDate] = isDateRangeTuple(selectedDate) ? selectedDate : [null, null];\n\n\t\t\tif (!selectedEndDate) {\n\t\t\t\t// Восстановить исходное состояние диапазона\n\t\t\t\tconst initialValue = initialDateRef.current;\n\t\t\t\tconst initialRange = Array.isArray(initialValue) ? initialValue : null;\n\t\t\t\tconst initialStart = initialRange?.[0] ?? null;\n\t\t\t\tconst initialEnd = initialRange?.[1] ?? null;\n\n\t\t\t\tif (initialStart && initialEnd) {\n\t\t\t\t\tconst initialSelectedDate: NullableDateRange = [initialStart, initialEnd];\n\t\t\t\t\tsetSelectedDate(initialSelectedDate);\n\t\t\t\t\tsetInputValue(formatDate(initialSelectedDate));\n\n\t\t\t\t\trangeOnChange(initialSelectedDate);\n\t\t\t\t} else {\n\t\t\t\t\t// Если начального диапазона нет, очистить всё\n\t\t\t\t\tsetSelectedDate([null, null]);\n\t\t\t\t\tsetInputValue(\"\");\n\n\t\t\t\t\trangeOnChange([null, null]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, [rangeOnChange, selectedDate, setSelectedDate, setInputValue, formatDate]);\n\n\tconst availableSelectionModeOptions = resolveSelectionModeOptions(selectionModeOptions, selectionMode);\n\tconst showSelectionModeControl = allowSelectionModeChange && availableSelectionModeOptions.length > 1;\n\n\treturn (\n\t\t<Popover\n\t\t\topen={open}\n\t\t\tonOpenChange={(value) => {\n\t\t\t\tsetOpen(value);\n\t\t\t\tif (!value) {\n\t\t\t\t\thandleCancel();\n\t\t\t\t}\n\t\t\t}}>\n\t\t\t<InputText\n\t\t\t\tlabel={props.label}\n\t\t\t\tdescription={props.description}\n\t\t\t\tsize={props.size}\n\t\t\t\tvalue={inputValue}\n\t\t\t\tonChange={setInputValue}\n\t\t\t\tonBlur={handleInputBlur}\n\t\t\t\tonKeyUp={handleKeyDown}\n\t\t\t\tplaceholder={placeholder}\n\t\t\t\tdisabled={disabled}\n\t\t\t\terror={error}\n\t\t\t\tonClearError={onClearError}\n\t\t\t\tendAdornmentWidth=\"var(--control-height)\"\n\t\t\t\tendAdornment={\n\t\t\t\t\t<Popover.Trigger>\n\t\t\t\t\t\t<div className={uiStyles.uiToggleButtonContainer}>\n\t\t\t\t\t\t\t<button type=\"button\" disabled={disabled} aria-label=\"Открыть календарь\" className={uiStyles.uiToggleButton}>\n\t\t\t\t\t\t\t\t<CalendarDaysIcon />\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</Popover.Trigger>\n\t\t\t\t}\n\t\t\t/>\n\n\t\t\t<Popover.Content background=\"primary\">\n\t\t\t\t<CalendarView\n\t\t\t\t\tview={calendarType}\n\t\t\t\t\tdatePickerLevel={minDatePickerLevel}\n\t\t\t\t\tselectionMode={selectionMode}\n\t\t\t\t\tweekEndDay={weekEndDay}\n\t\t\t\t\tonViewChange={updateCalendarType}\n\t\t\t\t\tvalue={selectedDate ?? null}\n\t\t\t\t\tonChange={handleCalendarDateSelect}\n\t\t\t\t\tminDate={minDate}\n\t\t\t\t\tmaxDate={maxDate}\n\t\t\t\t\tselectsRange={!!props.selectsRange}\n\t\t\t\t/>\n\t\t\t\t{showSelectionModeControl && (\n\t\t\t\t\t<div className={styles.selectionModeControl}>\n\t\t\t\t\t\t<RadioGroup<DateInputSelectionMode>\n\t\t\t\t\t\t\tvalue={selectionMode}\n\t\t\t\t\t\t\tonChange={handleSelectionModeChange}\n\t\t\t\t\t\t\tnoWrap\n\t\t\t\t\t\t\taria-label=\"Режим выбора даты\">\n\t\t\t\t\t\t\t{availableSelectionModeOptions.map((option) => (\n\t\t\t\t\t\t\t\t<RadioGroup.Option key={option.id} value={option.id} label={option.label} />\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</RadioGroup>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</Popover.Content>\n\t\t</Popover>\n\t);\n}\n\nexport function SingleDateInput(props: Omit<DateSingleInputProps, \"selectsRange\">) {\n\treturn <DateInput {...props} />;\n}\n\nexport function RangeDateInput(props: Omit<DateRangeInputProps, \"selectsRange\">) {\n\treturn <DateInput {...props} selectsRange={true} />;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"date-input-CzCDou4s.js","names":[],"sources":["../../src/date-input/lib/dateInputSelectionModes.ts","../../src/date-input/lib/dateInputValue.ts","../../src/date-input/model/useDateInput.ts","../../src/date-input/ui/DateInput.module.scss","../../src/date-input/ui/DateInput.tsx"],"sourcesContent":["import { normalizePresetIds, resolvePresetOptionsByIds, type PresetOption } from \"@ryuzaki13/react-foundation-lib/presets\";\n\nimport type { DateInputSelectionMode } from \"./types\";\n\n/**\n * Описание встроенного режима выбора даты для runtime-переключателя и внешних конфигураторов.\n */\nexport interface DateInputSelectionModeOption extends PresetOption<DateInputSelectionMode> {}\n\n/**\n * Канонический список режимов выбора даты.\n */\nexport const DATE_INPUT_SELECTION_MODES = Object.freeze([\n\t\"day\",\n\t\"week\",\n\t\"month\",\n\t\"year\"\n] as const satisfies readonly DateInputSelectionMode[]);\n\n/**\n * Встроенные режимы выбора даты с пользовательскими подписями.\n */\nexport const DATE_INPUT_SELECTION_MODE_OPTIONS: readonly DateInputSelectionModeOption[] = Object.freeze([\n\t{ id: \"day\", label: \"День\" },\n\t{ id: \"week\", label: \"Неделя\" },\n\t{ id: \"month\", label: \"Месяц\" },\n\t{ id: \"year\", label: \"Год\" }\n]);\n\nconst DATE_INPUT_SELECTION_MODE_SET: ReadonlySet<string> = new Set(DATE_INPUT_SELECTION_MODES);\n\n/**\n * Проверяет, что внешнее значение является поддерживаемым режимом выбора даты.\n */\nexport function isDateInputSelectionMode(value: unknown): value is DateInputSelectionMode {\n\treturn typeof value === \"string\" && DATE_INPUT_SELECTION_MODE_SET.has(value);\n}\n\n/**\n * Нормализует сохранённый список режимов, сохраняя пользовательский порядок и удаляя дубли.\n */\nexport function normalizeDateInputSelectionModes(\n\tvalue: unknown,\n\tfallbackModes: readonly DateInputSelectionMode[] = DATE_INPUT_SELECTION_MODES\n): DateInputSelectionMode[] {\n\treturn normalizePresetIds(value, isDateInputSelectionMode, fallbackModes);\n}\n\n/**\n * Формирует упорядоченный список описаний по сохранённым режимам выбора.\n */\nexport function resolveDateInputSelectionModeOptionsByModes(\n\tmodes: readonly DateInputSelectionMode[],\n\toptions: readonly DateInputSelectionModeOption[] = DATE_INPUT_SELECTION_MODE_OPTIONS\n): DateInputSelectionModeOption[] {\n\treturn resolvePresetOptionsByIds(modes, options);\n}\n","import {\n\tDEFAULT_DATE_PRESET_NAMES,\n\tformatDate,\n\tformatDateRange,\n\tgetCalendarPeriod,\n\tgetDatePreset,\n\tisDateRangeTuple,\n\tparseDateByFormat,\n\tresolveDateFormatName,\n\ttype CalendarPeriodOptions,\n\ttype DateFormatPrecision,\n\ttype DateRangeInput,\n\ttype NullableDateRange\n} from \"@ryuzaki13/react-foundation-lib/formatters\";\n\n/**\n * Пресет даты по умолчанию для текстового поля.\n */\nexport const DEFAULT_DATE_INPUT_PRESET = DEFAULT_DATE_PRESET_NAMES.date;\n\n/**\n * @deprecated Используйте `DEFAULT_DATE_INPUT_PRESET`.\n */\nexport const DEFAULT_DATE_INPUT_FORMAT = \"dd.MM.yyyy\";\n\nconst RANGE_SEPARATOR = \" - \";\n\nexport type DateInputValueOptions = {\n\t/**\n\t * Имя пресета форматирования даты.\n\t */\n\tdatePreset?: string;\n\t/**\n\t * Точность календарного значения.\n\t */\n\tdatePickerLevel?: DateFormatPrecision;\n\t/**\n\t * Размер периода, который выбирается и нормализуется полем.\n\t */\n\tselectionMode?: CalendarPeriodOptions[\"selectionMode\"];\n\t/**\n\t * Последний включённый день недели для режима выбора недели.\n\t */\n\tweekEndDay?: CalendarPeriodOptions[\"weekEndDay\"];\n\t/**\n\t * Опорная дата для пресетов без года, например `month-long`.\n\t */\n\treferenceDate?: Date;\n};\n\nexport type DateInputValueOptionsInput = string | DateInputValueOptions | undefined;\n\n/**\n * Возвращает точность форматирования поля даты.\n */\nfunction resolveDateInputPrecision(options: DateInputValueOptions): DateFormatPrecision {\n\tif (options.selectionMode === \"day\" || options.selectionMode === \"week\") {\n\t\treturn \"day\";\n\t}\n\n\tif (options.selectionMode === \"month\" || options.selectionMode === \"year\") {\n\t\treturn options.selectionMode;\n\t}\n\n\treturn options.datePickerLevel ?? \"day\";\n}\n\nfunction resolveCalendarPeriodOptions(options?: DateInputValueOptions): CalendarPeriodOptions {\n\treturn {\n\t\tselectionMode: options?.selectionMode,\n\t\tweekEndDay: options?.weekEndDay\n\t};\n}\n\n/**\n * Нормализует объектные опции и позиционный вызов с именем пресета.\n */\nfunction normalizeDateInputValueOptions(\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): DateInputValueOptions {\n\tif (typeof optionsOrPreset === \"string\" || optionsOrPreset === undefined) {\n\t\treturn {\n\t\t\tdatePreset: optionsOrPreset,\n\t\t\tdatePickerLevel\n\t\t};\n\t}\n\n\tif (datePickerLevel && optionsOrPreset.datePickerLevel === undefined) {\n\t\treturn {\n\t\t\t...optionsOrPreset,\n\t\t\tdatePickerLevel\n\t\t};\n\t}\n\n\treturn optionsOrPreset;\n}\n\n/**\n * Проверяет новый `datePreset` и возвращает только зарегистрированное имя пресета.\n */\nfunction resolveDateInputPresetName(datePreset?: string): string {\n\tconst resolvedPresetName = resolveDateFormatName(datePreset, DEFAULT_DATE_INPUT_PRESET);\n\treturn getDatePreset(resolvedPresetName) ? resolvedPresetName : DEFAULT_DATE_INPUT_PRESET;\n}\n\n/**\n * Приводит результат универсального парсинга к календарной дате.\n */\nfunction parseDateTimeValue(value: string, options: DateInputValueOptions): Date | null {\n\treturn (\n\t\tparseDateByFormat(value, resolveDateInputPresetName(options.datePreset), {\n\t\t\tdefaultFormat: DEFAULT_DATE_INPUT_PRESET,\n\t\t\tprecision: resolveDateInputPrecision(options),\n\t\t\treferenceDate: options.referenceDate\n\t\t})?.date ?? null\n\t);\n}\n\n/**\n * Приводит одиночную дату к началу выбранного календарного периода.\n */\nexport function normalizeSingleDateValue(date: Date | null, options?: DateInputValueOptions): Date | null {\n\treturn getCalendarPeriod(date, resolveCalendarPeriodOptions(options))?.start ?? null;\n}\n\n/**\n * Приводит диапазон дат к границам выбранных календарных периодов.\n */\nexport function normalizeRangeDateValue(range: NullableDateRange | null, options?: DateInputValueOptions): NullableDateRange | null {\n\tif (!isDateRangeTuple(range)) return null;\n\n\tconst [startDate, endDate] = range;\n\treturn [normalizeSingleDateValue(startDate, options), normalizeRangeEndDateValue(endDate, options)];\n}\n\n/**\n * Приводит конечную дату диапазона к концу выбранного календарного периода.\n */\nexport function normalizeRangeEndDateValue(date: Date | null, options?: DateInputValueOptions): Date | null {\n\treturn getCalendarPeriod(date, resolveCalendarPeriodOptions(options))?.end ?? null;\n}\n\nfunction getDateTime(date: Date | null): number | null {\n\treturn date?.getTime() ?? null;\n}\n\n/**\n * Сравнивает одиночные даты после нормализации к точности поля ввода.\n */\nexport function areSingleDateValuesEqual(left: Date | null, right: Date | null, options?: DateInputValueOptions): boolean {\n\treturn getDateTime(normalizeSingleDateValue(left, options)) === getDateTime(normalizeSingleDateValue(right, options));\n}\n\n/**\n * Сравнивает диапазоны дат после нормализации к границам выбранных периодов.\n */\nexport function areRangeDateValuesEqual(\n\tleft: NullableDateRange | null,\n\tright: NullableDateRange | null,\n\toptions?: DateInputValueOptions\n): boolean {\n\tconst normalizedLeft = normalizeRangeDateValue(left, options);\n\tconst normalizedRight = normalizeRangeDateValue(right, options);\n\n\treturn (\n\t\tgetDateTime(normalizedLeft?.[0] ?? null) === getDateTime(normalizedRight?.[0] ?? null) &&\n\t\tgetDateTime(normalizedLeft?.[1] ?? null) === getDateTime(normalizedRight?.[1] ?? null)\n\t);\n}\n\n/**\n * Форматирует одиночную дату для текстового поля.\n */\nexport function formatSingleDateValue(\n\tdate: Date | null,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): string {\n\tif (!date) return \"\";\n\n\tconst options = normalizeDateInputValueOptions(optionsOrPreset, datePickerLevel);\n\tconst period = getCalendarPeriod(date, resolveCalendarPeriodOptions(options));\n\n\t// Single-поле хранит начало недели, но показывает обе включительные границы выбранного периода.\n\tif (options.selectionMode === \"week\" && period) {\n\t\treturn formatDateRange(period.start, period.end, resolveDateInputPresetName(options.datePreset), {\n\t\t\tprecision: resolveDateInputPrecision(options)\n\t\t});\n\t}\n\n\treturn formatDate(date, resolveDateInputPresetName(options.datePreset), {\n\t\tprecision: resolveDateInputPrecision(options)\n\t});\n}\n\n/**\n * Форматирует диапазон дат для текстового поля.\n */\nexport function formatRangeDateValue(\n\trange: NullableDateRange | null,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): string {\n\tif (!isDateRangeTuple(range)) return \"\";\n\n\tconst options = normalizeDateInputValueOptions(optionsOrPreset, datePickerLevel);\n\tconst [startDate, endDate] = range;\n\tif (startDate && endDate) {\n\t\treturn formatDateRange(startDate, endDate, resolveDateInputPresetName(options.datePreset), {\n\t\t\tprecision: resolveDateInputPrecision(options)\n\t\t});\n\t}\n\n\tif (startDate) {\n\t\treturn `${formatDate(startDate, resolveDateInputPresetName(options.datePreset), {\n\t\t\tprecision: resolveDateInputPrecision(options)\n\t\t})}${RANGE_SEPARATOR}`;\n\t}\n\n\treturn \"\";\n}\n\n/**\n * Унифицирует форматирование значения поля даты.\n */\nexport function formatDateInputValue(\n\tvalue: DateRangeInput,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): string {\n\tif (isDateRangeTuple(value)) {\n\t\treturn formatRangeDateValue(value, optionsOrPreset, datePickerLevel);\n\t}\n\n\treturn formatSingleDateValue(value, optionsOrPreset, datePickerLevel);\n}\n\n/**\n * Парсит строку одиночной даты по заданному пресету.\n */\nexport function parseSingleDateValue(\n\tvalue: string,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): Date | null {\n\tconst options = normalizeDateInputValueOptions(optionsOrPreset, datePickerLevel);\n\t// Для отображаемого диапазона single-week источником значения остаётся его первая граница.\n\tconst singleValue = options.selectionMode === \"week\" ? (value.split(RANGE_SEPARATOR)[0] ?? \"\") : value;\n\n\treturn normalizeSingleDateValue(parseDateTimeValue(singleValue, options), options);\n}\n\n/**\n * Парсит строку диапазона дат по заданному пресету.\n */\nexport function parseRangeDateValue(\n\tvalue: string,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): NullableDateRange {\n\tconst options = normalizeDateInputValueOptions(optionsOrPreset, datePickerLevel);\n\tconst [startPart = \"\", endPart = \"\"] = value.split(RANGE_SEPARATOR);\n\n\treturn [parseSingleDateValue(startPart, options), parseRangeEndDateValue(endPart, options)];\n}\n\n/**\n * Парсит конечную дату диапазона и нормализует её к концу суток.\n */\nexport function parseRangeEndDateValue(\n\tvalue: string,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): Date | null {\n\tconst options = normalizeDateInputValueOptions(optionsOrPreset, datePickerLevel);\n\treturn normalizeRangeEndDateValue(parseDateTimeValue(value, options), options);\n}\n","import { useMemo, useState } from \"react\";\n\nimport { isDateRangeTuple, type NullableDateRange } from \"@ryuzaki13/react-foundation-lib/formatters\";\n\nimport {\n\tDateInputValueOptions,\n\tformatDateInputValue,\n\tnormalizeRangeDateValue,\n\tnormalizeRangeEndDateValue,\n\tnormalizeSingleDateValue,\n\tparseRangeDateValue,\n\tparseSingleDateValue,\n\ttype DateInputOptions\n} from \"../lib\";\n\nfunction resolveReferenceDate(value: Date | NullableDateRange | null): Date | undefined {\n\tif (isDateRangeTuple(value)) {\n\t\treturn value[0] ?? value[1] ?? undefined;\n\t}\n\n\treturn value ?? undefined;\n}\n\n/**\n * Хук управляет текстовым представлением и выбранным значением поля даты.\n */\nexport const useDateInput = (options: DateInputOptions) => {\n\tconst externalSelectedDate = useMemo(() => {\n\t\tconst selectionOptions: DateInputValueOptions = {\n\t\t\tselectionMode: options.selectionMode,\n\t\t\tweekEndDay: options.weekEndDay\n\t\t};\n\n\t\tif (options.selectsRange) {\n\t\t\treturn normalizeRangeDateValue(options.value as NullableDateRange | null, selectionOptions);\n\t\t}\n\n\t\treturn normalizeSingleDateValue(options.value as Date | null, selectionOptions);\n\t}, [options.selectsRange, options.selectionMode, options.value, options.weekEndDay]);\n\tconst formatOptions = useMemo<DateInputValueOptions>(\n\t\t() => ({\n\t\t\tdatePreset: options.datePreset,\n\t\t\tdatePickerLevel: options.datePickerLevel,\n\t\t\tselectionMode: options.selectionMode,\n\t\t\tweekEndDay: options.weekEndDay\n\t\t}),\n\t\t[options.datePickerLevel, options.datePreset, options.selectionMode, options.weekEndDay]\n\t);\n\tconst externalInputValue = formatDateInputValue(externalSelectedDate, formatOptions);\n\tconst externalStateSignature = JSON.stringify([\n\t\toptions.selectsRange,\n\t\toptions.datePreset ?? null,\n\t\toptions.datePickerLevel ?? null,\n\t\toptions.selectionMode ?? null,\n\t\toptions.weekEndDay ?? null,\n\t\tisDateRangeTuple(externalSelectedDate)\n\t\t\t? [externalSelectedDate[0]?.getTime() ?? null, externalSelectedDate[1]?.getTime() ?? null]\n\t\t\t: (externalSelectedDate?.getTime() ?? null)\n\t]);\n\tconst [draftState, setDraftState] = useState(() => ({\n\t\tsourceSignature: externalStateSignature,\n\t\tselectedDate: externalSelectedDate,\n\t\tinputValue: externalInputValue\n\t}));\n\tconst hasCurrentDraft = draftState.sourceSignature === externalStateSignature;\n\tconst selectedDate = hasCurrentDraft ? draftState.selectedDate : externalSelectedDate;\n\tconst inputValue = hasCurrentDraft ? draftState.inputValue : externalInputValue;\n\n\t/**\n\t * Сохраняет пользовательский текст только относительно текущего controlled-снимка.\n\t * При внешней смене value или формата отображение сразу выводится из новых props.\n\t */\n\tconst setInputValue = (nextInputValue: string) => {\n\t\tsetDraftState((currentState) => {\n\t\t\tconst currentSelectedDate =\n\t\t\t\tcurrentState.sourceSignature === externalStateSignature ? currentState.selectedDate : externalSelectedDate;\n\n\t\t\treturn {\n\t\t\t\tsourceSignature: externalStateSignature,\n\t\t\t\tselectedDate: currentSelectedDate,\n\t\t\t\tinputValue: nextInputValue\n\t\t\t};\n\t\t});\n\t};\n\n\t/**\n\t * Обновляет локальный незавершённый выбор, не зеркаля controlled value через effect.\n\t */\n\tconst setSelectedDate = (nextSelectedDate: Date | NullableDateRange | null) => {\n\t\tsetDraftState((currentState) => {\n\t\t\tconst currentInputValue =\n\t\t\t\tcurrentState.sourceSignature === externalStateSignature ? currentState.inputValue : externalInputValue;\n\n\t\t\treturn {\n\t\t\t\tsourceSignature: externalStateSignature,\n\t\t\t\tselectedDate: nextSelectedDate,\n\t\t\t\tinputValue: currentInputValue\n\t\t\t};\n\t\t});\n\t};\n\n\t/**\n\t * Форматирует значение поля даты согласно текущему пресету.\n\t */\n\tconst formatValue = (value: Date | NullableDateRange | null): string => formatDateInputValue(value, formatOptions);\n\n\t/**\n\t * Парсит строковое значение поля в дату или диапазон дат.\n\t */\n\tconst parseDate = (dateString: string): Date | NullableDateRange | null => {\n\t\tconst parseOptions: DateInputValueOptions = {\n\t\t\t...formatOptions,\n\t\t\treferenceDate: resolveReferenceDate(selectedDate)\n\t\t};\n\n\t\tif (options.selectsRange) {\n\t\t\treturn parseRangeDateValue(dateString, parseOptions);\n\t\t}\n\n\t\treturn parseSingleDateValue(dateString, parseOptions);\n\t};\n\n\t/**\n\t * Обрабатывает выбор даты из календаря.\n\t */\n\tconst handleSelect = (date: Date | NullableDateRange) => {\n\t\tconst [selectedStartDate, selectedEndDate] = (Array.isArray(date) ? date : [date, null]) as NullableDateRange;\n\n\t\tif (options.selectsRange) {\n\t\t\tconst normalizedStartDate = normalizeSingleDateValue(selectedStartDate, formatOptions);\n\t\t\tconst normalizedEndDate = normalizeRangeEndDateValue(selectedEndDate, formatOptions);\n\n\t\t\tif (normalizedStartDate && normalizedEndDate) {\n\t\t\t\tif (normalizedEndDate < normalizedStartDate) {\n\t\t\t\t\tconst swappedRange: NullableDateRange = [\n\t\t\t\t\t\tnormalizeSingleDateValue(selectedEndDate, formatOptions),\n\t\t\t\t\t\tnormalizeRangeEndDateValue(selectedStartDate, formatOptions)\n\t\t\t\t\t];\n\t\t\t\t\tsetDraftState({\n\t\t\t\t\t\tsourceSignature: externalStateSignature,\n\t\t\t\t\t\tselectedDate: swappedRange,\n\t\t\t\t\t\tinputValue: formatValue(swappedRange)\n\t\t\t\t\t});\n\t\t\t\t\toptions.onChange(swappedRange);\n\t\t\t\t} else {\n\t\t\t\t\tconst nextRange: NullableDateRange = [normalizedStartDate, normalizedEndDate];\n\t\t\t\t\tsetDraftState({\n\t\t\t\t\t\tsourceSignature: externalStateSignature,\n\t\t\t\t\t\tselectedDate: nextRange,\n\t\t\t\t\t\tinputValue: formatValue(nextRange)\n\t\t\t\t\t});\n\t\t\t\t\toptions.onChange(nextRange);\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tconst nextRange: NullableDateRange = [normalizedStartDate, null];\n\t\t\tsetDraftState({\n\t\t\t\tsourceSignature: externalStateSignature,\n\t\t\t\tselectedDate: nextRange,\n\t\t\t\tinputValue: formatValue(nextRange)\n\t\t\t});\n\t\t\treturn false;\n\t\t}\n\n\t\tconst normalizedDate = normalizeSingleDateValue(selectedStartDate, formatOptions);\n\t\tsetDraftState({\n\t\t\tsourceSignature: externalStateSignature,\n\t\t\tselectedDate: normalizedDate,\n\t\t\tinputValue: formatValue(normalizedDate)\n\t\t});\n\t\toptions.onChange(normalizedDate);\n\n\t\treturn true;\n\t};\n\n\treturn {\n\t\tinputValue,\n\t\tsetInputValue,\n\t\tselectedDate,\n\t\tsetSelectedDate,\n\t\thandleSelect,\n\t\tformatDate: formatValue,\n\t\tparseDate\n\t};\n};\n",".selectionModeControl {\n\tmargin-top: var(--space-sm);\n\tpadding-top: var(--space-sm);\n\tborder-top: var(--border);\n}\n","import { JSX, useCallback, useEffect, useRef, useState } from \"react\";\n\nimport { isDateRangeTuple, type NullableDateRange } from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport { CalendarDaysIcon } from \"lucide-react\";\n\nimport { InputText } from \"../../input\";\nimport { Popover } from \"../../popover\";\nimport { RadioGroup } from \"../../radio-group\";\nimport { UiBaseProps } from \"../../types\";\nimport uiStyles from \"../../ui.module.scss\";\nimport {\n\tareRangeDateValuesEqual,\n\tareSingleDateValuesEqual,\n\tDATE_INPUT_SELECTION_MODES,\n\tisDatePickerLevelAvailable,\n\tnormalizeDateInputSelectionModes,\n\tresolveAvailableDatePickerLevel,\n\tresolveDateInputSelectionModeOptionsByModes,\n\ttype DateInputSelectionMode,\n\ttype DateInputSelectionModeDatePresets,\n\ttype DateInputSelectionModeOption,\n\ttype DateInputWeekEndDay,\n\ttype DatePickerLevel\n} from \"../lib\";\nimport { useDateInput } from \"../model\";\n\nimport { CalendarView } from \"./CalendarView\";\nimport styles from \"./DateInput.module.scss\";\n\ninterface BaseDateInputProps {\n\terror?: string;\n\tonClearError?: () => void;\n\n\tminDate?: Date;\n\tmaxDate?: Date;\n\n\tdatePreset?: string;\n\n\t/**\n\t * Минимальный уровень календарной навигации. Размер выбранного периода задаёт `selectionMode`.\n\t */\n\tdatePickerLevel?: DatePickerLevel;\n\t/**\n\t * Размер периода, который выбирает поле: день, неделя, месяц или год.\n\t */\n\tselectionMode?: DateInputSelectionMode;\n\t/**\n\t * Последний включённый день недели для `selectionMode=\"week\"`.\n\t */\n\tweekEndDay?: DateInputWeekEndDay;\n\t/**\n\t * Показывает переключатель `selectionMode` под календарём.\n\t */\n\tallowSelectionModeChange?: boolean;\n\t/**\n\t * Ограничивает набор режимов в runtime-переключателе.\n\t */\n\tselectionModeOptions?: readonly DateInputSelectionMode[];\n\t/**\n\t * Задаёт отдельный пресет форматирования для каждого runtime-режима выбора.\n\t * Общий `datePreset` используется как fallback для отсутствующих значений.\n\t */\n\tselectionModeDatePresets?: DateInputSelectionModeDatePresets;\n\t/**\n\t * Сообщает наружу о runtime-смене режима выбора.\n\t */\n\tonSelectionModeChange?: (selectionMode: DateInputSelectionMode) => void;\n}\n\nexport interface DateSingleInputProps extends BaseDateInputProps, UiBaseProps<Date | null> {\n\tselectsRange?: false;\n}\nexport interface DateRangeInputProps extends BaseDateInputProps, UiBaseProps<NullableDateRange | null> {\n\tselectsRange: true;\n}\n\ntype DateInputProps = DateSingleInputProps | DateRangeInputProps;\n\ninterface CalendarTypeState {\n\treadonly view: DatePickerLevel;\n\treadonly selectionMode: DateInputSelectionMode;\n\treadonly minDatePickerLevel: DatePickerLevel;\n}\n\nfunction resolveSelectionModeOptions(\n\tselectionModeOptions: readonly DateInputSelectionMode[] | undefined,\n\tselectionMode: DateInputSelectionMode\n): readonly DateInputSelectionModeOption[] {\n\tconst configuredModes = normalizeDateInputSelectionModes(selectionModeOptions, DATE_INPUT_SELECTION_MODES);\n\tconst availableModes = configuredModes.includes(selectionMode) ? configuredModes : [...configuredModes, selectionMode];\n\n\treturn resolveDateInputSelectionModeOptionsByModes(availableModes);\n}\n\nfunction DateInput(props: DateSingleInputProps): JSX.Element;\nfunction DateInput(props: DateRangeInputProps): JSX.Element;\nfunction DateInput({\n\tplaceholder,\n\tdisabled,\n\terror,\n\tonClearError,\n\tminDate,\n\tmaxDate,\n\tdatePreset,\n\tdatePickerLevel,\n\tselectionMode: controlledSelectionMode,\n\tweekEndDay = \"sunday\",\n\tallowSelectionModeChange,\n\tselectionModeOptions,\n\tselectionModeDatePresets,\n\tonSelectionModeChange,\n\t...props\n}: DateInputProps) {\n\tconst [open, setOpen] = useState(false);\n\tconst configuredSelectionModes = normalizeDateInputSelectionModes(selectionModeOptions, DATE_INPUT_SELECTION_MODES);\n\tconst [uncontrolledSelectionMode, setUncontrolledSelectionMode] = useState<DateInputSelectionMode>(\n\t\t() => controlledSelectionMode ?? configuredSelectionModes[0] ?? \"day\"\n\t);\n\tconst selectionMode = controlledSelectionMode ?? uncontrolledSelectionMode;\n\tconst activeDatePreset = allowSelectionModeChange ? (selectionModeDatePresets?.[selectionMode] ?? datePreset) : datePreset;\n\tconst minDatePickerLevel = datePickerLevel ?? \"day\";\n\tconst preferredCalendarType = resolveAvailableDatePickerLevel(selectionMode, minDatePickerLevel);\n\tconst [calendarTypeState, setCalendarTypeState] = useState<CalendarTypeState>(() => ({\n\t\tview: preferredCalendarType,\n\t\tselectionMode,\n\t\tminDatePickerLevel\n\t}));\n\tconst calendarType =\n\t\tcalendarTypeState.selectionMode === selectionMode &&\n\t\tcalendarTypeState.minDatePickerLevel === minDatePickerLevel &&\n\t\tisDatePickerLevelAvailable(calendarTypeState.view, minDatePickerLevel)\n\t\t\t? calendarTypeState.view\n\t\t\t: preferredCalendarType;\n\n\tconst initialDateRef = useRef(props.value);\n\tconst dateInputValueOptions = {\n\t\tselectionMode,\n\t\tweekEndDay\n\t};\n\n\tconst { inputValue, setInputValue, selectedDate, setSelectedDate, handleSelect, formatDate, parseDate } = useDateInput({\n\t\t...props,\n\t\tdatePreset: activeDatePreset,\n\t\tdatePickerLevel: minDatePickerLevel,\n\t\tselectionMode,\n\t\tweekEndDay\n\t});\n\tconst rangeOnChange = props.selectsRange ? props.onChange : undefined;\n\n\tconst updateCalendarType = useCallback(\n\t\t(calendarType: DatePickerLevel) => {\n\t\t\tif (isDatePickerLevelAvailable(calendarType, minDatePickerLevel)) {\n\t\t\t\tsetCalendarTypeState({\n\t\t\t\t\tview: calendarType,\n\t\t\t\t\tselectionMode,\n\t\t\t\t\tminDatePickerLevel\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t[minDatePickerLevel, selectionMode]\n\t);\n\n\tuseEffect(() => {\n\t\tinitialDateRef.current = props.value;\n\t}, [props.value]);\n\n\tconst handleInputBlur = () => {\n\t\tif (inputValue) {\n\t\t\tconst parsedDate = parseDate(inputValue);\n\t\t\tif (parsedDate) {\n\t\t\t\tsetInputValue(formatDate(parsedDate));\n\n\t\t\t\tif (props.selectsRange && isDateRangeTuple(parsedDate)) {\n\t\t\t\t\tconst selectedRange = isDateRangeTuple(selectedDate) ? selectedDate : null;\n\n\t\t\t\t\tif (areRangeDateValuesEqual(parsedDate, selectedRange, dateInputValueOptions)) return;\n\n\t\t\t\t\tsetSelectedDate(parsedDate);\n\t\t\t\t\tprops.onChange(parsedDate);\n\t\t\t\t} else if (!props.selectsRange && parsedDate instanceof Date) {\n\t\t\t\t\tconst selectedSingleDate = selectedDate instanceof Date ? selectedDate : null;\n\n\t\t\t\t\tif (areSingleDateValuesEqual(parsedDate, selectedSingleDate, dateInputValueOptions)) return;\n\n\t\t\t\t\tsetSelectedDate(parsedDate);\n\t\t\t\t\tprops.onChange(parsedDate);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n\t\tif (event.key === \"Enter\") {\n\t\t\tevent.preventDefault();\n\t\t\thandleInputBlur();\n\t\t}\n\t};\n\n\tconst handleCalendarDateSelect = useCallback(\n\t\t(value: Date | NullableDateRange) => {\n\t\t\tif (handleSelect(value)) {\n\t\t\t\tsetOpen(false);\n\t\t\t}\n\t\t},\n\t\t[handleSelect]\n\t);\n\n\tconst handleSelectionModeChange = useCallback(\n\t\t(nextSelectionMode: DateInputSelectionMode) => {\n\t\t\tif (controlledSelectionMode === undefined) {\n\t\t\t\tsetUncontrolledSelectionMode(nextSelectionMode);\n\t\t\t}\n\n\t\t\tonSelectionModeChange?.(nextSelectionMode);\n\t\t\tsetCalendarTypeState({\n\t\t\t\tview: resolveAvailableDatePickerLevel(nextSelectionMode, minDatePickerLevel),\n\t\t\t\tselectionMode: nextSelectionMode,\n\t\t\t\tminDatePickerLevel\n\t\t\t});\n\t\t},\n\t\t[controlledSelectionMode, minDatePickerLevel, onSelectionModeChange]\n\t);\n\n\tconst handleCancel = useCallback(() => {\n\t\t// Восстановить исходное состояние при отмене\n\t\tif (rangeOnChange) {\n\t\t\tconst [, selectedEndDate] = isDateRangeTuple(selectedDate) ? selectedDate : [null, null];\n\n\t\t\tif (!selectedEndDate) {\n\t\t\t\t// Восстановить исходное состояние диапазона\n\t\t\t\tconst initialValue = initialDateRef.current;\n\t\t\t\tconst initialRange = Array.isArray(initialValue) ? initialValue : null;\n\t\t\t\tconst initialStart = initialRange?.[0] ?? null;\n\t\t\t\tconst initialEnd = initialRange?.[1] ?? null;\n\n\t\t\t\tif (initialStart && initialEnd) {\n\t\t\t\t\tconst initialSelectedDate: NullableDateRange = [initialStart, initialEnd];\n\t\t\t\t\tsetSelectedDate(initialSelectedDate);\n\t\t\t\t\tsetInputValue(formatDate(initialSelectedDate));\n\n\t\t\t\t\trangeOnChange(initialSelectedDate);\n\t\t\t\t} else {\n\t\t\t\t\t// Если начального диапазона нет, очистить всё\n\t\t\t\t\tsetSelectedDate([null, null]);\n\t\t\t\t\tsetInputValue(\"\");\n\n\t\t\t\t\trangeOnChange([null, null]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, [rangeOnChange, selectedDate, setSelectedDate, setInputValue, formatDate]);\n\n\tconst availableSelectionModeOptions = resolveSelectionModeOptions(selectionModeOptions, selectionMode);\n\tconst showSelectionModeControl = allowSelectionModeChange && availableSelectionModeOptions.length > 1;\n\n\treturn (\n\t\t<Popover\n\t\t\topen={open}\n\t\t\tonOpenChange={(value) => {\n\t\t\t\tsetOpen(value);\n\t\t\t\tif (!value) {\n\t\t\t\t\thandleCancel();\n\t\t\t\t}\n\t\t\t}}>\n\t\t\t<InputText\n\t\t\t\tlabel={props.label}\n\t\t\t\tdescription={props.description}\n\t\t\t\tsize={props.size}\n\t\t\t\tvalue={inputValue}\n\t\t\t\tonChange={setInputValue}\n\t\t\t\tonBlur={handleInputBlur}\n\t\t\t\tonKeyUp={handleKeyDown}\n\t\t\t\tplaceholder={placeholder}\n\t\t\t\tdisabled={disabled}\n\t\t\t\terror={error}\n\t\t\t\tonClearError={onClearError}\n\t\t\t\tendAdornmentWidth=\"var(--control-height)\"\n\t\t\t\tendAdornment={\n\t\t\t\t\t<div className={uiStyles.uiToggleButtonContainer}>\n\t\t\t\t\t\t<Popover.Trigger>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\taria-label=\"Открыть календарь\"\n\t\t\t\t\t\t\t\taria-haspopup=\"dialog\"\n\t\t\t\t\t\t\t\tclassName={uiStyles.uiToggleButton}>\n\t\t\t\t\t\t\t\t<CalendarDaysIcon />\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</Popover.Trigger>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t/>\n\n\t\t\t<Popover.Content background=\"primary\" role=\"dialog\" aria-label={props.selectsRange ? \"Выбор диапазона дат\" : \"Выбор даты\"}>\n\t\t\t\t<CalendarView\n\t\t\t\t\tview={calendarType}\n\t\t\t\t\tdatePickerLevel={minDatePickerLevel}\n\t\t\t\t\tselectionMode={selectionMode}\n\t\t\t\t\tweekEndDay={weekEndDay}\n\t\t\t\t\tonViewChange={updateCalendarType}\n\t\t\t\t\tvalue={selectedDate ?? null}\n\t\t\t\t\tonChange={handleCalendarDateSelect}\n\t\t\t\t\tminDate={minDate}\n\t\t\t\t\tmaxDate={maxDate}\n\t\t\t\t\tselectsRange={!!props.selectsRange}\n\t\t\t\t/>\n\t\t\t\t{showSelectionModeControl && (\n\t\t\t\t\t<div className={styles.selectionModeControl}>\n\t\t\t\t\t\t<RadioGroup<DateInputSelectionMode>\n\t\t\t\t\t\t\tvalue={selectionMode}\n\t\t\t\t\t\t\tonChange={handleSelectionModeChange}\n\t\t\t\t\t\t\tnoWrap\n\t\t\t\t\t\t\taria-label=\"Режим выбора даты\">\n\t\t\t\t\t\t\t{availableSelectionModeOptions.map((option) => (\n\t\t\t\t\t\t\t\t<RadioGroup.Option key={option.id} value={option.id} label={option.label} />\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</RadioGroup>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</Popover.Content>\n\t\t</Popover>\n\t);\n}\n\nexport function SingleDateInput(props: Omit<DateSingleInputProps, \"selectsRange\">) {\n\treturn <DateInput {...props} />;\n}\n\nexport function RangeDateInput(props: Omit<DateRangeInputProps, \"selectsRange\">) {\n\treturn <DateInput {...props} selectsRange={true} />;\n}\n"],"mappings":"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"}
@@ -0,0 +1,222 @@
1
+ import { PolymorphicComponent as e } from "../polymorphic/index.js";
2
+ import { cn as t } from "@ryuzaki13/react-foundation-lib/utils";
3
+ import { jsx as n } from "react/jsx-runtime";
4
+ import { useMemo as r } from "react";
5
+ import { resolveProps as i, useMatchMedia as a } from "@ryuzaki13/react-foundation-lib/media";
6
+ var o = {
7
+ container: "ZNPIAt",
8
+ inline: "FOfB6f",
9
+ row: "S3zmDT",
10
+ column: "ZFdq8E",
11
+ rowReverse: "VAzJwr",
12
+ columnReverse: "-U1mun",
13
+ wrap: "_4ZMtr-",
14
+ nowrap: "SKOoTV",
15
+ wrapReverse: "sSe6vs",
16
+ alignStart: "_3K-dKm",
17
+ alignCenter: "-Pfy-z",
18
+ alignEnd: "beSYgR",
19
+ alignStretch: "Ewhv1G",
20
+ alignBaseline: "JXvBB6",
21
+ justifyStart: "hN3T0k",
22
+ justifyCenter: "KKCJ5o",
23
+ justifyEnd: "MnX1Le",
24
+ justifyStretch: "Hom9eH",
25
+ justifyBetween: "Oujm4J",
26
+ justifyAround: "_2ttx6l",
27
+ justifyEvenly: "QEwI8b",
28
+ alignContentStart: "_7GQOS7",
29
+ alignContentCenter: "_2IOpAA",
30
+ alignContentEnd: "fZOYKH",
31
+ alignContentStretch: "_01H9Wl",
32
+ alignContentBetween: "GiMq3P",
33
+ alignContentAround: "tfwckC",
34
+ alignContentEvenly: "_9tNYb7",
35
+ gapNone: "PoehYn",
36
+ gapRowXs: "D9yh46",
37
+ gapRowSm: "B5WUhS",
38
+ gapRowMd: "KfUmo4",
39
+ gapRowLg: "m-8JGj",
40
+ gapRowXl: "zFcs1z",
41
+ gapColumnXs: "_0wKkFA",
42
+ gapColumnSm: "VQY6wh",
43
+ gapColumnMd: "csJmh7",
44
+ gapColumnLg: "_-8r3Oj",
45
+ gapColumnXl: "sCELJe",
46
+ gapXs: "NrH1WE",
47
+ gapSm: "IIgbrj",
48
+ gapMd: "alT7CJ",
49
+ gapLg: "TBFK23",
50
+ gapXl: "JR1URZ",
51
+ item: "i1imd3",
52
+ grow: "IVZ-ii",
53
+ grow0: "zhghPS",
54
+ shrink: "-A4gJM",
55
+ shrink0: "_3Q-lT-",
56
+ basis0: "YSg8P9",
57
+ basisAuto: "RMXnTk",
58
+ flex0: "YyYE7z",
59
+ flex1: "LD3bM5",
60
+ alignSelfStart: "HpcoTp",
61
+ alignSelfCenter: "E7ItD3",
62
+ alignSelfEnd: "v0JFEC",
63
+ alignSelfStretch: "pmMEmH",
64
+ alignSelfBaseline: "qevFHG",
65
+ justifySelfCenter: "OTPY33",
66
+ justifySelfEnd: "AjRxTP",
67
+ justifySelfStretch: "_1YaZWf",
68
+ center: "H-DHBq",
69
+ columnCenter: "JzIGGJ",
70
+ centerBetween: "aqYTBq"
71
+ }, s = (e) => r(() => {
72
+ let t = [o.container];
73
+ return e.inline && t.push(o.inline), e.row ? t.push(o.row) : e.column ? t.push(o.column) : e.rowReverse ? t.push(o.rowReverse) : e.columnReverse && t.push(o.columnReverse), e.wrap ? t.push(o.wrap) : e.nowrap ? t.push(o.nowrap) : e.wrapReverse && t.push(o.wrapReverse), e.align && t.push(o[`align${e.align.charAt(0).toUpperCase() + e.align.slice(1)}`]), e.justify && t.push(o[`justify${e.justify.charAt(0).toUpperCase() + e.justify.slice(1)}`]), e.alignContent && t.push(o[`alignContent${e.alignContent.charAt(0).toUpperCase() + e.alignContent.slice(1)}`]), e.gap === "none" ? t.push(o.gapNone) : e.gap && t.push(o[`gap${e.gap.charAt(0).toUpperCase() + e.gap.slice(1)}`]), e.gapRow && t.push(o[`gapRow${e.gapRow.charAt(0).toUpperCase() + e.gapRow.slice(1)}`]), e.gapColumn && t.push(o[`gapColumn${e.gapColumn.charAt(0).toUpperCase() + e.gapColumn.slice(1)}`]), t.filter(Boolean).join(" ");
74
+ }, [e]), c = (e) => r(() => {
75
+ let t = [o.item];
76
+ return e.flex0 && t.push(o.flex0), e.flex1 && t.push(o.flex1), !e.flex0 && !e.flex1 && (e.grow ? t.push(o.grow) : t.push(o.grow0), e.shrink === !1 ? t.push(o.shrink0) : t.push(o.shrink), e.basis === "0" ? t.push(o.basis0) : e.basis === "auto" && t.push(o.basisAuto)), e.alignSelf && t.push(o[`alignSelf${e.alignSelf.charAt(0).toUpperCase() + e.alignSelf.slice(1)}`]), e.justifySelf && t.push(o[`justifySelf${e.justifySelf.charAt(0).toUpperCase() + e.justifySelf.slice(1)}`]), t.filter(Boolean).join(" ");
77
+ }, [e]), l = (e) => o[e], u = [
78
+ "inline",
79
+ "row",
80
+ "column",
81
+ "rowReverse",
82
+ "columnReverse",
83
+ "wrap",
84
+ "nowrap",
85
+ "wrapReverse",
86
+ "align",
87
+ "justify",
88
+ "alignContent",
89
+ "gap",
90
+ "gapRow",
91
+ "gapColumn"
92
+ ];
93
+ function d({ ref: t, children: o, className: c = "", as: l, style: d, inline: f, row: p, column: m, rowReverse: h, columnReverse: g, wrap: _, nowrap: v, wrapReverse: y, align: b, justify: x, alignContent: S, gap: C, gapRow: w, gapColumn: T, ...E }) {
94
+ let { activeBreakpoint: D } = a(), O = [s(r(() => i({
95
+ inline: f,
96
+ row: p,
97
+ column: m,
98
+ rowReverse: h,
99
+ columnReverse: g,
100
+ wrap: _,
101
+ nowrap: v,
102
+ wrapReverse: y,
103
+ align: b,
104
+ justify: x,
105
+ alignContent: S,
106
+ gap: C,
107
+ gapRow: w,
108
+ gapColumn: T
109
+ }, D, u), [
110
+ D,
111
+ b,
112
+ S,
113
+ m,
114
+ g,
115
+ C,
116
+ T,
117
+ w,
118
+ f,
119
+ x,
120
+ v,
121
+ p,
122
+ h,
123
+ _,
124
+ y
125
+ ])), c].filter(Boolean).join(" ");
126
+ return /* @__PURE__ */ n(e, {
127
+ as: l,
128
+ ...E,
129
+ ref: t,
130
+ className: O,
131
+ style: d,
132
+ children: o
133
+ });
134
+ }
135
+ d.displayName = "FlexContainer";
136
+ //#endregion
137
+ //#region src/flex/FlexItem.tsx
138
+ var f = [
139
+ "flex0",
140
+ "flex1",
141
+ "grow",
142
+ "shrink",
143
+ "basis",
144
+ "alignSelf",
145
+ "justifySelf"
146
+ ];
147
+ function p({ ref: t, children: o, className: s = "", as: l, style: u, flex0: d, flex1: p, grow: m, shrink: h, basis: g, alignSelf: _, justifySelf: v, ...y }) {
148
+ let { activeBreakpoint: b } = a(), x = [c(r(() => i({
149
+ flex0: d,
150
+ flex1: p,
151
+ grow: m,
152
+ shrink: h,
153
+ basis: g,
154
+ alignSelf: _,
155
+ justifySelf: v
156
+ }, b, f), [
157
+ b,
158
+ _,
159
+ g,
160
+ d,
161
+ p,
162
+ m,
163
+ v,
164
+ h
165
+ ])), s].filter(Boolean).join(" ");
166
+ return /* @__PURE__ */ n(e, {
167
+ as: l,
168
+ ...y,
169
+ ref: t,
170
+ className: x,
171
+ style: u,
172
+ children: o
173
+ });
174
+ }
175
+ p.displayName = "FlexItem";
176
+ //#endregion
177
+ //#region src/flex/PredefinedFlex.tsx
178
+ function m({ ref: e, variant: t, children: r, className: i = "", ...a }) {
179
+ let o = [l(t ?? ""), i].filter(Boolean).join(" ");
180
+ return /* @__PURE__ */ n(d, {
181
+ ref: e,
182
+ className: o,
183
+ ...a,
184
+ children: r
185
+ });
186
+ }
187
+ m.displayName = "PredefinedFlex";
188
+ //#endregion
189
+ //#region src/flex/Flex.tsx
190
+ var h = {
191
+ Container: d,
192
+ Item: p,
193
+ Predefined: m
194
+ };
195
+ //#endregion
196
+ //#region src/flex/FlexCenter.tsx
197
+ function g({ className: e, minHeight: r, children: i, style: a, ...o }) {
198
+ let s = r === void 0 ? a : {
199
+ ...a,
200
+ minHeight: r
201
+ };
202
+ return /* @__PURE__ */ n("div", {
203
+ ...o,
204
+ className: t("flexCenter h100", e),
205
+ style: s,
206
+ children: i
207
+ });
208
+ }
209
+ //#endregion
210
+ //#region src/flex/FlexSpacer.tsx
211
+ function _({ ref: e, ...t }) {
212
+ return /* @__PURE__ */ n(p, {
213
+ ...t,
214
+ ref: e,
215
+ flex1: !0
216
+ });
217
+ }
218
+ _.displayName = "FlexSpacer";
219
+ //#endregion
220
+ export { p as a, m as i, g as n, d as o, h as r, _ as t };
221
+
222
+ //# sourceMappingURL=flex-D86M_h-0.js.map