@ryuzaki13/react-foundation-ui 1.5.0 → 1.5.2
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.
- package/dist/advanced-search/index.js +4 -4
- package/dist/base-table/index.js +1 -1
- package/dist/chunks/CalendarView-Cfih7hjD.js +439 -0
- package/dist/chunks/{CalendarView-DtacoN_c.js.map → CalendarView-Cfih7hjD.js.map} +1 -1
- package/dist/chunks/CheckBox.module-C5SjPwSj.js.map +1 -1
- package/dist/chunks/{TextEditorLexicalClient-DVML-Nhd.js → TextEditorLexicalClient-BSafrkLJ.js} +241 -275
- package/dist/chunks/TextEditorLexicalClient-BSafrkLJ.js.map +1 -0
- package/dist/chunks/{base-table-BPcdSitC.js → base-table-X7aSSjXa.js} +2 -2
- package/dist/chunks/{base-table-BPcdSitC.js.map → base-table-X7aSSjXa.js.map} +1 -1
- package/dist/chunks/{context-menu-BY4pYGwB.js → context-menu-tcD3kVAc.js} +58 -62
- package/dist/chunks/context-menu-tcD3kVAc.js.map +1 -0
- package/dist/chunks/date-input-Bsl9dxxY.js +341 -0
- package/dist/chunks/date-input-Bsl9dxxY.js.map +1 -0
- package/dist/chunks/{input-BWCaVC06.js → input-CAw1Loze.js} +54 -47
- package/dist/chunks/input-CAw1Loze.js.map +1 -0
- package/dist/chunks/{input-files-62qH2TMj.js → input-files-CLtQ7p8j.js} +2 -2
- package/dist/chunks/{input-files-62qH2TMj.js.map → input-files-CLtQ7p8j.js.map} +1 -1
- package/dist/chunks/{input-search-CdPI1cb6.js → input-search-F6MPrUGF.js} +2 -2
- package/dist/chunks/{input-search-CdPI1cb6.js.map → input-search-F6MPrUGF.js.map} +1 -1
- package/dist/chunks/modal-DPIXoMkB.js.map +1 -1
- package/dist/chunks/{multi-select-01xmD1nZ.js → multi-select-CZPB8H6v.js} +61 -60
- package/dist/chunks/multi-select-CZPB8H6v.js.map +1 -0
- package/dist/chunks/{picker-Mdb73_uW.js → picker-TYLwgl1c.js} +82 -92
- package/dist/chunks/{picker-Mdb73_uW.js.map → picker-TYLwgl1c.js.map} +1 -1
- package/dist/chunks/{select-DRf4_a1Z.js → select-BwbljzU9.js} +35 -34
- package/dist/chunks/select-BwbljzU9.js.map +1 -0
- package/dist/chunks/{table-DSg9gi_l.js → table-DihiNNJt.js} +2 -2
- package/dist/chunks/{table-DSg9gi_l.js.map → table-DihiNNJt.js.map} +1 -1
- package/dist/chunks/types-CxXyru6U.js.map +1 -1
- package/dist/chunks/{useODataSelectBase-DI_wwKgw.js → useODataSelectBase-Bfljwe39.js} +16 -24
- package/dist/chunks/{useODataSelectBase-DI_wwKgw.js.map → useODataSelectBase-Bfljwe39.js.map} +1 -1
- package/dist/context-menu/components/MenuRoot.d.ts.map +1 -1
- package/dist/context-menu/index.js +1 -1
- package/dist/date-input/index.js +2 -2
- package/dist/date-input/lib/dateInputValue.d.ts +2 -6
- package/dist/date-input/lib/dateInputValue.d.ts.map +1 -1
- package/dist/date-input/lib/types.d.ts +0 -4
- package/dist/date-input/lib/types.d.ts.map +1 -1
- package/dist/date-input/model/useDateInput.d.ts +2 -2
- package/dist/date-input/model/useDateInput.d.ts.map +1 -1
- package/dist/date-input/ui/CalendarView.d.ts.map +1 -1
- package/dist/date-input/ui/DateInput.d.ts +0 -4
- package/dist/date-input/ui/DateInput.d.ts.map +1 -1
- package/dist/date-time-input/index.js +229 -234
- package/dist/date-time-input/index.js.map +1 -1
- package/dist/date-time-input/model/useDateTimeSegments.d.ts.map +1 -1
- package/dist/date-time-input/ui/SingleDateTimeInput.d.ts.map +1 -1
- package/dist/disclosure/index.js.map +1 -1
- package/dist/drop-zone/index.js +1 -1
- package/dist/image/index.js +2 -2
- package/dist/input/Input.d.ts.map +1 -1
- package/dist/input/index.js +1 -1
- package/dist/input-date-time/index.js +1 -1
- package/dist/input-file/index.js +1 -1
- package/dist/input-files/index.js +1 -1
- package/dist/input-image/index.js +1 -1
- package/dist/input-search/index.js +1 -1
- package/dist/layout-picker/index.js +1 -1
- package/dist/list/List.d.ts.map +1 -1
- package/dist/list/index.js +74 -45
- package/dist/list/index.js.map +1 -1
- package/dist/list/useListVirtualizer.d.ts +13 -0
- package/dist/list/useListVirtualizer.d.ts.map +1 -0
- package/dist/multi-select/index.js +1 -1
- package/dist/multi-select/ui/MultiSelect.d.ts.map +1 -1
- package/dist/picker/index.js +1 -1
- package/dist/picker/model/usePickerQuery.d.ts +6 -2
- package/dist/picker/model/usePickerQuery.d.ts.map +1 -1
- package/dist/picker/model/usePickerSelectionLifecycle.d.ts.map +1 -1
- package/dist/preset-range-date-input/index.js +1 -1
- package/dist/preset-select/index.js +1 -1
- package/dist/select/Select.d.ts.map +1 -1
- package/dist/select/index.js +1 -1
- package/dist/simple-table/index.js +1 -1
- package/dist/slider/SliderInput.d.ts.map +1 -1
- package/dist/slider/index.js +333 -290
- package/dist/slider/index.js.map +1 -1
- package/dist/state-select/index.js +1 -1
- package/dist/styles.css +1 -1
- package/dist/table/index.js +1 -1
- package/dist/table-sorting/index.js +1 -1
- package/dist/tabs/index.js.map +1 -1
- package/dist/tag-input/TagInput.d.ts.map +1 -1
- package/dist/tag-input/index.js +1 -1
- package/dist/tag-input/index.js.map +1 -1
- package/dist/text-editor/EmailDialog.d.ts +1 -2
- package/dist/text-editor/EmailDialog.d.ts.map +1 -1
- package/dist/text-editor/LinkDialog.d.ts +1 -2
- package/dist/text-editor/LinkDialog.d.ts.map +1 -1
- package/dist/text-editor/PhoneDialog.d.ts +1 -2
- package/dist/text-editor/PhoneDialog.d.ts.map +1 -1
- package/dist/text-editor/SemanticDialog.d.ts +1 -2
- package/dist/text-editor/SemanticDialog.d.ts.map +1 -1
- package/dist/text-editor/TextEditorDialogs.d.ts +2 -1
- package/dist/text-editor/TextEditorDialogs.d.ts.map +1 -1
- package/dist/text-editor/TimeDialog.d.ts +1 -2
- package/dist/text-editor/TimeDialog.d.ts.map +1 -1
- package/dist/text-editor/index.js +1 -1
- package/dist/text-editor/nodes/AccessibleLinkNode.d.ts.map +1 -1
- package/dist/text-editor/nodes/SemanticTagNode.d.ts.map +1 -1
- package/dist/text-editor/toolbar/types.d.ts.map +1 -1
- package/dist/textarea/index.js +1 -1
- package/dist/tree-select/TreePickerBase.d.ts.map +1 -1
- package/dist/tree-select/index.js +244 -249
- package/dist/tree-select/index.js.map +1 -1
- package/dist/tree-table/index.js +1 -1
- package/package.json +1 -1
- package/storybook-static/assets/{Badge-CblO4qSx.js → Badge-DdvnnE8F.js} +1 -1
- package/storybook-static/assets/{Badge.stories-CtRrqjAo.js → Badge.stories-BUKUom98.js} +1 -1
- package/storybook-static/assets/{Button-Bzc9jBAF.js → Button-CghMveZ5.js} +1 -1
- package/storybook-static/assets/{Button-BVt4jmN4.js → Button-Co_JCRHU.js} +1 -1
- package/storybook-static/assets/{Button.stories-tqfxm0ox.js → Button.stories-CGj8XyOO.js} +1 -1
- package/storybook-static/assets/{CalendarView-MkrPd5D-.js → CalendarView-CaphwAt-.js} +1 -1
- package/storybook-static/assets/{CheckBox-0BK2dgdD.js → CheckBox-BQcaUjLx.js} +1 -1
- package/storybook-static/assets/{CheckBox-CWipX4CI.js → CheckBox-DAffOBou.js} +1 -1
- package/storybook-static/assets/CheckBox-Dw4nDCv8.css +1 -0
- package/storybook-static/assets/{CheckBox.stories-B5yWzlQa.js → CheckBox.stories-D_pMeQfu.js} +1 -1
- package/storybook-static/assets/{Color-6AOWCN3U-WdTzF_2p.js → Color-6AOWCN3U--6e3-dEn.js} +1 -1
- package/storybook-static/assets/{ContextMenu-kbSWsoCE.js → ContextMenu-CCuLOUEi.js} +1 -1
- package/storybook-static/assets/ContextMenu-CCwVy2bU.js +1 -0
- package/storybook-static/assets/{ContextMenu.stories-CQcrX3sj.js → ContextMenu.stories-DvArgxXF.js} +1 -1
- package/storybook-static/assets/{DateInput-CyNIW9Md.js → DateInput-2WtbeZR7.js} +1 -1
- package/storybook-static/assets/DateInput-DNJ3WoMQ.js +1 -0
- package/storybook-static/assets/{DateInput.stories-DyB3PjTl.js → DateInput.stories-v5ti6IEo.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect-CBZ0OAmn.js → DateRangePresetSelect-CPxgZfAB.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect-BwibZk_q.js → DateRangePresetSelect-q30Gumdf.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect.stories-kmmKl-3j.js → DateRangePresetSelect.stories-DdOS7cEa.js} +1 -1
- package/storybook-static/assets/{Detail-pHBZ5bkR.js → Detail-DIuLwIa1.js} +1 -1
- package/storybook-static/assets/{Detail.stories-Bs5YNmLn.js → Detail.stories-D3P1LkKH.js} +1 -1
- package/storybook-static/assets/{Dialog-DbFhCtF1.js → Dialog-zOHAVMnY.js} +1 -1
- package/storybook-static/assets/{Dialog-DBTU-LRR.js → Dialog-zxssjiyA.js} +1 -1
- package/storybook-static/assets/{Dialog.stories-_WQW8YNs.js → Dialog.stories-CPdleZZG.js} +1 -1
- package/storybook-static/assets/{Disclosure-vOJWmhLt.js → Disclosure-X-fwyTOO.js} +1 -1
- package/storybook-static/assets/{Disclosure.stories-wyulIOoJ.js → Disclosure.stories-DhBj8XEl.js} +1 -1
- package/storybook-static/assets/{DisclosureGroup-DjObX5Qs.css → DisclosureGroup-CNoH2D1R.css} +1 -1
- package/storybook-static/assets/{DisclosureGroup-BUDxwl5C.js → DisclosureGroup-COBTA8iF.js} +1 -1
- package/storybook-static/assets/{DocsRenderer-JROSPFPF-B7vhvrpB.js → DocsRenderer-JROSPFPF-DBKu16F9.js} +1 -1
- package/storybook-static/assets/{DropZone-BvRT0gUm.js → DropZone-BxSCEj48.js} +1 -1
- package/storybook-static/assets/{DropZone-B7Q1qQqP.js → DropZone-C8pMmwdl.js} +1 -1
- package/storybook-static/assets/{DropZone.stories-WmoR3uPj.js → DropZone.stories-BCAhhItK.js} +1 -1
- package/storybook-static/assets/{DropdownMenu-BW35W6_U.js → DropdownMenu-Bi3Tiwls.js} +1 -1
- package/storybook-static/assets/{ExpandableActionPanel-C9G9PsZx.js → ExpandableActionPanel-CBwWx_Nv.js} +1 -1
- package/storybook-static/assets/{ExpandableActionPanel.stories-Dllpmeu_.js → ExpandableActionPanel.stories-BkYsUqoo.js} +1 -1
- package/storybook-static/assets/{Flex-Cydb-4MR.js → Flex-CO947dLM.js} +1 -1
- package/storybook-static/assets/{Flex.stories-Dczj9g4W.js → Flex.stories-DMUThbwO.js} +1 -1
- package/storybook-static/assets/{FloatingPopover-C-W77AcJ.js → FloatingPopover-BlMi_zjk.js} +1 -1
- package/storybook-static/assets/{FormattedTableCell-fePg_bmP.js → FormattedTableCell-DDNLMP5K.js} +1 -1
- package/storybook-static/assets/{Grid-Dal3v5dj.js → Grid-39TY8m4Z.js} +1 -1
- package/storybook-static/assets/{Grid.stories-Byb4mMpE.js → Grid.stories-DYvrXiSG.js} +1 -1
- package/storybook-static/assets/{ImageCropper.stories-B9OD2pur.js → ImageCropper.stories-B9ltINOC.js} +1 -1
- package/storybook-static/assets/{ImageRenderer-BcUjptiu.js → ImageRenderer-DA--Akcn.js} +1 -1
- package/storybook-static/assets/{ImageRenderer.stories-BuO2nhom.js → ImageRenderer.stories-BVdd0zeh.js} +1 -1
- package/storybook-static/assets/{ImageView.stories-mSkR535R.js → ImageView.stories-DIQCaBWQ.js} +1 -1
- package/storybook-static/assets/{ImageViewer.stories-DVdR3-_j.js → ImageViewer.stories-CyYc6RrG.js} +2 -2
- package/storybook-static/assets/{ImageViewerRuntime-DiR_HwIE.js → ImageViewerRuntime-eZU4pDw8.js} +1 -1
- package/storybook-static/assets/{Input-DZQKV4DP.js → Input-DvVsbr8K.js} +1 -1
- package/storybook-static/assets/{Input-BdCavSu1.js → Input-VmS-QVKm.js} +1 -1
- package/storybook-static/assets/{Input.stories-Cu66SvKb.js → Input.stories-mATd9a0c.js} +1 -1
- package/storybook-static/assets/{InputDateTime-Day94W-O.js → InputDateTime-BSnv1V99.js} +1 -1
- package/storybook-static/assets/{InputDateTime.stories-990MuicZ.js → InputDateTime.stories-BHseZWJW.js} +1 -1
- package/storybook-static/assets/{InputFile-CJll5mC-.js → InputFile-Du6kJw8h.js} +1 -1
- package/storybook-static/assets/{InputFile-Cp8x84ZG.js → InputFile-YpStVIKr.js} +1 -1
- package/storybook-static/assets/{InputFile.stories-fNNwbNfa.js → InputFile.stories-B9bGCSU3.js} +1 -1
- package/storybook-static/assets/{InputFiles-OusF5Lfq.js → InputFiles-BNhs2jEI.js} +1 -1
- package/storybook-static/assets/{InputFiles-CBvR3Szf.js → InputFiles-PUk0s7uQ.js} +1 -1
- package/storybook-static/assets/{InputFiles.stories-DcpEbOOo.js → InputFiles.stories-CxVfsYaA.js} +1 -1
- package/storybook-static/assets/{InputFilesList-zuNP1QIB.js → InputFilesList-_rwKzQPQ.js} +1 -1
- package/storybook-static/assets/{InputImage-CjMAL3uq.js → InputImage-Trwkv0rb.js} +1 -1
- package/storybook-static/assets/{InputImage-Dl2bJNZk.js → InputImage-XAl4ina5.js} +1 -1
- package/storybook-static/assets/{InputImage.stories-BzxEndIe.js → InputImage.stories-Dddz-oRL.js} +1 -1
- package/storybook-static/assets/{InteractiveComponents.stories-CXF1nGLl.js → InteractiveComponents.stories-BZZTxt_C.js} +1 -1
- package/storybook-static/assets/{LayoutPicker-DzAN3gGO.js → LayoutPicker-BzGJmYT0.js} +1 -1
- package/storybook-static/assets/{LayoutPicker-BahcFBzK.js → LayoutPicker-z5o3xDMb.js} +1 -1
- package/storybook-static/assets/{LayoutPicker.stories-ByamaGlv.js → LayoutPicker.stories-Du2gCRWE.js} +1 -1
- package/storybook-static/assets/{Listbox-C5hwzE4s.js → Listbox-C4QRr_MP.js} +1 -1
- package/storybook-static/assets/{Listbox-CHsNGsDc.js → Listbox-DuZWJ8ZZ.js} +1 -1
- package/storybook-static/assets/{Listbox.stories-CvXZeESb.js → Listbox.stories-Y-8RgXM_.js} +1 -1
- package/storybook-static/assets/{Modal-Dib11Lzy.js → Modal-D9Zfvpww.js} +1 -1
- package/storybook-static/assets/{Modal.stories-DYMy-kLP.js → Modal.stories-BnFP5Zrr.js} +1 -1
- package/storybook-static/assets/{ModalManagerProvider-BL_cTIW7.css → ModalManagerProvider-C5bd7SFD.css} +1 -1
- package/storybook-static/assets/{ModalManagerProvider-natWXnSM.js → ModalManagerProvider-Duey-HBY.js} +1 -1
- package/storybook-static/assets/{MultiSelect-DlCZ7dhH.js → MultiSelect-BeQ2iAxN.js} +1 -1
- package/storybook-static/assets/{MultiSelect-Cl9MkPZw.js → MultiSelect-BhMW5jH5.js} +1 -1
- package/storybook-static/assets/{MultiSelect.stories-202TRBKq.js → MultiSelect.stories-Cayi9A_V.js} +1 -1
- package/storybook-static/assets/{NoData-DcHZdLTJ.js → NoData-CeHT8LTg.js} +1 -1
- package/storybook-static/assets/{NotificationsHost-DzqEi2vc.js → NotificationsHost-_4XSnTo2.js} +1 -1
- package/storybook-static/assets/{NotificationsHost.stories-CvoQfIjj.js → NotificationsHost.stories-C-2ucbpq.js} +1 -1
- package/storybook-static/assets/{ODataMultiSelect-CHQguikm.js → ODataMultiSelect-DILkVUzB.js} +1 -1
- package/storybook-static/assets/{ODataMultiSelect.stories-BZbWK4CP.js → ODataMultiSelect.stories-odWzDl6l.js} +1 -1
- package/storybook-static/assets/{ODataSelect-C1YGDpg_.js → ODataSelect-BUAhfvPU.js} +1 -1
- package/storybook-static/assets/{ODataSelect.stories-D4tQXs2c.js → ODataSelect.stories-PpNPmCz2.js} +1 -1
- package/storybook-static/assets/{ODataTreeMultiSelect-BjR7zhyJ.js → ODataTreeMultiSelect-BH7nIL9w.js} +1 -1
- package/storybook-static/assets/{ODataTreeMultiSelect.stories-Drg8mLhi.js → ODataTreeMultiSelect.stories-C4zOROB1.js} +1 -1
- package/storybook-static/assets/{ODataTreeSelect-D_fcT3Aw.js → ODataTreeSelect-CkJq3807.js} +1 -1
- package/storybook-static/assets/{ODataTreeSelect.stories-BWFdmmvf.js → ODataTreeSelect.stories-BcbRGbmJ.js} +1 -1
- package/storybook-static/assets/{OneStepScroller-DWCRXFHq.js → OneStepScroller-BGIjsObI.js} +1 -1
- package/storybook-static/assets/{PeriodSelect-DtfTzrNK.js → PeriodSelect-BcG6A50F.js} +1 -1
- package/storybook-static/assets/{PeriodSelect-C7QQKxZ4.js → PeriodSelect-DvAMLr40.js} +1 -1
- package/storybook-static/assets/{PeriodSelect.stories-CF65LIHm.js → PeriodSelect.stories-DmvK-wEi.js} +1 -1
- package/storybook-static/assets/{PickerSelectionToolbar-D9atWyWj.js → PickerSelectionToolbar-Cas1QrbP.js} +1 -1
- package/storybook-static/assets/{PickerTriggerActions-C7WeaOKN.js → PickerTriggerActions-DUcQfADH.js} +1 -1
- package/storybook-static/assets/{Popover-CUJF-IMC.js → Popover-Dl9KlVW0.js} +1 -1
- package/storybook-static/assets/{Popover-DQJIeny_.js → Popover-mm3LuMCX.js} +1 -1
- package/storybook-static/assets/{Popover.stories-BON0z3PX.js → Popover.stories-BqlULHhR.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput-D3_uzWzQ.js → PresetRangeDateInput-84a4mW00.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput-DpA1KOCo.js → PresetRangeDateInput-Dp-RORYt.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput.stories-CDDJDiei.js → PresetRangeDateInput.stories-Bw3dSWVM.js} +1 -1
- package/storybook-static/assets/{PresetSelect-DlV2eC-b.js → PresetSelect-DbMc37dQ.js} +1 -1
- package/storybook-static/assets/{RadioButton-BLyqp88m.js → RadioButton-Ceuq5i6x.js} +1 -1
- package/storybook-static/assets/{RadioButton-wkLEwRaH.js → RadioButton-DhaK8UUD.js} +1 -1
- package/storybook-static/assets/{RadioButton.stories-DS9RYBEJ.js → RadioButton.stories-S98_hDUl.js} +1 -1
- package/storybook-static/assets/{RadioGroup-CsWIje1J.js → RadioGroup-BqSOcKQI.js} +1 -1
- package/storybook-static/assets/{RadioGroup-DERcyzA0.js → RadioGroup-Di55rXi_.js} +1 -1
- package/storybook-static/assets/{RadioGroup.stories-DkgUPavS.js → RadioGroup.stories-7RFD3uHM.js} +1 -1
- package/storybook-static/assets/{Scrollable-DvJ3T3Ik.js → Scrollable-B0p5mrx8.js} +1 -1
- package/storybook-static/assets/Select-BS9Its_r.js +12 -0
- package/storybook-static/assets/{Select-DmEm2boi.js → Select-CIqhX4mK.js} +1 -1
- package/storybook-static/assets/{Select.stories-BEPJovVd.js → Select.stories-DNhv8-zb.js} +1 -1
- package/storybook-static/assets/{SelectOptionContent-B5E2W8PZ.js → SelectOptionContent-DXq8ymaG.js} +1 -1
- package/storybook-static/assets/{SerializableSelect-wgzDfqEi.js → SerializableSelect-Wq154MOD.js} +1 -1
- package/storybook-static/assets/{SerializableSelect.stories-V8IqyO9Y.js → SerializableSelect.stories-5sc1J9RV.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput-B7v0t9f5.js → SingleDateTimeInput-Bkv6gIle.js} +1 -1
- package/storybook-static/assets/SingleDateTimeInput-D7sbOu36.js +1 -0
- package/storybook-static/assets/{SingleDateTimeInput.stories-FOoEMoyF.js → SingleDateTimeInput.stories-DWWk1ufW.js} +1 -1
- package/storybook-static/assets/{Slider-24H5ASxG.js → Slider-BGsWuJAm.js} +1 -1
- package/storybook-static/assets/{Slider-3HQKHpoi.js → Slider-BxM1AhD9.js} +1 -1
- package/storybook-static/assets/{Slider.stories-DeeP8cmV.js → Slider.stories-VJI4Rnlr.js} +1 -1
- package/storybook-static/assets/{SliderInput-CFbx-GW7.js → SliderInput-CzLa4eqn.js} +1 -1
- package/storybook-static/assets/SliderInput-D4y-O8R2.js +2 -0
- package/storybook-static/assets/{SliderInput.stories-Djli653m.js → SliderInput.stories-g0Kwo7dl.js} +1 -1
- package/storybook-static/assets/{Sortable-CMo2PMKX.js → Sortable-CgA1YBUW.js} +1 -1
- package/storybook-static/assets/{Sortable.stories-BFsQvwMx.js → Sortable.stories-x3gePcSZ.js} +1 -1
- package/storybook-static/assets/{Splitter-dwOhGuIg.js → Splitter-BgFyt-RI.js} +1 -1
- package/storybook-static/assets/{Splitter.stories-DZ3nAxpo.js → Splitter.stories-CkN8ukyN.js} +1 -1
- package/storybook-static/assets/{StateSelect-j3gi4kbM.js → StateSelect-Ce4t44r8.js} +1 -1
- package/storybook-static/assets/{StateSelect-IigEzRom.js → StateSelect-DSuIDlz9.js} +1 -1
- package/storybook-static/assets/{StateSelect.stories-Bj-2m2hS.js → StateSelect.stories-BPomWgn7.js} +1 -1
- package/storybook-static/assets/{StringToggle.stories-ClSl76ts.js → StringToggle.stories-CnMi5EAT.js} +1 -1
- package/storybook-static/assets/{Switch-C9OAPzUM.js → Switch-DDCJrhcQ.js} +1 -1
- package/storybook-static/assets/{Switch-BDbBZjMA.js → Switch-OWLmHmHZ.js} +1 -1
- package/storybook-static/assets/{Switch.stories-CQ3ueThx.js → Switch.stories-BDu-Afks.js} +1 -1
- package/storybook-static/assets/{Table-BbGcLQ81.js → Table-DZg-HjgT.js} +1 -1
- package/storybook-static/assets/{Table.stories-DvaHP59R.js → Table.stories-C1tWXfqI.js} +1 -1
- package/storybook-static/assets/{Tabs-CNEYvzUv.js → Tabs-DRfMQ8Jx.js} +1 -1
- package/storybook-static/assets/{Tabs.stories-BpyQokl8.js → Tabs.stories-Dgdc1lZD.js} +1 -1
- package/storybook-static/assets/TabsBox-B5ugO318.css +1 -0
- package/storybook-static/assets/{TabsBox-ClZCbgKB.js → TabsBox-DljUVTsd.js} +1 -1
- package/storybook-static/assets/{TagInput-DorsSF_V.js → TagInput-BCS6WLcW.js} +1 -1
- package/storybook-static/assets/{TagInput.stories-ChgRz4Co.js → TagInput.stories-Dy5AVzAj.js} +1 -1
- package/storybook-static/assets/{Text-DUqtop-c.js → Text-C4TWqy0Q.js} +1 -1
- package/storybook-static/assets/{Textarea-ZfZJmHsp.js → Textarea-5Gx2U0_d.js} +1 -1
- package/storybook-static/assets/{Textarea-yZWv6QdW.js → Textarea-BZrJEPN7.js} +1 -1
- package/storybook-static/assets/{Textarea.stories-B5Q7syxH.js → Textarea.stories-BvdLNmb_.js} +1 -1
- package/storybook-static/assets/{TimePanel-C39f__j8.js → TimePanel-D3QC0eS8.js} +1 -1
- package/storybook-static/assets/{TimePanel.stories-DtjILTPk.js → TimePanel.stories-BZOB234n.js} +1 -1
- package/storybook-static/assets/{Toggle-CdpPJI_O.js → Toggle-BpzUjB13.js} +1 -1
- package/storybook-static/assets/{Toggle-BndjhQFY.js → Toggle-DarFnpF4.js} +1 -1
- package/storybook-static/assets/{Toggle.stories-BD_C0YTw.js → Toggle.stories-DyPUelGH.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect--M1WiE_f.js → TreeMultiSelect-DNjTWvVq.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect-BPz5kISi.js → TreeMultiSelect-DqpIhAuh.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect.stories-BgkDJur9.js → TreeMultiSelect.stories-Uc9jwEfE.js} +1 -1
- package/storybook-static/assets/TreePickerBase-BRKipsrA.js +22 -0
- package/storybook-static/assets/{TreeSelect-B0RWsDT4.js → TreeSelect-Bp1Zik9B.js} +1 -1
- package/storybook-static/assets/{TreeSelect-BrQGgG40.js → TreeSelect-CrLx5V7M.js} +1 -1
- package/storybook-static/assets/{TreeSelect.stories-DkgdJ5XX.js → TreeSelect.stories-RlHKzmuz.js} +1 -1
- package/storybook-static/assets/{TreeTable-HQr8pb9r.js → TreeTable-DhQ6u1Pe.js} +1 -1
- package/storybook-static/assets/{TreeTable.stories-C4hcph6x.js → TreeTable.stories-CAs-UAM0.js} +1 -1
- package/storybook-static/assets/{async-lzSWdC34.js → async-B2DliTcn.js} +1 -1
- package/storybook-static/assets/{blocks-D8l_hmHU.js → blocks-CGuhQMXa.js} +3 -3
- package/storybook-static/assets/{browserAndReact-BwvRFhzI.js → browserAndReact-C-OypV8y.js} +1 -1
- package/storybook-static/assets/{check-DpX8PMs_.js → check-Bw0XnpCV.js} +1 -1
- package/storybook-static/assets/{chevron-down-DE8FRR-h.js → chevron-down-CfrX73tO.js} +1 -1
- package/storybook-static/assets/{chevron-left-Cy3TEG_Y.js → chevron-left-DpeXiQaY.js} +1 -1
- package/storybook-static/assets/{chevron-right-CZ4-4s1X.js → chevron-right-BFJM6q51.js} +1 -1
- package/storybook-static/assets/{chunk-W22LQPXL-Ci-XApFb.js → chunk-W22LQPXL-Bt3_v9HM.js} +1 -1
- package/storybook-static/assets/{circle-alert-CWbgc3Jn.js → circle-alert-y52RJRUz.js} +1 -1
- package/storybook-static/assets/{circle-check-DODquDnH.js → circle-check-D-VabHaY.js} +1 -1
- package/storybook-static/assets/{components-BdUOCBP9.js → components-I69uHPsH.js} +3 -3
- package/storybook-static/assets/{contextMenu-XvvXJEpW.js → contextMenu-DfPU9cBt.js} +1 -1
- package/storybook-static/assets/defaultRenderers-Bkg6olnb.js +1 -0
- package/storybook-static/assets/{download-BEGaHxQc.js → download-CtH__7oe.js} +1 -1
- package/storybook-static/assets/{filesAndExcel-C9FnZv9P.js → filesAndExcel-BkVmFKKv.js} +1 -1
- package/storybook-static/assets/{floating-ui.react-GziJy4gA.js → floating-ui.react-CxI0EsOT.js} +1 -1
- package/storybook-static/assets/{formatters-CVj-3Vn0-C5-BLq9O.js → formatters-CVj-3Vn0-BFaHJqZL.js} +1 -1
- package/storybook-static/assets/{formatters-vWial7jf.js → formatters-D37vYORi.js} +1 -1
- package/storybook-static/assets/{formatters-runtime-DO0szrYr.js → formatters-runtime-D3X8TbPs.js} +1 -1
- package/storybook-static/assets/{foundationLib-CIqc9fhG.js → foundationLib-DozGtKQB.js} +1 -1
- package/storybook-static/assets/{hooks-DfgvMSqN.js → hooks-Df19Nsi2.js} +1 -1
- package/storybook-static/assets/{iframe-BHhbrImE.js → iframe-BQrLcg06.js} +3 -3
- package/storybook-static/assets/iframe-lJqBcWzL.js +1 -0
- package/storybook-static/assets/{info-DSZ4aUvi.js → info-BeGxRQvx.js} +1 -1
- package/storybook-static/assets/{odata-DmijE2H9.js → odata-BDmwSB0b.js} +1 -1
- package/storybook-static/assets/odata-service-B5w4YBao-BW9QLSrS.js +3 -0
- package/storybook-static/assets/{odataAndTables-m2AMS6oI.js → odataAndTables-CdiAn8YJ.js} +1 -1
- package/storybook-static/assets/{odataFetchFn-CwpkgKoz.js → odataFetchFn-B4sQvu6J.js} +1 -1
- package/storybook-static/assets/{odataStoryFixtures-CBtJYQsv.js → odataStoryFixtures-DJ_pv2Rq.js} +1 -1
- package/storybook-static/assets/{persisted-DpSU25AR.js → persisted-Cryvs_Te.js} +1 -1
- package/storybook-static/assets/{pureUtilities-BG4ZSO63.js → pureUtilities-YEJFcbIT.js} +1 -1
- package/storybook-static/assets/{react-Bz35HWpn.js → react-D5HGS0WP.js} +1 -1
- package/storybook-static/assets/{refresh-cw-ltgf4cUB.js → refresh-cw-BtYtkXmi.js} +1 -1
- package/storybook-static/assets/{runtimeAndState-C_GrWjr8.js → runtimeAndState-Bc0p1zM-.js} +1 -1
- package/storybook-static/assets/{settings-2-qpVYfZn_.js → settings-2-BTaug5uU.js} +1 -1
- package/storybook-static/assets/{sortable-CrCQ3H1V.js → sortable-CV5Mg3jp.js} +1 -1
- package/storybook-static/assets/{syntaxhighlighter-T5IQBZDB-eOr9ght-.js → syntaxhighlighter-T5IQBZDB-CyWSuE24.js} +1 -1
- package/storybook-static/assets/{trash-2-lfhUDclN.js → trash-2-Bcxa3Ezm.js} +1 -1
- package/storybook-static/assets/{triangle-alert-D9YGTafY.js → triangle-alert-Cy0xZ6CK.js} +1 -1
- package/storybook-static/assets/{useODataSelectBase-BVgxJPNn.js → useODataSelectBase-rnvEwUEf.js} +1 -1
- package/storybook-static/assets/{useODataTreeData-CdLHOBnD.js → useODataTreeData-DFL7fNez.js} +1 -1
- package/storybook-static/assets/{usePickerQuery-B6U-oOS6.js → usePickerQuery-BpbIXzlf.js} +1 -1
- package/storybook-static/assets/{usePickerTriggerController-C-VxrzSe.js → usePickerTriggerController-CLjquchr.js} +1 -1
- package/storybook-static/assets/{x-CNM39xuu.js → x-CTu2RxD8.js} +1 -1
- package/storybook-static/iframe.html +2 -2
- package/storybook-static/project.json +1 -1
- package/dist/chunks/CalendarView-DtacoN_c.js +0 -439
- package/dist/chunks/TextEditorLexicalClient-DVML-Nhd.js.map +0 -1
- package/dist/chunks/context-menu-BY4pYGwB.js.map +0 -1
- package/dist/chunks/date-input-DKkJO_-h.js +0 -340
- package/dist/chunks/date-input-DKkJO_-h.js.map +0 -1
- package/dist/chunks/input-BWCaVC06.js.map +0 -1
- package/dist/chunks/multi-select-01xmD1nZ.js.map +0 -1
- package/dist/chunks/select-DRf4_a1Z.js.map +0 -1
- package/storybook-static/assets/CheckBox-8XczNrjq.css +0 -1
- package/storybook-static/assets/ContextMenu-BjWu5DHB.js +0 -1
- package/storybook-static/assets/DateInput-BUgBb3aH.js +0 -1
- package/storybook-static/assets/Select-g0c0XGQY.js +0 -12
- package/storybook-static/assets/SingleDateTimeInput-CN7PyOsb.js +0 -1
- package/storybook-static/assets/SliderInput-bqFr-Lyp.js +0 -2
- package/storybook-static/assets/TabsBox-Co1vxD90.css +0 -1
- package/storybook-static/assets/TreePickerBase-Dup03AiC.js +0 -22
- package/storybook-static/assets/defaultRenderers-lMEgLPIU.js +0 -1
- package/storybook-static/assets/iframe-oIP1aL7X.js +0 -1
- package/storybook-static/assets/odata-service-B5w4YBao-BcP2cvfZ.js +0 -3
- /package/storybook-static/assets/{CheckBox.module-DPvJxTHD.js → CheckBox.module-CM_GPl_E.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-menu-tcD3kVAc.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, useContext } from \"react\";\n\nimport { createMissingContextError } from \"@ryuzaki13/react-foundation-lib/error\";\n\nimport type { MenuOpenSource, MenuPoint } from \"@ryuzaki13/react-foundation-lib/context-menu\";\n\nexport type MenuTriggerMode = \"click\" | \"contextmenu\";\n\ninterface MenuContextValue {\n\tmode: MenuTriggerMode;\n\topen: boolean;\n\topenSource: MenuOpenSource | null;\n\tanchorPoint: MenuPoint | null;\n\tfloatingStyles: React.CSSProperties;\n\tfloatingRef: React.RefObject<HTMLElement | null>;\n\ttriggerRef: React.RefObject<HTMLElement | null>;\n\tsetFloating: (node: HTMLElement | null) => void;\n\tregisterTriggerElement: (node: HTMLElement | null) => void;\n\tonTriggerClick: (event: React.MouseEvent<HTMLElement>) => void;\n\tonTriggerContextMenu: (event: React.MouseEvent<HTMLElement>) => void;\n\tonTriggerKeyDown: (event: React.KeyboardEvent<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 React, { cloneElement } from \"react\";\n\nimport { assignRef, composeKeyboardHandlers, composeMouseHandlers } from \"./helpers\";\nimport { useMenuContext } from \"./MenuContext\";\n\nexport interface ContextMenuTriggerProps {\n\tchildren: React.ReactElement<React.HTMLAttributes<HTMLElement> & { ref?: React.Ref<HTMLElement> }>;\n}\n\nexport const ContextMenuTrigger: React.FC<ContextMenuTriggerProps> = ({ children }) => {\n\tconst { mode, open, 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\tref: (node: HTMLElement | null) => {\n\t\t\tconst childRef = (children.props as { ref?: React.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\tonContextMenu: composeMouseHandlers(children.props.onContextMenu, onTriggerContextMenu),\n\t\tonKeyDown: composeKeyboardHandlers(children.props.onKeyDown, onTriggerKeyDown)\n\t});\n};\n","@use \"@/styles/mixins\" as *;\n\n.menuPanel {\n\t--menu-max-height: min(22em, calc(100dvh - var(--space-xl)));\n\t--menu-min-width: 13em;\n\t--menu-max-width: min(22em, calc(100dvw - var(--space-xl)));\n\n\tmin-width: var(--menu-min-width);\n\tmax-width: var(--menu-max-width);\n\tpadding: var(--space-xs);\n\n\tbackground-color: var(--surface-0);\n\tborder: var(--border);\n\tborder-radius: var(--radius-sm);\n\tbox-shadow: var(--shadow-md);\n\n\tz-index: var(--z-dropdown);\n\toutline: none;\n}\n\n.menuScroller {\n\tmax-height: var(--menu-max-height);\n\toverflow: auto;\n}\n\n.menuItem {\n\tgap: var(--space-sm);\n}\n\n.menuItemIcon {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.menuItemText {\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.menuItemHotKey {\n\tfont-size: var(--font-size-sm);\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(--surface-accent);\n\t\tcolor: var(--content-accent);\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(--surface-accent);\n\t\tcolor: var(--content-accent);\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 React, { useCallback } 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 MenuContentProps {\n\tchildren: React.ReactNode | ((ctx: { closeMenu: () => void }) => React.ReactNode);\n\tclassName?: string;\n\tcloseOnOutside?: boolean;\n\tcloseOnEscape?: boolean;\n\tdisableOutsideClick?: boolean;\n\trestoreFocus?: boolean;\n}\n\nexport const MenuContent: React.FC<MenuContentProps> = ({\n\tchildren,\n\tclassName,\n\tcloseOnOutside = true,\n\tcloseOnEscape = true,\n\tdisableOutsideClick = false,\n\trestoreFocus = true\n}) => {\n\tconst { open, floatingStyles, floatingRef, triggerRef, setFloating, closeMenu } = 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) => getNavigableItems()[0] ?? container,\n\t\trestoreFocus,\n\t\trestoreFocusTarget: () => triggerRef.current,\n\t\tcontainerRef: floatingRef\n\t});\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 React.RefObject<HTMLElement>, triggerRef as React.RefObject<HTMLElement>], outsideClose);\n\n\tconst onMenuKeyDown = useCallback(\n\t\t(event: React.KeyboardEvent<HTMLElement>) => {\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}\n\t\t},\n\t\t[getNavigableItems]\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\tref={setFloating}\n\t\t\t\t\tstyle={floatingStyles}\n\t\t\t\t\trole=\"menu\"\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\tclassName={cn(styles.menuPanel, className)}\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<div className={cn(styles.menuScroller, \"scrollable\")}>\n\t\t\t\t\t\t{typeof children === \"function\" ? children({ closeMenu }) : children}\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 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 const MenuGroupLabel: React.FC<MenuGroupLabelProps> = ({ children, className }) => {\n\treturn <div className={cn(uiStyles.uiPopupGroupLabel, className)}>{children}</div>;\n};\n","import React, { useCallback } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport uiStyles from \"../../ui.module.scss\";\nimport styles from \"../ContextMenu.module.scss\";\n\nimport { useMenuContext } from \"./MenuContext\";\n\nexport interface MenuItemProps {\n\tchildren: React.ReactNode;\n\ticon?: React.ReactNode;\n\thotKey?: string;\n\tclassName?: string;\n\tdisabled?: boolean;\n\thref?: string;\n\ttarget?: string;\n\trel?: string;\n\tcloseOnSelect?: boolean;\n\tonSelect?: (event: React.MouseEvent<HTMLElement>) => void;\n}\n\nexport const MenuItem: React.FC<MenuItemProps> = ({\n\tchildren,\n\ticon,\n\thotKey,\n\tclassName,\n\tdisabled,\n\thref,\n\ttarget,\n\trel,\n\tcloseOnSelect = true,\n\tonSelect\n}) => {\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\tconst rootClassName = cn(uiStyles.uiPopupOption, styles.menuItem, className);\n\n\tif (href) {\n\t\treturn (\n\t\t\t<a\n\t\t\t\thref={href}\n\t\t\t\ttarget={target}\n\t\t\t\trel={rel}\n\t\t\t\trole=\"menuitem\"\n\t\t\t\ttabIndex={-1}\n\t\t\t\taria-disabled={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\tclassName={rootClassName}\n\t\t\t\tonClick={handleClick as React.MouseEventHandler<HTMLAnchorElement>}>\n\t\t\t\t{icon && <span className={cn(uiStyles.uiPopupOptionIcon, styles.menuItemIcon)}>{icon}</span>}\n\t\t\t\t<span className={cn(uiStyles.uiOptionText, styles.menuItemText)}>{children}</span>\n\t\t\t\t{hotKey && <kbd className={cn(uiStyles.keyboard, styles.menuItemHotKey)}>{hotKey}</kbd>}\n\t\t\t</a>\n\t\t);\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\tdata-menu-item=\"true\"\n\t\t\tdata-disabled={disabled ? \"true\" : undefined}\n\t\t\tdata-ui=\"context-menu-item\"\n\t\t\tdata-action=\"select-context-menu-item\"\n\t\t\tclassName={rootClassName}\n\t\t\tonClick={handleClick as React.MouseEventHandler<HTMLButtonElement>}>\n\t\t\t{icon && <span className={cn(uiStyles.uiPopupOptionIcon, styles.menuItemIcon)}>{icon}</span>}\n\t\t\t<span className={cn(uiStyles.uiOptionText, styles.menuItemText)}>{children}</span>\n\t\t\t{hotKey && <kbd className={cn(uiStyles.keyboard, styles.menuItemHotKey)}>{hotKey}</kbd>}\n\t\t</button>\n\t);\n};\n","import React, { useCallback, useMemo, useRef, useState } from \"react\";\n\nimport { autoUpdate, flip, offset, 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, MenuTriggerMode } from \"./MenuContext\";\n\ninterface MenuRootProps {\n\tchildren: React.ReactNode;\n\tmode: MenuTriggerMode;\n\tplacement?: Placement;\n\topen?: boolean;\n\tdefaultOpen?: boolean;\n\tonOpenChange?: (open: boolean) => void;\n}\n\nexport const MenuRoot: React.FC<MenuRootProps> = ({\n\tchildren,\n\tmode,\n\tplacement = mode === \"click\" ? \"bottom-start\" : \"right-start\",\n\topen: controlledOpen,\n\tdefaultOpen,\n\tonOpenChange\n}) => {\n\tconst [menuState, setMenuState] = useState(initialMenuState);\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\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\") => {\n\t\t\trefs.setReference(element);\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\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\ttriggerElementRef.current = node;\n\t\t\tif (mode === \"click\") {\n\t\t\t\trefs.setReference(node);\n\t\t\t}\n\t\t},\n\t\t[mode, refs]\n\t);\n\n\tconst onTriggerClick = useCallback(\n\t\t(event: React.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: React.MouseEvent<HTMLElement>) => {\n\t\t\tif (mode !== \"contextmenu\") return;\n\t\t\tevent.preventDefault();\n\n\t\t\tconst element = event.currentTarget;\n\t\t\tconst point = getMenuPointFromEvent(event);\n\t\t\topenAtPoint(point, \"contextmenu\", element);\n\t\t},\n\t\t[mode, openAtPoint]\n\t);\n\n\tconst onTriggerKeyDown = useCallback(\n\t\t(event: React.KeyboardEvent<HTMLElement>) => {\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\tconst element = event.currentTarget;\n\n\t\t\tif (mode === \"click\") {\n\t\t\t\topenAtElement(element, \"keyboard\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst point = getMenuPointFromRect(element.getBoundingClientRect());\n\t\t\topenAtPoint(point, \"keyboard\", element);\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\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\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 React from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport uiStyles from \"../../ui.module.scss\";\n\nexport interface MenuSeparatorProps {\n\tclassName?: string;\n}\n\nexport const MenuSeparator: React.FC<MenuSeparatorProps> = ({ className }) => {\n\treturn <div role=\"separator\" className={cn(uiStyles.uiPopupOptionSeparator, className)} />;\n};\n","import React, { Children, 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: React.ReactNode | ((ctx: { closeMenu: () => void }) => React.ReactNode);\n\tclassName?: 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 const RadialMenuContent: React.FC<RadialMenuContentProps> = ({\n\tchildren,\n\tclassName,\n\tcloseOnOutside = true,\n\tcloseOnEscape = true,\n\tdisableOutsideClick = false,\n\trestoreFocus = true,\n\tradius = 76,\n\titemSize = 64,\n\tcloseLabel = \"Закрыть\"\n}) => {\n\tconst { open, 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 React.RefObject<HTMLElement>, triggerRef as React.RefObject<HTMLElement>], outsideClose);\n\n\tconst onMenuKeyDown = useCallback(\n\t\t(event: React.KeyboardEvent<HTMLElement>) => {\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}\n\t\t},\n\t\t[getNavigableItems]\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\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 React.CSSProperties\n\t\t\t\t\t}\n\t\t\t\t\trole=\"menu\"\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\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 React.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 const RadialMenuItem: React.FC<RadialMenuItemProps> = ({ children, icon, className, disabled, closeOnSelect = true, onSelect }) => {\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","/* eslint-disable react-refresh/only-export-components */\nimport 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\nconst ContextMenuRoot: React.FC<ContextMenuProps> = ({ children, placement, open, defaultOpen, onOpenChange }) => {\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\nexport const ContextMenu = Object.assign(ContextMenuRoot, {\n\tTrigger: ContextMenuTrigger,\n\tContent: MenuContent,\n\tRadialContent: RadialMenuContent,\n\tItem: MenuItem,\n\tRadialItem: RadialMenuItem,\n\tSeparator: MenuSeparator,\n\tGroupLabel: MenuGroupLabel\n});\n","import React, { cloneElement } from \"react\";\n\nimport { assignRef, composeKeyboardHandlers, composeMouseHandlers } from \"./helpers\";\nimport { useMenuContext } from \"./MenuContext\";\n\nexport interface DropdownMenuTriggerProps {\n\tchildren: React.ReactElement<React.HTMLAttributes<HTMLElement> & { ref?: React.Ref<HTMLElement> }>;\n}\n\nexport const DropdownMenuTrigger: React.FC<DropdownMenuTriggerProps> = ({ children }) => {\n\tconst { mode, open, 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\tref: (node: HTMLElement | null) => {\n\t\t\tconst childRef = (children.props as { ref?: React.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\tonClick: composeMouseHandlers(children.props.onClick, onTriggerClick),\n\t\tonKeyDown: composeKeyboardHandlers(children.props.onKeyDown, onTriggerKeyDown)\n\t});\n};\n","/* eslint-disable react-refresh/only-export-components */\nimport 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\nconst DropdownMenuRoot: React.FC<DropdownMenuProps> = ({ children, placement, open, defaultOpen, onOpenChange }) => {\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\nexport const DropdownMenu = Object.assign(DropdownMenuRoot, {\n\tTrigger: DropdownMenuTrigger,\n\tContent: MenuContent,\n\tItem: MenuItem,\n\tSeparator: MenuSeparator,\n\tGroupLabel: MenuGroupLabel\n});\n"],"mappings":"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"}
|
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
import { r as e } from "./popover-BTT7zSqx.js";
|
|
2
|
+
import { t } from "./ui.module-BfaIVBba.js";
|
|
3
|
+
import { o as n } from "./input-CAw1Loze.js";
|
|
4
|
+
import { n as r, o as i, s as a, t as o } from "./CalendarView-Cfih7hjD.js";
|
|
5
|
+
import { n as s } from "./radio-group-4j2HbemI.js";
|
|
6
|
+
import { useCallback as c, useEffect as l, useMemo as u, useRef as d, useState as f } from "react";
|
|
7
|
+
import { CalendarDaysIcon as p } from "lucide-react";
|
|
8
|
+
import { jsx as m, jsxs as h } from "react/jsx-runtime";
|
|
9
|
+
import { DEFAULT_DATE_PRESET_NAMES as g, formatDate as _, formatDateRange as v, getCalendarPeriod as y, getDatePreset as b, isDateRangeTuple as x, parseDateByFormat as S, resolveDateFormatName as C } from "@ryuzaki13/react-foundation-lib/formatters";
|
|
10
|
+
//#region src/date-input/lib/dateInputValue.ts
|
|
11
|
+
var w = g.date, T = "dd.MM.yyyy", E = " - ";
|
|
12
|
+
function D(e) {
|
|
13
|
+
return e.selectionMode === "day" || e.selectionMode === "week" ? "day" : e.selectionMode === "month" || e.selectionMode === "year" ? e.selectionMode : e.datePickerLevel ?? "day";
|
|
14
|
+
}
|
|
15
|
+
function O(e) {
|
|
16
|
+
return {
|
|
17
|
+
selectionMode: e?.selectionMode,
|
|
18
|
+
weekEndDay: e?.weekEndDay
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function k(e, t) {
|
|
22
|
+
return typeof e == "string" || e === void 0 ? {
|
|
23
|
+
datePreset: e,
|
|
24
|
+
datePickerLevel: t
|
|
25
|
+
} : t && e.datePickerLevel === void 0 ? {
|
|
26
|
+
...e,
|
|
27
|
+
datePickerLevel: t
|
|
28
|
+
} : e;
|
|
29
|
+
}
|
|
30
|
+
function A(e) {
|
|
31
|
+
let t = C(e, w);
|
|
32
|
+
return b(t) ? t : w;
|
|
33
|
+
}
|
|
34
|
+
function j(e, t) {
|
|
35
|
+
return S(e, A(t.datePreset), {
|
|
36
|
+
defaultFormat: w,
|
|
37
|
+
precision: D(t),
|
|
38
|
+
referenceDate: t.referenceDate
|
|
39
|
+
})?.date ?? null;
|
|
40
|
+
}
|
|
41
|
+
function M(e, t) {
|
|
42
|
+
return y(e, O(t))?.start ?? null;
|
|
43
|
+
}
|
|
44
|
+
function N(e, t) {
|
|
45
|
+
if (!x(e)) return null;
|
|
46
|
+
let [n, r] = e;
|
|
47
|
+
return [M(n, t), P(r, t)];
|
|
48
|
+
}
|
|
49
|
+
function P(e, t) {
|
|
50
|
+
return y(e, O(t))?.end ?? null;
|
|
51
|
+
}
|
|
52
|
+
function F(e) {
|
|
53
|
+
return e?.getTime() ?? null;
|
|
54
|
+
}
|
|
55
|
+
function I(e, t, n) {
|
|
56
|
+
return F(M(e, n)) === F(M(t, n));
|
|
57
|
+
}
|
|
58
|
+
function L(e, t, n) {
|
|
59
|
+
let r = N(e, n), i = N(t, n);
|
|
60
|
+
return F(r?.[0] ?? null) === F(i?.[0] ?? null) && F(r?.[1] ?? null) === F(i?.[1] ?? null);
|
|
61
|
+
}
|
|
62
|
+
function R(e, t, n) {
|
|
63
|
+
if (!e) return "";
|
|
64
|
+
let r = k(t, n), i = y(e, O(r));
|
|
65
|
+
return r.selectionMode === "week" && i ? v(i.start, i.end, A(r.datePreset), { precision: D(r) }) : _(e, A(r.datePreset), { precision: D(r) });
|
|
66
|
+
}
|
|
67
|
+
function z(e, t, n) {
|
|
68
|
+
if (!x(e)) return "";
|
|
69
|
+
let r = k(t, n), [i, a] = e;
|
|
70
|
+
return i && a ? v(i, a, A(r.datePreset), { precision: D(r) }) : i ? `${_(i, A(r.datePreset), { precision: D(r) })}${E}` : "";
|
|
71
|
+
}
|
|
72
|
+
function B(e, t, n) {
|
|
73
|
+
return x(e) ? z(e, t, n) : R(e, t, n);
|
|
74
|
+
}
|
|
75
|
+
function V(e, t, n) {
|
|
76
|
+
let r = k(t, n);
|
|
77
|
+
return M(j(r.selectionMode === "week" ? e.split(E)[0] ?? "" : e, r), r);
|
|
78
|
+
}
|
|
79
|
+
function H(e, t, n) {
|
|
80
|
+
let r = k(t, n), [i = "", a = ""] = e.split(E);
|
|
81
|
+
return [V(i, r), U(a, r)];
|
|
82
|
+
}
|
|
83
|
+
function U(e, t, n) {
|
|
84
|
+
let r = k(t, n);
|
|
85
|
+
return P(j(e, r), r);
|
|
86
|
+
}
|
|
87
|
+
//#endregion
|
|
88
|
+
//#region src/date-input/model/useDateInput.ts
|
|
89
|
+
function W(e) {
|
|
90
|
+
return x(e) ? e[0] ?? e[1] ?? void 0 : e ?? void 0;
|
|
91
|
+
}
|
|
92
|
+
var G = (e) => {
|
|
93
|
+
let t = u(() => {
|
|
94
|
+
let t = {
|
|
95
|
+
selectionMode: e.selectionMode,
|
|
96
|
+
weekEndDay: e.weekEndDay
|
|
97
|
+
};
|
|
98
|
+
return e.selectsRange ? N(e.value, t) : M(e.value, t);
|
|
99
|
+
}, [
|
|
100
|
+
e.selectsRange,
|
|
101
|
+
e.selectionMode,
|
|
102
|
+
e.value,
|
|
103
|
+
e.weekEndDay
|
|
104
|
+
]), n = u(() => ({
|
|
105
|
+
datePreset: e.datePreset,
|
|
106
|
+
datePickerLevel: e.datePickerLevel,
|
|
107
|
+
selectionMode: e.selectionMode,
|
|
108
|
+
weekEndDay: e.weekEndDay
|
|
109
|
+
}), [
|
|
110
|
+
e.datePickerLevel,
|
|
111
|
+
e.datePreset,
|
|
112
|
+
e.selectionMode,
|
|
113
|
+
e.weekEndDay
|
|
114
|
+
]), r = B(t, n), i = JSON.stringify([
|
|
115
|
+
e.selectsRange,
|
|
116
|
+
e.datePreset ?? null,
|
|
117
|
+
e.datePickerLevel ?? null,
|
|
118
|
+
e.selectionMode ?? null,
|
|
119
|
+
e.weekEndDay ?? null,
|
|
120
|
+
x(t) ? [t[0]?.getTime() ?? null, t[1]?.getTime() ?? null] : t?.getTime() ?? null
|
|
121
|
+
]), [a, o] = f(() => ({
|
|
122
|
+
sourceSignature: i,
|
|
123
|
+
selectedDate: t,
|
|
124
|
+
inputValue: r
|
|
125
|
+
})), s = a.sourceSignature === i, c = s ? a.selectedDate : t, l = s ? a.inputValue : r, d = (e) => {
|
|
126
|
+
o((n) => {
|
|
127
|
+
let r = n.sourceSignature === i ? n.selectedDate : t;
|
|
128
|
+
return {
|
|
129
|
+
sourceSignature: i,
|
|
130
|
+
selectedDate: r,
|
|
131
|
+
inputValue: e
|
|
132
|
+
};
|
|
133
|
+
});
|
|
134
|
+
}, p = (e) => {
|
|
135
|
+
o((t) => {
|
|
136
|
+
let n = t.sourceSignature === i ? t.inputValue : r;
|
|
137
|
+
return {
|
|
138
|
+
sourceSignature: i,
|
|
139
|
+
selectedDate: e,
|
|
140
|
+
inputValue: n
|
|
141
|
+
};
|
|
142
|
+
});
|
|
143
|
+
}, m = (e) => B(e, n);
|
|
144
|
+
return {
|
|
145
|
+
inputValue: l,
|
|
146
|
+
setInputValue: d,
|
|
147
|
+
selectedDate: c,
|
|
148
|
+
setSelectedDate: p,
|
|
149
|
+
handleSelect: (t) => {
|
|
150
|
+
let [r, a] = Array.isArray(t) ? t : [t, null];
|
|
151
|
+
if (e.selectsRange) {
|
|
152
|
+
let t = M(r, n), s = P(a, n);
|
|
153
|
+
if (t && s) {
|
|
154
|
+
if (s < t) {
|
|
155
|
+
let t = [M(a, n), P(r, n)];
|
|
156
|
+
o({
|
|
157
|
+
sourceSignature: i,
|
|
158
|
+
selectedDate: t,
|
|
159
|
+
inputValue: m(t)
|
|
160
|
+
}), e.onChange(t);
|
|
161
|
+
} else {
|
|
162
|
+
let n = [t, s];
|
|
163
|
+
o({
|
|
164
|
+
sourceSignature: i,
|
|
165
|
+
selectedDate: n,
|
|
166
|
+
inputValue: m(n)
|
|
167
|
+
}), e.onChange(n);
|
|
168
|
+
}
|
|
169
|
+
return !0;
|
|
170
|
+
}
|
|
171
|
+
let c = [t, null];
|
|
172
|
+
return o({
|
|
173
|
+
sourceSignature: i,
|
|
174
|
+
selectedDate: c,
|
|
175
|
+
inputValue: m(c)
|
|
176
|
+
}), !1;
|
|
177
|
+
}
|
|
178
|
+
let s = M(r, n);
|
|
179
|
+
return o({
|
|
180
|
+
sourceSignature: i,
|
|
181
|
+
selectedDate: s,
|
|
182
|
+
inputValue: m(s)
|
|
183
|
+
}), e.onChange(s), !0;
|
|
184
|
+
},
|
|
185
|
+
formatDate: m,
|
|
186
|
+
parseDate: (t) => {
|
|
187
|
+
let r = {
|
|
188
|
+
...n,
|
|
189
|
+
referenceDate: W(c)
|
|
190
|
+
};
|
|
191
|
+
return e.selectsRange ? H(t, r) : V(t, r);
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
}, K = { selectionModeControl: "-tM-kj" }, q = {
|
|
195
|
+
day: "День",
|
|
196
|
+
week: "Неделя",
|
|
197
|
+
month: "Месяц",
|
|
198
|
+
year: "Год"
|
|
199
|
+
};
|
|
200
|
+
function ee(e, t) {
|
|
201
|
+
let n = new Set(e?.length ? e : r);
|
|
202
|
+
return n.add(t), r.filter((e) => n.has(e));
|
|
203
|
+
}
|
|
204
|
+
function J({ placeholder: r, disabled: u, error: g, onClearError: _, minDate: v, maxDate: y, datePickerLevel: b, selectionMode: S, weekEndDay: C = "sunday", allowSelectionModeChange: w, selectionModeOptions: T, onSelectionModeChange: E, ...D }) {
|
|
205
|
+
let [O, k] = f(!1), [A, j] = f(S ?? "day"), M = S ?? A, N = b ?? "day", P = a(M, N), [F, R] = f(() => ({
|
|
206
|
+
view: P,
|
|
207
|
+
selectionMode: M,
|
|
208
|
+
minDatePickerLevel: N
|
|
209
|
+
})), z = F.selectionMode === M && F.minDatePickerLevel === N && i(F.view, N) ? F.view : P, B = d(D.value), V = {
|
|
210
|
+
selectionMode: M,
|
|
211
|
+
weekEndDay: C
|
|
212
|
+
}, { inputValue: H, setInputValue: U, selectedDate: W, setSelectedDate: J, handleSelect: Y, formatDate: X, parseDate: te } = G({
|
|
213
|
+
...D,
|
|
214
|
+
datePickerLevel: N,
|
|
215
|
+
selectionMode: M,
|
|
216
|
+
weekEndDay: C
|
|
217
|
+
}), Z = D.selectsRange ? D.onChange : void 0, ne = c((e) => {
|
|
218
|
+
i(e, N) && R({
|
|
219
|
+
view: e,
|
|
220
|
+
selectionMode: M,
|
|
221
|
+
minDatePickerLevel: N
|
|
222
|
+
});
|
|
223
|
+
}, [N, M]);
|
|
224
|
+
l(() => {
|
|
225
|
+
B.current = D.value;
|
|
226
|
+
}, [D.value]);
|
|
227
|
+
let Q = () => {
|
|
228
|
+
if (H) {
|
|
229
|
+
let e = te(H);
|
|
230
|
+
if (e) {
|
|
231
|
+
if (U(X(e)), D.selectsRange && x(e)) {
|
|
232
|
+
if (L(e, x(W) ? W : null, V)) return;
|
|
233
|
+
J(e), D.onChange(e);
|
|
234
|
+
} else if (!D.selectsRange && e instanceof Date) {
|
|
235
|
+
if (I(e, W instanceof Date ? W : null, V)) return;
|
|
236
|
+
J(e), D.onChange(e);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}, re = (e) => {
|
|
241
|
+
e.key === "Enter" && (e.preventDefault(), Q());
|
|
242
|
+
}, ie = c((e) => {
|
|
243
|
+
Y(e) && k(!1);
|
|
244
|
+
}, [Y]), ae = c((e) => {
|
|
245
|
+
S === void 0 && j(e), E?.(e), R({
|
|
246
|
+
view: a(e, N),
|
|
247
|
+
selectionMode: e,
|
|
248
|
+
minDatePickerLevel: N
|
|
249
|
+
});
|
|
250
|
+
}, [
|
|
251
|
+
S,
|
|
252
|
+
N,
|
|
253
|
+
E
|
|
254
|
+
]), oe = c(() => {
|
|
255
|
+
if (Z) {
|
|
256
|
+
let [, e] = x(W) ? W : [null, null];
|
|
257
|
+
if (!e) {
|
|
258
|
+
let e = B.current, t = Array.isArray(e) ? e : null, n = t?.[0] ?? null, r = t?.[1] ?? null;
|
|
259
|
+
if (n && r) {
|
|
260
|
+
let e = [n, r];
|
|
261
|
+
J(e), U(X(e)), Z(e);
|
|
262
|
+
} else J([null, null]), U(""), Z([null, null]);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}, [
|
|
266
|
+
Z,
|
|
267
|
+
W,
|
|
268
|
+
J,
|
|
269
|
+
U,
|
|
270
|
+
X
|
|
271
|
+
]), $ = ee(T, M), se = w && $.length > 1;
|
|
272
|
+
return /* @__PURE__ */ h(e, {
|
|
273
|
+
open: O,
|
|
274
|
+
onOpenChange: (e) => {
|
|
275
|
+
k(e), e || oe();
|
|
276
|
+
},
|
|
277
|
+
children: [/* @__PURE__ */ m(n, {
|
|
278
|
+
label: D.label,
|
|
279
|
+
description: D.description,
|
|
280
|
+
size: D.size,
|
|
281
|
+
value: H,
|
|
282
|
+
onChange: U,
|
|
283
|
+
onBlur: Q,
|
|
284
|
+
onKeyUp: re,
|
|
285
|
+
placeholder: r,
|
|
286
|
+
disabled: u,
|
|
287
|
+
error: g,
|
|
288
|
+
onClearError: _,
|
|
289
|
+
endAdornmentWidth: "var(--control-height)",
|
|
290
|
+
endAdornment: /* @__PURE__ */ m(e.Trigger, { children: /* @__PURE__ */ m("div", {
|
|
291
|
+
className: t.uiToggleButtonContainer,
|
|
292
|
+
children: /* @__PURE__ */ m("button", {
|
|
293
|
+
type: "button",
|
|
294
|
+
disabled: u,
|
|
295
|
+
"aria-label": "Открыть календарь",
|
|
296
|
+
className: t.uiToggleButton,
|
|
297
|
+
children: /* @__PURE__ */ m(p, {})
|
|
298
|
+
})
|
|
299
|
+
}) })
|
|
300
|
+
}), /* @__PURE__ */ h(e.Content, {
|
|
301
|
+
background: "primary",
|
|
302
|
+
children: [/* @__PURE__ */ m(o, {
|
|
303
|
+
view: z,
|
|
304
|
+
datePickerLevel: N,
|
|
305
|
+
selectionMode: M,
|
|
306
|
+
weekEndDay: C,
|
|
307
|
+
onViewChange: ne,
|
|
308
|
+
value: W ?? null,
|
|
309
|
+
onChange: ie,
|
|
310
|
+
minDate: v,
|
|
311
|
+
maxDate: y,
|
|
312
|
+
selectsRange: !!D.selectsRange
|
|
313
|
+
}), se && /* @__PURE__ */ m("div", {
|
|
314
|
+
className: K.selectionModeControl,
|
|
315
|
+
children: /* @__PURE__ */ m(s, {
|
|
316
|
+
value: M,
|
|
317
|
+
onChange: ae,
|
|
318
|
+
noWrap: !0,
|
|
319
|
+
"aria-label": "Режим выбора даты",
|
|
320
|
+
children: $.map((e) => /* @__PURE__ */ m(s.Option, {
|
|
321
|
+
value: e,
|
|
322
|
+
label: q[e]
|
|
323
|
+
}, e))
|
|
324
|
+
})
|
|
325
|
+
})]
|
|
326
|
+
})]
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
function Y(e) {
|
|
330
|
+
return /* @__PURE__ */ m(J, { ...e });
|
|
331
|
+
}
|
|
332
|
+
function X(e) {
|
|
333
|
+
return /* @__PURE__ */ m(J, {
|
|
334
|
+
...e,
|
|
335
|
+
selectsRange: !0
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
//#endregion
|
|
339
|
+
export { L as a, z as c, P as d, M as f, V as h, w as i, R as l, U as m, Y as n, I as o, H as p, T as r, B as s, X as t, N as u };
|
|
340
|
+
|
|
341
|
+
//# sourceMappingURL=date-input-Bsl9dxxY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-input-Bsl9dxxY.js","names":[],"sources":["../../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 {\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\tresolveAvailableDatePickerLevel,\n\ttype DateInputSelectionMode,\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 */\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\nconst selectionModeLabels: Record<DateInputSelectionMode, string> = {\n\tday: \"День\",\n\tweek: \"Неделя\",\n\tmonth: \"Месяц\",\n\tyear: \"Год\"\n};\n\nfunction resolveSelectionModeOptions(\n\tselectionModeOptions: readonly DateInputSelectionMode[] | undefined,\n\tselectionMode: DateInputSelectionMode\n): readonly DateInputSelectionMode[] {\n\tconst enabledModes = new Set(selectionModeOptions?.length ? selectionModeOptions : DATE_INPUT_SELECTION_MODES);\n\tenabledModes.add(selectionMode);\n\n\treturn DATE_INPUT_SELECTION_MODES.filter((mode) => enabledModes.has(mode));\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\tdatePickerLevel,\n\tselectionMode: controlledSelectionMode,\n\tweekEndDay = \"sunday\",\n\tallowSelectionModeChange,\n\tselectionModeOptions,\n\tonSelectionModeChange,\n\t...props\n}: DateInputProps) {\n\tconst [open, setOpen] = useState(false);\n\tconst [uncontrolledSelectionMode, setUncontrolledSelectionMode] = useState<DateInputSelectionMode>(controlledSelectionMode ?? \"day\");\n\tconst selectionMode = controlledSelectionMode ?? uncontrolledSelectionMode;\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\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 availableSelectionModes = resolveSelectionModeOptions(selectionModeOptions, selectionMode);\n\tconst showSelectionModeControl = allowSelectionModeChange && availableSelectionModes.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{availableSelectionModes.map((mode) => (\n\t\t\t\t\t\t\t\t<RadioGroup.Option key={mode} value={mode} label={selectionModeLabels[mode]} />\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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"}
|