@ryuzaki13/react-foundation-ui 3.1.11 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/table-column-interactions-DzEvVuXe.js.map +1 -1
- package/dist/layout-picker/index.js +91 -60
- package/dist/layout-picker/index.js.map +1 -1
- package/dist/layout-picker/ui/LayoutPicker.d.ts +17 -1
- package/dist/layout-picker/ui/LayoutPicker.d.ts.map +1 -1
- package/dist/layout-picker/ui/LayoutPresetPreview.d.ts +8 -0
- package/dist/layout-picker/ui/LayoutPresetPreview.d.ts.map +1 -0
- package/dist/splitter/Splitter.d.ts +3 -1
- package/dist/splitter/Splitter.d.ts.map +1 -1
- package/dist/splitter/SplitterHeightContainer.d.ts +24 -0
- package/dist/splitter/SplitterHeightContainer.d.ts.map +1 -0
- package/dist/splitter/index.d.ts +1 -0
- package/dist/splitter/index.d.ts.map +1 -1
- package/dist/splitter/index.js +184 -84
- package/dist/splitter/index.js.map +1 -1
- package/dist/splitter/useSplitterContainerHeight.d.ts +24 -0
- package/dist/splitter/useSplitterContainerHeight.d.ts.map +1 -0
- package/dist/styles.css +1 -1
- package/package.json +1 -1
- package/src/styles/mixins/_mixin.scss +43 -0
- package/storybook-static/assets/{Badge-DMeJysIv.js → Badge-D_miams1.js} +1 -1
- package/storybook-static/assets/{Badge.stories-DvNQ06lz.js → Badge.stories-C53rR6-m.js} +1 -1
- package/storybook-static/assets/{BadgeList-CO7wmhen.js → BadgeList-CXhMsbHN.js} +1 -1
- package/storybook-static/assets/{BarcodeScannerDialog.stories-CNr1YHnH.js → BarcodeScannerDialog.stories-seqRo6OE.js} +1 -1
- package/storybook-static/assets/{Button-BGDiDObX.js → Button-CnG8UaLy.js} +1 -1
- package/storybook-static/assets/{Button-BnbopVrx.js → Button-HcCf8ewy.js} +1 -1
- package/storybook-static/assets/{Button.stories-B_vh9vWu.js → Button.stories-BHSzUc2w.js} +1 -1
- package/storybook-static/assets/{CalendarView-D-AoscWR.js → CalendarView-XtXqdANe.js} +1 -1
- package/storybook-static/assets/{CheckBox-CNwSS4x-.js → CheckBox-CVtYfxZ9.js} +1 -1
- package/storybook-static/assets/{CheckBox-DFKl6X6O.js → CheckBox-D6vctcKk.js} +1 -1
- package/storybook-static/assets/{CheckBox.stories-CQDmYOCE.js → CheckBox.stories-DHXvTXOu.js} +1 -1
- package/storybook-static/assets/{Color-6AOWCN3U-BHwSg3Ve.js → Color-6AOWCN3U-BbiWLCrL.js} +1 -1
- package/storybook-static/assets/{ContextMenu-B55zGMkr.js → ContextMenu-CveMvmMr.js} +1 -1
- package/storybook-static/assets/{ContextMenu-BQyEArge.js → ContextMenu-nOxBI728.js} +1 -1
- package/storybook-static/assets/{ContextMenu.stories-DoB8T7qq.js → ContextMenu.stories-BX-U2HL5.js} +1 -1
- package/storybook-static/assets/{CustomOptionButton-Bp-x3GjU.js → CustomOptionButton-CeQkVSnm.js} +1 -1
- package/storybook-static/assets/{DateInput-CEzZlA7a.js → DateInput-Cl0jsK8W.js} +1 -1
- package/storybook-static/assets/{DateInput-uKgrV_i2.js → DateInput-DZulw10a.js} +1 -1
- package/storybook-static/assets/{DateInput.stories-BHGr75Za.js → DateInput.stories-BAk7jvdQ.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect-DpTqeahJ.js → DateRangePresetSelect-BbP1EZha.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect-D8loCgDP.js → DateRangePresetSelect-fHheb8Qb.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect.stories-ByB8xYCo.js → DateRangePresetSelect.stories-DAE_gknP.js} +1 -1
- package/storybook-static/assets/{Detail-BVI0ZMCR.js → Detail-COtF87BC.js} +1 -1
- package/storybook-static/assets/{Detail.stories-BESXPBRG.js → Detail.stories-CSfAEQCi.js} +1 -1
- package/storybook-static/assets/{Dialog-DaBWR5lX.js → Dialog-BrBqkDX8.js} +1 -1
- package/storybook-static/assets/{Dialog-7UYw11C-.js → Dialog-C2uB9kIV.js} +1 -1
- package/storybook-static/assets/{Dialog.stories-DJfiBF2X.js → Dialog.stories-Bm3UXA9U.js} +1 -1
- package/storybook-static/assets/{Disclosure-BT3_2wim.js → Disclosure-xhFEOG3w.js} +1 -1
- package/storybook-static/assets/{Disclosure.stories-CW14muXq.js → Disclosure.stories-Vl98lnzh.js} +1 -1
- package/storybook-static/assets/{DisclosureGroup-D4ywFTK1.js → DisclosureGroup-DUChaiu8.js} +1 -1
- package/storybook-static/assets/{DocsRenderer-JROSPFPF-BB7m694z.js → DocsRenderer-JROSPFPF-C_WINtPH.js} +1 -1
- package/storybook-static/assets/{DropZone-DroVMeFW.js → DropZone-1gMBb4LE.js} +1 -1
- package/storybook-static/assets/{DropZone-CkpPf2Ym.js → DropZone-BZvrpfEI.js} +1 -1
- package/storybook-static/assets/{DropZone.stories-H3oHPSgn.js → DropZone.stories-DVD3fCWD.js} +1 -1
- package/storybook-static/assets/{DropdownMenu-CR-0aPFt.js → DropdownMenu-DTeBES3S.js} +1 -1
- package/storybook-static/assets/{ExpandableActionPanel-C8gvedUk.js → ExpandableActionPanel-3gzSQS7e.js} +1 -1
- package/storybook-static/assets/{ExpandableActionPanel.stories-4VZLqIJG.js → ExpandableActionPanel.stories-D19yOaYM.js} +1 -1
- package/storybook-static/assets/{Flex-BVNxZ6Xi.js → Flex-DIZfsMsu.js} +1 -1
- package/storybook-static/assets/{Flex.stories-C0iLqBtf.js → Flex.stories-b6asO6Wg.js} +1 -1
- package/storybook-static/assets/{FloatingPopover-iQfpx33c.js → FloatingPopover-BMKn-ql-.js} +1 -1
- package/storybook-static/assets/{FormattedTableCell-DuOzSOq2.js → FormattedTableCell-BT4z527d.js} +1 -1
- package/storybook-static/assets/FormattedTableCell-CXlMRNU9.css +1 -0
- package/storybook-static/assets/{Grid-DjjVW_Zv.js → Grid-DOOnMH98.js} +1 -1
- package/storybook-static/assets/{Grid.stories-af60sApH.js → Grid.stories-BytLkIod.js} +1 -1
- package/storybook-static/assets/{ImageCropper.stories-CyTRwgsq.js → ImageCropper.stories-mOkJIs2l.js} +1 -1
- package/storybook-static/assets/{ImageRenderer-C1JrhJEh.js → ImageRenderer-CZRbXgZb.js} +1 -1
- package/storybook-static/assets/{ImageRenderer.stories-0N2gZ7pW.js → ImageRenderer.stories-DTw8oVgX.js} +1 -1
- package/storybook-static/assets/{ImageView.stories-BUvVhEQi.js → ImageView.stories-C_y-kuMM.js} +1 -1
- package/storybook-static/assets/{ImageViewer.stories-DQvp-8PA.js → ImageViewer.stories-BMW63e3_.js} +2 -2
- package/storybook-static/assets/{ImageViewerRuntime-C1R7YJjb.js → ImageViewerRuntime-CNlV0hTZ.js} +1 -1
- package/storybook-static/assets/{Input-PCnCDfCc.js → Input-CVU8GJSJ.js} +1 -1
- package/storybook-static/assets/{Input-CCoRpQA-.js → Input-D7ogoGUR.js} +1 -1
- package/storybook-static/assets/{Input.stories-B1BXs_Oi.js → Input.stories-Ck5NAzN5.js} +1 -1
- package/storybook-static/assets/{InputDateTime-Lwlxam28.js → InputDateTime-BtQKShpA.js} +1 -1
- package/storybook-static/assets/{InputDateTime.stories-uen-OcdG.js → InputDateTime.stories-Ck_Vdd0f.js} +1 -1
- package/storybook-static/assets/{InputFile-CLoJGype.js → InputFile-BtrIqfKw.js} +1 -1
- package/storybook-static/assets/{InputFile-CWsd9AT5.js → InputFile-C-wYyGvd.js} +1 -1
- package/storybook-static/assets/{InputFile.stories-CU2hQHzw.js → InputFile.stories-Hz_10-5g.js} +1 -1
- package/storybook-static/assets/{InputFiles-DDvgo5_t.js → InputFiles-fMA23_Bz.js} +1 -1
- package/storybook-static/assets/{InputFiles-UsxU995Q.js → InputFiles-kGadQIOr.js} +1 -1
- package/storybook-static/assets/{InputFiles.stories-Xybfwzym.js → InputFiles.stories-DCGwLGsk.js} +1 -1
- package/storybook-static/assets/{InputFilesList-uAKqNArY.js → InputFilesList-D2d_PfYA.js} +1 -1
- package/storybook-static/assets/{InputImage-CS9ySFBB.js → InputImage-DUthKRXu.js} +1 -1
- package/storybook-static/assets/{InputImage-Qgk9M4kC.js → InputImage-DmHkPJAH.js} +1 -1
- package/storybook-static/assets/{InputImage.stories-C6ruZA9G.js → InputImage.stories-jatpBa1U.js} +1 -1
- package/storybook-static/assets/{InteractiveComponents-DzDaJWyA.js → InteractiveComponents-DoYiFxrU.js} +1 -1
- package/storybook-static/assets/{InteractiveComponents.stories-ElVCyI3k.js → InteractiveComponents.stories-C7MNF767.js} +1 -1
- package/storybook-static/assets/LayoutPicker-BXPyXDP-.js +85 -0
- package/storybook-static/assets/{LayoutPicker-DjolQnoU.js → LayoutPicker-C-QQvpXv.js} +39 -2
- package/storybook-static/assets/LayoutPicker.stories-Dwo08nCV.js +91 -0
- package/storybook-static/assets/{Listbox-CoskUebV.js → Listbox-CVTOtx7h.js} +1 -1
- package/storybook-static/assets/{Listbox-BOmRUACj.js → Listbox-lOsGVKCt.js} +1 -1
- package/storybook-static/assets/{Listbox.stories-C9ZQ-n46.js → Listbox.stories-JF_tgMsM.js} +1 -1
- package/storybook-static/assets/{Modal-B0iwM39D.js → Modal-DNDnh6eL.js} +1 -1
- package/storybook-static/assets/{Modal-BRWAjcim.js → Modal-XipTBtwq.js} +1 -1
- package/storybook-static/assets/{Modal.stories-B2l2giba.js → Modal.stories-C-D2Op2H.js} +1 -1
- package/storybook-static/assets/{ModalManagerProvider-CBSdkzkh.js → ModalManagerProvider-BSgCQPE0.js} +1 -1
- package/storybook-static/assets/{MultiSelect-C22p2qFd.js → MultiSelect-BkjfbN5S.js} +1 -1
- package/storybook-static/assets/{MultiSelect-UuMNjdIM.js → MultiSelect-juwreD-7.js} +1 -1
- package/storybook-static/assets/{MultiSelect.stories-CfY-hEDN.js → MultiSelect.stories-DpH2Lt7S.js} +1 -1
- package/storybook-static/assets/{NoData-DD1-TPJ8.js → NoData-A59EYm0a.js} +1 -1
- package/storybook-static/assets/{NotificationsHost-Cph6Rv-P.js → NotificationsHost-Dmp9bSBy.js} +1 -1
- package/storybook-static/assets/{NotificationsHost.stories-CTwxblPK.js → NotificationsHost.stories-Ds9fPqPw.js} +1 -1
- package/storybook-static/assets/{ODataMultiSelect-BHRi8PM3.js → ODataMultiSelect-ATFN6j03.js} +1 -1
- package/storybook-static/assets/{ODataMultiSelect.stories-DO4MwYqZ.js → ODataMultiSelect.stories-BZHufWhw.js} +1 -1
- package/storybook-static/assets/{ODataSelect-BzowLQRW.js → ODataSelect-wsq-aKaL.js} +1 -1
- package/storybook-static/assets/{ODataSelect.stories-yiyUyvLW.js → ODataSelect.stories-DDJckPji.js} +1 -1
- package/storybook-static/assets/{ODataTreeMultiSelect-DYEDHrJk.js → ODataTreeMultiSelect-DRkVACkc.js} +1 -1
- package/storybook-static/assets/{ODataTreeMultiSelect.stories-BTicwCLX.js → ODataTreeMultiSelect.stories-Cf9f-c1A.js} +1 -1
- package/storybook-static/assets/{ODataTreeSelect-D5k1Iff-.js → ODataTreeSelect-DmpAqcJn.js} +1 -1
- package/storybook-static/assets/{ODataTreeSelect.stories-CCVP7I2I.js → ODataTreeSelect.stories-CmjLCIoB.js} +1 -1
- package/storybook-static/assets/{OneStepScroller-Cz6xH1bE.js → OneStepScroller-EAhOZmWt.js} +1 -1
- package/storybook-static/assets/{Option-BwIc-SxO.js → Option-Bc5-OwJm.js} +1 -1
- package/storybook-static/assets/{OptionButton-1bkL_ARz.js → OptionButton-PxwmoR0s.js} +1 -1
- package/storybook-static/assets/{PeriodSelect-DHDeruQ5.js → PeriodSelect-B-NPWAUQ.js} +1 -1
- package/storybook-static/assets/{PeriodSelect-3cBfMenI.js → PeriodSelect-Dd3tAy-l.js} +1 -1
- package/storybook-static/assets/{PeriodSelect.stories-DClPnVuc.js → PeriodSelect.stories-BCRagfo9.js} +1 -1
- package/storybook-static/assets/{PickerField-BVM71JTp.js → PickerField-BSGmEh4a.js} +1 -1
- package/storybook-static/assets/{PickerTriggerActions-DV6T2DSE.js → PickerTriggerActions-CbcemWC5.js} +1 -1
- package/storybook-static/assets/{Popover-Cd2h2-HN.js → Popover-ChIXyBaB.js} +1 -1
- package/storybook-static/assets/{Popover-Dgdym7C9.js → Popover-DDcNjJVQ.js} +1 -1
- package/storybook-static/assets/{Popover.stories-DZY8b7B4.js → Popover.stories-DFA9Jxpy.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput-BlDKWB8g.js → PresetRangeDateInput-BqXmZpJv.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput-M7g0tNmF.js → PresetRangeDateInput-CbqvxYsV.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput.stories-DUlRx8Hm.js → PresetRangeDateInput.stories-BHQTcW_z.js} +1 -1
- package/storybook-static/assets/{PresetSelect-BX0eCpVd.js → PresetSelect-CtDoIWSg.js} +1 -1
- package/storybook-static/assets/{README-BACv6QvN.js → README-87vCeikt.js} +1 -1
- package/storybook-static/assets/{README-BvYIa23p.js → README-8ieYbwRv.js} +1 -1
- package/storybook-static/assets/{README-_q_WEwWm.js → README-B2UhI-qx.js} +1 -1
- package/storybook-static/assets/{README-BVgy3UNo.js → README-B3SMW4TV.js} +1 -1
- package/storybook-static/assets/{README-Bppk1lMH.js → README-B43WmszX.js} +1 -1
- package/storybook-static/assets/{README-ClIksAGj.js → README-B5rpg-Bo.js} +1 -1
- package/storybook-static/assets/{README-BtA-sh7R.js → README-BAPMV_Cm.js} +1 -1
- package/storybook-static/assets/{README-q48GU6pG.js → README-BEzdp9qB.js} +1 -1
- package/storybook-static/assets/{README-Dntdyfw9.js → README-BHN17dUh.js} +1 -1
- package/storybook-static/assets/{README-CVYFrIk6.js → README-BPBvX2pu.js} +1 -1
- package/storybook-static/assets/{README-BtZJxRh9.js → README-BRozDrPV.js} +1 -1
- package/storybook-static/assets/{README-0gkKItXp.js → README-BS2qCis7.js} +1 -1
- package/storybook-static/assets/{README-Ccs88yDD.js → README-BS9CB7TR.js} +1 -1
- package/storybook-static/assets/{README-D9v4z9v1.js → README-BTI7-oMS.js} +1 -1
- package/storybook-static/assets/{README-BMD3jUe3.js → README-Bf13jEbX.js} +1 -1
- package/storybook-static/assets/{README-BYXXSCUq.js → README-BmX_gdJm.js} +1 -1
- package/storybook-static/assets/{README-KYuSHqmC.js → README-BuUZJLLD.js} +1 -1
- package/storybook-static/assets/{README-Hr6AhE0j.js → README-BviZJCGw.js} +1 -1
- package/storybook-static/assets/{README-BK1Z-v3p.js → README-CD0CH2Wy.js} +1 -1
- package/storybook-static/assets/{README-fIek3dXZ.js → README-CNQJDOEQ.js} +1 -1
- package/storybook-static/assets/{README-zkI8EjI4.js → README-COGC_G42.js} +1 -1
- package/storybook-static/assets/{README-Bqu12v63.js → README-CSYTh4FM.js} +1 -1
- package/storybook-static/assets/{README-Cm3-DZcu.js → README-CVzeBBbC.js} +1 -1
- package/storybook-static/assets/{README-DNC05YJB.js → README-CYkJGsO-.js} +1 -1
- package/storybook-static/assets/{README-hKk-aoSP.js → README-ClbpyGVv.js} +1 -1
- package/storybook-static/assets/{README-UspzlcL6.js → README-CvznQ5DE.js} +1 -1
- package/storybook-static/assets/{README-BpUXnkc_.js → README-D1_Y0Xmw.js} +1 -1
- package/storybook-static/assets/{README-3UAsyZbR.js → README-D2yCfl2o.js} +1 -1
- package/storybook-static/assets/{README-BxqbgiGL.js → README-D9bg9f74.js} +1 -1
- package/storybook-static/assets/{README-CHevIXCB.js → README-DJ1jDUnA.js} +1 -1
- package/storybook-static/assets/{README-Du37Xl3P.js → README-DMbTryDc.js} +1 -1
- package/storybook-static/assets/{README-CbYkIIHQ.js → README-DNjzB9pT.js} +1 -1
- package/storybook-static/assets/{README-DetgVpvA.js → README-DTAFDnFQ.js} +1 -1
- package/storybook-static/assets/{README-el0JuYkD.js → README-DUBJn2Ju.js} +1 -1
- package/storybook-static/assets/{README-BHkzEfPJ.js → README-D_RZ1dEa.js} +1 -1
- package/storybook-static/assets/{README-COom255N.js → README-DaHZmDOI.js} +1 -1
- package/storybook-static/assets/{README-D8nwrTvb.js → README-Daclz_Vq.js} +1 -1
- package/storybook-static/assets/{README-C56Pk295.js → README-Dl_o4aSe.js} +1 -1
- package/storybook-static/assets/{README-DIr-LZmu.js → README-DmaK5qEx.js} +1 -1
- package/storybook-static/assets/{README-C57tdNnd.js → README-DxeEPo-5.js} +1 -1
- package/storybook-static/assets/{README-QnABYk99.js → README-Dxm4jPJX.js} +1 -1
- package/storybook-static/assets/{README-BB4AIZx4.js → README-ErUs-WY2.js} +1 -1
- package/storybook-static/assets/{README-BIEcjQkL.js → README-OfF6wOio.js} +1 -1
- package/storybook-static/assets/{README-CueQgLpu.js → README-QZVvMoOB.js} +1 -1
- package/storybook-static/assets/{README-DYigwbHC.js → README-QjVUi8kc.js} +1 -1
- package/storybook-static/assets/{README-CjQxMGrK.js → README-SZH6KGw3.js} +1 -1
- package/storybook-static/assets/{README-DvWtY7cD.js → README-ZR6Xp0dF.js} +1 -1
- package/storybook-static/assets/{README-BTsdFVZT.js → README-a77qa4ty.js} +1 -1
- package/storybook-static/assets/{README-tqczNkKb.js → README-ex5nxaXZ.js} +1 -1
- package/storybook-static/assets/{README-Cvwidnmb.js → README-g1OFGqQI.js} +1 -1
- package/storybook-static/assets/{README-C1gKZwYI.js → README-gx4Fd1mY.js} +1 -1
- package/storybook-static/assets/{README-BOClmhwG.js → README-q1qdBpXc.js} +1 -1
- package/storybook-static/assets/{README-DWp4mMDT.js → README-vD1-Ulbp.js} +1 -1
- package/storybook-static/assets/{RadioButton-Mehizuhq.js → RadioButton-CF3QPcrf.js} +1 -1
- package/storybook-static/assets/{RadioButton-auLj4-zL.js → RadioButton-hjjU5sk5.js} +1 -1
- package/storybook-static/assets/{RadioButton.stories-DUPHMC7R.js → RadioButton.stories-koM1Ljav.js} +1 -1
- package/storybook-static/assets/{RadioGroup-CCBow4kQ.js → RadioGroup-Br-l88J6.js} +1 -1
- package/storybook-static/assets/{RadioGroup-DQJJ6gPZ.js → RadioGroup-D5eW-uDY.js} +1 -1
- package/storybook-static/assets/{RadioGroup.stories-DAD36GWN.js → RadioGroup.stories-DrwOi4QH.js} +1 -1
- package/storybook-static/assets/{Scrollable-BxISsXHD.js → Scrollable-BrsRmcMz.js} +1 -1
- package/storybook-static/assets/{Select-CW1LEiv_.js → Select-Bf5M5oc0.js} +1 -1
- package/storybook-static/assets/{Select-d-fEnaa8.js → Select-Cmlknxsv.js} +1 -1
- package/storybook-static/assets/{Select.stories-UnxQwrgw.js → Select.stories-BM8U-sIP.js} +1 -1
- package/storybook-static/assets/{SerializableSelect-DD2_hWWj.js → SerializableSelect-DF8HELZf.js} +1 -1
- package/storybook-static/assets/{SerializableSelect.stories-B9tOS_kS.js → SerializableSelect.stories-BfDNuils.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput-DbdBxnNL.js → SingleDateTimeInput-4p_cgs10.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput-BZHoMXPL.js → SingleDateTimeInput-DEOj7KGq.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput.stories-DYrlQQK_.js → SingleDateTimeInput.stories-D2EI6quF.js} +1 -1
- package/storybook-static/assets/Slider-Bz4wP74t.js +1 -0
- package/storybook-static/assets/{Slider-DUu2FS36.js → Slider-XVAOSj2a.js} +1 -1
- package/storybook-static/assets/{Slider.stories-DhgTMJXk.js → Slider.stories-B8_8QSd8.js} +1 -1
- package/storybook-static/assets/{SliderInput-BPDYabBm.js → SliderInput-1U-1F8y3.js} +1 -1
- package/storybook-static/assets/SliderInput-BmIo8trQ.js +2 -0
- package/storybook-static/assets/{SliderInput.stories-B_tKQkjE.js → SliderInput.stories-Da1hcUQg.js} +1 -1
- package/storybook-static/assets/{Sortable-rVZSJ0MP.js → Sortable-DdSm1U01.js} +1 -1
- package/storybook-static/assets/{Sortable.stories-CRJnSkcQ.js → Sortable.stories-B3vBG-Wg.js} +1 -1
- package/storybook-static/assets/Splitter-BdSyx5Lj.css +1 -0
- package/storybook-static/assets/Splitter-SV-d9MZj.js +105 -0
- package/storybook-static/assets/Splitter.stories-jPF9QpQ5.js +52 -0
- package/storybook-static/assets/{StateSelect-C-0IvRHS.js → StateSelect-CLYa34QZ.js} +1 -1
- package/storybook-static/assets/{StateSelect-gOQ0XvSf.js → StateSelect-Dg6j3tmo.js} +1 -1
- package/storybook-static/assets/{StateSelect.stories-CIxhqpNM.js → StateSelect.stories-B-XXt836.js} +1 -1
- package/storybook-static/assets/{StatusIndicator-CBIQrF9V.js → StatusIndicator-SmIOAZiH.js} +1 -1
- package/storybook-static/assets/{StatusIndicator.stories-BBU6jew8.js → StatusIndicator.stories-Dxn-Ph9C.js} +1 -1
- package/storybook-static/assets/{StringToggle.stories-CsRMTm3I.js → StringToggle.stories-Dm_95aFz.js} +1 -1
- package/storybook-static/assets/{Switch-DatgDVdK.js → Switch-DHKEAZQb.js} +1 -1
- package/storybook-static/assets/{Switch-CVYrb-C8.js → Switch-_tgHhBGP.js} +1 -1
- package/storybook-static/assets/{Switch.stories-BPu1LZgU.js → Switch.stories-BHEJkS4S.js} +1 -1
- package/storybook-static/assets/{Table-imlpBfwX.js → Table-DlSI_r_q.js} +1 -1
- package/storybook-static/assets/{Table.stories-Cvh1IQDl.js → Table.stories-B5rgYs9g.js} +1 -1
- package/storybook-static/assets/{TableEditor.stories-LCjtLdiP.js → TableEditor.stories-KVe48GsE.js} +1 -1
- package/storybook-static/assets/{Tabs-CRz6bWov.js → Tabs-DrYsqBrH.js} +1 -1
- package/storybook-static/assets/{Tabs.stories-DPnAgLNJ.js → Tabs.stories-BPct4JgR.js} +1 -1
- package/storybook-static/assets/{TabsBox-Nz7G3xEL.js → TabsBox-AWLl9n9k.js} +1 -1
- package/storybook-static/assets/{TagInput-BpcFBJfZ.js → TagInput-Bhnrf28Y.js} +1 -1
- package/storybook-static/assets/{TagInput.stories-BfSaOSvw.js → TagInput.stories-Bkt4gArB.js} +1 -1
- package/storybook-static/assets/{Text-B3D2vMCW.js → Text-BgFSnObV.js} +1 -1
- package/storybook-static/assets/{Textarea-xdvWOiup.js → Textarea-BNJPblVu.js} +1 -1
- package/storybook-static/assets/{Textarea-3jbBpgul.js → Textarea-ClwEnzFe.js} +1 -1
- package/storybook-static/assets/{Textarea.stories-CF4DNsNe.js → Textarea.stories-DpKH8ULU.js} +1 -1
- package/storybook-static/assets/{TimePanel-Bv2GqewD.js → TimePanel-BZwQNhG_.js} +1 -1
- package/storybook-static/assets/{TimePanel.stories-BxlduVmr.js → TimePanel.stories-4TgrKbYT.js} +1 -1
- package/storybook-static/assets/{Toggle-RzkOO8XU.js → Toggle-CO8Ij90u.js} +1 -1
- package/storybook-static/assets/{Toggle-CZQF9SOX.js → Toggle-DbixMwD6.js} +1 -1
- package/storybook-static/assets/{Toggle.stories-DLk-SFNM.js → Toggle.stories-Dc4VwIpg.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect-Q83iIlgk.js → TreeMultiSelect-C-_TH1CD.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect-DKkT-avt.js → TreeMultiSelect-CriZ1qIe.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect.stories-BZmGApb6.js → TreeMultiSelect.stories-d_SN0Sy2.js} +1 -1
- package/storybook-static/assets/{TreePickerBase-BLj2YWml.js → TreePickerBase-DrIewo4F.js} +1 -1
- package/storybook-static/assets/{TreeSelect-DWyC2NwF.js → TreeSelect-9_6a1BFQ.js} +1 -1
- package/storybook-static/assets/{TreeSelect-aoVPbBgH.js → TreeSelect-Bbt4VmZS.js} +1 -1
- package/storybook-static/assets/{TreeSelect.stories-CKsSdre0.js → TreeSelect.stories-pu8ExKD5.js} +1 -1
- package/storybook-static/assets/{TreeTable-JNPEvZz4.js → TreeTable-DophWkj1.js} +1 -1
- package/storybook-static/assets/{TreeTable.stories-BvNIzTgS.js → TreeTable.stories-Pfm9IHtt.js} +1 -1
- package/storybook-static/assets/{blocks-BQbV8tvi.js → blocks-B8YtS91C.js} +3 -3
- package/storybook-static/assets/{check-D8lsE3m8.js → check-Dpmf3AX3.js} +1 -1
- package/storybook-static/assets/{chevron-down-BUOphp2x.js → chevron-down-DNiHhbIr.js} +1 -1
- package/storybook-static/assets/{chevron-left-BEy7ghdm.js → chevron-left-DOGuNTdf.js} +1 -1
- package/storybook-static/assets/{chevron-right-DooOlrxc.js → chevron-right-Dpww2xSW.js} +1 -1
- package/storybook-static/assets/{chunk-W22LQPXL-IfzPJQYN.js → chunk-W22LQPXL-DMKzrwT-.js} +1 -1
- package/storybook-static/assets/{circle-alert-D81odDTC.js → circle-alert-0JRaOQ6l.js} +1 -1
- package/storybook-static/assets/{circle-check-qf8iTA7G.js → circle-check-cScFaPMW.js} +1 -1
- package/storybook-static/assets/{components-DZ74KJ1z.js → components-CX2-Yz0X.js} +3 -3
- package/storybook-static/assets/{contextMenu-CVqxMXIo.js → contextMenu-9tIzHxoE.js} +1 -1
- package/storybook-static/assets/{download-DHdaBay2.js → download-DgVtY66c.js} +1 -1
- package/storybook-static/assets/{floating-ui.react-BNZYvpUN.js → floating-ui.react-DoTNEH-V.js} +1 -1
- package/storybook-static/assets/{foundationApi-CZ_3jdeC.js → foundationApi-CrfT1bel.js} +1 -1
- package/storybook-static/assets/{foundationLib-DbJQ6xV6.js → foundationLib-C3lg6eHJ.js} +1 -1
- package/storybook-static/assets/{hooks-v5_dpZPQ.js → hooks-DUjApVwU.js} +1 -1
- package/storybook-static/assets/{iframe-Dvo-sM6X.js → iframe-BNEMNAEw.js} +4 -4
- package/storybook-static/assets/iframe-DRW7Blys.js +1 -0
- package/storybook-static/assets/{info-bO3OPRxt.js → info-DLaCn50r.js} +1 -1
- package/storybook-static/assets/number-scale-D2KTkjVQ.js +1 -0
- package/storybook-static/assets/{odata-qSl-tFRM.js → odata-gcOB7kIq.js} +1 -1
- package/storybook-static/assets/{odataStoryFixtures-D1GWvgZm.js → odataStoryFixtures-DYyQ-sVj.js} +1 -1
- package/storybook-static/assets/{react-_Ic2fGi_.js → react-E46PZk5t.js} +1 -1
- package/storybook-static/assets/{refresh-cw-208ktFgy.js → refresh-cw-DOoEo5nW.js} +1 -1
- package/storybook-static/assets/{settings-2-Cvceha-j.js → settings-2-qiHcSfL1.js} +1 -1
- package/storybook-static/assets/{sortable-CwkKLxhm.js → sortable-YPosiOrw.js} +1 -1
- package/storybook-static/assets/{syntaxhighlighter-QEQV7K2Y-BXNKwdIE.js → syntaxhighlighter-QEQV7K2Y-Cb3owL36.js} +1 -1
- package/storybook-static/assets/{trash-2-B0tUyzY_.js → trash-2-m2QWUX7a.js} +1 -1
- package/storybook-static/assets/{triangle-alert-DVsUvFoI.js → triangle-alert-dC_KzK0I.js} +1 -1
- package/storybook-static/assets/{useODataSelectBase-DSETV5ip.js → useODataSelectBase-CZT1sCI4.js} +1 -1
- package/storybook-static/assets/{useODataTreeData-PxgMVfow.js → useODataTreeData-C4C8qk14.js} +1 -1
- package/storybook-static/assets/{usePickerQuery-BujjL0G3.js → usePickerQuery-BVa-C4dI.js} +1 -1
- package/storybook-static/assets/{usePickerTriggerController-D-NPyaVF.js → usePickerTriggerController-DSGNNIhS.js} +1 -1
- package/storybook-static/assets/{x-BpYpjEHH.js → x-B7mf6jeL.js} +1 -1
- package/storybook-static/iframe.html +2 -2
- package/storybook-static/index.json +1 -1
- package/storybook-static/project.json +1 -1
- package/storybook-static/assets/FormattedTableCell-CTIL_ueu.css +0 -1
- package/storybook-static/assets/LayoutPicker-C4AXII_3.js +0 -66
- package/storybook-static/assets/LayoutPicker.stories-dx03fSh0.js +0 -74
- package/storybook-static/assets/Slider-B9n25YEj.js +0 -1
- package/storybook-static/assets/SliderInput-Bv-wqB63.js +0 -2
- package/storybook-static/assets/Splitter-BxWa6cr0.js +0 -83
- package/storybook-static/assets/Splitter-D-LmmQad.css +0 -1
- package/storybook-static/assets/Splitter.stories-BoAHtDqQ.js +0 -39
- package/storybook-static/assets/iframe-0Ohsk5kI.js +0 -1
package/dist/splitter/index.js
CHANGED
|
@@ -1,168 +1,268 @@
|
|
|
1
|
-
import { Children as e, useCallback as t, useEffect as n,
|
|
2
|
-
import { cn as
|
|
3
|
-
import { jsx as
|
|
4
|
-
|
|
1
|
+
import { Children as e, useCallback as t, useEffect as n, useId as r, useLayoutEffect as i, useRef as a, useState as o } from "react";
|
|
2
|
+
import { cn as s } from "@ryuzaki13/react-foundation-lib/utils";
|
|
3
|
+
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
4
|
+
import { clampNumberScaleValue as u, offsetNumberScaleValue as d, resolveNumberScaleBounds as f } from "@ryuzaki13/react-foundation-lib/number-scale";
|
|
5
|
+
var p = {
|
|
5
6
|
splitter: "wAovST",
|
|
6
7
|
vertical: "QVVMwe",
|
|
7
8
|
separator: "H43AJ8",
|
|
8
9
|
horizontal: "pgo8sW",
|
|
9
10
|
topLeft: "_8fCvqA",
|
|
10
11
|
bottomRight: "t6RFcI"
|
|
11
|
-
},
|
|
12
|
-
function
|
|
12
|
+
}, m = .1, h = .9, g = .7, _ = .02;
|
|
13
|
+
function v(e, t, n) {
|
|
13
14
|
return Math.min(n, Math.max(t, e));
|
|
14
15
|
}
|
|
15
|
-
function
|
|
16
|
-
return Number.isFinite(e) ?
|
|
16
|
+
function y(e, t) {
|
|
17
|
+
return Number.isFinite(e) ? v(e, 0, 1) : t;
|
|
17
18
|
}
|
|
18
|
-
function
|
|
19
|
-
let n =
|
|
19
|
+
function b(e, t) {
|
|
20
|
+
let n = y(e, m), r = y(t, h);
|
|
20
21
|
return n <= r ? [n, r] : [r, n];
|
|
21
22
|
}
|
|
22
|
-
function
|
|
23
|
+
function x(e, t) {
|
|
23
24
|
return e === "vertical" ? t.clientX : t.clientY;
|
|
24
25
|
}
|
|
25
|
-
function
|
|
26
|
+
function S(e, t) {
|
|
26
27
|
return e === "vertical" ? t.width : t.height;
|
|
27
28
|
}
|
|
28
|
-
function
|
|
29
|
+
function C(e, t) {
|
|
29
30
|
if (e === "vertical") {
|
|
30
31
|
if (t === "ArrowLeft") return -.02;
|
|
31
|
-
if (t === "ArrowRight") return
|
|
32
|
+
if (t === "ArrowRight") return _;
|
|
32
33
|
}
|
|
33
34
|
if (e === "horizontal") {
|
|
34
35
|
if (t === "ArrowUp") return -.02;
|
|
35
|
-
if (t === "ArrowDown") return
|
|
36
|
+
if (t === "ArrowDown") return _;
|
|
36
37
|
}
|
|
37
38
|
return null;
|
|
38
39
|
}
|
|
39
|
-
function
|
|
40
|
+
function w(e, t) {
|
|
40
41
|
return t === "start" ? 0 : t === "end" ? 1 : e;
|
|
41
42
|
}
|
|
42
|
-
function
|
|
43
|
-
let [
|
|
44
|
-
|
|
45
|
-
}, [
|
|
46
|
-
if (
|
|
47
|
-
let e =
|
|
48
|
-
return
|
|
49
|
-
},
|
|
50
|
-
|
|
51
|
-
|
|
43
|
+
function T({ direction: e, initial: r, min: s, max: c, onChange: l, collapsedPane: u }) {
|
|
44
|
+
let [d, f] = b(s, c), p = a(null), m = a(null), h = a(null), _ = a(null), T = a(null), E = a(null), D = a(0), O = a(v(y(r, g), d, f)), k = a(r), [A, j] = o(() => v(y(r, g), d, f)), M = a(A), N = t((e) => {
|
|
45
|
+
M.current = e, m.current?.style.setProperty("flex-basis", `${w(e, u) * 100}%`), h.current?.setAttribute("aria-valuenow", `${Math.round(e * 100)}`);
|
|
46
|
+
}, [u]), P = () => {
|
|
47
|
+
if (E.current !== null && (cancelAnimationFrame(E.current), E.current = null), T.current === null) return M.current;
|
|
48
|
+
let e = T.current;
|
|
49
|
+
return T.current = null, N(e), e;
|
|
50
|
+
}, F = (e) => {
|
|
51
|
+
T.current = e, E.current === null && (E.current = requestAnimationFrame(() => {
|
|
52
|
+
E.current = null, T.current !== null && N(T.current);
|
|
52
53
|
}));
|
|
53
|
-
},
|
|
54
|
-
|
|
55
|
-
},
|
|
56
|
-
|
|
54
|
+
}, I = () => {
|
|
55
|
+
_.current?.(), _.current = null;
|
|
56
|
+
}, L = (e, t = M.current) => {
|
|
57
|
+
P();
|
|
58
|
+
let n = v(e, d, f);
|
|
59
|
+
j(n), n !== t && l?.(n);
|
|
57
60
|
};
|
|
58
|
-
return
|
|
59
|
-
|
|
60
|
-
}, [
|
|
61
|
-
|
|
62
|
-
let t =
|
|
63
|
-
return
|
|
61
|
+
return i(() => {
|
|
62
|
+
N(A);
|
|
63
|
+
}, [N, A]), n(() => {
|
|
64
|
+
j((e) => {
|
|
65
|
+
let t = k.current !== r;
|
|
66
|
+
return k.current = r, v(t ? y(r, g) : e, d, f);
|
|
64
67
|
});
|
|
65
68
|
}, [
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
+
r,
|
|
70
|
+
d,
|
|
71
|
+
f
|
|
69
72
|
]), n(() => () => {
|
|
70
|
-
|
|
73
|
+
I(), E.current !== null && cancelAnimationFrame(E.current);
|
|
71
74
|
}, []), {
|
|
72
75
|
containerRef: p,
|
|
73
|
-
topLeftRef:
|
|
74
|
-
separatorRef:
|
|
75
|
-
ratio:
|
|
76
|
-
minRatio:
|
|
77
|
-
maxRatio:
|
|
76
|
+
topLeftRef: m,
|
|
77
|
+
separatorRef: h,
|
|
78
|
+
ratio: A,
|
|
79
|
+
minRatio: d,
|
|
80
|
+
maxRatio: f,
|
|
78
81
|
handleSeparatorPointerDown: (t) => {
|
|
79
82
|
if (t.button !== 0) return;
|
|
80
83
|
t.preventDefault();
|
|
81
84
|
let n = p.current;
|
|
82
85
|
if (!n) return;
|
|
83
|
-
|
|
86
|
+
I();
|
|
84
87
|
try {
|
|
85
88
|
t.currentTarget.setPointerCapture?.(t.pointerId);
|
|
86
89
|
} catch {}
|
|
87
|
-
|
|
90
|
+
D.current = x(e, t), O.current = M.current;
|
|
88
91
|
let r = (t) => {
|
|
89
|
-
let r =
|
|
92
|
+
let r = S(e, n.getBoundingClientRect());
|
|
90
93
|
if (r <= 0) return;
|
|
91
|
-
let i =
|
|
92
|
-
|
|
94
|
+
let i = x(e, t) - D.current, a = v(O.current + i / r, d, f);
|
|
95
|
+
F(a);
|
|
93
96
|
}, i = () => {
|
|
94
|
-
|
|
97
|
+
I(), L(P(), O.current);
|
|
95
98
|
};
|
|
96
|
-
|
|
99
|
+
_.current = () => {
|
|
97
100
|
document.removeEventListener("pointermove", r), document.removeEventListener("pointerup", i), document.removeEventListener("pointercancel", i);
|
|
98
101
|
}, document.addEventListener("pointermove", r), document.addEventListener("pointerup", i), document.addEventListener("pointercancel", i);
|
|
99
102
|
},
|
|
100
103
|
handleSeparatorKeyDown: (t) => {
|
|
101
|
-
let n =
|
|
104
|
+
let n = C(e, t.key);
|
|
102
105
|
if (n !== null) {
|
|
103
|
-
t.preventDefault(),
|
|
106
|
+
t.preventDefault(), L(M.current + n);
|
|
104
107
|
return;
|
|
105
108
|
}
|
|
106
109
|
if (t.key === "Home") {
|
|
107
|
-
t.preventDefault(),
|
|
110
|
+
t.preventDefault(), L(d);
|
|
108
111
|
return;
|
|
109
112
|
}
|
|
110
|
-
t.key === "End" && (t.preventDefault(),
|
|
113
|
+
t.key === "End" && (t.preventDefault(), L(f));
|
|
111
114
|
}
|
|
112
115
|
};
|
|
113
116
|
}
|
|
114
|
-
function
|
|
115
|
-
let { containerRef:
|
|
116
|
-
return /* @__PURE__ */
|
|
117
|
-
ref:
|
|
118
|
-
className:
|
|
117
|
+
function E({ className: e, direction: t, left: n, right: r, collapsedPane: i, logic: a }) {
|
|
118
|
+
let { containerRef: o, topLeftRef: u, separatorRef: d, ratio: f, minRatio: m, maxRatio: h, handleSeparatorPointerDown: g, handleSeparatorKeyDown: _ } = a, v = w(f, i), y = i === "start", b = i === "end", x = i === null;
|
|
119
|
+
return /* @__PURE__ */ l("div", {
|
|
120
|
+
ref: o,
|
|
121
|
+
className: s(p.splitter, p[t], e),
|
|
119
122
|
children: [
|
|
120
|
-
/* @__PURE__ */
|
|
121
|
-
ref:
|
|
122
|
-
className:
|
|
123
|
+
/* @__PURE__ */ c("div", {
|
|
124
|
+
ref: u,
|
|
125
|
+
className: p.topLeft,
|
|
123
126
|
style: { flexBasis: `${v * 100}%` },
|
|
124
127
|
hidden: y,
|
|
125
128
|
children: n
|
|
126
129
|
}),
|
|
127
|
-
/* @__PURE__ */
|
|
128
|
-
ref:
|
|
129
|
-
hidden: !
|
|
130
|
+
/* @__PURE__ */ c("div", {
|
|
131
|
+
ref: d,
|
|
132
|
+
hidden: !x,
|
|
130
133
|
role: "separator",
|
|
131
134
|
"aria-orientation": t === "vertical" ? "vertical" : "horizontal",
|
|
132
135
|
"aria-valuemin": Math.round(m * 100),
|
|
133
136
|
"aria-valuemax": Math.round(h * 100),
|
|
134
|
-
"aria-valuenow": Math.round(
|
|
135
|
-
tabIndex:
|
|
137
|
+
"aria-valuenow": Math.round(f * 100),
|
|
138
|
+
tabIndex: x ? 0 : -1,
|
|
136
139
|
onPointerDown: g,
|
|
137
140
|
onKeyDown: _,
|
|
138
|
-
className:
|
|
141
|
+
className: p.separator
|
|
139
142
|
}),
|
|
140
|
-
/* @__PURE__ */
|
|
141
|
-
className:
|
|
142
|
-
hidden:
|
|
143
|
+
/* @__PURE__ */ c("div", {
|
|
144
|
+
className: p.bottomRight,
|
|
145
|
+
hidden: b,
|
|
143
146
|
children: r
|
|
144
147
|
})
|
|
145
148
|
]
|
|
146
149
|
});
|
|
147
150
|
}
|
|
148
|
-
function
|
|
149
|
-
let [
|
|
151
|
+
function D({ direction: t = "vertical", initial: n = g, min: r = m, max: i = h, onChange: a, className: o, collapsedPane: s = null, children: l }) {
|
|
152
|
+
let [u, d] = e.toArray(l), f = T({
|
|
150
153
|
direction: t,
|
|
151
154
|
initial: n,
|
|
152
155
|
min: r,
|
|
153
156
|
max: i,
|
|
154
|
-
|
|
157
|
+
onChange: a,
|
|
158
|
+
collapsedPane: s
|
|
155
159
|
});
|
|
156
|
-
return
|
|
157
|
-
className:
|
|
160
|
+
return d ? /* @__PURE__ */ c(E, {
|
|
161
|
+
className: o,
|
|
158
162
|
direction: t,
|
|
159
|
-
left:
|
|
160
|
-
right:
|
|
161
|
-
collapsedPane:
|
|
162
|
-
logic:
|
|
163
|
-
}) :
|
|
163
|
+
left: u,
|
|
164
|
+
right: d,
|
|
165
|
+
collapsedPane: s,
|
|
166
|
+
logic: f
|
|
167
|
+
}) : u;
|
|
168
|
+
}
|
|
169
|
+
var O = {
|
|
170
|
+
container: "dN78Fa",
|
|
171
|
+
viewport: "q7Yvg9",
|
|
172
|
+
separator: "yP9UOD"
|
|
173
|
+
};
|
|
174
|
+
//#endregion
|
|
175
|
+
//#region src/splitter/useSplitterContainerHeight.ts
|
|
176
|
+
function k({ height: e, defaultHeight: t, minHeight: r, maxHeight: s, heightStep: c, onHeightChange: l }) {
|
|
177
|
+
let p = f(r, s), m = {
|
|
178
|
+
...p,
|
|
179
|
+
step: c
|
|
180
|
+
}, h = e !== void 0, [g, _] = o(() => u(t, p.min, p.max)), [v, y] = o(null), b = u(e ?? g, p.min, p.max), x = v ?? b, S = a(null), C = a(null), w = a(null), T = a(x), E = a(x), D = a(0), O = () => {
|
|
181
|
+
if (C.current !== null && (cancelAnimationFrame(C.current), C.current = null), w.current === null) return T.current;
|
|
182
|
+
let e = w.current;
|
|
183
|
+
return w.current = null, T.current = e, e;
|
|
184
|
+
}, k = (e) => {
|
|
185
|
+
w.current = e, C.current === null && (C.current = requestAnimationFrame(() => {
|
|
186
|
+
if (C.current = null, w.current === null) return;
|
|
187
|
+
let e = w.current;
|
|
188
|
+
w.current = null, T.current = e, y(e);
|
|
189
|
+
}));
|
|
190
|
+
}, A = (e, t = T.current) => {
|
|
191
|
+
let n = u(e, p.min, p.max);
|
|
192
|
+
T.current = n, y(null), n !== t && (h || _(n), l?.(n));
|
|
193
|
+
}, j = () => {
|
|
194
|
+
S.current?.(), S.current = null;
|
|
195
|
+
};
|
|
196
|
+
return i(() => {
|
|
197
|
+
T.current = x;
|
|
198
|
+
}, [x]), n(() => () => {
|
|
199
|
+
j(), C.current !== null && cancelAnimationFrame(C.current);
|
|
200
|
+
}, []), {
|
|
201
|
+
height: x,
|
|
202
|
+
minHeight: p.min,
|
|
203
|
+
maxHeight: p.max,
|
|
204
|
+
handleSeparatorPointerDown: (e) => {
|
|
205
|
+
if (e.button !== 0) return;
|
|
206
|
+
e.preventDefault(), j();
|
|
207
|
+
try {
|
|
208
|
+
e.currentTarget.setPointerCapture?.(e.pointerId);
|
|
209
|
+
} catch {}
|
|
210
|
+
D.current = e.clientY, E.current = T.current;
|
|
211
|
+
let t = (e) => {
|
|
212
|
+
let t = e.clientY - D.current, n = u(E.current + t, p.min, p.max);
|
|
213
|
+
k(n);
|
|
214
|
+
}, n = () => {
|
|
215
|
+
j(), A(O(), E.current);
|
|
216
|
+
};
|
|
217
|
+
S.current = () => {
|
|
218
|
+
document.removeEventListener("pointermove", t), document.removeEventListener("pointerup", n), document.removeEventListener("pointercancel", n);
|
|
219
|
+
}, document.addEventListener("pointermove", t), document.addEventListener("pointerup", n), document.addEventListener("pointercancel", n);
|
|
220
|
+
},
|
|
221
|
+
handleSeparatorKeyDown: (e) => {
|
|
222
|
+
let t;
|
|
223
|
+
e.key === "ArrowUp" && (t = d(x, -1, m)), e.key === "ArrowDown" && (t = d(x, 1, m)), e.key === "Home" && (t = p.min), e.key === "End" && (t = p.max), t !== void 0 && (e.preventDefault(), A(t, x));
|
|
224
|
+
}
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
//#endregion
|
|
228
|
+
//#region src/splitter/SplitterHeightContainer.tsx
|
|
229
|
+
var A = 480, j = 240, M = 1200, N = 20;
|
|
230
|
+
function P({ height: e, defaultHeight: t = A, minHeight: n = j, maxHeight: i = M, heightStep: a = N, onHeightChange: o, className: u, viewportClassName: d, separatorClassName: f, separatorAriaLabel: p = "Изменить высоту рабочей области", children: m }) {
|
|
231
|
+
let h = `${r()}-viewport`, g = k({
|
|
232
|
+
height: e,
|
|
233
|
+
defaultHeight: t,
|
|
234
|
+
minHeight: n,
|
|
235
|
+
maxHeight: i,
|
|
236
|
+
heightStep: a,
|
|
237
|
+
onHeightChange: o
|
|
238
|
+
});
|
|
239
|
+
return /* @__PURE__ */ l("div", {
|
|
240
|
+
className: s(O.container, u),
|
|
241
|
+
"data-ui": "splitter-height-container",
|
|
242
|
+
children: [/* @__PURE__ */ c("div", {
|
|
243
|
+
id: h,
|
|
244
|
+
className: s(O.viewport, d),
|
|
245
|
+
style: { height: g.height },
|
|
246
|
+
"data-ui": "splitter-height-viewport",
|
|
247
|
+
children: m
|
|
248
|
+
}), /* @__PURE__ */ c("div", {
|
|
249
|
+
role: "separator",
|
|
250
|
+
"aria-label": p,
|
|
251
|
+
"aria-orientation": "horizontal",
|
|
252
|
+
"aria-controls": h,
|
|
253
|
+
"aria-valuemin": g.minHeight,
|
|
254
|
+
"aria-valuemax": g.maxHeight,
|
|
255
|
+
"aria-valuenow": g.height,
|
|
256
|
+
"aria-valuetext": `${g.height} px`,
|
|
257
|
+
tabIndex: 0,
|
|
258
|
+
className: s(O.separator, f),
|
|
259
|
+
onPointerDown: g.handleSeparatorPointerDown,
|
|
260
|
+
onKeyDown: g.handleSeparatorKeyDown,
|
|
261
|
+
"data-ui": "splitter-height-separator"
|
|
262
|
+
})]
|
|
263
|
+
});
|
|
164
264
|
}
|
|
165
265
|
//#endregion
|
|
166
|
-
export {
|
|
266
|
+
export { D as Splitter, P as SplitterHeightContainer };
|
|
167
267
|
|
|
168
268
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/splitter/Splitter.module.scss","../../src/splitter/Splitter.tsx"],"sourcesContent":[".splitter {\n\tdisplay: flex;\n\twidth: 100%;\n\theight: 100%;\n\toverflow: hidden;\n\n\t&.vertical {\n\t\tflex-direction: row;\n\n\t\t.separator {\n\t\t\tcursor: col-resize;\n\n\t\t\tborder-left: var(--border);\n\t\t\tborder-right: var(--border);\n\n\t\t\tmargin-inline: var(--space-md);\n\t\t}\n\t}\n\n\t&.horizontal {\n\t\tflex-direction: column;\n\n\t\t.separator {\n\t\t\tcursor: row-resize;\n\n\t\t\t// border-top: var(--border);\n\t\t\t// border-bottom: var(--border);\n\n\t\t\tmargin-block: var(--space-md);\n\t\t}\n\t}\n}\n\n.topLeft {\n\tflex-grow: 0;\n\tflex-shrink: 0;\n}\n\n.bottomRight {\n\tflex-grow: 1;\n}\n\n.topLeft,\n.bottomRight {\n\tmin-width: 0;\n\tmin-height: 0;\n\toverflow: auto;\n}\n\n.separator {\n\tflex-basis: var(--space-sm);\n\tflex-grow: 0;\n\tflex-shrink: 0;\n\n\tborder-radius: var(--radius-sm);\n\tborder: var(--border);\n\tbackground-color: var(--border-0);\n\n\tuser-select: none;\n\ttouch-action: none;\n\tposition: relative;\n\n\t&:hover {\n\t\tborder-color: var(--border-1);\n\t\tbackground-color: var(--border-1);\n\t}\n\t&:active {\n\t\tborder-color: var(--border-2);\n\t\tbackground-color: var(--border-2);\n\t}\n}\n","import {\n\tChildren,\n\ttype PropsWithChildren,\n\ttype KeyboardEvent as ReactKeyboardEvent,\n\ttype ReactNode,\n\ttype PointerEvent as ReactPointerEvent,\n\ttype RefObject,\n\tuseCallback,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseRef,\n\tuseState\n} from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport styles from \"./Splitter.module.scss\";\n\ntype SplitterDirection = \"vertical\" | \"horizontal\";\ntype SplitterPane = \"start\" | \"end\";\n\nexport type SplitterProps = PropsWithChildren<{\n\tdirection?: SplitterDirection;\n\tinitial?: number; // от 0 до 1\n\tmin?: number; // минимальная доля первой панели\n\tmax?: number; // максимальная доля первой панели\n\tclassName?: string;\n\tcollapsedPane?: SplitterPane | null;\n}>;\n\ntype SplitterLogicParams = {\n\tdirection: SplitterDirection;\n\tinitial: number;\n\tmin: number;\n\tmax: number;\n\tcollapsedPane: SplitterPane | null;\n};\n\ntype SplitterLogic = {\n\tcontainerRef: RefObject<HTMLDivElement | null>;\n\ttopLeftRef: RefObject<HTMLDivElement | null>;\n\tseparatorRef: RefObject<HTMLDivElement | null>;\n\tratio: number;\n\tminRatio: number;\n\tmaxRatio: number;\n\thandleSeparatorPointerDown: (event: ReactPointerEvent<HTMLDivElement>) => void;\n\thandleSeparatorKeyDown: (event: ReactKeyboardEvent<HTMLDivElement>) => void;\n};\n\ntype SplitterViewProps = {\n\tclassName?: string;\n\tdirection: SplitterDirection;\n\tleft: ReactNode;\n\tright: ReactNode;\n\tcollapsedPane: SplitterPane | null;\n\tlogic: SplitterLogic;\n};\n\nconst DEFAULT_MIN = 0.1;\nconst DEFAULT_MAX = 0.9;\nconst DEFAULT_INITIAL = 0.7;\nconst KEYBOARD_STEP = 0.02;\n\nfunction clampRatio(value: number, min: number, max: number) {\n\treturn Math.min(max, Math.max(min, value));\n}\n\nfunction normalizeRatioValue(value: number, fallback: number) {\n\tif (!Number.isFinite(value)) return fallback;\n\n\treturn clampRatio(value, 0, 1);\n}\n\nfunction normalizeBounds(min: number, max: number) {\n\tconst safeMin = normalizeRatioValue(min, DEFAULT_MIN);\n\tconst safeMax = normalizeRatioValue(max, DEFAULT_MAX);\n\n\tif (safeMin <= safeMax) return [safeMin, safeMax] as const;\n\n\treturn [safeMax, safeMin] as const;\n}\n\nfunction getPointerCoordinate(direction: SplitterDirection, event: PointerEvent | ReactPointerEvent<HTMLDivElement>) {\n\treturn direction === \"vertical\" ? event.clientX : event.clientY;\n}\n\nfunction getContainerDimension(direction: SplitterDirection, rect: DOMRect) {\n\treturn direction === \"vertical\" ? rect.width : rect.height;\n}\n\nfunction getKeyboardDelta(direction: SplitterDirection, key: string) {\n\tif (direction === \"vertical\") {\n\t\tif (key === \"ArrowLeft\") return -KEYBOARD_STEP;\n\t\tif (key === \"ArrowRight\") return KEYBOARD_STEP;\n\t}\n\n\tif (direction === \"horizontal\") {\n\t\tif (key === \"ArrowUp\") return -KEYBOARD_STEP;\n\t\tif (key === \"ArrowDown\") return KEYBOARD_STEP;\n\t}\n\n\treturn null;\n}\n\nfunction resolveTopLeftBasis(ratio: number, collapsedPane: SplitterPane | null) {\n\tif (collapsedPane === \"start\") return 0;\n\tif (collapsedPane === \"end\") return 1;\n\n\treturn ratio;\n}\n\nfunction useSplitterLogic({ direction, initial, min, max, collapsedPane }: SplitterLogicParams): SplitterLogic {\n\tconst [minRatio, maxRatio] = normalizeBounds(min, max);\n\n\tconst containerRef = useRef<HTMLDivElement | null>(null);\n\tconst topLeftRef = useRef<HTMLDivElement | null>(null);\n\tconst separatorRef = useRef<HTMLDivElement | null>(null);\n\tconst cleanupDragRef = useRef<(() => void) | null>(null);\n\tconst pendingRatioRef = useRef<number | null>(null);\n\tconst frameRef = useRef<number | null>(null);\n\tconst startPosRef = useRef(0);\n\tconst startRatioRef = useRef(clampRatio(normalizeRatioValue(initial, DEFAULT_INITIAL), minRatio, maxRatio));\n\tconst previousInitialRef = useRef(initial);\n\n\tconst [ratio, setRatio] = useState(() => clampRatio(normalizeRatioValue(initial, DEFAULT_INITIAL), minRatio, maxRatio));\n\tconst ratioRef = useRef(ratio);\n\n\tconst applyRatio = useCallback(\n\t\t(nextRatio: number) => {\n\t\t\tratioRef.current = nextRatio;\n\t\t\ttopLeftRef.current?.style.setProperty(\"flex-basis\", `${resolveTopLeftBasis(nextRatio, collapsedPane) * 100}%`);\n\t\t\tseparatorRef.current?.setAttribute(\"aria-valuenow\", `${Math.round(nextRatio * 100)}`);\n\t\t},\n\t\t[collapsedPane]\n\t);\n\n\tconst flushPendingRatio = () => {\n\t\tif (frameRef.current !== null) {\n\t\t\tcancelAnimationFrame(frameRef.current);\n\t\t\tframeRef.current = null;\n\t\t}\n\n\t\tif (pendingRatioRef.current === null) return ratioRef.current;\n\n\t\tconst nextRatio = pendingRatioRef.current;\n\t\tpendingRatioRef.current = null;\n\t\tapplyRatio(nextRatio);\n\n\t\treturn nextRatio;\n\t};\n\n\tconst scheduleRatioUpdate = (nextRatio: number) => {\n\t\tpendingRatioRef.current = nextRatio;\n\n\t\tif (frameRef.current !== null) return;\n\n\t\tframeRef.current = requestAnimationFrame(() => {\n\t\t\tframeRef.current = null;\n\n\t\t\tif (pendingRatioRef.current === null) return;\n\n\t\t\tapplyRatio(pendingRatioRef.current);\n\t\t});\n\t};\n\n\tconst stopDragging = () => {\n\t\tcleanupDragRef.current?.();\n\t\tcleanupDragRef.current = null;\n\t};\n\n\tconst commitRatio = (nextRatio: number) => {\n\t\tflushPendingRatio();\n\t\tsetRatio(clampRatio(nextRatio, minRatio, maxRatio));\n\t};\n\n\tconst handleSeparatorPointerDown = (event: ReactPointerEvent<HTMLDivElement>) => {\n\t\tif (event.button !== 0) return;\n\n\t\tevent.preventDefault();\n\n\t\tconst container = containerRef.current;\n\t\tif (!container) return;\n\n\t\tstopDragging();\n\n\t\ttry {\n\t\t\tevent.currentTarget.setPointerCapture?.(event.pointerId);\n\t\t} catch {\n\t\t\t// Игнорировать, если браузер не поддерживает pointer capture.\n\t\t}\n\n\t\tstartPosRef.current = getPointerCoordinate(direction, event);\n\t\tstartRatioRef.current = ratioRef.current;\n\n\t\tconst handlePointerMove = (moveEvent: PointerEvent) => {\n\t\t\tconst rect = container.getBoundingClientRect();\n\t\t\tconst dimension = getContainerDimension(direction, rect);\n\t\t\tif (dimension <= 0) return;\n\n\t\t\tconst delta = getPointerCoordinate(direction, moveEvent) - startPosRef.current;\n\t\t\tconst nextRatio = clampRatio(startRatioRef.current + delta / dimension, minRatio, maxRatio);\n\n\t\t\tscheduleRatioUpdate(nextRatio);\n\t\t};\n\n\t\tconst handlePointerUp = () => {\n\t\t\tstopDragging();\n\t\t\tsetRatio(flushPendingRatio());\n\t\t};\n\n\t\tcleanupDragRef.current = () => {\n\t\t\tdocument.removeEventListener(\"pointermove\", handlePointerMove);\n\t\t\tdocument.removeEventListener(\"pointerup\", handlePointerUp);\n\t\t\tdocument.removeEventListener(\"pointercancel\", handlePointerUp);\n\t\t};\n\n\t\tdocument.addEventListener(\"pointermove\", handlePointerMove);\n\t\tdocument.addEventListener(\"pointerup\", handlePointerUp);\n\t\tdocument.addEventListener(\"pointercancel\", handlePointerUp);\n\t};\n\n\tconst handleSeparatorKeyDown = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n\t\tconst keyboardDelta = getKeyboardDelta(direction, event.key);\n\n\t\tif (keyboardDelta !== null) {\n\t\t\tevent.preventDefault();\n\t\t\tcommitRatio(ratioRef.current + keyboardDelta);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (event.key === \"Home\") {\n\t\t\tevent.preventDefault();\n\t\t\tcommitRatio(minRatio);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (event.key === \"End\") {\n\t\t\tevent.preventDefault();\n\t\t\tcommitRatio(maxRatio);\n\t\t}\n\t};\n\n\tuseLayoutEffect(() => {\n\t\tapplyRatio(ratio);\n\t}, [applyRatio, ratio]);\n\n\tuseEffect(() => {\n\t\tsetRatio((currentRatio) => {\n\t\t\tconst initialChanged = previousInitialRef.current !== initial;\n\t\t\tpreviousInitialRef.current = initial;\n\n\t\t\tif (initialChanged) {\n\t\t\t\treturn clampRatio(normalizeRatioValue(initial, DEFAULT_INITIAL), minRatio, maxRatio);\n\t\t\t}\n\n\t\t\treturn clampRatio(currentRatio, minRatio, maxRatio);\n\t\t});\n\t}, [initial, minRatio, maxRatio]);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tstopDragging();\n\n\t\t\tif (frameRef.current !== null) {\n\t\t\t\tcancelAnimationFrame(frameRef.current);\n\t\t\t}\n\t\t};\n\t}, []);\n\n\treturn {\n\t\tcontainerRef,\n\t\ttopLeftRef,\n\t\tseparatorRef,\n\t\tratio,\n\t\tminRatio,\n\t\tmaxRatio,\n\t\thandleSeparatorPointerDown,\n\t\thandleSeparatorKeyDown\n\t};\n}\n\nfunction SplitterView({ className, direction, left, right, collapsedPane, logic }: SplitterViewProps) {\n\tconst { containerRef, topLeftRef, separatorRef, ratio, minRatio, maxRatio, handleSeparatorPointerDown, handleSeparatorKeyDown } = logic;\n\tconst topLeftBasis = resolveTopLeftBasis(ratio, collapsedPane);\n\tconst isStartPaneCollapsed = collapsedPane === \"start\";\n\tconst isEndPaneCollapsed = collapsedPane === \"end\";\n\tconst isSeparatorVisible = collapsedPane === null;\n\n\treturn (\n\t\t<div ref={containerRef} className={cn(styles.splitter, styles[direction], className)}>\n\t\t\t<div ref={topLeftRef} className={styles.topLeft} style={{ flexBasis: `${topLeftBasis * 100}%` }} hidden={isStartPaneCollapsed}>\n\t\t\t\t{left}\n\t\t\t</div>\n\n\t\t\t<div\n\t\t\t\tref={separatorRef}\n\t\t\t\thidden={!isSeparatorVisible}\n\t\t\t\trole=\"separator\"\n\t\t\t\taria-orientation={direction === \"vertical\" ? \"vertical\" : \"horizontal\"}\n\t\t\t\taria-valuemin={Math.round(minRatio * 100)}\n\t\t\t\taria-valuemax={Math.round(maxRatio * 100)}\n\t\t\t\taria-valuenow={Math.round(ratio * 100)}\n\t\t\t\ttabIndex={isSeparatorVisible ? 0 : -1}\n\t\t\t\tonPointerDown={handleSeparatorPointerDown}\n\t\t\t\tonKeyDown={handleSeparatorKeyDown}\n\t\t\t\tclassName={styles.separator}></div>\n\n\t\t\t<div className={styles.bottomRight} hidden={isEndPaneCollapsed}>\n\t\t\t\t{right}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nexport function Splitter({\n\tdirection = \"vertical\",\n\tinitial = DEFAULT_INITIAL,\n\tmin = DEFAULT_MIN,\n\tmax = DEFAULT_MAX,\n\tclassName,\n\tcollapsedPane = null,\n\tchildren\n}: SplitterProps) {\n\tconst [left, right] = Children.toArray(children);\n\tconst logic = useSplitterLogic({ direction, initial, min, max, collapsedPane });\n\n\tif (!right) return left;\n\n\treturn (\n\t\t<SplitterView className={className} direction={direction} left={left} right={right} collapsedPane={collapsedPane} logic={logic} />\n\t);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/splitter/Splitter.module.scss","../../src/splitter/Splitter.tsx","../../src/splitter/SplitterHeightContainer.module.scss","../../src/splitter/useSplitterContainerHeight.ts","../../src/splitter/SplitterHeightContainer.tsx"],"sourcesContent":["@use \"@/styles/mixins\" as *;\n\n.splitter {\n\tdisplay: flex;\n\twidth: 100%;\n\theight: 100%;\n\toverflow: hidden;\n\n\t&.vertical {\n\t\tflex-direction: row;\n\n\t\t.separator {\n\t\t\tcursor: col-resize;\n\n\t\t\t// border-left: var(--border);\n\t\t\t// border-right: var(--border);\n\n\t\t\tmargin-inline: var(--space-md);\n\t\t}\n\t}\n\n\t&.horizontal {\n\t\tflex-direction: column;\n\n\t\t.separator {\n\t\t\tcursor: row-resize;\n\n\t\t\t// border-top: var(--border);\n\t\t\t// border-bottom: var(--border);\n\n\t\t\tmargin-block: var(--space-md);\n\t\t}\n\t}\n}\n\n.topLeft {\n\tflex-grow: 0;\n\tflex-shrink: 0;\n}\n\n.bottomRight {\n\tflex-grow: 1;\n}\n\n.topLeft,\n.bottomRight {\n\tmin-width: 0;\n\tmin-height: 0;\n\toverflow: auto;\n}\n\n.separator {\n\t@include resize-separator;\n\n\tflex-basis: var(--space-sm);\n\tflex-grow: 0;\n\tflex-shrink: 0;\n}\n","import {\n\tChildren,\n\ttype PropsWithChildren,\n\ttype KeyboardEvent as ReactKeyboardEvent,\n\ttype ReactNode,\n\ttype PointerEvent as ReactPointerEvent,\n\ttype RefObject,\n\tuseCallback,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseRef,\n\tuseState\n} from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport styles from \"./Splitter.module.scss\";\n\ntype SplitterDirection = \"vertical\" | \"horizontal\";\ntype SplitterPane = \"start\" | \"end\";\n\nexport type SplitterProps = PropsWithChildren<{\n\tdirection?: SplitterDirection;\n\tinitial?: number; // от 0 до 1\n\tmin?: number; // минимальная доля первой панели\n\tmax?: number; // максимальная доля первой панели\n\t/** Сообщает итоговую долю первой панели после завершения drag или шага с клавиатуры. */\n\tonChange?: (ratio: number) => void;\n\tclassName?: string;\n\tcollapsedPane?: SplitterPane | null;\n}>;\n\ntype SplitterLogicParams = {\n\tdirection: SplitterDirection;\n\tinitial: number;\n\tmin: number;\n\tmax: number;\n\tonChange?: (ratio: number) => void;\n\tcollapsedPane: SplitterPane | null;\n};\n\ntype SplitterLogic = {\n\tcontainerRef: RefObject<HTMLDivElement | null>;\n\ttopLeftRef: RefObject<HTMLDivElement | null>;\n\tseparatorRef: RefObject<HTMLDivElement | null>;\n\tratio: number;\n\tminRatio: number;\n\tmaxRatio: number;\n\thandleSeparatorPointerDown: (event: ReactPointerEvent<HTMLDivElement>) => void;\n\thandleSeparatorKeyDown: (event: ReactKeyboardEvent<HTMLDivElement>) => void;\n};\n\ntype SplitterViewProps = {\n\tclassName?: string;\n\tdirection: SplitterDirection;\n\tleft: ReactNode;\n\tright: ReactNode;\n\tcollapsedPane: SplitterPane | null;\n\tlogic: SplitterLogic;\n};\n\nconst DEFAULT_MIN = 0.1;\nconst DEFAULT_MAX = 0.9;\nconst DEFAULT_INITIAL = 0.7;\nconst KEYBOARD_STEP = 0.02;\n\nfunction clampRatio(value: number, min: number, max: number) {\n\treturn Math.min(max, Math.max(min, value));\n}\n\nfunction normalizeRatioValue(value: number, fallback: number) {\n\tif (!Number.isFinite(value)) return fallback;\n\n\treturn clampRatio(value, 0, 1);\n}\n\nfunction normalizeBounds(min: number, max: number) {\n\tconst safeMin = normalizeRatioValue(min, DEFAULT_MIN);\n\tconst safeMax = normalizeRatioValue(max, DEFAULT_MAX);\n\n\tif (safeMin <= safeMax) return [safeMin, safeMax] as const;\n\n\treturn [safeMax, safeMin] as const;\n}\n\nfunction getPointerCoordinate(direction: SplitterDirection, event: PointerEvent | ReactPointerEvent<HTMLDivElement>) {\n\treturn direction === \"vertical\" ? event.clientX : event.clientY;\n}\n\nfunction getContainerDimension(direction: SplitterDirection, rect: DOMRect) {\n\treturn direction === \"vertical\" ? rect.width : rect.height;\n}\n\nfunction getKeyboardDelta(direction: SplitterDirection, key: string) {\n\tif (direction === \"vertical\") {\n\t\tif (key === \"ArrowLeft\") return -KEYBOARD_STEP;\n\t\tif (key === \"ArrowRight\") return KEYBOARD_STEP;\n\t}\n\n\tif (direction === \"horizontal\") {\n\t\tif (key === \"ArrowUp\") return -KEYBOARD_STEP;\n\t\tif (key === \"ArrowDown\") return KEYBOARD_STEP;\n\t}\n\n\treturn null;\n}\n\nfunction resolveTopLeftBasis(ratio: number, collapsedPane: SplitterPane | null) {\n\tif (collapsedPane === \"start\") return 0;\n\tif (collapsedPane === \"end\") return 1;\n\n\treturn ratio;\n}\n\nfunction useSplitterLogic({ direction, initial, min, max, onChange, collapsedPane }: SplitterLogicParams): SplitterLogic {\n\tconst [minRatio, maxRatio] = normalizeBounds(min, max);\n\n\tconst containerRef = useRef<HTMLDivElement | null>(null);\n\tconst topLeftRef = useRef<HTMLDivElement | null>(null);\n\tconst separatorRef = useRef<HTMLDivElement | null>(null);\n\tconst cleanupDragRef = useRef<(() => void) | null>(null);\n\tconst pendingRatioRef = useRef<number | null>(null);\n\tconst frameRef = useRef<number | null>(null);\n\tconst startPosRef = useRef(0);\n\tconst startRatioRef = useRef(clampRatio(normalizeRatioValue(initial, DEFAULT_INITIAL), minRatio, maxRatio));\n\tconst previousInitialRef = useRef(initial);\n\n\tconst [ratio, setRatio] = useState(() => clampRatio(normalizeRatioValue(initial, DEFAULT_INITIAL), minRatio, maxRatio));\n\tconst ratioRef = useRef(ratio);\n\n\tconst applyRatio = useCallback(\n\t\t(nextRatio: number) => {\n\t\t\tratioRef.current = nextRatio;\n\t\t\ttopLeftRef.current?.style.setProperty(\"flex-basis\", `${resolveTopLeftBasis(nextRatio, collapsedPane) * 100}%`);\n\t\t\tseparatorRef.current?.setAttribute(\"aria-valuenow\", `${Math.round(nextRatio * 100)}`);\n\t\t},\n\t\t[collapsedPane]\n\t);\n\n\tconst flushPendingRatio = () => {\n\t\tif (frameRef.current !== null) {\n\t\t\tcancelAnimationFrame(frameRef.current);\n\t\t\tframeRef.current = null;\n\t\t}\n\n\t\tif (pendingRatioRef.current === null) return ratioRef.current;\n\n\t\tconst nextRatio = pendingRatioRef.current;\n\t\tpendingRatioRef.current = null;\n\t\tapplyRatio(nextRatio);\n\n\t\treturn nextRatio;\n\t};\n\n\tconst scheduleRatioUpdate = (nextRatio: number) => {\n\t\tpendingRatioRef.current = nextRatio;\n\n\t\tif (frameRef.current !== null) return;\n\n\t\tframeRef.current = requestAnimationFrame(() => {\n\t\t\tframeRef.current = null;\n\n\t\t\tif (pendingRatioRef.current === null) return;\n\n\t\t\tapplyRatio(pendingRatioRef.current);\n\t\t});\n\t};\n\n\tconst stopDragging = () => {\n\t\tcleanupDragRef.current?.();\n\t\tcleanupDragRef.current = null;\n\t};\n\n\tconst commitRatio = (nextRatio: number, previousRatio = ratioRef.current) => {\n\t\tflushPendingRatio();\n\t\tconst committedRatio = clampRatio(nextRatio, minRatio, maxRatio);\n\t\tsetRatio(committedRatio);\n\t\tif (committedRatio !== previousRatio) onChange?.(committedRatio);\n\t};\n\n\tconst handleSeparatorPointerDown = (event: ReactPointerEvent<HTMLDivElement>) => {\n\t\tif (event.button !== 0) return;\n\n\t\tevent.preventDefault();\n\n\t\tconst container = containerRef.current;\n\t\tif (!container) return;\n\n\t\tstopDragging();\n\n\t\ttry {\n\t\t\tevent.currentTarget.setPointerCapture?.(event.pointerId);\n\t\t} catch {\n\t\t\t// Игнорировать, если браузер не поддерживает pointer capture.\n\t\t}\n\n\t\tstartPosRef.current = getPointerCoordinate(direction, event);\n\t\tstartRatioRef.current = ratioRef.current;\n\n\t\tconst handlePointerMove = (moveEvent: PointerEvent) => {\n\t\t\tconst rect = container.getBoundingClientRect();\n\t\t\tconst dimension = getContainerDimension(direction, rect);\n\t\t\tif (dimension <= 0) return;\n\n\t\t\tconst delta = getPointerCoordinate(direction, moveEvent) - startPosRef.current;\n\t\t\tconst nextRatio = clampRatio(startRatioRef.current + delta / dimension, minRatio, maxRatio);\n\n\t\t\tscheduleRatioUpdate(nextRatio);\n\t\t};\n\n\t\tconst handlePointerUp = () => {\n\t\t\tstopDragging();\n\t\t\tcommitRatio(flushPendingRatio(), startRatioRef.current);\n\t\t};\n\n\t\tcleanupDragRef.current = () => {\n\t\t\tdocument.removeEventListener(\"pointermove\", handlePointerMove);\n\t\t\tdocument.removeEventListener(\"pointerup\", handlePointerUp);\n\t\t\tdocument.removeEventListener(\"pointercancel\", handlePointerUp);\n\t\t};\n\n\t\tdocument.addEventListener(\"pointermove\", handlePointerMove);\n\t\tdocument.addEventListener(\"pointerup\", handlePointerUp);\n\t\tdocument.addEventListener(\"pointercancel\", handlePointerUp);\n\t};\n\n\tconst handleSeparatorKeyDown = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n\t\tconst keyboardDelta = getKeyboardDelta(direction, event.key);\n\n\t\tif (keyboardDelta !== null) {\n\t\t\tevent.preventDefault();\n\t\t\tcommitRatio(ratioRef.current + keyboardDelta);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (event.key === \"Home\") {\n\t\t\tevent.preventDefault();\n\t\t\tcommitRatio(minRatio);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (event.key === \"End\") {\n\t\t\tevent.preventDefault();\n\t\t\tcommitRatio(maxRatio);\n\t\t}\n\t};\n\n\tuseLayoutEffect(() => {\n\t\tapplyRatio(ratio);\n\t}, [applyRatio, ratio]);\n\n\tuseEffect(() => {\n\t\tsetRatio((currentRatio) => {\n\t\t\tconst initialChanged = previousInitialRef.current !== initial;\n\t\t\tpreviousInitialRef.current = initial;\n\n\t\t\tif (initialChanged) {\n\t\t\t\treturn clampRatio(normalizeRatioValue(initial, DEFAULT_INITIAL), minRatio, maxRatio);\n\t\t\t}\n\n\t\t\treturn clampRatio(currentRatio, minRatio, maxRatio);\n\t\t});\n\t}, [initial, minRatio, maxRatio]);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tstopDragging();\n\n\t\t\tif (frameRef.current !== null) {\n\t\t\t\tcancelAnimationFrame(frameRef.current);\n\t\t\t}\n\t\t};\n\t}, []);\n\n\treturn {\n\t\tcontainerRef,\n\t\ttopLeftRef,\n\t\tseparatorRef,\n\t\tratio,\n\t\tminRatio,\n\t\tmaxRatio,\n\t\thandleSeparatorPointerDown,\n\t\thandleSeparatorKeyDown\n\t};\n}\n\nfunction SplitterView({ className, direction, left, right, collapsedPane, logic }: SplitterViewProps) {\n\tconst { containerRef, topLeftRef, separatorRef, ratio, minRatio, maxRatio, handleSeparatorPointerDown, handleSeparatorKeyDown } = logic;\n\tconst topLeftBasis = resolveTopLeftBasis(ratio, collapsedPane);\n\tconst isStartPaneCollapsed = collapsedPane === \"start\";\n\tconst isEndPaneCollapsed = collapsedPane === \"end\";\n\tconst isSeparatorVisible = collapsedPane === null;\n\n\treturn (\n\t\t<div ref={containerRef} className={cn(styles.splitter, styles[direction], className)}>\n\t\t\t<div ref={topLeftRef} className={styles.topLeft} style={{ flexBasis: `${topLeftBasis * 100}%` }} hidden={isStartPaneCollapsed}>\n\t\t\t\t{left}\n\t\t\t</div>\n\n\t\t\t<div\n\t\t\t\tref={separatorRef}\n\t\t\t\thidden={!isSeparatorVisible}\n\t\t\t\trole=\"separator\"\n\t\t\t\taria-orientation={direction === \"vertical\" ? \"vertical\" : \"horizontal\"}\n\t\t\t\taria-valuemin={Math.round(minRatio * 100)}\n\t\t\t\taria-valuemax={Math.round(maxRatio * 100)}\n\t\t\t\taria-valuenow={Math.round(ratio * 100)}\n\t\t\t\ttabIndex={isSeparatorVisible ? 0 : -1}\n\t\t\t\tonPointerDown={handleSeparatorPointerDown}\n\t\t\t\tonKeyDown={handleSeparatorKeyDown}\n\t\t\t\tclassName={styles.separator}></div>\n\n\t\t\t<div className={styles.bottomRight} hidden={isEndPaneCollapsed}>\n\t\t\t\t{right}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nexport function Splitter({\n\tdirection = \"vertical\",\n\tinitial = DEFAULT_INITIAL,\n\tmin = DEFAULT_MIN,\n\tmax = DEFAULT_MAX,\n\tonChange,\n\tclassName,\n\tcollapsedPane = null,\n\tchildren\n}: SplitterProps) {\n\tconst [left, right] = Children.toArray(children);\n\tconst logic = useSplitterLogic({ direction, initial, min, max, onChange, collapsedPane });\n\n\tif (!right) return left;\n\n\treturn (\n\t\t<SplitterView className={className} direction={direction} left={left} right={right} collapsedPane={collapsedPane} logic={logic} />\n\t);\n}\n","@use \"@/styles/mixins\" as *;\n\n.container {\n\tmin-width: 0;\n\tdisplay: flex;\n\tflex-direction: column;\n}\n\n.viewport {\n\twidth: 100%;\n\tmin-width: 0;\n\tmin-height: 0;\n\toverflow: hidden;\n}\n\n.separator {\n\t@include resize-separator;\n\n\twidth: 100%;\n\theight: var(--space-sm);\n\tflex: 0 0 var(--space-sm);\n\tmargin-block: var(--space-md);\n\tcursor: row-resize;\n}\n","import {\n\ttype KeyboardEvent as ReactKeyboardEvent,\n\ttype PointerEvent as ReactPointerEvent,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseRef,\n\tuseState\n} from \"react\";\n\nimport { clampNumberScaleValue, offsetNumberScaleValue, resolveNumberScaleBounds } from \"@ryuzaki13/react-foundation-lib/number-scale\";\n\ntype UseSplitterContainerHeightParams = {\n\theight?: number;\n\tdefaultHeight: number;\n\tminHeight: number;\n\tmaxHeight: number;\n\theightStep: number;\n\tonHeightChange?: (height: number) => void;\n};\n\ntype SplitterContainerHeightState = {\n\theight: number;\n\tminHeight: number;\n\tmaxHeight: number;\n\thandleSeparatorPointerDown: (event: ReactPointerEvent<HTMLDivElement>) => void;\n\thandleSeparatorKeyDown: (event: ReactKeyboardEvent<HTMLDivElement>) => void;\n};\n\n/**\n * Управляет controlled/uncontrolled-высотой внешнего контейнера Splitter.\n * Pointer-изменения обновляют только локальный draft, а `onHeightChange`\n * получает итоговое значение после завершения жеста или клавиатурного шага.\n */\nexport function useSplitterContainerHeight({\n\theight,\n\tdefaultHeight,\n\tminHeight,\n\tmaxHeight,\n\theightStep,\n\tonHeightChange\n}: UseSplitterContainerHeightParams): SplitterContainerHeightState {\n\tconst bounds = resolveNumberScaleBounds(minHeight, maxHeight);\n\tconst scale = { ...bounds, step: heightStep };\n\tconst controlled = height !== undefined;\n\tconst [uncontrolledHeight, setUncontrolledHeight] = useState(() => clampNumberScaleValue(defaultHeight, bounds.min, bounds.max));\n\tconst [dragHeight, setDragHeight] = useState<number | null>(null);\n\tconst resolvedHeight = clampNumberScaleValue(height ?? uncontrolledHeight, bounds.min, bounds.max);\n\tconst currentHeight = dragHeight ?? resolvedHeight;\n\n\tconst cleanupDragRef = useRef<(() => void) | null>(null);\n\tconst frameRef = useRef<number | null>(null);\n\tconst pendingHeightRef = useRef<number | null>(null);\n\tconst currentHeightRef = useRef(currentHeight);\n\tconst startHeightRef = useRef(currentHeight);\n\tconst startPointerYRef = useRef(0);\n\n\tconst flushPendingHeight = () => {\n\t\tif (frameRef.current !== null) {\n\t\t\tcancelAnimationFrame(frameRef.current);\n\t\t\tframeRef.current = null;\n\t\t}\n\n\t\tif (pendingHeightRef.current === null) return currentHeightRef.current;\n\n\t\tconst nextHeight = pendingHeightRef.current;\n\t\tpendingHeightRef.current = null;\n\t\tcurrentHeightRef.current = nextHeight;\n\n\t\treturn nextHeight;\n\t};\n\n\tconst scheduleHeightUpdate = (nextHeight: number) => {\n\t\tpendingHeightRef.current = nextHeight;\n\n\t\tif (frameRef.current !== null) return;\n\n\t\tframeRef.current = requestAnimationFrame(() => {\n\t\t\tframeRef.current = null;\n\n\t\t\tif (pendingHeightRef.current === null) return;\n\n\t\t\tconst scheduledHeight = pendingHeightRef.current;\n\t\t\tpendingHeightRef.current = null;\n\t\t\tcurrentHeightRef.current = scheduledHeight;\n\t\t\tsetDragHeight(scheduledHeight);\n\t\t});\n\t};\n\n\tconst commitHeight = (nextHeight: number, previousHeight = currentHeightRef.current) => {\n\t\tconst committedHeight = clampNumberScaleValue(nextHeight, bounds.min, bounds.max);\n\t\tcurrentHeightRef.current = committedHeight;\n\t\tsetDragHeight(null);\n\n\t\tif (committedHeight === previousHeight) return;\n\n\t\tif (!controlled) {\n\t\t\tsetUncontrolledHeight(committedHeight);\n\t\t}\n\n\t\tonHeightChange?.(committedHeight);\n\t};\n\n\tconst stopDragging = () => {\n\t\tcleanupDragRef.current?.();\n\t\tcleanupDragRef.current = null;\n\t};\n\n\tconst handleSeparatorPointerDown = (event: ReactPointerEvent<HTMLDivElement>) => {\n\t\tif (event.button !== 0) return;\n\n\t\tevent.preventDefault();\n\t\tstopDragging();\n\n\t\ttry {\n\t\t\tevent.currentTarget.setPointerCapture?.(event.pointerId);\n\t\t} catch {\n\t\t\t// Браузер может не поддерживать pointer capture для synthetic-события.\n\t\t}\n\n\t\tstartPointerYRef.current = event.clientY;\n\t\tstartHeightRef.current = currentHeightRef.current;\n\n\t\tconst handlePointerMove = (moveEvent: PointerEvent) => {\n\t\t\tconst pointerDelta = moveEvent.clientY - startPointerYRef.current;\n\t\t\tconst nextHeight = clampNumberScaleValue(startHeightRef.current + pointerDelta, bounds.min, bounds.max);\n\t\t\tscheduleHeightUpdate(nextHeight);\n\t\t};\n\n\t\tconst handlePointerUp = () => {\n\t\t\tstopDragging();\n\t\t\tcommitHeight(flushPendingHeight(), startHeightRef.current);\n\t\t};\n\n\t\tcleanupDragRef.current = () => {\n\t\t\tdocument.removeEventListener(\"pointermove\", handlePointerMove);\n\t\t\tdocument.removeEventListener(\"pointerup\", handlePointerUp);\n\t\t\tdocument.removeEventListener(\"pointercancel\", handlePointerUp);\n\t\t};\n\n\t\tdocument.addEventListener(\"pointermove\", handlePointerMove);\n\t\tdocument.addEventListener(\"pointerup\", handlePointerUp);\n\t\tdocument.addEventListener(\"pointercancel\", handlePointerUp);\n\t};\n\n\tconst handleSeparatorKeyDown = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n\t\tlet nextHeight: number | undefined;\n\n\t\tif (event.key === \"ArrowUp\") nextHeight = offsetNumberScaleValue(currentHeight, -1, scale);\n\t\tif (event.key === \"ArrowDown\") nextHeight = offsetNumberScaleValue(currentHeight, 1, scale);\n\t\tif (event.key === \"Home\") nextHeight = bounds.min;\n\t\tif (event.key === \"End\") nextHeight = bounds.max;\n\t\tif (nextHeight === undefined) return;\n\n\t\tevent.preventDefault();\n\t\tcommitHeight(nextHeight, currentHeight);\n\t};\n\n\tuseLayoutEffect(() => {\n\t\tcurrentHeightRef.current = currentHeight;\n\t}, [currentHeight]);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tstopDragging();\n\n\t\t\tif (frameRef.current !== null) {\n\t\t\t\tcancelAnimationFrame(frameRef.current);\n\t\t\t}\n\t\t};\n\t}, []);\n\n\treturn {\n\t\theight: currentHeight,\n\t\tminHeight: bounds.min,\n\t\tmaxHeight: bounds.max,\n\t\thandleSeparatorPointerDown,\n\t\thandleSeparatorKeyDown\n\t};\n}\n","import { type PropsWithChildren, useId } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport styles from \"./SplitterHeightContainer.module.scss\";\nimport { useSplitterContainerHeight } from \"./useSplitterContainerHeight\";\n\nexport type SplitterHeightContainerProps = PropsWithChildren<{\n\t/** Controlled-высота области со Splitter в CSS-пикселях. */\n\theight?: number;\n\t/** Начальная высота для uncontrolled-режима в CSS-пикселях. */\n\tdefaultHeight?: number;\n\tminHeight?: number;\n\tmaxHeight?: number;\n\t/** Шаг изменения высоты с клавиатуры в CSS-пикселях. */\n\theightStep?: number;\n\t/** Сообщает итоговую высоту после завершения drag или клавиатурного шага. */\n\tonHeightChange?: (height: number) => void;\n\tclassName?: string;\n\tviewportClassName?: string;\n\tseparatorClassName?: string;\n\tseparatorAriaLabel?: string;\n}>;\n\nconst DEFAULT_HEIGHT = 480;\nconst DEFAULT_MIN_HEIGHT = 240;\nconst DEFAULT_MAX_HEIGHT = 1200;\nconst DEFAULT_HEIGHT_STEP = 20;\n\n/**\n * Опциональная внешняя композиция для Splitter: область панелей получает\n * независимую высоту, а расположенный снизу separator изменяет весь viewport.\n * Внутренние Splitter при этом продолжают управлять только своими пропорциями.\n */\nexport function SplitterHeightContainer({\n\theight,\n\tdefaultHeight = DEFAULT_HEIGHT,\n\tminHeight = DEFAULT_MIN_HEIGHT,\n\tmaxHeight = DEFAULT_MAX_HEIGHT,\n\theightStep = DEFAULT_HEIGHT_STEP,\n\tonHeightChange,\n\tclassName,\n\tviewportClassName,\n\tseparatorClassName,\n\tseparatorAriaLabel = \"Изменить высоту рабочей области\",\n\tchildren\n}: SplitterHeightContainerProps) {\n\tconst generatedViewportId = useId();\n\tconst viewportId = `${generatedViewportId}-viewport`;\n\tconst state = useSplitterContainerHeight({\n\t\theight,\n\t\tdefaultHeight,\n\t\tminHeight,\n\t\tmaxHeight,\n\t\theightStep,\n\t\tonHeightChange\n\t});\n\n\treturn (\n\t\t<div className={cn(styles.container, className)} data-ui=\"splitter-height-container\">\n\t\t\t<div\n\t\t\t\tid={viewportId}\n\t\t\t\tclassName={cn(styles.viewport, viewportClassName)}\n\t\t\t\tstyle={{ height: state.height }}\n\t\t\t\tdata-ui=\"splitter-height-viewport\">\n\t\t\t\t{children}\n\t\t\t</div>\n\n\t\t\t<div\n\t\t\t\trole=\"separator\"\n\t\t\t\taria-label={separatorAriaLabel}\n\t\t\t\taria-orientation=\"horizontal\"\n\t\t\t\taria-controls={viewportId}\n\t\t\t\taria-valuemin={state.minHeight}\n\t\t\t\taria-valuemax={state.maxHeight}\n\t\t\t\taria-valuenow={state.height}\n\t\t\t\taria-valuetext={`${state.height} px`}\n\t\t\t\ttabIndex={0}\n\t\t\t\tclassName={cn(styles.separator, separatorClassName)}\n\t\t\t\tonPointerDown={state.handleSeparatorPointerDown}\n\t\t\t\tonKeyDown={state.handleSeparatorKeyDown}\n\t\t\t\tdata-ui=\"splitter-height-separator\"\n\t\t\t/>\n\t\t</div>\n\t);\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type KeyboardEvent as ReactKeyboardEvent, type PointerEvent as ReactPointerEvent } from "react";
|
|
2
|
+
type UseSplitterContainerHeightParams = {
|
|
3
|
+
height?: number;
|
|
4
|
+
defaultHeight: number;
|
|
5
|
+
minHeight: number;
|
|
6
|
+
maxHeight: number;
|
|
7
|
+
heightStep: number;
|
|
8
|
+
onHeightChange?: (height: number) => void;
|
|
9
|
+
};
|
|
10
|
+
type SplitterContainerHeightState = {
|
|
11
|
+
height: number;
|
|
12
|
+
minHeight: number;
|
|
13
|
+
maxHeight: number;
|
|
14
|
+
handleSeparatorPointerDown: (event: ReactPointerEvent<HTMLDivElement>) => void;
|
|
15
|
+
handleSeparatorKeyDown: (event: ReactKeyboardEvent<HTMLDivElement>) => void;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Управляет controlled/uncontrolled-высотой внешнего контейнера Splitter.
|
|
19
|
+
* Pointer-изменения обновляют только локальный draft, а `onHeightChange`
|
|
20
|
+
* получает итоговое значение после завершения жеста или клавиатурного шага.
|
|
21
|
+
*/
|
|
22
|
+
export declare function useSplitterContainerHeight({ height, defaultHeight, minHeight, maxHeight, heightStep, onHeightChange }: UseSplitterContainerHeightParams): SplitterContainerHeightState;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=useSplitterContainerHeight.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSplitterContainerHeight.d.ts","sourceRoot":"","sources":["../../src/splitter/useSplitterContainerHeight.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,aAAa,IAAI,kBAAkB,EACxC,KAAK,YAAY,IAAI,iBAAiB,EAKtC,MAAM,OAAO,CAAC;AAIf,KAAK,gCAAgC,GAAG;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C,CAAC;AAEF,KAAK,4BAA4B,GAAG;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,0BAA0B,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IAC/E,sBAAsB,EAAE,CAAC,KAAK,EAAE,kBAAkB,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;CAC5E,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,EAC1C,MAAM,EACN,aAAa,EACb,SAAS,EACT,SAAS,EACT,UAAU,EACV,cAAc,EACd,EAAE,gCAAgC,GAAG,4BAA4B,CA0IjE"}
|