@ryuzaki13/react-foundation-ui 1.0.18 → 1.0.20
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 +1 -1
- package/dist/chunks/{multi-select-DkfdFYm4.js → multi-select-DaOKgHKE.js} +2 -2
- package/dist/chunks/{multi-select-DkfdFYm4.js.map → multi-select-DaOKgHKE.js.map} +1 -1
- package/dist/chunks/{picker-beNX-cW9.js → picker-BZ05h_ZJ.js} +12 -9
- package/dist/chunks/picker-BZ05h_ZJ.js.map +1 -0
- package/dist/chunks/select-Dj3FfpS0.js +327 -0
- package/dist/chunks/select-Dj3FfpS0.js.map +1 -0
- package/dist/layout-picker/index.js +1 -1
- package/dist/multi-select/index.js +1 -1
- package/dist/picker/PickerPopup.d.ts +2 -1
- package/dist/picker/PickerPopup.d.ts.map +1 -1
- package/dist/picker/index.js +1 -1
- package/dist/preset-select/index.js +1 -1
- package/dist/select/Select.d.ts +5 -3
- package/dist/select/Select.d.ts.map +1 -1
- package/dist/select/SelectOptionGroup.d.ts +11 -0
- package/dist/select/SelectOptionGroup.d.ts.map +1 -0
- package/dist/select/index.js +1 -1
- package/dist/select/lib/createSelectOptionSections.d.ts +14 -0
- package/dist/select/lib/createSelectOptionSections.d.ts.map +1 -0
- package/dist/select/lib/getOptionSearchText.d.ts +3 -1
- package/dist/select/lib/getOptionSearchText.d.ts.map +1 -1
- package/dist/slider/index.js +1 -1
- package/dist/state-select/index.js +1 -1
- package/dist/tree-select/index.js +1 -1
- package/package.json +1 -1
- package/storybook-static/assets/{Badge-DWmXvSEt.js → Badge-BV0mSOnT.js} +1 -1
- package/storybook-static/assets/{Badge.stories-DrUkR5Kt.js → Badge.stories-Bc5VWqwH.js} +1 -1
- package/storybook-static/assets/{Button-CBzJWtGT.js → Button-4r19WCQg.js} +1 -1
- package/storybook-static/assets/{Button-gqIyGTVm.js → Button-BBolHr48.js} +1 -1
- package/storybook-static/assets/{Button.stories-DarSDitm.js → Button.stories-Dk7Y6gP4.js} +1 -1
- package/storybook-static/assets/{CheckBox-Be5y5Yaf.js → CheckBox-97WntM4f.js} +1 -1
- package/storybook-static/assets/{CheckBox-CClp47K7.js → CheckBox-DgYqSI7C.js} +1 -1
- package/storybook-static/assets/{CheckBox.stories-D-XTwN4w.js → CheckBox.stories-B4fLCKYI.js} +1 -1
- package/storybook-static/assets/{Color-KMSTOMOX-Pv032miJ.js → Color-KMSTOMOX-eKd5gW4e.js} +1 -1
- package/storybook-static/assets/{ContextMenu-BkVTXUpG.js → ContextMenu-DYtAb1at.js} +1 -1
- package/storybook-static/assets/{ContextMenu.stories-DtvzPaIF.js → ContextMenu.stories-CBmt3Nce.js} +1 -1
- package/storybook-static/assets/{DateInput-CbQwETpT.js → DateInput-B564qoCJ.js} +1 -1
- package/storybook-static/assets/{DateInput-6pvp1eRu.js → DateInput-D3CVjjRE.js} +1 -1
- package/storybook-static/assets/{DateInput.stories-DRcN3ybd.js → DateInput.stories-nbu0Zyqz.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect-D6q7Kef5.js → DateRangePresetSelect-CMmZ74dM.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect-CAB32ti_.js → DateRangePresetSelect-mrGDA-7A.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect.stories-DN6TkVtw.js → DateRangePresetSelect.stories-DDAeJZ4X.js} +1 -1
- package/storybook-static/assets/{Detail-CphbEg1M.js → Detail-BwY-EQgO.js} +1 -1
- package/storybook-static/assets/{Detail.stories-Dc5Rx4u4.js → Detail.stories-ua3nDl0m.js} +1 -1
- package/storybook-static/assets/{Dialog-ndurUKqc.js → Dialog-CA0kOezM.js} +1 -1
- package/storybook-static/assets/{Dialog.stories-BvLARKjm.js → Dialog.stories-BvM8gHpD.js} +1 -1
- package/storybook-static/assets/{Disclosure-2VsNuiNF.js → Disclosure-ByimcEi9.js} +1 -1
- package/storybook-static/assets/{Disclosure.stories-eGJxzZmh.js → Disclosure.stories-CJY3r6cV.js} +1 -1
- package/storybook-static/assets/{DocsRenderer-JROSPFPF-CpVFRA5Y.js → DocsRenderer-JROSPFPF-Bnyaajwf.js} +2 -2
- package/storybook-static/assets/{DropZone-B8a2PM2e.js → DropZone-z5IWbRY7.js} +1 -1
- package/storybook-static/assets/{DropZone.stories-DoBeAZdH.js → DropZone.stories-DP36CnJJ.js} +1 -1
- package/storybook-static/assets/{DropdownMenu-Dyi86Exa.js → DropdownMenu-xjRYOnob.js} +1 -1
- package/storybook-static/assets/{ExpandableActionPanel.stories-BDyx4-Wf.js → ExpandableActionPanel.stories-ehW5CvFA.js} +1 -1
- package/storybook-static/assets/{Flex-DycwM4Fy.js → Flex-CrDAzWzv.js} +1 -1
- package/storybook-static/assets/{Flex-B71m7CmC.js → Flex-R3eoDv0F.js} +1 -1
- package/storybook-static/assets/{Flex.stories-DNNoTDfs.js → Flex.stories-BQv9sIrD.js} +1 -1
- package/storybook-static/assets/{Grid-CCVTg58v.js → Grid-CtejGOaQ.js} +1 -1
- package/storybook-static/assets/{Grid-DzNawx4O.js → Grid-DyJMlQ3m.js} +1 -1
- package/storybook-static/assets/{Grid.stories-D62x4nnt.js → Grid.stories-BfREL6xj.js} +1 -1
- package/storybook-static/assets/{ImageCropper.stories-BkBPtN0b.js → ImageCropper.stories-DuNl320E.js} +1 -1
- package/storybook-static/assets/{ImageRenderer-BNrfKcoR.js → ImageRenderer-DrxwqLJS.js} +1 -1
- package/storybook-static/assets/{ImageRenderer.stories-DQpqGfZ5.js → ImageRenderer.stories-B6m2ldKq.js} +1 -1
- package/storybook-static/assets/{ImageView.stories-DzCNwypO.js → ImageView.stories-KPwqFsZ0.js} +1 -1
- package/storybook-static/assets/{Input-DEvutRWc.js → Input-C9Qh868c.js} +1 -1
- package/storybook-static/assets/{Input-D7RhI3F_.js → Input-DqWznlyA.js} +1 -1
- package/storybook-static/assets/{Input.stories-CQtNzJ2d.js → Input.stories-CJSTGfw9.js} +1 -1
- package/storybook-static/assets/{InputDateTime-2xC784cj.js → InputDateTime-BvDTq_D6.js} +1 -1
- package/storybook-static/assets/{InputDateTime.stories-DtYUywAW.js → InputDateTime.stories-CszmbzWn.js} +1 -1
- package/storybook-static/assets/{InputFile-LuB6ELgM.js → InputFile-CWalPPYz.js} +1 -1
- package/storybook-static/assets/{InputFile.stories-psIGnnDp.js → InputFile.stories-DldrI9as.js} +1 -1
- package/storybook-static/assets/{InputFiles-C71LfhQ3.js → InputFiles-B8p6AaeB.js} +1 -1
- package/storybook-static/assets/{InputFiles-DRacqAIw.js → InputFiles-DDTcP-at.js} +1 -1
- package/storybook-static/assets/{InputFiles.stories-BAO31sqC.js → InputFiles.stories-Bm2uOv3p.js} +1 -1
- package/storybook-static/assets/{InputImage-vZyjm8oI.js → InputImage-DlJxgHAF.js} +1 -1
- package/storybook-static/assets/{InputImage.stories-B9rN6Rxs.js → InputImage.stories-B6M59-NN.js} +1 -1
- package/storybook-static/assets/{LayoutPicker-CxDe5Gw8.js → LayoutPicker-CNtQpDzd.js} +1 -1
- package/storybook-static/assets/{LayoutPicker.stories-D8cCxXXP.js → LayoutPicker.stories-BziRPv8X.js} +1 -1
- package/storybook-static/assets/{Listbox-5iar6ma8.js → Listbox-Bh7Y7gA9.js} +1 -1
- package/storybook-static/assets/{Listbox.stories-COp6WiMB.js → Listbox.stories-2gPVzr15.js} +1 -1
- package/storybook-static/assets/{Modal-zV3K6vvv.js → Modal-GnqkmW-e.js} +1 -1
- package/storybook-static/assets/{Modal.stories-CYmv-FaJ.js → Modal.stories-CRvYZ9J0.js} +1 -1
- package/storybook-static/assets/{MultiSelect-UizFi3d9.js → MultiSelect-5W9Vl2ra.js} +1 -1
- package/storybook-static/assets/{MultiSelect-D41OCY5x.js → MultiSelect-BFWO2tMT.js} +1 -1
- package/storybook-static/assets/{MultiSelect.stories-u0AlSlZp.js → MultiSelect.stories-C0v5FEuQ.js} +1 -1
- package/storybook-static/assets/{NotificationsHost-hQChUMce.js → NotificationsHost-CE8UZDlb.js} +1 -1
- package/storybook-static/assets/{NotificationsHost.stories-D6g7WJjS.js → NotificationsHost.stories-Dapge5tU.js} +1 -1
- package/storybook-static/assets/{ODataMultiSelect-CiamQM6C.js → ODataMultiSelect-YpMCzv29.js} +1 -1
- package/storybook-static/assets/{ODataMultiSelect.stories-5eDEemGQ.js → ODataMultiSelect.stories-DqKnuVMc.js} +1 -1
- package/storybook-static/assets/{ODataSelect-CLx5JSMi.js → ODataSelect-B4apxrUc.js} +1 -1
- package/storybook-static/assets/{ODataSelect-BiWVXqPq.js → ODataSelect-COkJhPGX.js} +1 -1
- package/storybook-static/assets/{ODataSelect.stories-GwKgtC-N.js → ODataSelect.stories-Dg-frZo3.js} +1 -1
- package/storybook-static/assets/{ODataTreeMultiSelect-CzMZie_w.js → ODataTreeMultiSelect-CyCiBb9b.js} +1 -1
- package/storybook-static/assets/{ODataTreeMultiSelect.stories-Da6MlEkV.js → ODataTreeMultiSelect.stories-CC4XyMv0.js} +1 -1
- package/storybook-static/assets/{ODataTreeSelect-CK7MxVU8.js → ODataTreeSelect-C7l7tUJD.js} +1 -1
- package/storybook-static/assets/{ODataTreeSelect.stories-D8CwVfe-.js → ODataTreeSelect.stories-D2JMx8BE.js} +1 -1
- package/storybook-static/assets/{PeriodSelect-DqP0nweD.js → PeriodSelect-DhG_ndZb.js} +1 -1
- package/storybook-static/assets/{PeriodSelect.stories-BJXRGemD.js → PeriodSelect.stories-BhljncVI.js} +1 -1
- package/storybook-static/assets/{Popover-D6qr-zdh.js → Popover-CZxtXntz.js} +1 -1
- package/storybook-static/assets/{Popover.stories-wr4nVVeK.js → Popover.stories-DwZxRALu.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput-CX-JBXWg.js → PresetRangeDateInput-CBFgSr-v.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput.stories-CiMPYtxH.js → PresetRangeDateInput.stories-D1ntb4LH.js} +1 -1
- package/storybook-static/assets/{RadioButton-CAE1c9uv.js → RadioButton-C1CglVPy.js} +1 -1
- package/storybook-static/assets/{RadioButton.stories-BysL-Bxz.js → RadioButton.stories-C6mWkk58.js} +1 -1
- package/storybook-static/assets/{RadioGroup-B1xxoy7T.js → RadioGroup-BKBCbxB-.js} +1 -1
- package/storybook-static/assets/{RadioGroup-DxUA0aFk.js → RadioGroup-qgu6eGKx.js} +1 -1
- package/storybook-static/assets/{RadioGroup.stories-Dhx6ULhk.js → RadioGroup.stories-CeKve5Jx.js} +1 -1
- package/storybook-static/assets/Select-Bf6yq8O2.js +61 -0
- package/storybook-static/assets/Select-Rn-J2OV3.js +12 -0
- package/storybook-static/assets/Select.stories-DYVi0Rmc.js +46 -0
- package/storybook-static/assets/{SelectOptionContent-DXQBspsR.js → SelectOptionContent-DAsNz7Yz.js} +1 -1
- package/storybook-static/assets/{SerializableSelect-b8rZxZBe.js → SerializableSelect-4RmEI_we.js} +1 -1
- package/storybook-static/assets/{SerializableSelect-Byb9ssGD.js → SerializableSelect-B9v1pJhT.js} +1 -1
- package/storybook-static/assets/{SerializableSelect.stories-D4pNvhz2.js → SerializableSelect.stories-BZBSbvLl.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput-Dx8iPd-Q.js → SingleDateTimeInput-BxNi0zXt.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput.stories-B2fchXdY.js → SingleDateTimeInput.stories-CcTlhsLA.js} +1 -1
- package/storybook-static/assets/{Slider-CFQMYiQq.js → Slider-HZgB69JS.js} +1 -1
- package/storybook-static/assets/{Slider.stories-EcLVbioI.js → Slider.stories-BgCn4o7z.js} +1 -1
- package/storybook-static/assets/{SliderInput-CGhUFTU0.js → SliderInput-DqoTda5t.js} +1 -1
- package/storybook-static/assets/{SliderInput.stories-D_WSCFgt.js → SliderInput.stories-LssuHy1J.js} +1 -1
- package/storybook-static/assets/{Sortable-BsOnR1uN.js → Sortable-DDrEmApe.js} +1 -1
- package/storybook-static/assets/{Sortable.stories-CPDoci0O.js → Sortable.stories-Cja60_18.js} +1 -1
- package/storybook-static/assets/{Splitter-CYyV_8Pq.js → Splitter-BkxC_61k.js} +1 -1
- package/storybook-static/assets/{Splitter.stories-DiVFmplz.js → Splitter.stories-ks1DOPj3.js} +1 -1
- package/storybook-static/assets/{StateSelect-C9MDIBO7.js → StateSelect-BtTk1kLj.js} +1 -1
- package/storybook-static/assets/{StateSelect.stories-snID0UC6.js → StateSelect.stories-BM2PRlDX.js} +1 -1
- package/storybook-static/assets/{Switch-BBFxT8_x.js → Switch-DuRjvsAW.js} +1 -1
- package/storybook-static/assets/{Switch.stories-BC53wJqW.js → Switch.stories-DnPXcklX.js} +1 -1
- package/storybook-static/assets/{Table-BnfSUBvR.js → Table-iVoz-Hh3.js} +1 -1
- package/storybook-static/assets/{Table.stories-2RTRdgpI.js → Table.stories-eRGyLO14.js} +1 -1
- package/storybook-static/assets/{Tabs-dXKmtWm1.js → Tabs-Drauw9Qt.js} +1 -1
- package/storybook-static/assets/{Tabs.stories-CEp6vYMd.js → Tabs.stories-Dh00tUgR.js} +1 -1
- package/storybook-static/assets/{Textarea-C9LTwBnP.js → Textarea-EYQsC0q0.js} +1 -1
- package/storybook-static/assets/{Textarea.stories-DuNG4Fxg.js → Textarea.stories-Bz0_Pslr.js} +1 -1
- package/storybook-static/assets/{TimePanel-nrNpgIYg.js → TimePanel-B4P9f6lx.js} +1 -1
- package/storybook-static/assets/{TimePanel.stories-CymqeBQ6.js → TimePanel.stories-DnENfatO.js} +1 -1
- package/storybook-static/assets/{Toggle-BrZsGFyh.js → Toggle-DawMrGtP.js} +1 -1
- package/storybook-static/assets/{Toggle.stories-CnRLuZ1B.js → Toggle.stories-CSx1wgFG.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect-BBris-Xx.js → TreeMultiSelect-B9cXZLYG.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect-Dp-JxGpF.js → TreeMultiSelect-Cpe6awfF.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect.stories-Dn_39X3q.js → TreeMultiSelect.stories-BMp7_dX9.js} +1 -1
- package/storybook-static/assets/{TreePickerBase-DIQdSZhJ.js → TreePickerBase-DZHqq3sm.js} +1 -1
- package/storybook-static/assets/{TreeSelect-ltX2lBAg.js → TreeSelect-BXUhdoFa.js} +1 -1
- package/storybook-static/assets/{TreeSelect-CCksSJfk.js → TreeSelect-qPU53Vg1.js} +1 -1
- package/storybook-static/assets/{TreeSelect.stories-BPEYOY-m.js → TreeSelect.stories-CofjiT2J.js} +1 -1
- package/storybook-static/assets/{TreeTable-Dc-Y0m3q.js → TreeTable-BdH4aoOU.js} +1 -1
- package/storybook-static/assets/{TreeTable.stories-C2r_nF0e.js → TreeTable.stories-B1Fc8DFw.js} +1 -1
- package/storybook-static/assets/{WithTooltip-7X4HQR7L-DK8uQ8Cn.js → WithTooltip-7X4HQR7L-DJ-k5EDh.js} +1 -1
- package/storybook-static/assets/{base-table-Bx2k5lGS.js → base-table-D3hWPtFP.js} +1 -1
- package/storybook-static/assets/{blocks-C7Q8GMMo.js → blocks-DZjGeeGb.js} +6 -6
- package/storybook-static/assets/{button-wXbhbl78.js → button-CJIIZdyL.js} +1 -1
- package/storybook-static/assets/{check-box-C8FJKjhC.js → check-box-DHGm0H-j.js} +1 -1
- package/storybook-static/assets/{chunk-3LY4VQVK-uSlGTJmP.js → chunk-3LY4VQVK-xQmQ9wgJ.js} +1 -1
- package/storybook-static/assets/{chunk-LITCR56V-FSgu6Y64.js → chunk-LITCR56V-AH0bDa1_.js} +1 -1
- package/storybook-static/assets/{contextMenu-DduWXaL3.js → contextMenu-DGip9X8L.js} +1 -1
- package/storybook-static/assets/{error-uQ2DxuVX.js → error-DbmF8WL4.js} +1 -1
- package/storybook-static/assets/{flex-DkVQD9fQ.js → flex-DDFcQoiF.js} +1 -1
- package/storybook-static/assets/{floating-ui.react-jQBFyt86.js → floating-ui.react-CFspDa0I.js} +1 -1
- package/storybook-static/assets/formatter-L2YTDE3Q-P261Kqp5.js +1 -0
- package/storybook-static/assets/{formatters-BloK5ams.js → formatters-C4D-1Rmz.js} +1 -1
- package/storybook-static/assets/grid-CUZXK-4q.js +1 -0
- package/storybook-static/assets/{hooks-DFj5VG2H.js → hooks-O9aO_nHR.js} +1 -1
- package/storybook-static/assets/{iframe-BdBCyVHz.js → iframe-CJ5lBt-e.js} +3 -3
- package/storybook-static/assets/{input-ddHVF6FV.js → input-H7y7HIGk.js} +1 -1
- package/storybook-static/assets/{lucide-react-CkksFLP-.js → lucide-react-BtYRZG_1.js} +1 -1
- package/storybook-static/assets/{mdx-react-shim-DeqTfg7V.js → mdx-react-shim-C4ot-lG2.js} +1 -1
- package/storybook-static/assets/{media-DrShSQO0.js → media-tZwPMhiy.js} +1 -1
- package/storybook-static/assets/{misc-CFwTrVHp.js → misc-B7IdO_Bp.js} +1 -1
- package/storybook-static/assets/{notifications-gnKM3wlP.js → notifications-Dolxc4gH.js} +1 -1
- package/storybook-static/assets/{odata-C4pua5YA.js → odata-D8Npa3bK.js} +1 -1
- package/storybook-static/assets/odata-service-Dt1Cp9iX.js +1 -0
- package/storybook-static/assets/{odataStoryFixtures-CfzrHuke.js → odataStoryFixtures-lUZdxCwx.js} +1 -1
- package/storybook-static/assets/picker-B0M9z_CQ.js +1 -0
- package/storybook-static/assets/{popover-Dr7yuAT9.js → popover-ALqQHWmp.js} +1 -1
- package/storybook-static/assets/{preset-select-CkU9ddp8.js → preset-select-BWYEfLK1.js} +1 -1
- package/storybook-static/assets/{react-18-Cxgo9w_S.js → react-18-BwJXfkA2.js} +1 -1
- package/storybook-static/assets/{react-CP3pw4PB.js → react-BD_WqLoy.js} +1 -1
- package/storybook-static/assets/{react-dom-BrHiwR18.js → react-dom-B9EGEDBK.js} +1 -1
- package/storybook-static/assets/select-BmjbSGub.js +1 -0
- package/storybook-static/assets/{slider-Cen5Jymh.js → slider-CSJuH7Wx.js} +1 -1
- package/storybook-static/assets/{sortable-Dme5pcO0.js → sortable-BNcFOgbT.js} +1 -1
- package/storybook-static/assets/{syntaxhighlighter-RTCFPKCB-B8bc6fVI.js → syntaxhighlighter-RTCFPKCB-sU9mgauS.js} +1 -1
- package/storybook-static/assets/{text-DrGSUN96.js → text-REr1prCl.js} +1 -1
- package/storybook-static/assets/{theming-0pJkCK9X.js → theming-HLKBFFc3.js} +1 -1
- package/storybook-static/assets/ui-B3C45-Qp.js +1 -0
- package/storybook-static/assets/{useODataSelectBase-DwrfQAdM.js → useODataSelectBase-DcRsZl18.js} +1 -1
- package/storybook-static/assets/{useODataTreeData-DNpvGMOY.js → useODataTreeData-gBDUdA_U.js} +1 -1
- package/storybook-static/assets/{utils-CYGhZ88S.js → utils-CYMJlQCP.js} +1 -1
- package/storybook-static/iframe.html +1 -1
- package/storybook-static/index.json +1 -1
- package/storybook-static/project.json +1 -1
- package/dist/chunks/picker-beNX-cW9.js.map +0 -1
- package/dist/chunks/select-CFbZS7fx.js +0 -284
- package/dist/chunks/select-CFbZS7fx.js.map +0 -1
- package/storybook-static/assets/Select-C8dnQPHr.js +0 -57
- package/storybook-static/assets/Select-DTyFJMMc.js +0 -9
- package/storybook-static/assets/Select.stories-CvSTPVuR.js +0 -37
- package/storybook-static/assets/formatter-L2YTDE3Q-CK2g4idL.js +0 -1
- package/storybook-static/assets/grid-CZAlVfwE.js +0 -1
- package/storybook-static/assets/odata-service-YWH6p1Lv.js +0 -1
- package/storybook-static/assets/picker-CO2rQx7C.js +0 -1
- package/storybook-static/assets/select-CXrVs_FQ.js +0 -1
- package/storybook-static/assets/ui-CxfY9QDr.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"generatedAt":
|
|
1
|
+
{"generatedAt":1783785830113,"hasCustomBabel":false,"hasCustomWebpack":false,"hasStaticDirs":false,"hasStorybookEslint":false,"refCount":0,"metaFramework":{"name":"tanstack-react","packageName":"@tanstack/react-router","version":"1.170.17"},"knownPackages":{"testPackages":{"@testing-library/dom":"10.4.1","@testing-library/react":"16.3.2","@testing-library/user-event":"^14.6.1","vitest":"4.1.10"},"stateManagementPackages":{"zustand":"^5.0.14"},"dataFetchingPackages":{"@tanstack/react-query":"^5.101.1"},"routerPackages":{"@tanstack/react-router":"^1.170.16"}},"hasRouterPackage":false,"packageManager":{"type":"npm","version":"11.7.0","agent":"npm","nodeLinker":"node_modules"},"preview":{"usesGlobals":false},"framework":{"name":"@storybook/react-vite","options":{}},"builder":"@storybook/builder-vite","renderer":"@storybook/react","portableStoriesFileCount":0,"applicationFileCount":9,"storybookVersion":"10.4.6","storybookVersionSpecifier":"^10.4.6","language":"typescript","storybookPackages":{"@storybook/react-vite":{"version":"10.4.6"},"storybook":{}},"addons":{"@storybook/addon-docs":{"version":"10.4.6"},"@storybook/addon-a11y":{"version":"10.4.6"}},"packageJsonType":"module"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"picker-beNX-cW9.js","names":[],"sources":["../../src/picker/PickerField.tsx","../../src/picker/Picker.module.scss","../../src/picker/PickerPopup.tsx","../../src/picker/PickerStatus.tsx","../../src/picker/PickerTriggerActions.tsx","../../src/picker/PickerTriggerInput.tsx","../../src/picker/model/createPickerTriggerPolicy.ts","../../src/picker/model/extractPickerTextContent.ts","../../src/picker/model/usePickerDefaultFilter.ts","../../src/picker/model/usePickerFloatingListbox.ts","../../src/picker/model/usePickerQuery.ts","../../src/picker/model/usePickerSelectionLifecycle.ts","../../src/picker/model/usePickerTriggerController.ts"],"sourcesContent":["import { InputType } from \"@ryuzaki13/react-foundation-lib/types\";\n\nimport { InputUI } from \"../input\";\nimport { useInputFieldIds } from \"../input/lib/useInputFieldIds\";\n\nimport { PickerFieldProps } from \"./types\";\n\nexport function PickerField<TValue extends InputType>({\n\tid,\n\tlabel,\n\tdescription,\n\tdisabled,\n\tsize,\n\tclassName,\n\terror,\n\tchildren\n}: PickerFieldProps<TValue>) {\n\tconst { controlId, labelId, descriptionId, errorId, describedBy } = useInputFieldIds({\n\t\tid,\n\t\thasLabel: label !== undefined && label !== null,\n\t\thasDescription: !!description,\n\t\thasError: !!error\n\t});\n\n\treturn (\n\t\t<InputUI\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\tdisabled={disabled}\n\t\t\tsize={size}\n\t\t\tclassName={className}\n\t\t\terror={error}\n\t\t\tcontrolId={controlId}\n\t\t\tlabelId={labelId}\n\t\t\tdescriptionId={descriptionId}\n\t\t\terrorId={errorId}>\n\t\t\t{children({ controlId, labelId, descriptionId, errorId, describedBy })}\n\t\t</InputUI>\n\t);\n}\n",".popupLayout {\n\tdisplay: grid;\n\tgrid-template-rows: auto 1fr;\n\tmin-height: 0;\n\tmax-height: 75vh;\n\toverflow: hidden;\n\n\tflex: 1 1 auto;\n}\n\n.popupBody {\n\tmin-height: 0;\n}\n\n.status {\n\tpadding: var(--space-xs) var(--space-sm);\n\tcolor: var(--content-2);\n}\n\n.statusError {\n\tcolor: var(--status-error-text);\n}\n\n.triggerContainer {\n\tposition: relative;\n}\n","import { type CSSProperties, type KeyboardEvent, type MouseEvent, type ReactNode } from \"react\";\n\nimport { FloatingContext, FloatingFocusManager, FloatingPortal } from \"@floating-ui/react\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { AnimatePresence, motion } from \"motion/react\";\n\nimport { Separator } from \"../separator\";\n\nimport styles from \"./Picker.module.scss\";\n\ninterface PickerPopupProps {\n\topen: boolean;\n\tcontext: FloatingContext;\n\tfloatingStyles: CSSProperties;\n\tlistId: string;\n\tlabelId?: string;\n\tdescriptionId?: string;\n\tactiveOptionId?: string;\n\tsetFloating: (node: HTMLElement | null) => void;\n\tgetFloatingProps: (userProps?: Record<string, unknown>) => Record<string, unknown>;\n\tonKeyDown: (event: KeyboardEvent<HTMLElement>) => void;\n\tinitialFocus?: number;\n\treturnFocus?: boolean;\n\ttabIndex?: number;\n\tclassName?: string;\n\tlayoutClassName?: string;\n\theaderClassName?: string;\n\tbodyClassName?: string;\n\theader?: ReactNode;\n\tchildren: ReactNode;\n}\n\nfunction stopNestedFloatingMouseDown(event: MouseEvent<HTMLElement>): void {\n\tevent.stopPropagation();\n}\n\nexport function PickerPopup({\n\topen,\n\tcontext,\n\tfloatingStyles,\n\tlistId,\n\tlabelId,\n\tdescriptionId,\n\tactiveOptionId,\n\tsetFloating,\n\tgetFloatingProps,\n\tonKeyDown,\n\tinitialFocus = -1,\n\treturnFocus = false,\n\ttabIndex = 0,\n\tclassName,\n\tlayoutClassName,\n\theaderClassName,\n\tbodyClassName,\n\theader,\n\tchildren\n}: PickerPopupProps) {\n\treturn (\n\t\t<AnimatePresence>\n\t\t\t{open && (\n\t\t\t\t<FloatingPortal>\n\t\t\t\t\t<FloatingFocusManager context={context} modal={false} initialFocus={initialFocus} returnFocus={returnFocus}>\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tref={setFloating}\n\t\t\t\t\t\t\tstyle={floatingStyles}\n\t\t\t\t\t\t\tinitial={{ opacity: 0, scale: 0.95 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\t\t\t\t\texit={{ opacity: 0, scale: 0.95 }}\n\t\t\t\t\t\t\t{...getFloatingProps({\n\t\t\t\t\t\t\t\tid: listId,\n\t\t\t\t\t\t\t\ttabIndex,\n\t\t\t\t\t\t\t\t\"aria-labelledby\": labelId,\n\t\t\t\t\t\t\t\t\"aria-describedby\": descriptionId,\n\t\t\t\t\t\t\t\t\"aria-activedescendant\": activeOptionId,\n\t\t\t\t\t\t\t\tonMouseDown: stopNestedFloatingMouseDown,\n\t\t\t\t\t\t\t\tonKeyDown,\n\t\t\t\t\t\t\t\tclassName\n\t\t\t\t\t\t\t})}>\n\t\t\t\t\t\t\t<div className={cn(styles.popupLayout, layoutClassName)}>\n\t\t\t\t\t\t\t\t{header ? (\n\t\t\t\t\t\t\t\t\t<div className={headerClassName}>\n\t\t\t\t\t\t\t\t\t\t{header}\n\t\t\t\t\t\t\t\t\t\t<Separator className=\"marginBlockSm\" />\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<div />\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<div className={cn(styles.popupBody, bodyClassName)}>{children}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t</FloatingFocusManager>\n\t\t\t\t</FloatingPortal>\n\t\t\t)}\n\t\t</AnimatePresence>\n\t);\n}\n","import { ReactNode } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport uiStyles from \"../ui.module.scss\";\n\nimport styles from \"./Picker.module.scss\";\n\ninterface PickerStatusProps {\n\temptyState?: ReactNode;\n\tloadingState?: ReactNode;\n\terrorState?: ReactNode;\n}\n\nexport function PickerStatus({ emptyState, loadingState, errorState }: PickerStatusProps) {\n\tconst content = errorState ?? loadingState ?? emptyState;\n\n\tif (content === undefined || content === null) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div className={cn(uiStyles.uiPopupOption, styles.status, errorState !== undefined && styles.statusError)} aria-disabled={true}>\n\t\t\t{content}\n\t\t</div>\n\t);\n}\n","import { MouseEvent, ReactNode } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { ChevronDownIcon } from \"lucide-react\";\n\nimport uiStyles from \"../ui.module.scss\";\n\ninterface PickerTriggerActionsProps {\n\topen: boolean;\n\tdisabled?: boolean;\n\tchildren?: ReactNode;\n\tonToggleMouseDown?: (event: MouseEvent<HTMLButtonElement>) => void;\n\tonToggleClick: () => void;\n\topenAriaLabel?: string;\n\tcloseAriaLabel?: string;\n}\n\nexport function PickerTriggerActions({\n\topen,\n\tdisabled,\n\tchildren,\n\tonToggleMouseDown,\n\tonToggleClick,\n\topenAriaLabel = \"Открыть список\",\n\tcloseAriaLabel = \"Закрыть список\"\n}: PickerTriggerActionsProps) {\n\treturn (\n\t\t<div className={uiStyles.uiToggleButtonContainer} data-disabled={disabled || undefined}>\n\t\t\t{children}\n\n\t\t\t<div className={uiStyles.uiButtonSeparator} />\n\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\taria-label={open ? closeAriaLabel : openAriaLabel}\n\t\t\t\tclassName={uiStyles.uiToggleButton}\n\t\t\t\tonMouseDown={onToggleMouseDown}\n\t\t\t\tonClick={onToggleClick}>\n\t\t\t\t<ChevronDownIcon className={cn(uiStyles.uiToggleIcon, open && uiStyles.uiToggleIconOpen)} />\n\t\t\t</button>\n\t\t</div>\n\t);\n}\n","import { ComponentPropsWithoutRef, forwardRef, ReactNode } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { InputControl } from \"../input\";\nimport uiStyles from \"../ui.module.scss\";\n\nimport styles from \"./Picker.module.scss\";\n\ninterface PickerTriggerInputProps extends Omit<ComponentPropsWithoutRef<\"input\">, \"size\"> {\n\trootRef?: (node: HTMLDivElement | null) => void;\n\tendAdornment?: ReactNode;\n\toverlay?: ReactNode;\n\trootClassName?: string;\n\tinputClassName?: string;\n}\n\nexport const PickerTriggerInput = forwardRef<HTMLInputElement, PickerTriggerInputProps>(\n\t({ rootRef, endAdornment, overlay, rootClassName, inputClassName, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div ref={rootRef} className={cn(uiStyles.uiInputContainer, styles.triggerContainer, rootClassName)}>\n\t\t\t\t<InputControl endAdornment={endAdornment}>\n\t\t\t\t\t{({ controlClassName }) => (\n\t\t\t\t\t\t<input {...props} ref={ref} className={cn(uiStyles.uiInputWithToggle, controlClassName, inputClassName)} />\n\t\t\t\t\t)}\n\t\t\t\t</InputControl>\n\t\t\t\t{overlay}\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nPickerTriggerInput.displayName = \"PickerTriggerInput\";\n","export type PickerTriggerMode = \"display\" | \"search-single\" | \"search-multi\";\n\ninterface PickerTriggerTextFocusParams {\n\topen: boolean;\n\tcurrentQuery: string;\n\thasDisplayValue: boolean;\n}\n\nexport interface PickerTriggerPolicy {\n\tfocusFloatingOnOpen: boolean;\n\trestoreFocusOnClose: boolean;\n\tresetQueryOnClose: boolean;\n\tshouldOpenOnTriggerClick: (open: boolean) => boolean;\n\tshouldOpenOnInputChange: (open: boolean) => boolean;\n\tshouldFocusReferenceOnToggle: (open: boolean) => boolean;\n\tshouldSelectTriggerTextOnFocus: (params: PickerTriggerTextFocusParams) => boolean;\n}\n\n/**\n * Единая политика поведения trigger-input для picker-компонентов.\n * Нормализует различия между display-режимом, single-search и multi-search.\n */\nexport function createPickerTriggerPolicy(mode: PickerTriggerMode): PickerTriggerPolicy {\n\tswitch (mode) {\n\t\tcase \"search-single\":\n\t\t\treturn {\n\t\t\t\tfocusFloatingOnOpen: false,\n\t\t\t\trestoreFocusOnClose: false,\n\t\t\t\tresetQueryOnClose: true,\n\t\t\t\tshouldOpenOnTriggerClick: () => false,\n\t\t\t\tshouldOpenOnInputChange: (open) => !open,\n\t\t\t\tshouldFocusReferenceOnToggle: (open) => !open,\n\t\t\t\tshouldSelectTriggerTextOnFocus: ({ open, currentQuery, hasDisplayValue }) =>\n\t\t\t\t\t!open && currentQuery.length === 0 && hasDisplayValue\n\t\t\t};\n\t\tcase \"search-multi\":\n\t\t\treturn {\n\t\t\t\tfocusFloatingOnOpen: false,\n\t\t\t\trestoreFocusOnClose: false,\n\t\t\t\tresetQueryOnClose: true,\n\t\t\t\tshouldOpenOnTriggerClick: () => false,\n\t\t\t\tshouldOpenOnInputChange: (open) => !open,\n\t\t\t\tshouldFocusReferenceOnToggle: (open) => !open,\n\t\t\t\tshouldSelectTriggerTextOnFocus: () => false\n\t\t\t};\n\t\tcase \"display\":\n\t\tdefault:\n\t\t\treturn {\n\t\t\t\tfocusFloatingOnOpen: true,\n\t\t\t\trestoreFocusOnClose: true,\n\t\t\t\tresetQueryOnClose: false,\n\t\t\t\tshouldOpenOnTriggerClick: (open) => !open,\n\t\t\t\tshouldOpenOnInputChange: () => false,\n\t\t\t\tshouldFocusReferenceOnToggle: () => false,\n\t\t\t\tshouldSelectTriggerTextOnFocus: () => false\n\t\t\t};\n\t}\n}\n","import { ReactNode } from \"react\";\n\nexport function extractPickerTextContent(node: ReactNode): string | undefined {\n\tif (typeof node === \"string\" || typeof node === \"number\") {\n\t\treturn String(node);\n\t}\n\n\tif (Array.isArray(node)) {\n\t\tconst values = node.map(extractPickerTextContent).filter((value): value is string => Boolean(value));\n\t\treturn values.length ? values.join(\" \") : undefined;\n\t}\n\n\treturn undefined;\n}\n","import { useMemo } from \"react\";\n\nimport { normalizeTextToLower } from \"@ryuzaki13/react-foundation-lib/formatters\";\n\ninterface UsePickerDefaultFilterOptions<T> {\n\toptions: readonly T[];\n\tquery: string;\n\tenabled?: boolean;\n\tgetSearchText: (option: T) => unknown;\n}\n\nfunction normalizeSearchText(value: unknown) {\n\tconst parts = Array.isArray(value) ? value : [value];\n\n\treturn normalizeTextToLower(parts.filter(Boolean).join(\" \"));\n}\n\nexport function usePickerDefaultFilter<T>({ options, query, enabled = true, getSearchText }: UsePickerDefaultFilterOptions<T>) {\n\tconst normalizedQuery = normalizeTextToLower(query);\n\n\treturn useMemo(() => {\n\t\tif (!enabled || !normalizedQuery) {\n\t\t\treturn [...options];\n\t\t}\n\n\t\treturn options.filter((option) => normalizeSearchText(getSearchText(option)).includes(normalizedQuery));\n\t}, [enabled, getSearchText, normalizedQuery, options]);\n}\n","import { Placement } from \"@floating-ui/react\";\nimport { useFloatingListbox } from \"@ryuzaki13/react-foundation-lib/hooks\";\n\nimport { PickerTriggerMode, createPickerTriggerPolicy } from \"./createPickerTriggerPolicy\";\n\ninterface UsePickerFloatingListboxParams<T> {\n\toptions: readonly T[];\n\tselectedIndex: number;\n\topen?: boolean;\n\tonOpenChange?: (open: boolean) => void;\n\tgetOptionDisabled?: (option: T) => boolean;\n\tonSelect?: (option: T) => void;\n\tdisabled?: boolean;\n\tplacement?: Placement;\n\tcloseOnSelect?: boolean;\n\tfocusFloatingOnOpen?: boolean;\n\tallowOpenWithoutOptions?: boolean;\n\trestoreFocusOnClose?: boolean;\n\ttriggerMode?: PickerTriggerMode;\n}\n\n/**\n * Единая точка входа для popup/listbox поведения во всех picker-компонентах.\n */\nexport function usePickerFloatingListbox<T>(params: UsePickerFloatingListboxParams<T>) {\n\tconst triggerPolicy = params.triggerMode ? createPickerTriggerPolicy(params.triggerMode) : undefined;\n\n\treturn useFloatingListbox({\n\t\t...params,\n\t\tfocusFloatingOnOpen: params.focusFloatingOnOpen ?? triggerPolicy?.focusFloatingOnOpen,\n\t\trestoreFocusOnClose: params.restoreFocusOnClose ?? triggerPolicy?.restoreFocusOnClose\n\t});\n}\n","import { useEffect, useEffectEvent, useRef, useState } from \"react\";\n\nimport { PickerTriggerMode, createPickerTriggerPolicy } from \"./createPickerTriggerPolicy\";\n\ninterface UsePickerQueryOptions {\n\topen: boolean;\n\tquery?: string;\n\tdefaultQuery?: string;\n\tonQuery?: (value: string) => void;\n\tresetOnClose?: boolean;\n\ttriggerMode?: PickerTriggerMode;\n}\n\nexport function usePickerQuery({ open, query, defaultQuery, onQuery, resetOnClose, triggerMode }: UsePickerQueryOptions) {\n\tconst previousOpenRef = useRef(false);\n\tconst isControlled = query !== undefined;\n\tconst [internalQuery, setInternalQuery] = useState(defaultQuery ?? \"\");\n\tconst currentQuery = isControlled ? (query ?? \"\") : internalQuery;\n\tconst syncResetInternalQuery = useEffectEvent(() => setInternalQuery(\"\"));\n\tconst resolvedResetOnClose = resetOnClose ?? (triggerMode ? createPickerTriggerPolicy(triggerMode).resetQueryOnClose : true);\n\n\tuseEffect(() => {\n\t\tif (previousOpenRef.current && !open && resolvedResetOnClose) {\n\t\t\tif (!isControlled) {\n\t\t\t\tsyncResetInternalQuery();\n\t\t\t}\n\n\t\t\tonQuery?.(\"\");\n\t\t}\n\n\t\tpreviousOpenRef.current = open;\n\t}, [isControlled, onQuery, open, resolvedResetOnClose]);\n\n\tconst setQuery = (nextValue: string) => {\n\t\tif (!isControlled) {\n\t\t\tsetInternalQuery(nextValue);\n\t\t}\n\n\t\tonQuery?.(nextValue);\n\t};\n\n\treturn {\n\t\tquery: currentQuery,\n\t\tsetQuery,\n\t\tclearQuery: () => setQuery(\"\")\n\t};\n}\n","import { useEffect, useEffectEvent, useRef, useState } from \"react\";\n\ninterface UsePickerSelectionLifecycleOptions<TValue> {\n\tvalue: TValue;\n\topen: boolean;\n\tonCommit: (value: TValue) => void;\n\tonOpen?: () => void;\n\tonClose?: (value: TValue) => void;\n\tisEqual: (left: TValue, right: TValue) => boolean;\n}\n\n/**\n * Общий жизненный цикл чернового выбора для picker-компонентов,\n * где изменения подтверждаются при закрытии popup.\n */\nexport function usePickerSelectionLifecycle<TValue>({\n\tvalue,\n\topen,\n\tonCommit,\n\tonOpen,\n\tonClose,\n\tisEqual\n}: UsePickerSelectionLifecycleOptions<TValue>) {\n\tconst previousOpenRef = useRef(false);\n\tconst [draftValue, setDraftValue] = useState(value);\n\tconst syncDraftValue = useEffectEvent((value: TValue) => setDraftValue(value));\n\n\tuseEffect(() => {\n\t\tif (!open) {\n\t\t\tsyncDraftValue(value);\n\t\t}\n\t}, [open, value]);\n\n\tuseEffect(() => {\n\t\tif (previousOpenRef.current && !open) {\n\t\t\tif (!isEqual(draftValue, value)) {\n\t\t\t\tonCommit(draftValue);\n\t\t\t}\n\n\t\t\tonClose?.(draftValue);\n\t\t}\n\n\t\tpreviousOpenRef.current = open;\n\t}, [draftValue, isEqual, onClose, onCommit, open, value]);\n\n\tconst prepareOpen = () => {\n\t\tsetDraftValue(value);\n\t\tonOpen?.();\n\t};\n\n\treturn {\n\t\tdraftValue,\n\t\tsetDraftValue,\n\t\tprepareOpen\n\t};\n}\n","import { MouseEvent, RefObject } from \"react\";\n\nimport { PickerTriggerMode, createPickerTriggerPolicy } from \"./createPickerTriggerPolicy\";\n\ninterface UsePickerTriggerControllerOptions {\n\tmode: PickerTriggerMode;\n\topen: boolean;\n\tcurrentQuery: string;\n\thasDisplayValue: boolean;\n\tinputRef: RefObject<HTMLInputElement | null>;\n\tsetQuery?: (value: string) => void;\n\topenList?: () => void;\n\tclose?: () => void;\n\ttoggleOpen?: () => void;\n\tonBeforeOpen?: () => void;\n}\n\ninterface HandleTriggerKeyDownOptions {\n\tevent: React.KeyboardEvent<HTMLElement>;\n\tonActivateWhenOpen?: () => void;\n\tenableSpaceActivation?: boolean;\n\tenableClosedArrowDownOpen?: boolean;\n\tsuppressClosedArrowUp?: boolean;\n}\n\nfunction focusInput(inputRef: RefObject<HTMLInputElement | null>) {\n\trequestAnimationFrame(() => {\n\t\tinputRef.current?.focus();\n\t});\n}\n\n/**\n * Единый контроллер пользовательских действий на trigger-input.\n * Держит поведение display/search-single/search-multi в одном месте.\n */\nexport function usePickerTriggerController({\n\tmode,\n\topen,\n\tcurrentQuery,\n\thasDisplayValue,\n\tinputRef,\n\tsetQuery,\n\topenList,\n\tclose,\n\ttoggleOpen,\n\tonBeforeOpen\n}: UsePickerTriggerControllerOptions) {\n\tconst policy = createPickerTriggerPolicy(mode);\n\n\tconst openTrigger = () => {\n\t\tonBeforeOpen?.();\n\n\t\tif (openList) {\n\t\t\topenList();\n\t\t\treturn;\n\t\t}\n\n\t\ttoggleOpen?.();\n\t};\n\n\tconst closeTrigger = () => {\n\t\tif (close) {\n\t\t\tclose();\n\t\t\treturn;\n\t\t}\n\n\t\ttoggleOpen?.();\n\t};\n\n\tconst toggleTrigger = () => {\n\t\tif (open) {\n\t\t\tcloseTrigger();\n\t\t} else {\n\t\t\topenTrigger();\n\t\t}\n\n\t\tif (policy.shouldFocusReferenceOnToggle(open)) {\n\t\t\tfocusInput(inputRef);\n\t\t}\n\t};\n\n\treturn {\n\t\tpolicy,\n\t\thandleTriggerInputChange: (nextValue: string) => {\n\t\t\tsetQuery?.(nextValue);\n\n\t\t\tif (policy.shouldOpenOnInputChange(open)) {\n\t\t\t\topenTrigger();\n\t\t\t}\n\t\t},\n\t\thandleTriggerClick: () => {\n\t\t\tif (policy.shouldOpenOnTriggerClick(open)) {\n\t\t\t\topenTrigger();\n\t\t\t}\n\t\t},\n\t\thandleTriggerFocus: (input: HTMLInputElement) => {\n\t\t\tif (\n\t\t\t\tpolicy.shouldSelectTriggerTextOnFocus({\n\t\t\t\t\topen,\n\t\t\t\t\tcurrentQuery,\n\t\t\t\t\thasDisplayValue\n\t\t\t\t})\n\t\t\t) {\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tinput.select();\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\thandleToggleMouseDown: (event: MouseEvent<HTMLButtonElement>) => {\n\t\t\tevent.preventDefault();\n\t\t},\n\t\thandleToggleClick: () => {\n\t\t\ttoggleTrigger();\n\t\t},\n\t\thandleTriggerKeyDown: ({\n\t\t\tevent,\n\t\t\tonActivateWhenOpen,\n\t\t\tenableSpaceActivation = false,\n\t\t\tenableClosedArrowDownOpen = false,\n\t\t\tsuppressClosedArrowUp = false\n\t\t}: HandleTriggerKeyDownOptions) => {\n\t\t\tif (!open && suppressClosedArrowUp && event.key === \"ArrowUp\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!open && enableClosedArrowDownOpen && event.key === \"ArrowDown\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\ttoggleTrigger();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key === \"Enter\") {\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tif (open) {\n\t\t\t\t\tonActivateWhenOpen?.();\n\t\t\t\t} else {\n\t\t\t\t\ttoggleTrigger();\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (enableSpaceActivation && event.key === \" \") {\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tif (open) {\n\t\t\t\t\tonActivateWhenOpen?.();\n\t\t\t\t} else {\n\t\t\t\t\ttoggleTrigger();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttoggleTrigger\n\t};\n}\n"],"mappings":"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"}
|
|
@@ -1,284 +0,0 @@
|
|
|
1
|
-
import { o as e, t } from "./SelectOptionContent-lfEtHXfO.js";
|
|
2
|
-
import { t as n } from "./ui.module-BisoTevy.js";
|
|
3
|
-
import { c as r } from "./input-CZLUUggm.js";
|
|
4
|
-
import { a as i, c as a, d as o, f as s, i as c, l, o as u, r as d, t as f, u as p } from "./picker-beNX-cW9.js";
|
|
5
|
-
import { n as m } from "./useODataSelectBase-BxAvhDww.js";
|
|
6
|
-
import { useMemo as h, useRef as g, useState as ee } from "react";
|
|
7
|
-
import { cn as _ } from "@ryuzaki13/react-foundation-lib/utils";
|
|
8
|
-
import { CheckIcon as te, XIcon as ne } from "lucide-react";
|
|
9
|
-
import { Fragment as v, jsx as y, jsxs as b } from "react/jsx-runtime";
|
|
10
|
-
//#region src/select/lib/getOptionSearchText.ts
|
|
11
|
-
function re({ option: e, getOptionLabel: t, getOptionCode: n }) {
|
|
12
|
-
return [u(t(e)), u(n?.(e))].filter((e) => !!e).join(" ").toLowerCase();
|
|
13
|
-
}
|
|
14
|
-
function x(e, t, n) {
|
|
15
|
-
return e.find((e) => e.value === t) ?? n;
|
|
16
|
-
}
|
|
17
|
-
//#endregion
|
|
18
|
-
//#region src/select/model/useODataSelect.ts
|
|
19
|
-
function S({ odata: e, segment: t, model: n, value: r, dependencies: i, onChange: a }) {
|
|
20
|
-
let o = m({
|
|
21
|
-
odata: e,
|
|
22
|
-
segment: t,
|
|
23
|
-
model: n,
|
|
24
|
-
value: r ? [r] : [],
|
|
25
|
-
dependencies: i
|
|
26
|
-
}), s = o.selectedItems[0], c = h(() => s ? [s, ...o.filteredItems] : o.filteredItems, [o.filteredItems, s]), l = (e) => {
|
|
27
|
-
a(e?.[o.selectionKey]);
|
|
28
|
-
};
|
|
29
|
-
return {
|
|
30
|
-
...o,
|
|
31
|
-
selectedItem: s,
|
|
32
|
-
options: c,
|
|
33
|
-
handleChange: l
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
var C = {
|
|
37
|
-
inputWithOverlay: "aEEqH1",
|
|
38
|
-
valueOverlay: "_4HQKa7"
|
|
39
|
-
};
|
|
40
|
-
//#endregion
|
|
41
|
-
//#region src/select/Select.tsx
|
|
42
|
-
function w(e) {
|
|
43
|
-
let { label: t, description: r, disabled: m, placeholder: h, size: x, options: S, value: w, onChange: T, getOptionKey: E, getOptionLabel: D, getOptionCode: O, getOptionDisabled: k, getOptionAriaLabel: A, getOptionClassName: j, renderOption: M, renderValue: N, className: ie, buttonClassName: ae, optionsClassName: oe, optionsContentClassName: se, searchable: P = !1, defaultFilter: ce = !0, query: le, defaultQuery: ue, onQuery: de, renderPopupHeader: fe, emptyState: pe, loadingState: me, errorState: he, placement: ge = "bottom-start", clearable: F = !1 } = e, I = T, L = g(null), [R, _e] = ee(!1), z = P ? "search-single" : "display", B = w === void 0 ? void 0 : E(w), V = B === void 0 ? void 0 : S.find((e) => E(e) === B) ?? w, { query: H, setQuery: U } = d({
|
|
44
|
-
open: R,
|
|
45
|
-
query: le,
|
|
46
|
-
defaultQuery: ue,
|
|
47
|
-
onQuery: de,
|
|
48
|
-
triggerMode: z
|
|
49
|
-
}), W = i({
|
|
50
|
-
options: S,
|
|
51
|
-
query: H,
|
|
52
|
-
enabled: P && ce,
|
|
53
|
-
getSearchText: (e) => re({
|
|
54
|
-
option: e,
|
|
55
|
-
getOptionLabel: D,
|
|
56
|
-
getOptionCode: O
|
|
57
|
-
})
|
|
58
|
-
}), { activeIndex: ve, context: ye, floatingStyles: be, getFloatingProps: xe, setReference: Se, setFloating: Ce, setOptionRef: we, close: G, openList: Te, toggleOpen: Ee, selectOption: De, selectActiveOption: Oe, handleReferenceKeyDown: ke, handleFloatingKeyDown: Ae, getOptionId: je, getActiveOptionId: K } = c({
|
|
59
|
-
options: W,
|
|
60
|
-
selectedIndex: B === void 0 ? -1 : W.findIndex((e) => E(e) === B),
|
|
61
|
-
open: R,
|
|
62
|
-
onOpenChange: _e,
|
|
63
|
-
getOptionDisabled: k,
|
|
64
|
-
onSelect: I,
|
|
65
|
-
disabled: m,
|
|
66
|
-
placement: ge,
|
|
67
|
-
triggerMode: z
|
|
68
|
-
}), q = W.length > 0, J = V === void 0 ? void 0 : D(V), Y = V === void 0 ? void 0 : N ? N(V) : J, Me = u(J), Ne = V === void 0 ? void 0 : u(O?.(V)), X = u(Y) ?? Me ?? Ne ?? (B === void 0 ? "" : String(B)), Z = P && (R || H.length > 0), Pe = Z ? H : V === void 0 ? "" : X, Q = V !== void 0 && Y !== void 0 && u(Y) === void 0 && !Z, $ = f({
|
|
69
|
-
mode: z,
|
|
70
|
-
open: R,
|
|
71
|
-
currentQuery: H,
|
|
72
|
-
hasDisplayValue: V !== void 0,
|
|
73
|
-
inputRef: L,
|
|
74
|
-
setQuery: U,
|
|
75
|
-
openList: Te,
|
|
76
|
-
close: G,
|
|
77
|
-
toggleOpen: Ee
|
|
78
|
-
}), Fe = (e) => {
|
|
79
|
-
L.current = e;
|
|
80
|
-
}, Ie = () => {
|
|
81
|
-
F && I(void 0), U(""), G();
|
|
82
|
-
};
|
|
83
|
-
return /* @__PURE__ */ y(s, {
|
|
84
|
-
label: t,
|
|
85
|
-
description: r,
|
|
86
|
-
disabled: m,
|
|
87
|
-
placeholder: h,
|
|
88
|
-
size: x,
|
|
89
|
-
className: ie,
|
|
90
|
-
children: ({ controlId: e, labelId: t, describedBy: r }) => {
|
|
91
|
-
let i = `${e}-listbox`;
|
|
92
|
-
return /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ y(a, {
|
|
93
|
-
ref: Fe,
|
|
94
|
-
rootRef: Se,
|
|
95
|
-
id: e,
|
|
96
|
-
type: "text",
|
|
97
|
-
disabled: m,
|
|
98
|
-
readOnly: !P,
|
|
99
|
-
autoComplete: "off",
|
|
100
|
-
role: "combobox",
|
|
101
|
-
value: Pe,
|
|
102
|
-
placeholder: V === void 0 || Z ? h : void 0,
|
|
103
|
-
"aria-labelledby": t,
|
|
104
|
-
"aria-describedby": r,
|
|
105
|
-
"aria-haspopup": "listbox",
|
|
106
|
-
"aria-expanded": R,
|
|
107
|
-
"aria-controls": R ? i : void 0,
|
|
108
|
-
"aria-autocomplete": P ? "list" : "none",
|
|
109
|
-
"aria-activedescendant": R ? K(i) : void 0,
|
|
110
|
-
inputClassName: _(Q && C.inputWithOverlay, ae, "textOverflow"),
|
|
111
|
-
overlay: Q ? /* @__PURE__ */ y("div", {
|
|
112
|
-
className: C.valueOverlay,
|
|
113
|
-
children: Y
|
|
114
|
-
}) : void 0,
|
|
115
|
-
endAdornment: /* @__PURE__ */ y(l, {
|
|
116
|
-
open: R,
|
|
117
|
-
disabled: m,
|
|
118
|
-
onToggleMouseDown: $.handleToggleMouseDown,
|
|
119
|
-
onToggleClick: $.handleToggleClick,
|
|
120
|
-
children: F && V !== void 0 && !m ? /* @__PURE__ */ y("button", {
|
|
121
|
-
type: "button",
|
|
122
|
-
className: n.uiClearButton,
|
|
123
|
-
"data-ui": "select-clear-button",
|
|
124
|
-
"data-action": "clear-select",
|
|
125
|
-
onMouseDown: (e) => {
|
|
126
|
-
e.preventDefault(), e.stopPropagation();
|
|
127
|
-
},
|
|
128
|
-
onClick: (e) => {
|
|
129
|
-
e.preventDefault(), e.stopPropagation(), Ie();
|
|
130
|
-
},
|
|
131
|
-
"aria-label": "Очистить выбор",
|
|
132
|
-
children: /* @__PURE__ */ y(ne, {})
|
|
133
|
-
}) : null
|
|
134
|
-
}),
|
|
135
|
-
onChange: (e) => {
|
|
136
|
-
P && $.handleTriggerInputChange(e.target.value);
|
|
137
|
-
},
|
|
138
|
-
onClick: $.handleTriggerClick,
|
|
139
|
-
onFocus: (e) => {
|
|
140
|
-
$.handleTriggerFocus(e.currentTarget);
|
|
141
|
-
},
|
|
142
|
-
onKeyDown: (e) => {
|
|
143
|
-
ke(e), !e.defaultPrevented && $.handleTriggerKeyDown({
|
|
144
|
-
event: e,
|
|
145
|
-
onActivateWhenOpen: Oe,
|
|
146
|
-
enableSpaceActivation: !P
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
}), /* @__PURE__ */ y(o, {
|
|
150
|
-
open: R,
|
|
151
|
-
context: ye,
|
|
152
|
-
floatingStyles: be,
|
|
153
|
-
listId: i,
|
|
154
|
-
labelId: t,
|
|
155
|
-
descriptionId: r,
|
|
156
|
-
activeOptionId: q ? K(i) : void 0,
|
|
157
|
-
setFloating: Ce,
|
|
158
|
-
getFloatingProps: xe,
|
|
159
|
-
onKeyDown: Ae,
|
|
160
|
-
className: _(n.uiPopupOptions, oe),
|
|
161
|
-
header: fe,
|
|
162
|
-
children: /* @__PURE__ */ y("div", {
|
|
163
|
-
className: _(se, "h100 scrollable"),
|
|
164
|
-
children: q ? W.map((e, t) => {
|
|
165
|
-
let r = E(e), a = B !== void 0 && r === B, o = t === ve, s = k?.(e) ?? !1, c = {
|
|
166
|
-
active: o,
|
|
167
|
-
selected: a,
|
|
168
|
-
disabled: s
|
|
169
|
-
};
|
|
170
|
-
return /* @__PURE__ */ y("div", {
|
|
171
|
-
id: je(i, t),
|
|
172
|
-
ref: (e) => we(t, e),
|
|
173
|
-
role: "option",
|
|
174
|
-
"aria-selected": a,
|
|
175
|
-
"aria-disabled": s || void 0,
|
|
176
|
-
"aria-label": A?.(e),
|
|
177
|
-
className: _(n.uiPopupOption, s && n.disabled, o && n.uiPopupOptionActive, a && n.selected, j?.(e, c)),
|
|
178
|
-
onClick: () => De(e),
|
|
179
|
-
children: M ? M(e, c) : /* @__PURE__ */ b(v, { children: [
|
|
180
|
-
y(a ? te : "span", { className: n.uiPopupOptionIcon }),
|
|
181
|
-
/* @__PURE__ */ y("div", {
|
|
182
|
-
className: n.uiOptionText,
|
|
183
|
-
children: D(e)
|
|
184
|
-
}),
|
|
185
|
-
O && /* @__PURE__ */ y("div", {
|
|
186
|
-
className: n.uiOptionCode,
|
|
187
|
-
children: O(e)
|
|
188
|
-
})
|
|
189
|
-
] })
|
|
190
|
-
}, r);
|
|
191
|
-
}) : /* @__PURE__ */ y(p, {
|
|
192
|
-
emptyState: pe,
|
|
193
|
-
loadingState: me,
|
|
194
|
-
errorState: he
|
|
195
|
-
})
|
|
196
|
-
})
|
|
197
|
-
})] });
|
|
198
|
-
}
|
|
199
|
-
});
|
|
200
|
-
}
|
|
201
|
-
//#endregion
|
|
202
|
-
//#region src/select/ODataSelect.tsx
|
|
203
|
-
function T(e, t, n) {
|
|
204
|
-
return e ? t || Object.keys(e).find((e) => e !== n) || n : t || n;
|
|
205
|
-
}
|
|
206
|
-
var E = ({ odata: n, segment: i, model: a, size: o, label: s, description: c, disabled: l, value: u, dependencies: d, onChange: f, clearable: p }) => {
|
|
207
|
-
let m = S({
|
|
208
|
-
odata: n,
|
|
209
|
-
segment: i,
|
|
210
|
-
model: e(a),
|
|
211
|
-
value: u,
|
|
212
|
-
dependencies: d,
|
|
213
|
-
onChange: f
|
|
214
|
-
});
|
|
215
|
-
if (m.isLoading) return /* @__PURE__ */ y(r, {
|
|
216
|
-
size: o,
|
|
217
|
-
label: s,
|
|
218
|
-
description: c
|
|
219
|
-
});
|
|
220
|
-
let h = i.hideCode ?? n.hideCode, g = T(m.selectedItem ?? m.options[0], m.textKey, m.codeKey);
|
|
221
|
-
return /* @__PURE__ */ y(w, {
|
|
222
|
-
size: o,
|
|
223
|
-
label: s,
|
|
224
|
-
description: c,
|
|
225
|
-
options: m.options,
|
|
226
|
-
value: m.selectedItem,
|
|
227
|
-
onChange: m.handleChange,
|
|
228
|
-
getOptionKey: (e) => e[m.codeKey],
|
|
229
|
-
getOptionLabel: (e) => e[g],
|
|
230
|
-
getOptionCode: h ? void 0 : (e) => e[m.codeKey],
|
|
231
|
-
getOptionAriaLabel: (e) => h || e[g] === e[m.codeKey] ? String(e[g]) : `${e[g]} ${e[m.codeKey]}`,
|
|
232
|
-
renderValue: (e) => /* @__PURE__ */ y(t, {
|
|
233
|
-
label: e[g],
|
|
234
|
-
code: h ? void 0 : e[m.codeKey]
|
|
235
|
-
}),
|
|
236
|
-
renderOption: (e) => /* @__PURE__ */ y(t, {
|
|
237
|
-
label: e[g],
|
|
238
|
-
code: h ? void 0 : e[m.codeKey],
|
|
239
|
-
highlight: m.debouncedQuery
|
|
240
|
-
}),
|
|
241
|
-
searchable: !0,
|
|
242
|
-
query: m.query,
|
|
243
|
-
onQuery: m.setQuery,
|
|
244
|
-
defaultFilter: !1,
|
|
245
|
-
disabled: l || m.isLoading,
|
|
246
|
-
placeholder: m.placeholder,
|
|
247
|
-
loadingState: "Загрузка...",
|
|
248
|
-
errorState: m.isError ? "Ошибка загрузки" : void 0,
|
|
249
|
-
emptyState: !m.isLoading && !m.isError ? "Нет данных" : void 0,
|
|
250
|
-
clearable: p
|
|
251
|
-
});
|
|
252
|
-
};
|
|
253
|
-
//#endregion
|
|
254
|
-
//#region src/select/SerializableSelect.tsx
|
|
255
|
-
function D(e, t) {
|
|
256
|
-
return e[t];
|
|
257
|
-
}
|
|
258
|
-
function O(e, t, n) {
|
|
259
|
-
let r = e[t];
|
|
260
|
-
if (typeof r == "string" || typeof r == "number") return r;
|
|
261
|
-
let i = D(e, n);
|
|
262
|
-
return typeof i == "string" || typeof i == "number" ? i : String(i);
|
|
263
|
-
}
|
|
264
|
-
function k({ label: e, description: t, disabled: n, placeholder: r, size: i, options: a, value: o, onChange: s, optionKey: c, optionLabel: l, renderCode: u, className: d, clearable: f }) {
|
|
265
|
-
return /* @__PURE__ */ y(w, {
|
|
266
|
-
label: e,
|
|
267
|
-
description: t,
|
|
268
|
-
disabled: n,
|
|
269
|
-
placeholder: r,
|
|
270
|
-
size: i,
|
|
271
|
-
options: a,
|
|
272
|
-
value: o === void 0 ? void 0 : a.find((e) => D(e, c) === o),
|
|
273
|
-
onChange: (e) => s(e ? D(e, c) : void 0),
|
|
274
|
-
getOptionKey: (e) => D(e, c),
|
|
275
|
-
getOptionLabel: (e) => O(e, l, c),
|
|
276
|
-
getOptionCode: u ? (e) => D(e, c) : void 0,
|
|
277
|
-
className: d,
|
|
278
|
-
clearable: f
|
|
279
|
-
});
|
|
280
|
-
}
|
|
281
|
-
//#endregion
|
|
282
|
-
export { x as i, E as n, w as r, k as t };
|
|
283
|
-
|
|
284
|
-
//# sourceMappingURL=select-CFbZS7fx.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"select-CFbZS7fx.js","names":[],"sources":["../../src/select/lib/getOptionSearchText.ts","../../src/select/model/useODataSelect.ts","../../src/select/Select.module.scss","../../src/select/Select.tsx","../../src/select/ODataSelect.tsx","../../src/select/SerializableSelect.tsx"],"sourcesContent":["import { ReactNode } from \"react\";\n\nimport { InputType } from \"@ryuzaki13/react-foundation-lib/types\";\n\nimport { extractPickerTextContent } from \"../../picker\";\n\nexport function getOptionSearchText<T extends InputType>({\n\toption,\n\tgetOptionLabel,\n\tgetOptionCode\n}: {\n\toption: T;\n\tgetOptionLabel: (option: T) => ReactNode;\n\tgetOptionCode?: (option: T) => ReactNode;\n}) {\n\treturn [extractPickerTextContent(getOptionLabel(option)), extractPickerTextContent(getOptionCode?.(option))]\n\t\t.filter((part): part is string => Boolean(part))\n\t\t.join(\" \")\n\t\t.toLowerCase();\n}\n\n/** Находит selected option по value и возвращает fallback, если значение еще не нормализовано. */\nexport function resolveSelectedOption<TOption extends { value: string }>(\n\toptions: readonly TOption[],\n\tvalue: string,\n\tfallback: TOption\n): TOption {\n\treturn options.find((option) => option.value === value) ?? fallback;\n}\n","import { useMemo } from \"react\";\n\nimport { ODataCollectionModel, ODataSingleSelectProps } from \"@ryuzaki13/react-foundation-api/odata\";\nimport { CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata\";\n\nimport { useODataSelectBase } from \"./useODataSelectBase\";\n\ninterface UseODataSelectOptions extends Omit<ODataSingleSelectProps, \"model\"> {\n\tmodel: Required<ODataCollectionModel>;\n\tonChange: (value: string | undefined) => void;\n}\n\nexport function useODataSelect({ odata, segment, model, value, dependencies, onChange }: UseODataSelectOptions) {\n\tconst odataModel = useODataSelectBase({\n\t\todata,\n\t\tsegment,\n\t\tmodel,\n\t\tvalue: value ? [value] : [],\n\t\tdependencies\n\t});\n\n\tconst selectedItem = odataModel.selectedItems[0];\n\tconst options = useMemo(() => {\n\t\tif (!selectedItem) {\n\t\t\treturn odataModel.filteredItems;\n\t\t}\n\n\t\treturn [selectedItem, ...odataModel.filteredItems];\n\t}, [odataModel.filteredItems, selectedItem]);\n\n\tconst handleChange = (item: CollectionItem | undefined) => {\n\t\tonChange(item?.[odataModel.selectionKey]);\n\t};\n\n\treturn {\n\t\t...odataModel,\n\t\tselectedItem,\n\t\toptions,\n\t\thandleChange\n\t};\n}\n",".inputWithOverlay {\n\tcolor: transparent;\n\tcaret-color: transparent;\n}\n\n.valueOverlay {\n\tposition: absolute;\n\tinset: 0 calc(var(--control-height) + var(--space-xs)) 0 var(--space-md);\n\tdisplay: flex;\n\talign-items: center;\n\tpointer-events: none;\n\toverflow: hidden;\n}\n","import { ReactNode, useRef, useState } from \"react\";\n\nimport { Placement } from \"@floating-ui/react\";\nimport { InputType } from \"@ryuzaki13/react-foundation-lib/types\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { CheckIcon, XIcon } from \"lucide-react\";\n\nimport {\n\textractPickerTextContent,\n\tPickerField,\n\tPickerPopup,\n\tPickerStatus,\n\tPickerTriggerActions,\n\tPickerTriggerInput,\n\tusePickerDefaultFilter,\n\tusePickerFloatingListbox,\n\tusePickerQuery,\n\tusePickerTriggerController\n} from \"../picker\";\nimport { ChangeHandler, UiBaseProps } from \"../types\";\nimport uiStyles from \"../ui.module.scss\";\n\nimport { getOptionSearchText } from \"./lib\";\nimport styles from \"./Select.module.scss\";\n\nexport type SelectOptionKey = string | number;\n\nexport type SelectOptionState = {\n\tactive: boolean;\n\tselected: boolean;\n\tdisabled: boolean;\n};\n\ntype SelectSharedProps<TOption extends InputType> = Omit<UiBaseProps<TOption, TOption | undefined>, \"onChange\"> & {\n\toptions: readonly TOption[];\n\tgetOptionKey: (option: TOption) => SelectOptionKey;\n\tgetOptionLabel: (option: TOption) => ReactNode;\n\tgetOptionCode?: (option: TOption) => ReactNode;\n\tgetOptionDisabled?: (option: TOption) => boolean;\n\tgetOptionAriaLabel?: (option: TOption) => string;\n\tgetOptionClassName?: (option: TOption, state: SelectOptionState) => string | undefined;\n\trenderOption?: (option: TOption, state: SelectOptionState) => ReactNode;\n\trenderValue?: (option: TOption) => ReactNode;\n\tclassName?: string;\n\tbuttonClassName?: string;\n\toptionsClassName?: string;\n\toptionsContentClassName?: string;\n\tsearchable?: boolean;\n\tquery?: string;\n\tdefaultQuery?: string;\n\tonQuery?: (value: string) => void;\n\tdefaultFilter?: boolean;\n\trenderPopupHeader?: ReactNode;\n\temptyState?: ReactNode;\n\tloadingState?: ReactNode;\n\terrorState?: ReactNode;\n\tplacement?: Placement;\n};\n\ntype SelectChangeValue<TOption extends InputType, TClearable extends boolean | undefined> = true extends TClearable\n\t? TOption | undefined\n\t: TOption;\n\nexport type SelectProps<TOption extends InputType, TClearable extends boolean | undefined = false> = SelectSharedProps<TOption> & {\n\tclearable?: TClearable;\n\tonChange: ChangeHandler<SelectChangeValue<TOption, TClearable>>;\n};\n\n/**\n * Выпадающий список выбора значения из набора опций. Подходит для форм, фильтров и простых справочников.\n */\nexport function Select<TOption extends InputType, TClearable extends boolean | undefined = false>(props: SelectProps<TOption, TClearable>) {\n\tconst {\n\t\tlabel,\n\t\tdescription,\n\t\tdisabled,\n\t\tplaceholder,\n\t\tsize,\n\t\toptions,\n\t\tvalue,\n\t\tonChange,\n\t\tgetOptionKey,\n\t\tgetOptionLabel,\n\t\tgetOptionCode,\n\t\tgetOptionDisabled,\n\t\tgetOptionAriaLabel,\n\t\tgetOptionClassName,\n\t\trenderOption,\n\t\trenderValue,\n\t\tclassName,\n\t\tbuttonClassName,\n\t\toptionsClassName,\n\t\toptionsContentClassName,\n\t\tsearchable = false,\n\t\tdefaultFilter = true,\n\t\tquery,\n\t\tdefaultQuery,\n\t\tonQuery,\n\t\trenderPopupHeader,\n\t\temptyState,\n\t\tloadingState,\n\t\terrorState,\n\t\tplacement = \"bottom-start\",\n\t\tclearable = false\n\t} = props;\n\tconst emitChange = onChange as ChangeHandler<TOption | undefined>;\n\n\tconst inputRef = useRef<HTMLInputElement | null>(null);\n\tconst [open, setOpen] = useState(false);\n\tconst triggerMode = searchable ? \"search-single\" : \"display\";\n\tconst selectedKey = value === undefined ? undefined : getOptionKey(value);\n\tconst selectedOption =\n\t\tselectedKey === undefined ? undefined : (options.find((option) => getOptionKey(option) === selectedKey) ?? value);\n\tconst { query: currentQuery, setQuery } = usePickerQuery({\n\t\topen,\n\t\tquery,\n\t\tdefaultQuery,\n\t\tonQuery,\n\t\ttriggerMode\n\t});\n\tconst visibleOptions = usePickerDefaultFilter({\n\t\toptions,\n\t\tquery: currentQuery,\n\t\tenabled: searchable && defaultFilter,\n\t\tgetSearchText: (option) =>\n\t\t\tgetOptionSearchText({\n\t\t\t\toption,\n\t\t\t\tgetOptionLabel,\n\t\t\t\tgetOptionCode\n\t\t\t})\n\t});\n\tconst selectedIndex = selectedKey === undefined ? -1 : visibleOptions.findIndex((option) => getOptionKey(option) === selectedKey);\n\tconst {\n\t\tactiveIndex,\n\t\tcontext,\n\t\tfloatingStyles,\n\t\tgetFloatingProps,\n\t\tsetReference,\n\t\tsetFloating,\n\t\tsetOptionRef,\n\t\tclose,\n\t\topenList,\n\t\ttoggleOpen,\n\t\tselectOption,\n\t\tselectActiveOption,\n\t\thandleReferenceKeyDown,\n\t\thandleFloatingKeyDown,\n\t\tgetOptionId,\n\t\tgetActiveOptionId\n\t} = usePickerFloatingListbox({\n\t\toptions: visibleOptions,\n\t\tselectedIndex,\n\t\topen,\n\t\tonOpenChange: setOpen,\n\t\tgetOptionDisabled,\n\t\tonSelect: emitChange,\n\t\tdisabled,\n\t\tplacement,\n\t\ttriggerMode\n\t});\n\n\tconst hasOptions = visibleOptions.length > 0;\n\tconst labelContent = selectedOption !== undefined ? getOptionLabel(selectedOption) : undefined;\n\tconst displayContent = selectedOption !== undefined ? (renderValue ? renderValue(selectedOption) : labelContent) : undefined;\n\tconst labelText = extractPickerTextContent(labelContent);\n\tconst codeText = selectedOption !== undefined ? extractPickerTextContent(getOptionCode?.(selectedOption)) : undefined;\n\tconst displayText =\n\t\textractPickerTextContent(displayContent) ?? labelText ?? codeText ?? (selectedKey !== undefined ? String(selectedKey) : \"\");\n\tconst showSearchValue = searchable && (open || currentQuery.length > 0);\n\tconst inputValue = showSearchValue ? currentQuery : selectedOption !== undefined ? displayText : \"\";\n\tconst showDisplayOverlay =\n\t\tselectedOption !== undefined &&\n\t\tdisplayContent !== undefined &&\n\t\textractPickerTextContent(displayContent) === undefined &&\n\t\t!showSearchValue;\n\tconst triggerController = usePickerTriggerController({\n\t\tmode: triggerMode,\n\t\topen,\n\t\tcurrentQuery,\n\t\thasDisplayValue: selectedOption !== undefined,\n\t\tinputRef,\n\t\tsetQuery,\n\t\topenList,\n\t\tclose,\n\t\ttoggleOpen\n\t});\n\tconst setInputNode = (node: HTMLInputElement | null) => {\n\t\tinputRef.current = node;\n\t};\n\tconst handleClear = () => {\n\t\tif (clearable) {\n\t\t\temitChange(undefined);\n\t\t}\n\n\t\tsetQuery(\"\");\n\t\tclose();\n\t};\n\n\treturn (\n\t\t<PickerField\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\tdisabled={disabled}\n\t\t\tplaceholder={placeholder}\n\t\t\tsize={size}\n\t\t\tclassName={className}>\n\t\t\t{({ controlId, labelId, describedBy }) => {\n\t\t\t\tconst listId = `${controlId}-listbox`;\n\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<PickerTriggerInput\n\t\t\t\t\t\t\tref={setInputNode}\n\t\t\t\t\t\t\trootRef={setReference}\n\t\t\t\t\t\t\tid={controlId}\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\treadOnly={!searchable}\n\t\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\t\tvalue={inputValue}\n\t\t\t\t\t\t\tplaceholder={selectedOption === undefined || showSearchValue ? placeholder : undefined}\n\t\t\t\t\t\t\taria-labelledby={labelId}\n\t\t\t\t\t\t\taria-describedby={describedBy}\n\t\t\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t\t\t\taria-expanded={open}\n\t\t\t\t\t\t\taria-controls={open ? listId : undefined}\n\t\t\t\t\t\t\taria-autocomplete={searchable ? \"list\" : \"none\"}\n\t\t\t\t\t\t\taria-activedescendant={open ? getActiveOptionId(listId) : undefined}\n\t\t\t\t\t\t\tinputClassName={cn(showDisplayOverlay && styles.inputWithOverlay, buttonClassName, \"textOverflow\")}\n\t\t\t\t\t\t\toverlay={showDisplayOverlay ? <div className={styles.valueOverlay}>{displayContent}</div> : undefined}\n\t\t\t\t\t\t\tendAdornment={\n\t\t\t\t\t\t\t\t<PickerTriggerActions\n\t\t\t\t\t\t\t\t\topen={open}\n\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\tonToggleMouseDown={triggerController.handleToggleMouseDown}\n\t\t\t\t\t\t\t\t\tonToggleClick={triggerController.handleToggleClick}>\n\t\t\t\t\t\t\t\t\t{clearable && selectedOption !== undefined && !disabled ? (\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tclassName={uiStyles.uiClearButton}\n\t\t\t\t\t\t\t\t\t\t\tdata-ui=\"select-clear-button\"\n\t\t\t\t\t\t\t\t\t\t\tdata-action=\"clear-select\"\n\t\t\t\t\t\t\t\t\t\t\tonMouseDown={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\thandleClear();\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Очистить выбор\">\n\t\t\t\t\t\t\t\t\t\t\t<XIcon />\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t</PickerTriggerActions>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonChange={(event) => {\n\t\t\t\t\t\t\t\tif (!searchable) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ttriggerController.handleTriggerInputChange(event.target.value);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonClick={triggerController.handleTriggerClick}\n\t\t\t\t\t\t\tonFocus={(event) => {\n\t\t\t\t\t\t\t\ttriggerController.handleTriggerFocus(event.currentTarget);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonKeyDown={(event) => {\n\t\t\t\t\t\t\t\thandleReferenceKeyDown(event);\n\n\t\t\t\t\t\t\t\tif (event.defaultPrevented) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ttriggerController.handleTriggerKeyDown({\n\t\t\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t\t\tonActivateWhenOpen: selectActiveOption,\n\t\t\t\t\t\t\t\t\tenableSpaceActivation: !searchable\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<PickerPopup\n\t\t\t\t\t\t\topen={open}\n\t\t\t\t\t\t\tcontext={context}\n\t\t\t\t\t\t\tfloatingStyles={floatingStyles}\n\t\t\t\t\t\t\tlistId={listId}\n\t\t\t\t\t\t\tlabelId={labelId}\n\t\t\t\t\t\t\tdescriptionId={describedBy}\n\t\t\t\t\t\t\tactiveOptionId={hasOptions ? getActiveOptionId(listId) : undefined}\n\t\t\t\t\t\t\tsetFloating={setFloating}\n\t\t\t\t\t\t\tgetFloatingProps={getFloatingProps}\n\t\t\t\t\t\t\tonKeyDown={handleFloatingKeyDown}\n\t\t\t\t\t\t\tclassName={cn(uiStyles.uiPopupOptions, optionsClassName)}\n\t\t\t\t\t\t\theader={renderPopupHeader}>\n\t\t\t\t\t\t\t<div className={cn(optionsContentClassName, \"h100 scrollable\")}>\n\t\t\t\t\t\t\t\t{hasOptions ? (\n\t\t\t\t\t\t\t\t\tvisibleOptions.map((option, index) => {\n\t\t\t\t\t\t\t\t\t\tconst optionKey = getOptionKey(option);\n\t\t\t\t\t\t\t\t\t\tconst selected = selectedKey !== undefined && optionKey === selectedKey;\n\t\t\t\t\t\t\t\t\t\tconst active = index === activeIndex;\n\t\t\t\t\t\t\t\t\t\tconst optionDisabled = getOptionDisabled?.(option) ?? false;\n\t\t\t\t\t\t\t\t\t\tconst optionState = { active, selected, disabled: optionDisabled };\n\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tkey={optionKey}\n\t\t\t\t\t\t\t\t\t\t\t\tid={getOptionId(listId, index)}\n\t\t\t\t\t\t\t\t\t\t\t\tref={(node) => setOptionRef(index, node)}\n\t\t\t\t\t\t\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\t\t\t\t\t\t\taria-selected={selected}\n\t\t\t\t\t\t\t\t\t\t\t\taria-disabled={optionDisabled || undefined}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label={getOptionAriaLabel?.(option)}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\tuiStyles.uiPopupOption,\n\t\t\t\t\t\t\t\t\t\t\t\t\toptionDisabled && uiStyles.disabled,\n\t\t\t\t\t\t\t\t\t\t\t\t\tactive && uiStyles.uiPopupOptionActive,\n\t\t\t\t\t\t\t\t\t\t\t\t\tselected && uiStyles.selected,\n\t\t\t\t\t\t\t\t\t\t\t\t\tgetOptionClassName?.(option, optionState)\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => selectOption(option)}>\n\t\t\t\t\t\t\t\t\t\t\t\t{renderOption ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\trenderOption(option, optionState)\n\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{selected ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<CheckIcon className={uiStyles.uiPopupOptionIcon} />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className={uiStyles.uiPopupOptionIcon} />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className={uiStyles.uiOptionText}>{getOptionLabel(option)}</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{getOptionCode && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className={uiStyles.uiOptionCode}>{getOptionCode(option)}</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<PickerStatus emptyState={emptyState} loadingState={loadingState} errorState={errorState} />\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</PickerPopup>\n\t\t\t\t\t</>\n\t\t\t\t);\n\t\t\t}}\n\t\t</PickerField>\n\t);\n}\n","import React from \"react\";\n\nimport { ODataSingleSelectProps, useODataCollectionModel } from \"@ryuzaki13/react-foundation-api/odata\";\nimport { CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata\";\n\nimport { InputUILoading } from \"../input\";\nimport { UiBaseProps } from \"../types\";\n\nimport { useODataSelect } from \"./model/useODataSelect\";\nimport { Select } from \"./Select\";\nimport { SelectOptionContent } from \"./SelectOptionContent\";\n\ntype ODataSelectProps = Omit<ODataSingleSelectProps, \"value\"> & UiBaseProps<string | undefined> & { clearable?: boolean };\n\nfunction getODataOptionTextKey(item: CollectionItem | undefined, textKey: string, codeKey: string) {\n\tif (!item) {\n\t\treturn textKey || codeKey;\n\t}\n\n\treturn textKey || Object.keys(item).find((key) => key !== codeKey) || codeKey;\n}\n\nexport const ODataSelect: React.FC<ODataSelectProps> = ({\n\todata,\n\tsegment,\n\tmodel: initialModel,\n\tsize,\n\tlabel,\n\tdescription,\n\tdisabled,\n\tvalue,\n\tdependencies,\n\tonChange,\n\tclearable\n}) => {\n\tconst model = useODataCollectionModel(initialModel);\n\tconst odataModel = useODataSelect({\n\t\todata,\n\t\tsegment,\n\t\tmodel,\n\t\tvalue,\n\t\tdependencies,\n\t\tonChange\n\t});\n\n\tif (odataModel.isLoading) {\n\t\treturn <InputUILoading size={size} label={label} description={description} />;\n\t}\n\n\tconst hideCode = segment.hideCode ?? odata.hideCode;\n\tconst resolvedTextKey = getODataOptionTextKey(odataModel.selectedItem ?? odataModel.options[0], odataModel.textKey, odataModel.codeKey);\n\n\treturn (\n\t\t<Select\n\t\t\tsize={size}\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\toptions={odataModel.options}\n\t\t\tvalue={odataModel.selectedItem}\n\t\t\tonChange={odataModel.handleChange}\n\t\t\tgetOptionKey={(item) => item[odataModel.codeKey]}\n\t\t\tgetOptionLabel={(item) => item[resolvedTextKey]}\n\t\t\tgetOptionCode={hideCode ? undefined : (item) => item[odataModel.codeKey]}\n\t\t\tgetOptionAriaLabel={(item) =>\n\t\t\t\thideCode || item[resolvedTextKey] === item[odataModel.codeKey]\n\t\t\t\t\t? String(item[resolvedTextKey])\n\t\t\t\t\t: `${item[resolvedTextKey]} ${item[odataModel.codeKey]}`\n\t\t\t}\n\t\t\trenderValue={(item) => (\n\t\t\t\t<SelectOptionContent label={item[resolvedTextKey]} code={hideCode ? undefined : item[odataModel.codeKey]} />\n\t\t\t)}\n\t\t\trenderOption={(item) => (\n\t\t\t\t<SelectOptionContent\n\t\t\t\t\tlabel={item[resolvedTextKey]}\n\t\t\t\t\tcode={hideCode ? undefined : item[odataModel.codeKey]}\n\t\t\t\t\thighlight={odataModel.debouncedQuery}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\tsearchable\n\t\t\tquery={odataModel.query}\n\t\t\tonQuery={odataModel.setQuery}\n\t\t\tdefaultFilter={false}\n\t\t\tdisabled={disabled || odataModel.isLoading}\n\t\t\tplaceholder={odataModel.placeholder}\n\t\t\tloadingState=\"Загрузка...\"\n\t\t\terrorState={odataModel.isError ? \"Ошибка загрузки\" : undefined}\n\t\t\temptyState={!odataModel.isLoading && !odataModel.isError ? \"Нет данных\" : undefined}\n\t\t\tclearable={clearable}\n\t\t/>\n\t);\n};\n","import { Select } from \"./Select\";\n\nimport type { UiBaseProps } from \"../types\";\nimport type { SelectOptionKey } from \"./Select\";\n\ntype SerializableOptionRecord = Record<string, unknown>;\n\ntype SerializableOptionKeyField<TOption extends SerializableOptionRecord> = {\n\t[K in keyof TOption]: Extract<TOption[K], SelectOptionKey> extends never ? never : K;\n}[keyof TOption];\n\ntype SerializableOptionValue<TOption extends SerializableOptionRecord, TOptionKey extends SerializableOptionKeyField<TOption>> = Extract<\n\tTOption[TOptionKey],\n\tSelectOptionKey\n>;\n\nexport interface SerializableSelectProps<\n\tTOption extends SerializableOptionRecord,\n\tTOptionKey extends SerializableOptionKeyField<TOption>,\n\tTOptionLabel extends keyof TOption\n> extends Omit<UiBaseProps<SerializableOptionValue<TOption, TOptionKey> | undefined>, \"onChange\"> {\n\toptions: readonly TOption[];\n\tonChange: (value: SerializableOptionValue<TOption, TOptionKey> | undefined) => void;\n\toptionKey: TOptionKey;\n\toptionLabel: TOptionLabel;\n\trenderCode?: true;\n\tclassName?: string;\n\tclearable?: boolean;\n}\n\nfunction getSerializableOptionKey<TOption extends SerializableOptionRecord, TOptionKey extends SerializableOptionKeyField<TOption>>(\n\toption: TOption,\n\toptionKey: TOptionKey\n): Extract<TOption[TOptionKey], SelectOptionKey> {\n\treturn option[optionKey] as Extract<TOption[TOptionKey], SelectOptionKey>;\n}\n\nfunction getSerializableOptionLabel<\n\tTOption extends SerializableOptionRecord,\n\tTOptionKey extends SerializableOptionKeyField<TOption>,\n\tTOptionLabel extends keyof TOption\n>(option: TOption, optionLabel: TOptionLabel, optionKey: TOptionKey): string | number {\n\tconst label = option[optionLabel];\n\n\tif (typeof label === \"string\" || typeof label === \"number\") {\n\t\treturn label;\n\t}\n\n\tconst key = getSerializableOptionKey(option, optionKey);\n\treturn typeof key === \"string\" || typeof key === \"number\" ? key : String(key);\n}\n\nexport function SerializableSelect<\n\tTOption extends SerializableOptionRecord,\n\tTOptionKey extends SerializableOptionKeyField<TOption>,\n\tTOptionLabel extends keyof TOption\n>({\n\tlabel,\n\tdescription,\n\tdisabled,\n\tplaceholder,\n\tsize,\n\toptions,\n\tvalue,\n\tonChange,\n\toptionKey,\n\toptionLabel,\n\trenderCode,\n\tclassName,\n\tclearable\n}: SerializableSelectProps<TOption, TOptionKey, TOptionLabel>) {\n\tconst selectedOption =\n\t\tvalue === undefined ? undefined : options.find((option) => getSerializableOptionKey(option, optionKey) === value);\n\n\treturn (\n\t\t<Select\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\tdisabled={disabled}\n\t\t\tplaceholder={placeholder}\n\t\t\tsize={size}\n\t\t\toptions={options}\n\t\t\tvalue={selectedOption}\n\t\t\tonChange={(option: TOption | undefined) => onChange(option ? getSerializableOptionKey(option, optionKey) : undefined)}\n\t\t\tgetOptionKey={(option: TOption) => getSerializableOptionKey(option, optionKey)}\n\t\t\tgetOptionLabel={(option: TOption) => getSerializableOptionLabel(option, optionLabel, optionKey)}\n\t\t\tgetOptionCode={renderCode ? (option: TOption) => getSerializableOptionKey(option, optionKey) : undefined}\n\t\t\tclassName={className}\n\t\t\tclearable={clearable}\n\t\t/>\n\t);\n}\n"],"mappings":"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"}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./preload-helper-B45gAKPr.js";import{E as t,a as n,d as r,f as i,l as a,m as o,n as s,p as c,r as l,u}from"./blocks-C7Q8GMMo.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-DeqTfg7V.js";import{ControlledObjects as p,CustomOptionLayout as m,Disabled as h,Placeholder as g,PrimitiveOptions as _,n as v,t as y}from"./Select.stories-CvSTPVuR.js";function b(e){let o={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...t(),...e.components};return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(a,{of:y,parameters:{docs:{toc:!0}}}),`
|
|
2
|
-
`,(0,S.jsx)(c,{children:`Select`}),`
|
|
3
|
-
`,(0,S.jsx)(i,{children:`Getter-based select для примитивов и сложных объектных option`}),`
|
|
4
|
-
`,(0,S.jsx)(o.p,{children:`Select уже имеет живые stories, а эта страница собирает их в структурированную документацию с краткими рекомендациями, примерами подключения и API.
|
|
5
|
-
Ниже можно быстро проверить базовый сценарий, а затем перейти к отдельным режимам использования и состояниям компонента. Отдельно разобраны заблокированные состояния.`}),`
|
|
6
|
-
`,(0,S.jsx)(o.h2,{id:`основной-сценарий`,children:`Основной сценарий`}),`
|
|
7
|
-
`,(0,S.jsx)(u,{}),`
|
|
8
|
-
`,(0,S.jsx)(n,{of:p}),`
|
|
9
|
-
`,(0,S.jsx)(o.pre,{children:(0,S.jsx)(o.code,{className:`language-tsx`,children:`import { useState } from "react";
|
|
10
|
-
|
|
11
|
-
import { Select } from "@/shared/ui";
|
|
12
|
-
|
|
13
|
-
const options = [
|
|
14
|
-
{ id: 1, name: "Отдел продаж", code: "SLS" },
|
|
15
|
-
{ id: 2, name: "Закупки", code: "PRC" }
|
|
16
|
-
];
|
|
17
|
-
|
|
18
|
-
export function Example() {
|
|
19
|
-
const [value, setValue] = useState(undefined);
|
|
20
|
-
|
|
21
|
-
return (
|
|
22
|
-
<Select
|
|
23
|
-
label="Подразделение"
|
|
24
|
-
value={value}
|
|
25
|
-
onChange={setValue}
|
|
26
|
-
options={options}
|
|
27
|
-
getOptionKey={(option) => option.id}
|
|
28
|
-
getOptionLabel={(option) => option.name}
|
|
29
|
-
getOptionCode={(option) => option.code}
|
|
30
|
-
/>
|
|
31
|
-
);
|
|
32
|
-
}
|
|
33
|
-
`})}),`
|
|
34
|
-
`,(0,S.jsx)(o.h2,{id:`практические-рекомендации`,children:`Практические рекомендации`}),`
|
|
35
|
-
`,(0,S.jsxs)(o.ul,{children:[`
|
|
36
|
-
`,(0,S.jsx)(o.li,{children:`Заблокированное состояние лучше проверять отдельно, чтобы убедиться, что визуально и поведенчески оно остается понятным.`}),`
|
|
37
|
-
`]}),`
|
|
38
|
-
`,(0,S.jsx)(o.h2,{id:`сценарии-использования`,children:`Сценарии использования`}),`
|
|
39
|
-
`,(0,S.jsx)(o.h3,{id:`работа-с-объектами-как-со-значениями-option`,children:`Работа с объектами как со значениями option`}),`
|
|
40
|
-
`,(0,S.jsx)(o.p,{children:`Работа с объектами как со значениями option.`}),`
|
|
41
|
-
`,(0,S.jsx)(l,{of:p}),`
|
|
42
|
-
`,(0,S.jsx)(o.h3,{id:`работа-с-примитивными-option`,children:`Работа с примитивными option`}),`
|
|
43
|
-
`,(0,S.jsx)(o.p,{children:`Работа с примитивными option.`}),`
|
|
44
|
-
`,(0,S.jsx)(l,{of:_}),`
|
|
45
|
-
`,(0,S.jsx)(o.h3,{id:`поведение-без-выбранного-значения`,children:`Поведение без выбранного значения`}),`
|
|
46
|
-
`,(0,S.jsx)(o.p,{children:`Поведение без выбранного значения.`}),`
|
|
47
|
-
`,(0,S.jsx)(l,{of:g}),`
|
|
48
|
-
`,(0,S.jsx)(o.h3,{id:`кастомный-рендер-option-и-выбранного-значения`,children:`Кастомный рендер option и выбранного значения`}),`
|
|
49
|
-
`,(0,S.jsx)(o.p,{children:`Кастомный рендер option и выбранного значения.`}),`
|
|
50
|
-
`,(0,S.jsx)(l,{of:m}),`
|
|
51
|
-
`,(0,S.jsx)(o.h3,{id:`проверка-поведения-в-заблокированном-состоянии`,children:`Проверка поведения в заблокированном состоянии`}),`
|
|
52
|
-
`,(0,S.jsx)(o.p,{children:`Проверка поведения в заблокированном состоянии.`}),`
|
|
53
|
-
`,(0,S.jsx)(l,{of:h}),`
|
|
54
|
-
`,(0,S.jsx)(o.h2,{id:`api`,children:`API`}),`
|
|
55
|
-
`,(0,S.jsx)(s,{of:y}),`
|
|
56
|
-
`,(0,S.jsx)(o.h2,{id:`все-сторисы`,children:`Все сторисы`}),`
|
|
57
|
-
`,(0,S.jsx)(r,{includePrimary:!1})]})}function x(e={}){let{wrapper:n}={...t(),...e.components};return n?(0,S.jsx)(n,{...e,children:(0,S.jsx)(b,{...e})}):b(e)}var S;e((()=>{S=d(),f(),o(),v()}))();export{x as default};
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import{c as e,i as t}from"./preload-helper-B45gAKPr.js";import{C as n}from"./iframe-BdBCyVHz.js";import{t as r}from"./jsx-runtime-BBQGix-2.js";import{a as i,i as a}from"./utils-CYGhZ88S.js";import{n as o,t as s,ut as c}from"./lucide-react-CkksFLP-.js";import{n as l,t as u}from"./ui.module-DS2qtZts.js";import{T as ee,b as te,d as ne,f as d,g as re,l as ie,m as ae,r as oe,s as se,t as f,v as p}from"./picker-CO2rQx7C.js";function m({option:e,getOptionLabel:t,getOptionCode:n}){return[d(t(e)),d(n?.(e))].filter(e=>!!e).join(` `).toLowerCase()}var h=t((()=>{f()})),g=t((()=>{h()})),_,v,y,b=t((()=>{_=`aEEqH1`,v=`_4HQKa7`,y={inputWithOverlay:_,valueOverlay:v}}));function x(e){let{label:t,description:n,disabled:r,placeholder:a,size:s,options:u,value:f,onChange:h,getOptionKey:g,getOptionLabel:_,getOptionCode:v,getOptionDisabled:b,getOptionAriaLabel:x,getOptionClassName:w,renderOption:T,renderValue:E,className:D,buttonClassName:O,optionsClassName:k,optionsContentClassName:ce,searchable:A=!1,defaultFilter:le=!0,query:ue,defaultQuery:de,onQuery:fe,renderPopupHeader:pe,emptyState:j,loadingState:M,errorState:N,placement:P=`bottom-start`,clearable:F=!1}=e,I=h,L=(0,S.useRef)(null),[R,z]=(0,S.useState)(!1),B=A?`search-single`:`display`,V=f===void 0?void 0:g(f),H=V===void 0?void 0:u.find(e=>g(e)===V)??f,{query:U,setQuery:W}=se({open:R,query:ue,defaultQuery:de,onQuery:fe,triggerMode:B}),G=ne({options:u,query:U,enabled:A&&le,getSearchText:e=>m({option:e,getOptionLabel:_,getOptionCode:v})}),{activeIndex:me,context:he,floatingStyles:ge,getFloatingProps:_e,setReference:ve,setFloating:ye,setOptionRef:be,close:K,openList:xe,toggleOpen:Se,selectOption:Ce,selectActiveOption:we,handleReferenceKeyDown:Te,handleFloatingKeyDown:Ee,getOptionId:De,getActiveOptionId:q}=ie({options:G,selectedIndex:V===void 0?-1:G.findIndex(e=>g(e)===V),open:R,onOpenChange:z,getOptionDisabled:b,onSelect:I,disabled:r,placement:P,triggerMode:B}),J=G.length>0,Y=H===void 0?void 0:_(H),X=H===void 0?void 0:E?E(H):Y,Oe=d(Y),ke=H===void 0?void 0:d(v?.(H)),Ae=d(X)??Oe??ke??(V===void 0?``:String(V)),Z=A&&(R||U.length>0),je=Z?U:H===void 0?``:Ae,Q=H!==void 0&&X!==void 0&&d(X)===void 0&&!Z,$=oe({mode:B,open:R,currentQuery:U,hasDisplayValue:H!==void 0,inputRef:L,setQuery:W,openList:xe,close:K,toggleOpen:Se}),Me=e=>{L.current=e},Ne=()=>{F&&I(void 0),W(``),K()};return(0,C.jsx)(ee,{label:t,description:n,disabled:r,placeholder:a,size:s,className:D,children:({controlId:e,labelId:t,describedBy:n})=>{let s=`${e}-listbox`;return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(ae,{ref:Me,rootRef:ve,id:e,type:`text`,disabled:r,readOnly:!A,autoComplete:`off`,role:`combobox`,value:je,placeholder:H===void 0||Z?a:void 0,"aria-labelledby":t,"aria-describedby":n,"aria-haspopup":`listbox`,"aria-expanded":R,"aria-controls":R?s:void 0,"aria-autocomplete":A?`list`:`none`,"aria-activedescendant":R?q(s):void 0,inputClassName:i(Q&&y.inputWithOverlay,O,`textOverflow`),overlay:Q?(0,C.jsx)(`div`,{className:y.valueOverlay,children:X}):void 0,endAdornment:(0,C.jsx)(re,{open:R,disabled:r,onToggleMouseDown:$.handleToggleMouseDown,onToggleClick:$.handleToggleClick,children:F&&H!==void 0&&!r?(0,C.jsx)(`button`,{type:`button`,className:l.uiClearButton,"data-ui":`select-clear-button`,"data-action":`clear-select`,onMouseDown:e=>{e.preventDefault(),e.stopPropagation()},onClick:e=>{e.preventDefault(),e.stopPropagation(),Ne()},"aria-label":`Очистить выбор`,children:(0,C.jsx)(o,{})}):null}),onChange:e=>{A&&$.handleTriggerInputChange(e.target.value)},onClick:$.handleTriggerClick,onFocus:e=>{$.handleTriggerFocus(e.currentTarget)},onKeyDown:e=>{Te(e),!e.defaultPrevented&&$.handleTriggerKeyDown({event:e,onActivateWhenOpen:we,enableSpaceActivation:!A})}}),(0,C.jsx)(te,{open:R,context:he,floatingStyles:ge,listId:s,labelId:t,descriptionId:n,activeOptionId:J?q(s):void 0,setFloating:ye,getFloatingProps:_e,onKeyDown:Ee,className:i(l.uiPopupOptions,k),header:pe,children:(0,C.jsx)(`div`,{className:i(ce,`h100 scrollable`),children:J?G.map((e,t)=>{let n=g(e),r=V!==void 0&&n===V,a=t===me,o=b?.(e)??!1,u={active:a,selected:r,disabled:o};return(0,C.jsx)(`div`,{id:De(s,t),ref:e=>be(t,e),role:`option`,"aria-selected":r,"aria-disabled":o||void 0,"aria-label":x?.(e),className:i(l.uiPopupOption,o&&l.disabled,a&&l.uiPopupOptionActive,r&&l.selected,w?.(e,u)),onClick:()=>Ce(e),children:T?T(e,u):(0,C.jsxs)(C.Fragment,{children:[r?(0,C.jsx)(c,{className:l.uiPopupOptionIcon}):(0,C.jsx)(`span`,{className:l.uiPopupOptionIcon}),(0,C.jsx)(`div`,{className:l.uiOptionText,children:_(e)}),v&&(0,C.jsx)(`div`,{className:l.uiOptionCode,children:v(e)})]})},n)}):(0,C.jsx)(p,{emptyState:j,loadingState:M,errorState:N})})})]})}})}var S,C,w=t((()=>{S=e(n(),1),a(),s(),f(),u(),g(),b(),C=r(),x.__docgenInfo={description:`Выпадающий список выбора значения из набора опций. Подходит для форм, фильтров и простых справочников.`,methods:[],displayName:`Select`,props:{options:{required:!0,tsType:{name:`unknown`},description:``},getOptionKey:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(option: TOption) => SelectOptionKey`,signature:{arguments:[{type:{name:`TOption`},name:`option`}],return:{name:`union`,raw:`string | number`,elements:[{name:`string`},{name:`number`}]}}},description:``},getOptionLabel:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(option: TOption) => ReactNode`,signature:{arguments:[{type:{name:`TOption`},name:`option`}],return:{name:`ReactNode`}}},description:``},getOptionCode:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(option: TOption) => ReactNode`,signature:{arguments:[{type:{name:`TOption`},name:`option`}],return:{name:`ReactNode`}}},description:``},getOptionDisabled:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(option: TOption) => boolean`,signature:{arguments:[{type:{name:`TOption`},name:`option`}],return:{name:`boolean`}}},description:``},getOptionAriaLabel:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(option: TOption) => string`,signature:{arguments:[{type:{name:`TOption`},name:`option`}],return:{name:`string`}}},description:``},getOptionClassName:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(option: TOption, state: SelectOptionState) => string | undefined`,signature:{arguments:[{type:{name:`TOption`},name:`option`},{type:{name:`signature`,type:`object`,raw:`{
|
|
2
|
-
active: boolean;
|
|
3
|
-
selected: boolean;
|
|
4
|
-
disabled: boolean;
|
|
5
|
-
}`,signature:{properties:[{key:`active`,value:{name:`boolean`,required:!0}},{key:`selected`,value:{name:`boolean`,required:!0}},{key:`disabled`,value:{name:`boolean`,required:!0}}]}},name:`state`}],return:{name:`union`,raw:`string | undefined`,elements:[{name:`string`},{name:`undefined`}]}}},description:``},renderOption:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(option: TOption, state: SelectOptionState) => ReactNode`,signature:{arguments:[{type:{name:`TOption`},name:`option`},{type:{name:`signature`,type:`object`,raw:`{
|
|
6
|
-
active: boolean;
|
|
7
|
-
selected: boolean;
|
|
8
|
-
disabled: boolean;
|
|
9
|
-
}`,signature:{properties:[{key:`active`,value:{name:`boolean`,required:!0}},{key:`selected`,value:{name:`boolean`,required:!0}},{key:`disabled`,value:{name:`boolean`,required:!0}}]}},name:`state`}],return:{name:`ReactNode`}}},description:``},renderValue:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(option: TOption) => ReactNode`,signature:{arguments:[{type:{name:`TOption`},name:`option`}],return:{name:`ReactNode`}}},description:``},className:{required:!1,tsType:{name:`string`},description:``},buttonClassName:{required:!1,tsType:{name:`string`},description:``},optionsClassName:{required:!1,tsType:{name:`string`},description:``},optionsContentClassName:{required:!1,tsType:{name:`string`},description:``},searchable:{required:!1,tsType:{name:`boolean`},description:``},query:{required:!1,tsType:{name:`string`},description:``},defaultQuery:{required:!1,tsType:{name:`string`},description:``},onQuery:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(value: string) => void`,signature:{arguments:[{type:{name:`string`},name:`value`}],return:{name:`void`}}},description:``},defaultFilter:{required:!1,tsType:{name:`boolean`},description:``},renderPopupHeader:{required:!1,tsType:{name:`ReactNode`},description:``},emptyState:{required:!1,tsType:{name:`ReactNode`},description:``},loadingState:{required:!1,tsType:{name:`ReactNode`},description:``},errorState:{required:!1,tsType:{name:`ReactNode`},description:``},placement:{required:!1,tsType:{name:`Placement`},description:``},clearable:{required:!1,tsType:{name:`TClearable`},description:``},onChange:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(value: T) => void`,signature:{arguments:[{type:{name:`unknown`},name:`value`}],return:{name:`void`}}},description:``}}}}));export{w as n,x as t};
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import{a as e,c as t,i as n}from"./preload-helper-B45gAKPr.js";import{C as r}from"./iframe-BdBCyVHz.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{n as a,t as o}from"./Select-DTyFJMMc.js";var s=e({ControlledObjects:()=>p,CustomOptionLayout:()=>g,Disabled:()=>_,Placeholder:()=>h,PrimitiveOptions:()=>m,__namedExportsOrder:()=>v,default:()=>f}),c,l,u,d,f,p,m,h,g,_,v,y=n((()=>{c=t(r(),1),a(),l=i(),u=[{id:1,name:`Отдел продаж`,code:`SLS`,manager:`Елена Миронова`},{id:2,name:`Закупки`,code:`PRC`,manager:`Антон Мелихов`},{id:3,name:`Логистика`,code:`LGS`,manager:`Мария Климова`,disabled:!0},{id:4,name:`Поддержка клиентов`,code:`SUP`,manager:`Ирина Белова`}],d=[`Новый`,`В работе`,`Завершён`,`Архив`],f={title:`Shared/UI/Select`,component:o,args:{label:`Подразделение`,description:`Выберите подразделение из списка.`,placeholder:`Не выбрано`,value:void 0,options:u,onChange:()=>{},getOptionKey:e=>e.id,getOptionLabel:e=>e.name,getOptionCode:e=>e.code,getOptionDisabled:e=>e.disabled??!1,size:`md`},parameters:{atomicCanvas:!0,layout:`padded`,docs:{description:{component:`Низкоуровневый getter-based select. Подходит для произвольных структур данных, примитивов и сложного кастомного рендера. Компонент возвращает наружу саму выбранную option. Для сериализуемых конфигов и сценариев с optionKey/optionLabel используйте SerializableSelect.`}}},argTypes:{label:{description:`Заголовок поля.`,control:`text`},description:{description:`Описание под заголовком.`,control:`text`},placeholder:{description:`Текст, когда значение ещё не выбрано.`,control:`text`},value:{description:`Текущая выбранная option целиком.`,control:!1},options:{description:`Массив опций любого поддерживаемого формата.`,control:!1},onChange:{description:`Вызывается с выбранной option.`,control:!1},getOptionKey:{description:`Функция получения уникального ключа option.`,control:!1},getOptionLabel:{description:`Функция получения основного текста option.`,control:!1},getOptionCode:{description:`Опциональный рендер дополнительного кода справа.`,control:!1},getOptionDisabled:{description:`Опциональная функция блокировки отдельных option.`,control:!1},getOptionAriaLabel:{description:`Опциональная функция для aria-label option.`,control:!1},getOptionClassName:{description:`Опциональная функция CSS-класса option по её состоянию.`,control:!1},renderOption:{description:`Полностью кастомный рендер option в списке.`,control:!1},renderValue:{description:`Кастомный рендер выбранного значения в кнопке.`,control:!1},className:{description:`Дополнительный CSS-класс корневого контейнера.`,control:`text`},buttonClassName:{description:`Дополнительный CSS-класс кнопки выбора.`,control:`text`},optionsClassName:{description:`Дополнительный CSS-класс контейнера списка.`,control:`text`},size:{description:`Размер поля и подписей.`,control:`select`,options:[`xs`,`sm`,`md`,`lg`,`xl`]},placement:{description:`Позиционирование выпадающего списка.`,control:`select`,options:[`bottom-start`,`bottom-end`,`top-start`,`top-end`]},disabled:{description:`Блокирует взаимодействие с полем.`,control:`boolean`}}},p={name:`Объекты`,render:e=>{let[t,n]=(0,c.useState)(u[1]);return(0,l.jsx)(o,{...e,value:t,onChange:n})}},m={name:`Примитивы`,render:()=>{let[e,t]=(0,c.useState)(d[1]);return(0,l.jsx)(o,{label:`Статус`,description:`Пример использования низкоуровневого Select со строковыми значениями.`,placeholder:`Выберите статус`,options:d,value:e,onChange:t,getOptionKey:e=>e,getOptionLabel:e=>e,size:`md`})}},h={render:e=>{let[t,n]=(0,c.useState)(void 0);return(0,l.jsx)(o,{...e,value:t,onChange:n})}},g={name:`Кастомный рендер`,render:e=>{let[t,n]=(0,c.useState)(u[0]);return(0,l.jsx)(o,{...e,value:t,onChange:n,renderValue:e=>`${e.code} · ${e.name}`,renderOption:(e,t)=>(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)(`div`,{className:`flexEllipsis`,children:[(0,l.jsx)(`div`,{children:e.name}),(0,l.jsx)(`div`,{className:`fontSizeSm content2`,children:e.manager})]}),(0,l.jsx)(`div`,{style:{opacity:t.selected?1:.5},children:e.code})]})})}},_={args:{disabled:!0,value:u[0]}},p.parameters={...p.parameters,docs:{...p.parameters?.docs,source:{originalSource:`{
|
|
2
|
-
name: "Объекты",
|
|
3
|
-
render: args => {
|
|
4
|
-
const [value, setValue] = useState<DepartmentOption | undefined>(departmentOptions[1]);
|
|
5
|
-
return <Select {...args} value={value} onChange={setValue} />;
|
|
6
|
-
}
|
|
7
|
-
}`,...p.parameters?.docs?.source}}},m.parameters={...m.parameters,docs:{...m.parameters?.docs,source:{originalSource:`{
|
|
8
|
-
name: "Примитивы",
|
|
9
|
-
render: () => {
|
|
10
|
-
const [value, setValue] = useState<(typeof primitiveOptions)[number] | undefined>(primitiveOptions[1]);
|
|
11
|
-
return <Select label="Статус" description="Пример использования низкоуровневого Select со строковыми значениями." placeholder="Выберите статус" options={primitiveOptions} value={value} onChange={setValue} getOptionKey={option => option} getOptionLabel={option => option} size="md" />;
|
|
12
|
-
}
|
|
13
|
-
}`,...m.parameters?.docs?.source}}},h.parameters={...h.parameters,docs:{...h.parameters?.docs,source:{originalSource:`{
|
|
14
|
-
render: args => {
|
|
15
|
-
const [value, setValue] = useState<DepartmentOption | undefined>(undefined);
|
|
16
|
-
return <Select {...args} value={value} onChange={setValue} />;
|
|
17
|
-
}
|
|
18
|
-
}`,...h.parameters?.docs?.source}}},g.parameters={...g.parameters,docs:{...g.parameters?.docs,source:{originalSource:`{
|
|
19
|
-
name: "Кастомный рендер",
|
|
20
|
-
render: args => {
|
|
21
|
-
const [value, setValue] = useState<DepartmentOption | undefined>(departmentOptions[0]);
|
|
22
|
-
return <Select {...args} value={value} onChange={setValue} renderValue={option => \`\${option.code} · \${option.name}\`} renderOption={(option, state) => <>
|
|
23
|
-
<div className="flexEllipsis">
|
|
24
|
-
<div>{option.name}</div>
|
|
25
|
-
<div className="fontSizeSm content2">{option.manager}</div>
|
|
26
|
-
</div>
|
|
27
|
-
<div style={{
|
|
28
|
-
opacity: state.selected ? 1 : 0.5
|
|
29
|
-
}}>{option.code}</div>
|
|
30
|
-
</>} />;
|
|
31
|
-
}
|
|
32
|
-
}`,...g.parameters?.docs?.source}}},_.parameters={..._.parameters,docs:{..._.parameters?.docs,source:{originalSource:`{
|
|
33
|
-
args: {
|
|
34
|
-
disabled: true,
|
|
35
|
-
value: departmentOptions[0]
|
|
36
|
-
}
|
|
37
|
-
}`,..._.parameters?.docs?.source}}},v=[`ControlledObjects`,`PrimitiveOptions`,`Placeholder`,`CustomOptionLayout`,`Disabled`]}));y();export{p as ControlledObjects,g as CustomOptionLayout,_ as Disabled,h as Placeholder,m as PrimitiveOptions,v as __namedExportsOrder,f as default,y as n,s as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./preload-helper-B45gAKPr.js";import{m as t,p as n}from"./iframe-BdBCyVHz.js";import{i as r,n as i,r as a,t as o}from"./chunk-3LY4VQVK-uSlGTJmP.js";var s;e((()=>{a(),i(),t(),s=(0,n(r(),1).default)(2)(async(e,t)=>e===!1?t:o(t))}))();export{s as formatter};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./preload-helper-B45gAKPr.js";import{a as t,n,r}from"./Grid-CCVTg58v.js";var i=e((()=>{n(),t(),r()}));export{i as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./preload-helper-B45gAKPr.js";import{P as t}from"./formatters-BloK5ams.js";var n=e((()=>{t()}));export{n as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as e,i as t}from"./preload-helper-B45gAKPr.js";import{C as n}from"./iframe-BdBCyVHz.js";import{t as r}from"./jsx-runtime-BBQGix-2.js";import{a as i,i as a}from"./utils-CYGhZ88S.js";import{ct as o,t as s}from"./lucide-react-CkksFLP-.js";import{et as c,t as l}from"./formatters-BloK5ams.js";import{n as u,r as d,t as f}from"./floating-ui.react-jQBFyt86.js";import{n as p,t as m}from"./ui.module-DS2qtZts.js";import{n as ee,r as te,t as h}from"./react-CP3pw4PB.js";import{l as g,o as _,r as v,u as y}from"./Input-D7RhI3F_.js";import{t as b}from"./input-ddHVF6FV.js";import{n as x,r as ne}from"./hooks-DFj5VG2H.js";function S({id:e,label:t,description:n,disabled:r,size:i,className:a,error:o,children:s}){let{controlId:c,labelId:l,descriptionId:u,errorId:d,describedBy:f}=y({id:e,hasLabel:t!=null,hasDescription:!!n,hasError:!!o});return(0,re.jsx)(_,{label:t,description:n,disabled:r,size:i,className:a,error:o,controlId:c,labelId:l,descriptionId:u,errorId:d,children:s({controlId:c,labelId:l,descriptionId:u,errorId:d,describedBy:f})})}var re,ie=t((()=>{b(),g(),re=r(),S.__docgenInfo={description:``,methods:[],displayName:`PickerField`,props:{id:{required:!1,tsType:{name:`string`},description:``},className:{required:!1,tsType:{name:`string`},description:``},error:{required:!1,tsType:{name:`string`},description:``},children:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(context: PickerFieldContext) => ReactNode`,signature:{arguments:[{type:{name:`PickerFieldContext`},name:`context`}],return:{name:`ReactNode`}}},description:``}},composes:[`Omit`]}})),ae,C,oe=t((()=>{ae=e(n(),1),C=({as:e,children:t,...n})=>(0,ae.createElement)(e||`div`,{...n},t),C.__docgenInfo={description:``,methods:[],displayName:`PolymorphicComponent`,props:{as:{required:!1,tsType:{name:`E`},description:``}}}})),se=t((()=>{oe()})),w,T,E=t((()=>{n(),a(),se(),w=r(),T=({as:e,orientation:t=`horizontal`,className:n,...r})=>(0,w.jsx)(C,{as:e,"aria-orientation":t,className:i(n,t===`horizontal`?`separator`:`separatorVertical`),...r}),T.__docgenInfo={description:``,methods:[],displayName:`Separator`,props:{as:{required:!1,tsType:{name:`E`},description:``},orientation:{required:!1,tsType:{name:`union`,raw:`"horizontal" | "vertical"`,elements:[{name:`literal`,value:`"horizontal"`},{name:`literal`,value:`"vertical"`}]},description:``,defaultValue:{value:`"horizontal"`,computed:!1}},className:{required:!1,tsType:{name:`string`},description:``}}}})),D=t((()=>{E()})),O,k,A,j,M,N,P=t((()=>{O=`DRJ4hy`,k=`U4CULi`,A=`bupTWA`,j=`GkeyGF`,M=`_8F667e`,N={popupLayout:O,popupBody:k,status:A,statusError:j,triggerContainer:M}}));function ce(e){e.stopPropagation()}function F({open:e,context:t,floatingStyles:n,listId:r,labelId:a,descriptionId:o,activeOptionId:s,setFloating:c,getFloatingProps:l,onKeyDown:d,initialFocus:p=-1,returnFocus:m=!1,tabIndex:h=0,className:g,layoutClassName:_,headerClassName:v,bodyClassName:y,header:b,children:x}){return(0,I.jsx)(te,{children:e&&(0,I.jsx)(u,{children:(0,I.jsx)(f,{context:t,modal:!1,initialFocus:p,returnFocus:m,children:(0,I.jsx)(ee.div,{ref:c,style:n,initial:{opacity:0,scale:.95},animate:{opacity:1,scale:1},exit:{opacity:0,scale:.95},...l({id:r,tabIndex:h,"aria-labelledby":a,"aria-describedby":o,"aria-activedescendant":s,onMouseDown:ce,onKeyDown:d,className:g}),children:(0,I.jsxs)(`div`,{className:i(N.popupLayout,_),children:[b?(0,I.jsxs)(`div`,{className:v,children:[b,(0,I.jsx)(T,{className:`marginBlockSm`})]}):(0,I.jsx)(`div`,{}),(0,I.jsx)(`div`,{className:i(N.popupBody,y),children:x})]})})})})})}var I,L=t((()=>{d(),a(),h(),D(),P(),I=r(),F.__docgenInfo={description:``,methods:[],displayName:`PickerPopup`,props:{open:{required:!0,tsType:{name:`boolean`},description:``},context:{required:!0,tsType:{name:`FloatingContext`},description:``},floatingStyles:{required:!0,tsType:{name:`CSSProperties`},description:``},listId:{required:!0,tsType:{name:`string`},description:``},labelId:{required:!1,tsType:{name:`string`},description:``},descriptionId:{required:!1,tsType:{name:`string`},description:``},activeOptionId:{required:!1,tsType:{name:`string`},description:``},setFloating:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(node: HTMLElement | null) => void`,signature:{arguments:[{type:{name:`union`,raw:`HTMLElement | null`,elements:[{name:`HTMLElement`},{name:`null`}]},name:`node`}],return:{name:`void`}}},description:``},getFloatingProps:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(userProps?: Record<string, unknown>) => Record<string, unknown>`,signature:{arguments:[{type:{name:`Record`,elements:[{name:`string`},{name:`unknown`}],raw:`Record<string, unknown>`},name:`userProps`}],return:{name:`Record`,elements:[{name:`string`},{name:`unknown`}],raw:`Record<string, unknown>`}}},description:``},onKeyDown:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(event: KeyboardEvent<HTMLElement>) => void`,signature:{arguments:[{type:{name:`KeyboardEvent`,elements:[{name:`HTMLElement`}],raw:`KeyboardEvent<HTMLElement>`},name:`event`}],return:{name:`void`}}},description:``},initialFocus:{required:!1,tsType:{name:`number`},description:``,defaultValue:{value:`-1`,computed:!1}},returnFocus:{required:!1,tsType:{name:`boolean`},description:``,defaultValue:{value:`false`,computed:!1}},tabIndex:{required:!1,tsType:{name:`number`},description:``,defaultValue:{value:`0`,computed:!1}},className:{required:!1,tsType:{name:`string`},description:``},layoutClassName:{required:!1,tsType:{name:`string`},description:``},headerClassName:{required:!1,tsType:{name:`string`},description:``},bodyClassName:{required:!1,tsType:{name:`string`},description:``},header:{required:!1,tsType:{name:`ReactNode`},description:``},children:{required:!0,tsType:{name:`ReactNode`},description:``}}}}));function R({emptyState:e,loadingState:t,errorState:n}){let r=n??t??e;return r==null?null:(0,le.jsx)(`div`,{className:i(p.uiPopupOption,N.status,n!==void 0&&N.statusError),"aria-disabled":!0,children:r})}var le,z=t((()=>{a(),m(),P(),le=r(),R.__docgenInfo={description:``,methods:[],displayName:`PickerStatus`,props:{emptyState:{required:!1,tsType:{name:`ReactNode`},description:``},loadingState:{required:!1,tsType:{name:`ReactNode`},description:``},errorState:{required:!1,tsType:{name:`ReactNode`},description:``}}}}));function B({open:e,disabled:t,children:n,onToggleMouseDown:r,onToggleClick:a,openAriaLabel:s=`Открыть список`,closeAriaLabel:c=`Закрыть список`}){return(0,V.jsxs)(`div`,{className:p.uiToggleButtonContainer,"data-disabled":t||void 0,children:[n,(0,V.jsx)(`div`,{className:p.uiButtonSeparator}),(0,V.jsx)(`button`,{type:`button`,"aria-label":e?c:s,className:p.uiToggleButton,onMouseDown:r,onClick:a,children:(0,V.jsx)(o,{className:i(p.uiToggleIcon,e&&p.uiToggleIconOpen)})})]})}var V,H=t((()=>{a(),s(),m(),V=r(),B.__docgenInfo={description:``,methods:[],displayName:`PickerTriggerActions`,props:{open:{required:!0,tsType:{name:`boolean`},description:``},disabled:{required:!1,tsType:{name:`boolean`},description:``},children:{required:!1,tsType:{name:`ReactNode`},description:``},onToggleMouseDown:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(event: MouseEvent<HTMLButtonElement>) => void`,signature:{arguments:[{type:{name:`MouseEvent`,elements:[{name:`HTMLButtonElement`}],raw:`MouseEvent<HTMLButtonElement>`},name:`event`}],return:{name:`void`}}},description:``},onToggleClick:{required:!0,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},openAriaLabel:{required:!1,tsType:{name:`string`},description:``,defaultValue:{value:`"Открыть список"`,computed:!1}},closeAriaLabel:{required:!1,tsType:{name:`string`},description:``,defaultValue:{value:`"Закрыть список"`,computed:!1}}}}})),U,W,G,K=t((()=>{U=e(n(),1),a(),b(),m(),P(),W=r(),G=(0,U.forwardRef)(({rootRef:e,endAdornment:t,overlay:n,rootClassName:r,inputClassName:a,...o},s)=>(0,W.jsxs)(`div`,{ref:e,className:i(p.uiInputContainer,N.triggerContainer,r),children:[(0,W.jsx)(v,{endAdornment:t,children:({controlClassName:e})=>(0,W.jsx)(`input`,{...o,ref:s,className:i(p.uiInputWithToggle,e,a)})}),n]})),G.displayName=`PickerTriggerInput`,G.__docgenInfo={description:``,methods:[],displayName:`PickerTriggerInput`,props:{rootRef:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(node: HTMLDivElement | null) => void`,signature:{arguments:[{type:{name:`union`,raw:`HTMLDivElement | null`,elements:[{name:`HTMLDivElement`},{name:`null`}]},name:`node`}],return:{name:`void`}}},description:``},endAdornment:{required:!1,tsType:{name:`ReactNode`},description:``},overlay:{required:!1,tsType:{name:`ReactNode`},description:``},rootClassName:{required:!1,tsType:{name:`string`},description:``},inputClassName:{required:!1,tsType:{name:`string`},description:``}},composes:[`Omit`]}})),ue=t((()=>{}));function q(e){switch(e){case`search-single`:return{focusFloatingOnOpen:!1,restoreFocusOnClose:!1,resetQueryOnClose:!0,shouldOpenOnTriggerClick:()=>!1,shouldOpenOnInputChange:e=>!e,shouldFocusReferenceOnToggle:e=>!e,shouldSelectTriggerTextOnFocus:({open:e,currentQuery:t,hasDisplayValue:n})=>!e&&t.length===0&&n};case`search-multi`:return{focusFloatingOnOpen:!1,restoreFocusOnClose:!1,resetQueryOnClose:!0,shouldOpenOnTriggerClick:()=>!1,shouldOpenOnInputChange:e=>!e,shouldFocusReferenceOnToggle:e=>!e,shouldSelectTriggerTextOnFocus:()=>!1};default:return{focusFloatingOnOpen:!0,restoreFocusOnClose:!0,resetQueryOnClose:!1,shouldOpenOnTriggerClick:e=>!e,shouldOpenOnInputChange:()=>!1,shouldFocusReferenceOnToggle:()=>!1,shouldSelectTriggerTextOnFocus:()=>!1}}}var J=t((()=>{}));function Y(e){if(typeof e==`string`||typeof e==`number`)return String(e);if(Array.isArray(e)){let t=e.map(Y).filter(e=>!!e);return t.length?t.join(` `):void 0}}var de=t((()=>{}));function fe(e){return c((Array.isArray(e)?e:[e]).filter(Boolean).join(` `))}function pe({options:e,query:t,enabled:n=!0,getSearchText:r}){let i=c(t);return(0,me.useMemo)(()=>!n||!i?[...e]:e.filter(e=>fe(r(e)).includes(i)),[n,r,i,e])}var me,he=t((()=>{me=e(n(),1),l()}));function ge(e){let t=e.triggerMode?q(e.triggerMode):void 0;return ne({...e,focusFloatingOnOpen:e.focusFloatingOnOpen??t?.focusFloatingOnOpen,restoreFocusOnClose:e.restoreFocusOnClose??t?.restoreFocusOnClose})}var X=t((()=>{x(),J()}));function _e({open:e,query:t,defaultQuery:n,onQuery:r,resetOnClose:i,triggerMode:a}){let o=(0,Z.useRef)(!1),s=t!==void 0,[c,l]=(0,Z.useState)(n??``),u=s?t??``:c,d=(0,Z.useEffectEvent)(()=>l(``)),f=i??(a?q(a).resetQueryOnClose:!0);(0,Z.useEffect)(()=>{o.current&&!e&&f&&(s||d(),r?.(``)),o.current=e},[s,r,e,f]);let p=e=>{s||l(e),r?.(e)};return{query:u,setQuery:p,clearQuery:()=>p(``)}}var Z,ve=t((()=>{Z=e(n(),1),J()}));function ye({value:e,open:t,onCommit:n,onOpen:r,onClose:i,isEqual:a}){let o=(0,Q.useRef)(!1),[s,c]=(0,Q.useState)(e),l=(0,Q.useEffectEvent)(e=>c(e));return(0,Q.useEffect)(()=>{t||l(e)},[t,e]),(0,Q.useEffect)(()=>{o.current&&!t&&(a(s,e)||n(s),i?.(s)),o.current=t},[s,a,i,n,t,e]),{draftValue:s,setDraftValue:c,prepareOpen:()=>{c(e),r?.()}}}var Q,be=t((()=>{Q=e(n(),1)}));function xe(e){requestAnimationFrame(()=>{e.current?.focus()})}function Se({mode:e,open:t,currentQuery:n,hasDisplayValue:r,inputRef:i,setQuery:a,openList:o,close:s,toggleOpen:c,onBeforeOpen:l}){let u=q(e),d=()=>{if(l?.(),o){o();return}c?.()},f=()=>{if(s){s();return}c?.()},p=()=>{t?f():d(),u.shouldFocusReferenceOnToggle(t)&&xe(i)};return{policy:u,handleTriggerInputChange:e=>{a?.(e),u.shouldOpenOnInputChange(t)&&d()},handleTriggerClick:()=>{u.shouldOpenOnTriggerClick(t)&&d()},handleTriggerFocus:e=>{u.shouldSelectTriggerTextOnFocus({open:t,currentQuery:n,hasDisplayValue:r})&&requestAnimationFrame(()=>{e.select()})},handleToggleMouseDown:e=>{e.preventDefault()},handleToggleClick:()=>{p()},handleTriggerKeyDown:({event:e,onActivateWhenOpen:n,enableSpaceActivation:r=!1,enableClosedArrowDownOpen:i=!1,suppressClosedArrowUp:a=!1})=>{if(!t&&a&&e.key===`ArrowUp`){e.preventDefault();return}if(!t&&i&&e.key===`ArrowDown`){e.preventDefault(),p();return}if(e.key===`Enter`){e.preventDefault(),t?n?.():p();return}r&&e.key===` `&&(e.preventDefault(),t?n?.():p())},toggleTrigger:p}}var $=t((()=>{J()})),Ce=t((()=>{J(),de(),he(),X(),ve(),be(),$()})),we=t((()=>{ie(),L(),z(),H(),K(),ue(),Ce()}));export{T as C,ie as E,D as S,S as T,H as _,ye as a,F as b,X as c,pe as d,Y as f,B as g,K as h,be as i,ge as l,G as m,$ as n,ve as o,de as p,Se as r,_e as s,we as t,he as u,R as v,E as w,L as x,z as y};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./preload-helper-B45gAKPr.js";import{n as t}from"./Select-DTyFJMMc.js";import{n}from"./ODataSelect-CLx5JSMi.js";import{n as r}from"./SerializableSelect-Byb9ssGD.js";var i=e((()=>{n(),t(),r()}));export{i as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./preload-helper-B45gAKPr.js";import{a as t,r as n}from"./DateInput-6pvp1eRu.js";var r=e((()=>{t(),n()}));export{r as t};
|