@ryuzaki13/react-foundation-ui 2.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/listbox/Listbox.d.ts +3 -1
- package/dist/listbox/Listbox.d.ts.map +1 -1
- package/dist/listbox/index.js +69 -60
- package/dist/listbox/index.js.map +1 -1
- package/package.json +1 -1
- package/storybook-static/assets/{Badge-DTLs_n8R.js → Badge-DTV2OL5k.js} +1 -1
- package/storybook-static/assets/{Badge.stories-CovEhEDD.js → Badge.stories-D4zH_nK5.js} +1 -1
- package/storybook-static/assets/{BadgeList-DjTg_9cc.js → BadgeList-CnmQ4zmg.js} +1 -1
- package/storybook-static/assets/{BarcodeScannerDialog.stories-C5rK3W2F.js → BarcodeScannerDialog.stories-Cm7ouwg8.js} +1 -1
- package/storybook-static/assets/{Button-xWt087rv.js → Button-6JuiM3Sj.js} +1 -1
- package/storybook-static/assets/{Button-DMPKoI7-.js → Button-HheQm8vu.js} +1 -1
- package/storybook-static/assets/{Button.stories-ClLOimQw.js → Button.stories-B3Q5B_2w.js} +1 -1
- package/storybook-static/assets/{CalendarView-C8D421Nm.js → CalendarView-CEfB4HLd.js} +1 -1
- package/storybook-static/assets/{CheckBox-CHNYWbr9.js → CheckBox-CWGCGHUS.js} +1 -1
- package/storybook-static/assets/{CheckBox-ByaB_AWI.js → CheckBox-CzvA4ttT.js} +1 -1
- package/storybook-static/assets/{CheckBox.stories-DMFiXHJV.js → CheckBox.stories-D2lA5F8B.js} +1 -1
- package/storybook-static/assets/{Color-6AOWCN3U-CP9Nd4vj.js → Color-6AOWCN3U-RvvVvZ9f.js} +1 -1
- package/storybook-static/assets/{ContextMenu-DSg2_txz.js → ContextMenu-BJnj7lO4.js} +1 -1
- package/storybook-static/assets/{ContextMenu-68QC2EAu.js → ContextMenu-DCpglNe4.js} +1 -1
- package/storybook-static/assets/{ContextMenu.stories-C8CldSPG.js → ContextMenu.stories-CZabvzR6.js} +1 -1
- package/storybook-static/assets/{CustomOptionButton-xAusSjnU.js → CustomOptionButton-B9bzr3ba.js} +1 -1
- package/storybook-static/assets/{DateInput-DOuoBC8j.js → DateInput-Cud2arem.js} +1 -1
- package/storybook-static/assets/{DateInput-2ESK1wDg.js → DateInput-DoMGeEvO.js} +1 -1
- package/storybook-static/assets/{DateInput.stories-D5t5QnTV.js → DateInput.stories-DFd5wyMy.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect-CD2n8zWv.js → DateRangePresetSelect-C8jA3mur.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect-C8k5BN7p.js → DateRangePresetSelect-DfGcFHV8.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect.stories-COktncMK.js → DateRangePresetSelect.stories-DtR83uwx.js} +1 -1
- package/storybook-static/assets/{Detail-oc_R1sEu.js → Detail-CMcVxOrr.js} +1 -1
- package/storybook-static/assets/{Detail.stories-1XrWL_s3.js → Detail.stories-DGT8An8z.js} +1 -1
- package/storybook-static/assets/{Dialog-CLTQa6Kw.js → Dialog-BPzpu7Iw.js} +1 -1
- package/storybook-static/assets/{Dialog-CfnOq258.js → Dialog-DBh-yDZW.js} +1 -1
- package/storybook-static/assets/{Dialog.stories-D5PPDse-.js → Dialog.stories-DU3SgOkL.js} +1 -1
- package/storybook-static/assets/{Disclosure-ByNKoHvP.js → Disclosure-BGsPaAxH.js} +1 -1
- package/storybook-static/assets/{Disclosure.stories-CBdZfYjY.js → Disclosure.stories-DpwyYh7T.js} +1 -1
- package/storybook-static/assets/{DisclosureGroup-D3XWBJXQ.js → DisclosureGroup-CJI8B2x_.js} +1 -1
- package/storybook-static/assets/{DocsRenderer-JROSPFPF-gxuFq2Pd.js → DocsRenderer-JROSPFPF-Cf85Uxwt.js} +1 -1
- package/storybook-static/assets/{DropZone-C6xiwfG-.js → DropZone-C7qTrvkq.js} +1 -1
- package/storybook-static/assets/{DropZone-BxLXKfqY.js → DropZone-cYl1w3wQ.js} +1 -1
- package/storybook-static/assets/{DropZone.stories-BpRrpoAa.js → DropZone.stories-o02bE6DI.js} +1 -1
- package/storybook-static/assets/{DropdownMenu-CmzYr9oI.js → DropdownMenu-DqqPU9RU.js} +1 -1
- package/storybook-static/assets/{ExpandableActionPanel-YeKyHEkM.js → ExpandableActionPanel-B_pjHQ5m.js} +1 -1
- package/storybook-static/assets/{ExpandableActionPanel.stories-D2Kz4YaV.js → ExpandableActionPanel.stories-C7dJ5dht.js} +1 -1
- package/storybook-static/assets/{Flex-QTek1QSS.js → Flex-CIHkkwFK.js} +1 -1
- package/storybook-static/assets/{Flex.stories-DbQJjxyG.js → Flex.stories-DteEPY0y.js} +1 -1
- package/storybook-static/assets/{FloatingPopover-Z_pT8RTr.js → FloatingPopover-yB9tTk9G.js} +1 -1
- package/storybook-static/assets/{FormattedTableCell-sTTQO4a-.js → FormattedTableCell-QVYQepjk.js} +1 -1
- package/storybook-static/assets/{Grid-BplOAlTQ.js → Grid-BUVtGaZY.js} +1 -1
- package/storybook-static/assets/{Grid.stories-3z3Ey-d3.js → Grid.stories-CWGqCVB2.js} +1 -1
- package/storybook-static/assets/{ImageCropper.stories-CRS_mYqv.js → ImageCropper.stories-D8l7iHQA.js} +1 -1
- package/storybook-static/assets/{ImageRenderer-B-6CUiXT.js → ImageRenderer-BcPmp9P9.js} +1 -1
- package/storybook-static/assets/{ImageRenderer.stories-r1qsDpQo.js → ImageRenderer.stories-CcLUz8Ml.js} +1 -1
- package/storybook-static/assets/{ImageView.stories-JTwPOvTV.js → ImageView.stories-BwvjVmuF.js} +1 -1
- package/storybook-static/assets/{ImageViewer.stories-EXX-1Tq3.js → ImageViewer.stories-BjT782dr.js} +2 -2
- package/storybook-static/assets/{ImageViewerRuntime-D9mEsiiW.js → ImageViewerRuntime-DnQ-rQ_M.js} +1 -1
- package/storybook-static/assets/{Input-t9m3sVNs.js → Input-CmEkIaR0.js} +1 -1
- package/storybook-static/assets/{Input-o_oY36pr.js → Input-DebpyMJg.js} +1 -1
- package/storybook-static/assets/{Input.stories-BWFSZL_N.js → Input.stories-y2LCVkT2.js} +1 -1
- package/storybook-static/assets/{InputDateTime-lu3pzt-n.js → InputDateTime-B5oKuCea.js} +1 -1
- package/storybook-static/assets/{InputDateTime.stories-DhWcuSxT.js → InputDateTime.stories-Cwi0acf9.js} +1 -1
- package/storybook-static/assets/{InputFile-B5JzTYSK.js → InputFile-B2dVbDrE.js} +1 -1
- package/storybook-static/assets/{InputFile-DR6qGFRh.js → InputFile-DbRU7crz.js} +1 -1
- package/storybook-static/assets/{InputFile.stories-BDkbSn8C.js → InputFile.stories-DrXG5hWA.js} +1 -1
- package/storybook-static/assets/{InputFiles-CQU1IgFq.js → InputFiles-CsgKJXOD.js} +1 -1
- package/storybook-static/assets/{InputFiles-D1flVl2f.js → InputFiles-DEBKMzlt.js} +1 -1
- package/storybook-static/assets/{InputFiles.stories-DyNBsbIL.js → InputFiles.stories-EZDcefG0.js} +1 -1
- package/storybook-static/assets/{InputFilesList-DcnsEkjI.js → InputFilesList-GjMJ14Ln.js} +1 -1
- package/storybook-static/assets/{InputImage-DyS8prBK.js → InputImage-CFFK9MbG.js} +1 -1
- package/storybook-static/assets/{InputImage-trdfpmT-.js → InputImage-qjJ7xrKX.js} +1 -1
- package/storybook-static/assets/{InputImage.stories-DEk-50bc.js → InputImage.stories-B32AtBda.js} +1 -1
- package/storybook-static/assets/{InteractiveComponents-CJQb2Kqe.js → InteractiveComponents-DustBT4l.js} +1 -1
- package/storybook-static/assets/{InteractiveComponents.stories-A25AcgXi.js → InteractiveComponents.stories-J-7t7y-v.js} +1 -1
- package/storybook-static/assets/{LayoutPicker-Cyr59f6W.js → LayoutPicker-DlzXd6kS.js} +1 -1
- package/storybook-static/assets/LayoutPicker-DwNtjoeb.js +376 -0
- package/storybook-static/assets/{LayoutPicker.stories-BN6ES2FK.js → LayoutPicker.stories-2bG0TvXm.js} +1 -1
- package/storybook-static/assets/{Listbox-CpOkTSus.js → Listbox-BAhrUu_I.js} +16 -4
- package/storybook-static/assets/Listbox-C9qCMY31.js +1 -0
- package/storybook-static/assets/{Listbox.stories-CuJAPNNF.js → Listbox.stories-BfakOrPT.js} +1 -1
- package/storybook-static/assets/{Modal-0h4g26vg.js → Modal-D5znEvBs.js} +1 -1
- package/storybook-static/assets/{Modal-BDbbUiVP.js → Modal-wGyoEzau.js} +1 -1
- package/storybook-static/assets/{Modal.stories-BJTQMX6r.js → Modal.stories-DotZ88Ut.js} +1 -1
- package/storybook-static/assets/{ModalManagerProvider-CKUlkLye.js → ModalManagerProvider-DXPaYU4j.js} +1 -1
- package/storybook-static/assets/MultiSelect-BxKmL7sF.js +2 -0
- package/storybook-static/assets/{MultiSelect-jTomHycE.js → MultiSelect-DN1NhXH9.js} +1 -1
- package/storybook-static/assets/{MultiSelect.stories-KUrIgYcH.js → MultiSelect.stories-Cdrx9hhT.js} +1 -1
- package/storybook-static/assets/{NoData-Cg-72gvD.js → NoData-mAjM6Vuy.js} +1 -1
- package/storybook-static/assets/{NotificationsHost-BGUy6Nwm.js → NotificationsHost-gBWuk9v-.js} +1 -1
- package/storybook-static/assets/{NotificationsHost.stories-UqcdAxbV.js → NotificationsHost.stories-DONKtSKb.js} +1 -1
- package/storybook-static/assets/{ODataMultiSelect-ogSmpbiq.js → ODataMultiSelect-Daq3ksSA.js} +1 -1
- package/storybook-static/assets/{ODataMultiSelect.stories-CFSWPA1t.js → ODataMultiSelect.stories-De0WwTKp.js} +1 -1
- package/storybook-static/assets/{ODataSelect-XrSMzI_c.js → ODataSelect-BUO-vyqK.js} +1 -1
- package/storybook-static/assets/{ODataSelect.stories-DzQ8kx1B.js → ODataSelect.stories-CJ2RCZGP.js} +1 -1
- package/storybook-static/assets/{ODataTreeMultiSelect-Bd6N1nUD.js → ODataTreeMultiSelect-Ctyo-uib.js} +1 -1
- package/storybook-static/assets/{ODataTreeMultiSelect.stories-BL3LegRZ.js → ODataTreeMultiSelect.stories-BX4wjGkG.js} +1 -1
- package/storybook-static/assets/{ODataTreeSelect-LP9MrILe.js → ODataTreeSelect-BZzwG_Ve.js} +1 -1
- package/storybook-static/assets/{ODataTreeSelect.stories-B1xaZzaX.js → ODataTreeSelect.stories-B0jQNyMj.js} +1 -1
- package/storybook-static/assets/{OneStepScroller-Ccn3TcUI.js → OneStepScroller-BL3gxJh1.js} +1 -1
- package/storybook-static/assets/{Option-CdzPub1C.js → Option-JgQ-duDq.js} +1 -1
- package/storybook-static/assets/{OptionButton-BmRyJTuO.js → OptionButton-CATaxLh0.js} +1 -1
- package/storybook-static/assets/{PeriodSelect-BngzAU_C.js → PeriodSelect-4LpRQDP5.js} +1 -1
- package/storybook-static/assets/{PeriodSelect-kQAjEWSH.js → PeriodSelect-BIsC_Ew6.js} +1 -1
- package/storybook-static/assets/{PeriodSelect.stories-BRvyn_JH.js → PeriodSelect.stories-D5fKpF2P.js} +1 -1
- package/storybook-static/assets/PickerField-BkqWIWZw.js +1 -0
- package/storybook-static/assets/{PickerTriggerActions-C0nuR9kw.js → PickerTriggerActions-BVrXKKJ9.js} +1 -1
- package/storybook-static/assets/{Popover-CsDztf-o.js → Popover-BTrxASXR.js} +1 -1
- package/storybook-static/assets/{Popover-GYtSL_1f.js → Popover-DZlEnjse.js} +1 -1
- package/storybook-static/assets/{Popover.stories-Bqt_2L3Y.js → Popover.stories-BdyB4Q7K.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput-C9G9Gebd.js → PresetRangeDateInput-Cp66aUGT.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput-BSssho5H.js → PresetRangeDateInput-DUES355B.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput.stories-CwdMXBFw.js → PresetRangeDateInput.stories-D4jLrF6o.js} +1 -1
- package/storybook-static/assets/{PresetSelect-BPsCLuct.js → PresetSelect-CmRrk7FZ.js} +1 -1
- package/storybook-static/assets/{README-e8EWTIws.js → README--fYBobJK.js} +1 -1
- package/storybook-static/assets/{README-vDg-39Yq.js → README-4AGJG--w.js} +1 -1
- package/storybook-static/assets/{README-Dz8_KWoz.js → README-52AHLz83.js} +1 -1
- package/storybook-static/assets/{README-D-fVNtRb.js → README-55mkSTZb.js} +1 -1
- package/storybook-static/assets/{README-Bq38hDzk.js → README-B00ewV67.js} +1 -1
- package/storybook-static/assets/{README-BpmlhmtG.js → README-B20cH-BV.js} +1 -1
- package/storybook-static/assets/{README-DXRNhATk.js → README-B4CJVRtX.js} +1 -1
- package/storybook-static/assets/{README-BRpdVUr9.js → README-B7BK3gkk.js} +1 -1
- package/storybook-static/assets/{README-C7j7n7jq.js → README-B9foBRQ-.js} +1 -1
- package/storybook-static/assets/{README-pexCW3yI.js → README-BCNsNQNj.js} +1 -1
- package/storybook-static/assets/{README-C53FAkdN.js → README-BGA2Ek3H.js} +1 -1
- package/storybook-static/assets/{README-DoPWzeQH.js → README-BUknkyU6.js} +1 -1
- package/storybook-static/assets/{README-ZguU3X5y.js → README-BfGp1q9n.js} +1 -1
- package/storybook-static/assets/{README-CXq89IOI.js → README-BhRGrTHx.js} +1 -1
- package/storybook-static/assets/{README-BOBlSnDn.js → README-Bh_zrJ_j.js} +1 -1
- package/storybook-static/assets/{README-XW0y0mGh.js → README-BlWMNqE5.js} +1 -1
- package/storybook-static/assets/{README-HY5c2Bbn.js → README-BmKEL3jy.js} +1 -1
- package/storybook-static/assets/{README-BLXGXOo5.js → README-BoGNjKgW.js} +1 -1
- package/storybook-static/assets/{README-D67Ndgh9.js → README-Bq8FLza7.js} +1 -1
- package/storybook-static/assets/{README-9XRn3-ED.js → README-BrJaVHU_.js} +1 -1
- package/storybook-static/assets/{README-DtQcSyrT.js → README-BsUvf6lk.js} +1 -1
- package/storybook-static/assets/{README-Y1Smckdh.js → README-C28SDMRx.js} +1 -1
- package/storybook-static/assets/{README-Tw0ZHHwr.js → README-C8Xo5jEX.js} +1 -1
- package/storybook-static/assets/{README-BhoxLtlr.js → README-CHw6-PVx.js} +1 -1
- package/storybook-static/assets/{README-Ckp4sw5f.js → README-CPYFZwZE.js} +1 -1
- package/storybook-static/assets/{README-GLir3V8b.js → README-CU_f1CMq.js} +1 -1
- package/storybook-static/assets/{README-DFCutGv3.js → README-C_SQjJtW.js} +1 -1
- package/storybook-static/assets/{README-BmzSVH7U.js → README-C_WyDQDz.js} +1 -1
- package/storybook-static/assets/{README-BIqQ7jYg.js → README-CmK6hELS.js} +1 -1
- package/storybook-static/assets/{README-Do7nnQ_n.js → README-CnRKlFuJ.js} +1 -1
- package/storybook-static/assets/{README-CJtOh4Sd.js → README-CoD7FHU_.js} +1 -1
- package/storybook-static/assets/{README-PcQNwv17.js → README-Cs-dnvtW.js} +1 -1
- package/storybook-static/assets/{README-D_a06RNK.js → README-CzKPWsNs.js} +1 -1
- package/storybook-static/assets/{README-CV61J_JK.js → README-D-TgbUSA.js} +1 -1
- package/storybook-static/assets/{README-n1zI-vYE.js → README-D6pLFtqL.js} +1 -1
- package/storybook-static/assets/{README-5RP00KZZ.js → README-D7jyja4l.js} +1 -1
- package/storybook-static/assets/{README-DS_nuTod.js → README-D8YPmvQw.js} +1 -1
- package/storybook-static/assets/{README-D43Puppu.js → README-DG5knhc9.js} +1 -1
- package/storybook-static/assets/{README-Del1wUfr.js → README-DK-Bw1l1.js} +1 -1
- package/storybook-static/assets/{README-DcWifa4y.js → README-DK-US_zR.js} +1 -1
- package/storybook-static/assets/{README-Bc8lHbXV.js → README-DNUrBjgg.js} +1 -1
- package/storybook-static/assets/{README-oKCgmTdw.js → README-DPuLgYuK.js} +1 -1
- package/storybook-static/assets/{README-wKqwiHb4.js → README-DgudM-2t.js} +1 -1
- package/storybook-static/assets/{README-DXBpQ2ho.js → README-Ds6OSOC0.js} +1 -1
- package/storybook-static/assets/{README-DQysVKmM.js → README-DsfBjN9N.js} +1 -1
- package/storybook-static/assets/{README-DqbwD6RO.js → README-Duppk6f6.js} +1 -1
- package/storybook-static/assets/{README-CVql_W36.js → README-DvZ8ZhlH.js} +1 -1
- package/storybook-static/assets/{README-BYHSzLwv.js → README-DyLt9P77.js} +1 -1
- package/storybook-static/assets/{README-Ba0tB6ZN.js → README-DzVNZdfo.js} +1 -1
- package/storybook-static/assets/{README-BXb7J1i8.js → README-E5QziGK8.js} +1 -1
- package/storybook-static/assets/{README-CxDM046q.js → README-EIhMMZ0t.js} +1 -1
- package/storybook-static/assets/{README-V9DD9H9z.js → README-LqD1V5ru.js} +1 -1
- package/storybook-static/assets/{README-C07t0NIU.js → README-lgRhlVsq.js} +1 -1
- package/storybook-static/assets/{RadioButton-DvDDf9wn.js → RadioButton-BLHXpf6L.js} +1 -1
- package/storybook-static/assets/{RadioButton-DGT616TU.js → RadioButton-CmcExRQs.js} +1 -1
- package/storybook-static/assets/{RadioButton.stories-BSA2eNrW.js → RadioButton.stories-P1SEMdJ1.js} +1 -1
- package/storybook-static/assets/{RadioGroup-Cj-zQisA.js → RadioGroup-BBv2Na1n.js} +1 -1
- package/storybook-static/assets/{RadioGroup-C_ZapH6C.js → RadioGroup-DkCSA8me.js} +1 -1
- package/storybook-static/assets/{RadioGroup.stories-B6HK1X-8.js → RadioGroup.stories-5-uFHs1b.js} +1 -1
- package/storybook-static/assets/{Scrollable-DCvN6Jjw.js → Scrollable-XhGz9dwJ.js} +1 -1
- package/storybook-static/assets/Select-BEMtNq5M.js +12 -0
- package/storybook-static/assets/{Select-DY9-upm8.js → Select-CyA-PHrU.js} +1 -1
- package/storybook-static/assets/{Select.stories-CZ_QR5HG.js → Select.stories-B_GbDG58.js} +1 -1
- package/storybook-static/assets/{SerializableSelect-11vTkd0H.js → SerializableSelect-CJ74e_Vc.js} +1 -1
- package/storybook-static/assets/{SerializableSelect.stories-BguIknSO.js → SerializableSelect.stories-PUXPFPFx.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput-DCsz6UCV.js → SingleDateTimeInput-BlpQ8t9f.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput-BoGhy8Ht.js → SingleDateTimeInput-wqb75Yrz.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput.stories-DxuSYUFA.js → SingleDateTimeInput.stories-CdogRh5M.js} +1 -1
- package/storybook-static/assets/{Slider-CysM6SsH.js → Slider-CZa1f0vP.js} +1 -1
- package/storybook-static/assets/{Slider-OjWEFAVX.js → Slider-r8Be9wJ4.js} +1 -1
- package/storybook-static/assets/{Slider.stories-D9yfMGAr.js → Slider.stories-BUwg0h15.js} +1 -1
- package/storybook-static/assets/{SliderInput-CI_NLQ0q.js → SliderInput-BWFbcA5R.js} +1 -1
- package/storybook-static/assets/{SliderInput-DBTFSE4e.js → SliderInput-BaZBNhhF.js} +1 -1
- package/storybook-static/assets/{SliderInput.stories-D0oX3RFL.js → SliderInput.stories-Cbxo0ku_.js} +1 -1
- package/storybook-static/assets/{Sortable-wMgs80Np.js → Sortable-JfLmQUdm.js} +1 -1
- package/storybook-static/assets/{Sortable.stories-CzLFp8Yi.js → Sortable.stories-Cz9xM3Tw.js} +1 -1
- package/storybook-static/assets/{Splitter-BKw_fa4-.js → Splitter-BkQcPRYJ.js} +1 -1
- package/storybook-static/assets/{Splitter.stories-BESoJ6o1.js → Splitter.stories-zQf1fK4D.js} +1 -1
- package/storybook-static/assets/{StateSelect-BwNBFERr.js → StateSelect-DxH1oWnK.js} +1 -1
- package/storybook-static/assets/{StateSelect-BO-jFCLn.js → StateSelect-TLRMUmko.js} +1 -1
- package/storybook-static/assets/{StateSelect.stories-BK7SyuXQ.js → StateSelect.stories-CReLNG_6.js} +1 -1
- package/storybook-static/assets/{StringToggle.stories-A6pkEO-O.js → StringToggle.stories-BYqTdRbD.js} +1 -1
- package/storybook-static/assets/{Switch-Ca3gnf5f.js → Switch-ChsLVAse.js} +1 -1
- package/storybook-static/assets/{Switch-8JotpfFf.js → Switch-DE9rqHmp.js} +1 -1
- package/storybook-static/assets/{Switch.stories-o3vvp8L8.js → Switch.stories-BaVgLi3_.js} +1 -1
- package/storybook-static/assets/{Table-C_IPJbR2.js → Table-qoMvYV1q.js} +1 -1
- package/storybook-static/assets/{Table.stories-DOFEu7Ua.js → Table.stories-BdLScKfS.js} +1 -1
- package/storybook-static/assets/{Tabs-BLBo4OAv.js → Tabs-CuALrdgt.js} +1 -1
- package/storybook-static/assets/{Tabs.stories-RBnCQrM-.js → Tabs.stories-BrLtxZ_a.js} +1 -1
- package/storybook-static/assets/{TabsBox-apqD4XLH.js → TabsBox-DzfWhIHb.js} +1 -1
- package/storybook-static/assets/{TagInput-CSYOG896.js → TagInput-Tyn5Jgus.js} +1 -1
- package/storybook-static/assets/{TagInput.stories-BnGuMi6T.js → TagInput.stories-Bbs3olyB.js} +1 -1
- package/storybook-static/assets/{Text-mRhkARXu.js → Text-B4GUKigV.js} +1 -1
- package/storybook-static/assets/{Textarea-DS1hM5rM.js → Textarea-CNu-scX8.js} +1 -1
- package/storybook-static/assets/{Textarea-Covk__BL.js → Textarea-D3iwzB-S.js} +1 -1
- package/storybook-static/assets/{Textarea.stories-BdpsMxDY.js → Textarea.stories-CE2gt74x.js} +1 -1
- package/storybook-static/assets/{TimePanel-PDYyBCbF.js → TimePanel-BESMLCVl.js} +1 -1
- package/storybook-static/assets/{TimePanel.stories-BFS31y6L.js → TimePanel.stories-BYhTpaoS.js} +1 -1
- package/storybook-static/assets/{Toggle-zWHGLyKm.js → Toggle-0-SlfDXC.js} +1 -1
- package/storybook-static/assets/{Toggle-DTX4Q7y6.js → Toggle-BexBc-UO.js} +1 -1
- package/storybook-static/assets/{Toggle.stories-fZ7WRE_7.js → Toggle.stories-CG4rBYOZ.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect-BSZO9xe1.js → TreeMultiSelect-Cne9qXjN.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect-C4y6p4PX.js → TreeMultiSelect-QId1DJUn.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect.stories-DXKBBf5r.js → TreeMultiSelect.stories-D6ElJY8Y.js} +1 -1
- package/storybook-static/assets/{TreePickerBase-CMHFqHVa.js → TreePickerBase-Dq3HMrua.js} +2 -2
- package/storybook-static/assets/{TreeSelect-DGXveWx3.js → TreeSelect-BJKtAh4x.js} +1 -1
- package/storybook-static/assets/{TreeSelect-Dh5uT4_T.js → TreeSelect-q4gdFfBH.js} +1 -1
- package/storybook-static/assets/{TreeSelect.stories-Byy-mMTP.js → TreeSelect.stories-DfCxZuVy.js} +1 -1
- package/storybook-static/assets/{TreeTable-BN7J72I8.js → TreeTable-5fAWCnhQ.js} +1 -1
- package/storybook-static/assets/{TreeTable.stories-FYHTdBr3.js → TreeTable.stories-B1fSfYHg.js} +1 -1
- package/storybook-static/assets/{blocks-o5-z1BZu.js → blocks-B_u8Yt1Z.js} +3 -3
- package/storybook-static/assets/{check-C4AaNZYo.js → check-r01NGn4c.js} +1 -1
- package/storybook-static/assets/{chevron-down-DvNqUDlQ.js → chevron-down-DxMviYn3.js} +1 -1
- package/storybook-static/assets/{chevron-left-DjMG1A8Y.js → chevron-left-mKnQH53V.js} +1 -1
- package/storybook-static/assets/{chevron-right-Mitq9JQN.js → chevron-right-CeJNqWTb.js} +1 -1
- package/storybook-static/assets/{chunk-W22LQPXL-DNwhYDee.js → chunk-W22LQPXL-DorleiwX.js} +1 -1
- package/storybook-static/assets/{circle-alert-RsaUYk8p.js → circle-alert-H7OZyDmF.js} +1 -1
- package/storybook-static/assets/{circle-check-Bf5GP89g.js → circle-check-my8Ev6ar.js} +1 -1
- package/storybook-static/assets/{components-B4tZ3-vQ.js → components-CDMhSXUo.js} +3 -3
- package/storybook-static/assets/{contextMenu-Ftv13fjh.js → contextMenu-fMt3iyZv.js} +1 -1
- package/storybook-static/assets/{download-BmjzCCZo.js → download-BCwj5k1S.js} +1 -1
- package/storybook-static/assets/{floating-ui.react-BY7cYh9B.js → floating-ui.react-Cy32mouo.js} +1 -1
- package/storybook-static/assets/{foundationApi-C7zGaHuR.js → foundationApi-BtZYXGDY.js} +1 -1
- package/storybook-static/assets/{foundationLib-CQpPkJlc.js → foundationLib-CHOUG7NK.js} +1 -1
- package/storybook-static/assets/{hooks-DQXnNniA.js → hooks-CEvNG7IN.js} +1 -1
- package/storybook-static/assets/iframe-CDVsimPQ.js +1 -0
- package/storybook-static/assets/{iframe-Cb11iJVP.js → iframe-DWvPB8Sk.js} +4 -4
- package/storybook-static/assets/{info-BmiY6Ur5.js → info-CA6M6l6h.js} +1 -1
- package/storybook-static/assets/{odata-D-cQAIdp.js → odata-CHl7sWAn.js} +1 -1
- package/storybook-static/assets/{odataStoryFixtures-BddSr1SB.js → odataStoryFixtures-BvjpoqqT.js} +1 -1
- package/storybook-static/assets/{react-wmXnhrTV.js → react-B37E__uI.js} +1 -1
- package/storybook-static/assets/{refresh-cw-BoUt7cjC.js → refresh-cw-Bt4yd-lG.js} +1 -1
- package/storybook-static/assets/{settings-2-BnEmfu4n.js → settings-2-B7Uyk4j8.js} +1 -1
- package/storybook-static/assets/{sortable-BG6M9j0E.js → sortable-B8UMQCaH.js} +1 -1
- package/storybook-static/assets/{syntaxhighlighter-QEQV7K2Y-DTU-Nj55.js → syntaxhighlighter-QEQV7K2Y-QGUDFNNj.js} +1 -1
- package/storybook-static/assets/{trash-2-CEuSrdHe.js → trash-2-Bhjh1o0B.js} +1 -1
- package/storybook-static/assets/{triangle-alert-BB6HrHL-.js → triangle-alert-D1c-iB00.js} +1 -1
- package/storybook-static/assets/{useODataSelectBase-DiMVVy-k.js → useODataSelectBase-CYnvX8wM.js} +1 -1
- package/storybook-static/assets/{useODataTreeData-DiV_gN4z.js → useODataTreeData-C2risfo7.js} +1 -1
- package/storybook-static/assets/{usePickerQuery-Dc3Jdhg0.js → usePickerQuery-CjSFlUmn.js} +1 -1
- package/storybook-static/assets/usePickerTriggerController-Bqo5fhOa.js +6 -0
- package/storybook-static/assets/{x-CcdATVNL.js → x-B3GmOByS.js} +1 -1
- package/storybook-static/iframe.html +2 -2
- package/storybook-static/project.json +1 -1
- package/storybook-static/assets/LayoutPicker-DmMkNRCR.js +0 -376
- package/storybook-static/assets/Listbox-BL6exIiK.js +0 -1
- package/storybook-static/assets/MultiSelect-DOFS5VMw.js +0 -2
- package/storybook-static/assets/Select-DPdZSw3l.js +0 -12
- package/storybook-static/assets/iframe-B-sjM2X5.js +0 -1
- package/storybook-static/assets/usePickerTriggerController-BjY_AiUm.js +0 -6
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { HTMLAttributes, JSX, ReactNode } from "react";
|
|
1
|
+
import { type HTMLAttributes, type JSX, type ReactNode } from "react";
|
|
2
2
|
type ListboxOption<T> = {
|
|
3
3
|
value: T;
|
|
4
4
|
label?: string;
|
|
@@ -6,6 +6,8 @@ type ListboxOption<T> = {
|
|
|
6
6
|
};
|
|
7
7
|
interface ListboxBaseProps<T> extends Omit<HTMLAttributes<HTMLDivElement>, "onChange" | "defaultValue" | "value"> {
|
|
8
8
|
options: ListboxOption<T>[];
|
|
9
|
+
label?: ReactNode;
|
|
10
|
+
description?: string;
|
|
9
11
|
disabled?: boolean;
|
|
10
12
|
focusOnMount?: boolean;
|
|
11
13
|
renderItem?: (option: ListboxOption<T>, selected: boolean, active: boolean) => ReactNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Listbox.d.ts","sourceRoot":"","sources":["../../src/listbox/Listbox.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Listbox.d.ts","sourceRoot":"","sources":["../../src/listbox/Listbox.tsx"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,cAAc,EACnB,KAAK,GAAG,EAGR,KAAK,SAAS,EAMd,MAAM,OAAO,CAAC;AAaf,KAAK,aAAa,CAAC,CAAC,IAAI;IACvB,KAAK,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,UAAU,gBAAgB,CAAC,CAAC,CAAE,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,GAAG,cAAc,GAAG,OAAO,CAAC;IAChH,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,KAAK,SAAS,CAAC;IACzF,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CAC7D;AAGD,UAAU,kBAAkB,CAAC,CAAC,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;IAC1D,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,YAAY,CAAC,EAAE,CAAC,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;CACxD;AAGD,UAAU,iBAAiB,CAAC,CAAC,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;IACzD,QAAQ,EAAE,IAAI,CAAC;IACf,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;IACZ,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;CAC1D;AA4BD;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC;AACtE,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC"}
|
package/dist/listbox/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CustomOptionButton as e, Option as t, OptionButton as n } from "../option/index.js";
|
|
2
|
-
import { h as r } from "../chunks/picker-DZ4-1BvK.js";
|
|
3
|
-
import { useEffect as
|
|
2
|
+
import { h as r, v as i } from "../chunks/picker-DZ4-1BvK.js";
|
|
3
|
+
import { useEffect as a, useLayoutEffect as o, useMemo as s, useRef as c, useState as l } from "react";
|
|
4
4
|
import { findFirstEnabledIndex as u, findLastEnabledIndex as d, findNextEnabledIndex as f, handleKeyboardActivation as p } from "@ryuzaki13/react-foundation-lib/utils";
|
|
5
5
|
import { jsx as m } from "react/jsx-runtime";
|
|
6
6
|
import { CheckIcon as h } from "lucide-react";
|
|
@@ -21,74 +21,83 @@ function _(e, t, n) {
|
|
|
21
21
|
return u(e, g);
|
|
22
22
|
}
|
|
23
23
|
function v(v) {
|
|
24
|
-
let { value: y, defaultValue: b, multiple: x,
|
|
24
|
+
let { value: y, defaultValue: b, multiple: x, label: S, description: C, disabled: w, focusOnMount: T, renderItem: E, getKey: D, options: O, onChange: k, id: A, ...j } = v, M = y !== void 0, [N, P] = l(b), F = c(null), [I, L] = l(() => _(O, y ?? b, x)), R = c(!1), z = s(() => (M ? y : N) ?? (x ? [] : null), [
|
|
25
25
|
N,
|
|
26
|
-
|
|
26
|
+
M,
|
|
27
27
|
x,
|
|
28
28
|
y
|
|
29
29
|
]), B = I, V = (e) => {
|
|
30
|
-
if (
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
30
|
+
if (!(w || e.disabled)) {
|
|
31
|
+
if (x) {
|
|
32
|
+
let t = Array.isArray(z) ? z : [], n = t.includes(e.value) ? t.filter((t) => t !== e.value) : [...t, e.value];
|
|
33
|
+
k?.(n, e), M || P(n);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
k?.(e.value, e), M || P(e.value);
|
|
37
|
+
}
|
|
38
|
+
}, H = (e) => {
|
|
39
|
+
if (!w) {
|
|
40
|
+
if (e.key === "ArrowDown") e.preventDefault(), R.current = !0, L((e) => f(O, e, 1, g));
|
|
41
|
+
else if (e.key === "ArrowUp") e.preventDefault(), R.current = !0, L((e) => f(O, e, -1, g));
|
|
42
|
+
else if (e.key === "Home") e.preventDefault(), R.current = !0, L(u(O, g));
|
|
43
|
+
else if (e.key === "End") e.preventDefault(), R.current = !0, L(d(O, g));
|
|
44
|
+
else if (p(e, () => {
|
|
45
|
+
let e = O[B];
|
|
46
|
+
e && V(e);
|
|
47
|
+
})) return;
|
|
48
|
+
}
|
|
37
49
|
};
|
|
38
|
-
return
|
|
50
|
+
return a(() => {
|
|
39
51
|
if (!R.current) return;
|
|
40
52
|
R.current = !1;
|
|
41
53
|
let e = F.current?.querySelectorAll("[role=\"option\"]")[B];
|
|
42
54
|
e && e.scrollIntoView({ block: "nearest" });
|
|
43
55
|
}, [B]), o(() => {
|
|
44
|
-
|
|
45
|
-
}, [
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
text: r.label ?? String(r.value)
|
|
90
|
-
})
|
|
91
|
-
}, T ? T(r, i) : i);
|
|
56
|
+
T && F.current?.focus();
|
|
57
|
+
}, [T]), /* @__PURE__ */ m(i, {
|
|
58
|
+
id: A,
|
|
59
|
+
label: S,
|
|
60
|
+
description: C,
|
|
61
|
+
disabled: w,
|
|
62
|
+
children: ({ controlId: i, labelId: a, describedBy: o }) => /* @__PURE__ */ m(r, {
|
|
63
|
+
rootRef: F,
|
|
64
|
+
id: i,
|
|
65
|
+
role: "listbox",
|
|
66
|
+
"aria-multiselectable": x || void 0,
|
|
67
|
+
"aria-activedescendant": B >= 0 ? `${i}-option-${B}` : void 0,
|
|
68
|
+
onKeyDown: H,
|
|
69
|
+
...j,
|
|
70
|
+
"aria-labelledby": a ?? j["aria-labelledby"],
|
|
71
|
+
"aria-describedby": o ?? j["aria-describedby"],
|
|
72
|
+
"aria-disabled": w || void 0,
|
|
73
|
+
tabIndex: w ? -1 : 0,
|
|
74
|
+
className: j.className,
|
|
75
|
+
children: O.map((r, a) => {
|
|
76
|
+
let o = x ? Array.isArray(z) && z.includes(r.value) : z === r.value, s = a === B, c = w || r.disabled || void 0, l = (e) => {
|
|
77
|
+
e.preventDefault(), !c && (L(a), V(r));
|
|
78
|
+
};
|
|
79
|
+
return /* @__PURE__ */ m(t, {
|
|
80
|
+
id: `${i}-option-${a}`,
|
|
81
|
+
role: "option",
|
|
82
|
+
"aria-selected": o,
|
|
83
|
+
"aria-disabled": c,
|
|
84
|
+
disabled: c,
|
|
85
|
+
active: s,
|
|
86
|
+
selected: o,
|
|
87
|
+
children: E ? /* @__PURE__ */ m(e, {
|
|
88
|
+
tabIndex: -1,
|
|
89
|
+
disabled: c,
|
|
90
|
+
onMouseDown: l,
|
|
91
|
+
children: E(r, o, s)
|
|
92
|
+
}) : /* @__PURE__ */ m(n, {
|
|
93
|
+
tabIndex: -1,
|
|
94
|
+
disabled: c,
|
|
95
|
+
onMouseDown: l,
|
|
96
|
+
icon: m(o ? h : "span", {}),
|
|
97
|
+
text: r.label ?? String(r.value)
|
|
98
|
+
})
|
|
99
|
+
}, D ? D(r, a) : a);
|
|
100
|
+
})
|
|
92
101
|
})
|
|
93
102
|
});
|
|
94
103
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/listbox/Listbox.tsx"],"sourcesContent":["import {\n\ttype MouseEvent,\n\tHTMLAttributes,\n\tJSX,\n\tKeyboardEvent,\n\tReactNode,\n\tuseEffect,\n\tuseId,\n\tuseLayoutEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState\n} from \"react\";\n\nimport {\n\tfindFirstEnabledIndex,\n\tfindLastEnabledIndex,\n\tfindNextEnabledIndex,\n\thandleKeyboardActivation\n} from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { CheckIcon } from \"lucide-react\";\n\nimport { CustomOptionButton, Option, OptionButton } from \"../option\";\nimport { PickerOptions } from \"../picker\";\n\ntype ListboxOption<T> = {\n\tvalue: T;\n\tlabel?: string;\n\tdisabled?: boolean;\n};\n\ninterface ListboxBaseProps<T> extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\" | \"defaultValue\" | \"value\"> {\n\toptions: ListboxOption<T>[];\n\tdisabled?: boolean;\n\tfocusOnMount?: boolean;\n\trenderItem?: (option: ListboxOption<T>, selected: boolean, active: boolean) => ReactNode;\n\tgetKey?: (option: ListboxOption<T>, index: number) => string;\n}\n\n// Вариант для single-select\ninterface ListboxSingleProps<T> extends ListboxBaseProps<T> {\n\tmultiple?: false;\n\tvalue?: T;\n\tdefaultValue?: T;\n\tonChange?: (value: T, option: ListboxOption<T>) => void;\n}\n\n// Вариант для multi-select\ninterface ListboxMultiProps<T> extends ListboxBaseProps<T> {\n\tmultiple: true;\n\tvalue?: T[];\n\tdefaultValue?: T[];\n\tonChange?: (value: T[], option: ListboxOption<T>) => void;\n}\n\ntype ListboxProps<T> = ListboxSingleProps<T> | ListboxMultiProps<T>;\n\nconst isOptionDisabled = <T,>(option: ListboxOption<T>) => option.disabled === true;\n\nfunction getInitialFocusIndex<T>(options: ListboxOption<T>[], value: T | T[] | undefined, multiple: boolean | undefined) {\n\tif (multiple) {\n\t\tif (Array.isArray(value) && value.length > 0) {\n\t\t\tconst selectedIndex = options.findIndex((option) => value.includes(option.value) && !option.disabled);\n\t\t\tif (selectedIndex >= 0) {\n\t\t\t\treturn selectedIndex;\n\t\t\t}\n\t\t}\n\n\t\treturn findFirstEnabledIndex(options, isOptionDisabled);\n\t}\n\n\tif (value !== undefined) {\n\t\tconst selectedIndex = options.findIndex((option) => option.value === value && !option.disabled);\n\t\tif (selectedIndex >= 0) {\n\t\t\treturn selectedIndex;\n\t\t}\n\t}\n\n\treturn findFirstEnabledIndex(options, isOptionDisabled);\n}\n\n/**\n * Компонент выбора одного или нескольких элементов из списка. Поддерживает controlled API, поиск по данным и рендер кастомных опций.\n */\nexport function Listbox<T>(props: ListboxSingleProps<T>): JSX.Element;\nexport function Listbox<T>(props: ListboxMultiProps<T>): JSX.Element;\nexport function Listbox<T>(props: ListboxProps<T>): JSX.Element {\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tconst { value, defaultValue, multiple, disabled, focusOnMount, renderItem, getKey, options, onChange, id: externalId, ...rest } = props;\n\n\tconst isControlled = value !== undefined;\n\tconst autoId = useId();\n\tconst listId = externalId ?? `${autoId}-listbox`;\n\tconst [internalValue, setInternalValue] = useState<T | T[] | undefined>(defaultValue);\n\tconst listRef = useRef<HTMLDivElement>(null);\n\tconst [focusedIndex, setFocusedIndex] = useState(() => getInitialFocusIndex(options, value ?? defaultValue, multiple));\n\t/**\n\t * Прокрутка нужна только после клавиатурной навигации. Это не даёт монтированию и Fast Refresh\n\t * вызывать scrollIntoView, который иначе прокручивает внешнюю страницу до Listbox.\n\t */\n\tconst shouldScrollActiveOptionRef = useRef(false);\n\n\tconst selectedValues = useMemo(\n\t\t() => (isControlled ? value : internalValue) ?? (multiple ? [] : null),\n\t\t[internalValue, isControlled, multiple, value]\n\t);\n\tconst activeIndex = focusedIndex;\n\n\tconst handleSelect = (option: ListboxOption<T>) => {\n\t\tif (disabled || option.disabled) return;\n\n\t\tlet newValue: T | T[];\n\t\tif (props.multiple) {\n\t\t\tconst arr = Array.isArray(selectedValues) ? selectedValues : [];\n\t\t\tnewValue = arr.includes(option.value) ? arr.filter((v) => v !== option.value) : [...arr, option.value];\n\n\t\t\tprops.onChange?.(newValue, option);\n\t\t} else {\n\t\t\tnewValue = option.value;\n\n\t\t\tprops.onChange?.(newValue, option);\n\t\t}\n\n\t\tif (!isControlled) setInternalValue(newValue);\n\t};\n\n\tconst handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n\t\tif (disabled) return;\n\n\t\tif (e.key === \"ArrowDown\") {\n\t\t\te.preventDefault();\n\t\t\tshouldScrollActiveOptionRef.current = true;\n\t\t\t// setHoveredIndex(null);\n\t\t\tsetFocusedIndex((index) => findNextEnabledIndex(options, index, 1, isOptionDisabled));\n\t\t} else if (e.key === \"ArrowUp\") {\n\t\t\te.preventDefault();\n\t\t\tshouldScrollActiveOptionRef.current = true;\n\t\t\t// setHoveredIndex(null);\n\t\t\tsetFocusedIndex((index) => findNextEnabledIndex(options, index, -1, isOptionDisabled));\n\t\t} else if (e.key === \"Home\") {\n\t\t\te.preventDefault();\n\t\t\tshouldScrollActiveOptionRef.current = true;\n\t\t\t// setHoveredIndex(null);\n\t\t\tsetFocusedIndex(findFirstEnabledIndex(options, isOptionDisabled));\n\t\t} else if (e.key === \"End\") {\n\t\t\te.preventDefault();\n\t\t\tshouldScrollActiveOptionRef.current = true;\n\t\t\t// setHoveredIndex(null);\n\t\t\tsetFocusedIndex(findLastEnabledIndex(options, isOptionDisabled));\n\t\t} else if (\n\t\t\thandleKeyboardActivation(e, () => {\n\t\t\t\tconst activeOption = options[activeIndex];\n\t\t\t\tif (activeOption) {\n\t\t\t\t\thandleSelect(activeOption);\n\t\t\t\t}\n\t\t\t})\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t};\n\n\tuseEffect(() => {\n\t\tif (!shouldScrollActiveOptionRef.current) return;\n\n\t\tshouldScrollActiveOptionRef.current = false;\n\t\tconst el = listRef.current?.querySelectorAll<HTMLElement>('[role=\"option\"]')[activeIndex];\n\t\tif (el) el.scrollIntoView({ block: \"nearest\" });\n\t}, [activeIndex]);\n\n\tuseLayoutEffect(() => {\n\t\tif (focusOnMount) {\n\t\t\tlistRef.current?.focus();\n\t\t}\n\t}, [focusOnMount]);\n\n\treturn (\n\t\t<PickerOptions\n\t\t\trootRef={listRef}\n\t\t\tid={listId}\n\t\t\trole=\"listbox\"\n\t\t\t// aria-label={}\n\t\t\taria-multiselectable={multiple || undefined}\n\t\t\taria-activedescendant={activeIndex >= 0 ? `${listId}-option-${activeIndex}` : undefined}\n\t\t\tonKeyDown={handleKeyDown}\n\t\t\t{...rest}\n\t\t\taria-disabled={disabled || undefined}\n\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\tclassName={rest.className}>\n\t\t\t{options.map((option, index) => {\n\t\t\t\tconst selected = multiple\n\t\t\t\t\t? Array.isArray(selectedValues) && selectedValues.includes(option.value)\n\t\t\t\t\t: selectedValues === option.value;\n\t\t\t\tconst active = index === activeIndex;\n\t\t\t\tconst optionDisabled = disabled || option.disabled || undefined;\n\n\t\t\t\tconst handleMouseDown = (e: MouseEvent<HTMLButtonElement>) => {\n\t\t\t\t\te.preventDefault(); // чтобы не сбрасывался фокус listbox\n\t\t\t\t\tif (optionDisabled) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tsetFocusedIndex(index);\n\t\t\t\t\thandleSelect(option);\n\t\t\t\t};\n\n\t\t\t\treturn (\n\t\t\t\t\t<Option\n\t\t\t\t\t\tkey={getKey ? getKey(option, index) : index}\n\t\t\t\t\t\tid={`${listId}-option-${index}`}\n\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\taria-selected={selected}\n\t\t\t\t\t\taria-disabled={optionDisabled}\n\t\t\t\t\t\tdisabled={optionDisabled}\n\t\t\t\t\t\tactive={active}\n\t\t\t\t\t\tselected={selected}>\n\t\t\t\t\t\t{renderItem ? (\n\t\t\t\t\t\t\t<CustomOptionButton tabIndex={-1} disabled={optionDisabled} onMouseDown={handleMouseDown}>\n\t\t\t\t\t\t\t\t{renderItem(option, selected, active)}\n\t\t\t\t\t\t\t</CustomOptionButton>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<OptionButton\n\t\t\t\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\t\t\t\tdisabled={optionDisabled}\n\t\t\t\t\t\t\t\tonMouseDown={handleMouseDown}\n\t\t\t\t\t\t\t\ticon={selected ? <CheckIcon /> : <span />}\n\t\t\t\t\t\t\t\ttext={option.label ?? String(option.value)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Option>\n\t\t\t\t);\n\t\t\t})}\n\t\t</PickerOptions>\n\t);\n}\n"],"mappings":";;;;;;;AAyDA,IAAM,KAAwB,MAA6B,EAAO,aAAa;AAE/E,SAAS,EAAwB,GAA6B,GAA4B,GAA+B;CACxH,IAAI,GAAU;EACb,IAAI,MAAM,QAAQ,CAAK,KAAK,EAAM,SAAS,GAAG;GAC7C,IAAM,IAAgB,EAAQ,WAAW,MAAW,EAAM,SAAS,EAAO,KAAK,KAAK,CAAC,EAAO,QAAQ;GACpG,IAAI,KAAiB,GACpB,OAAO;EAET;EAEA,OAAO,EAAsB,GAAS,CAAgB;CACvD;CAEA,IAAI,MAAU,KAAA,GAAW;EACxB,IAAM,IAAgB,EAAQ,WAAW,MAAW,EAAO,UAAU,KAAS,CAAC,EAAO,QAAQ;EAC9F,IAAI,KAAiB,GACpB,OAAO;CAET;CAEA,OAAO,EAAsB,GAAS,CAAgB;AACvD;AAOA,SAAgB,EAAW,GAAqC;CAE/D,IAAM,EAAE,UAAO,iBAAc,aAAU,aAAU,iBAAc,eAAY,WAAQ,YAAS,aAAU,IAAI,GAAY,GAAG,MAAS,GAE5H,IAAe,MAAU,KAAA,GACzB,IAAS,EAAM,GACf,IAAS,KAAc,GAAG,EAAO,WACjC,CAAC,GAAe,KAAoB,EAA8B,CAAY,GAC9E,IAAU,EAAuB,IAAI,GACrC,CAAC,GAAc,KAAmB,QAAe,EAAqB,GAAS,KAAS,GAAc,CAAQ,CAAC,GAK/G,IAA8B,EAAO,EAAK,GAE1C,IAAiB,SACf,IAAe,IAAQ,OAAmB,IAAW,CAAC,IAAI,OACjE;EAAC;EAAe;EAAc;EAAU;CAAK,CAC9C,GACM,IAAc,GAEd,KAAgB,MAA6B;EAClD,IAAI,KAAY,EAAO,UAAU;EAEjC,IAAI;EACJ,IAAI,EAAM,UAAU;GACnB,IAAM,IAAM,MAAM,QAAQ,CAAc,IAAI,IAAiB,CAAC;GAG9D,AAFA,IAAW,EAAI,SAAS,EAAO,KAAK,IAAI,EAAI,QAAQ,MAAM,MAAM,EAAO,KAAK,IAAI,CAAC,GAAG,GAAK,EAAO,KAAK,GAErG,EAAM,WAAW,GAAU,CAAM;EAClC,OAGC,AAFA,IAAW,EAAO,OAElB,EAAM,WAAW,GAAU,CAAM;EAGlC,AAAK,KAAc,EAAiB,CAAQ;CAC7C;CAmDA,OAdA,QAAgB;EACf,IAAI,CAAC,EAA4B,SAAS;EAE1C,EAA4B,UAAU;EACtC,IAAM,IAAK,EAAQ,SAAS,iBAA8B,mBAAiB,CAAC,CAAC;EAC7E,AAAI,KAAI,EAAG,eAAe,EAAE,OAAO,UAAU,CAAC;CAC/C,GAAG,CAAC,CAAW,CAAC,GAEhB,QAAsB;EACrB,AAAI,KACH,EAAQ,SAAS,MAAM;CAEzB,GAAG,CAAC,CAAY,CAAC,GAGhB,kBAAC,GAAD;EACC,SAAS;EACT,IAAI;EACJ,MAAK;EAEL,wBAAsB,KAAY,KAAA;EAClC,yBAAuB,KAAe,IAAI,GAAG,EAAO,UAAU,MAAgB,KAAA;EAC9E,YAzDqB,MAAqC;GACvD,QAEJ;QAAI,EAAE,QAAQ,aAIb,AAHA,EAAE,eAAe,GACjB,EAA4B,UAAU,IAEtC,GAAiB,MAAU,EAAqB,GAAS,GAAO,GAAG,CAAgB,CAAC;SAC9E,IAAI,EAAE,QAAQ,WAIpB,AAHA,EAAE,eAAe,GACjB,EAA4B,UAAU,IAEtC,GAAiB,MAAU,EAAqB,GAAS,GAAO,IAAI,CAAgB,CAAC;SAC/E,IAAI,EAAE,QAAQ,QAIpB,AAHA,EAAE,eAAe,GACjB,EAA4B,UAAU,IAEtC,EAAgB,EAAsB,GAAS,CAAgB,CAAC;SAC1D,IAAI,EAAE,QAAQ,OAIpB,AAHA,EAAE,eAAe,GACjB,EAA4B,UAAU,IAEtC,EAAgB,EAAqB,GAAS,CAAgB,CAAC;SACzD,IACN,EAAyB,SAAS;KACjC,IAAM,IAAe,EAAQ;KAC7B,AAAI,KACH,EAAa,CAAY;IAE3B,CAAC,GAED;GAAA;EAEF;EAyBE,GAAI;EACJ,iBAAe,KAAY,KAAA;EAC3B,UAAU,IAAW,KAAK;EAC1B,WAAW,EAAK;EACf,UAAA,EAAQ,KAAK,GAAQ,MAAU;GAC/B,IAAM,IAAW,IACd,MAAM,QAAQ,CAAc,KAAK,EAAe,SAAS,EAAO,KAAK,IACrE,MAAmB,EAAO,OACvB,IAAS,MAAU,GACnB,IAAiB,KAAY,EAAO,YAAY,KAAA,GAEhD,KAAmB,MAAqC;IAC7D,EAAE,eAAe,GACb,OAGJ,EAAgB,CAAK,GACrB,EAAa,CAAM;GACpB;GAEA,OACC,kBAAC,GAAD;IAEC,IAAI,GAAG,EAAO,UAAU;IACxB,MAAK;IACL,iBAAe;IACf,iBAAe;IACf,UAAU;IACF;IACE;IACT,UAAA,IACA,kBAAC,GAAD;KAAoB,UAAU;KAAI,UAAU;KAAgB,aAAa;KACvE,UAAA,EAAW,GAAQ,GAAU,CAAM;IACjB,CAAA,IAEpB,kBAAC,GAAD;KACC,UAAU;KACV,UAAU;KACV,aAAa;KACb,MAAiB,EAAX,IAAY,IAAgB,QAAjB,CAAY,CAAW;KACxC,MAAM,EAAO,SAAS,OAAO,EAAO,KAAK;IACzC,CAAA;GAEK,GArBF,IAAS,EAAO,GAAQ,CAAK,IAAI,CAqB/B;EAEV,CAAC;CACa,CAAA;AAEjB"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/listbox/Listbox.tsx"],"sourcesContent":["import {\n\ttype HTMLAttributes,\n\ttype JSX,\n\ttype KeyboardEvent,\n\ttype MouseEvent,\n\ttype ReactNode,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState\n} from \"react\";\n\nimport {\n\tfindFirstEnabledIndex,\n\tfindLastEnabledIndex,\n\tfindNextEnabledIndex,\n\thandleKeyboardActivation\n} from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { CheckIcon } from \"lucide-react\";\n\nimport { CustomOptionButton, Option, OptionButton } from \"../option\";\nimport { PickerField, PickerOptions } from \"../picker\";\n\ntype ListboxOption<T> = {\n\tvalue: T;\n\tlabel?: string;\n\tdisabled?: boolean;\n};\n\ninterface ListboxBaseProps<T> extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\" | \"defaultValue\" | \"value\"> {\n\toptions: ListboxOption<T>[];\n\tlabel?: ReactNode;\n\tdescription?: string;\n\tdisabled?: boolean;\n\tfocusOnMount?: boolean;\n\trenderItem?: (option: ListboxOption<T>, selected: boolean, active: boolean) => ReactNode;\n\tgetKey?: (option: ListboxOption<T>, index: number) => string;\n}\n\n// Вариант для single-select\ninterface ListboxSingleProps<T> extends ListboxBaseProps<T> {\n\tmultiple?: false;\n\tvalue?: T;\n\tdefaultValue?: T;\n\tonChange?: (value: T, option: ListboxOption<T>) => void;\n}\n\n// Вариант для multi-select\ninterface ListboxMultiProps<T> extends ListboxBaseProps<T> {\n\tmultiple: true;\n\tvalue?: T[];\n\tdefaultValue?: T[];\n\tonChange?: (value: T[], option: ListboxOption<T>) => void;\n}\n\ntype ListboxProps<T> = ListboxSingleProps<T> | ListboxMultiProps<T>;\n\nconst isOptionDisabled = <T,>(option: ListboxOption<T>) => option.disabled === true;\n\nfunction getInitialFocusIndex<T>(options: ListboxOption<T>[], value: T | T[] | undefined, multiple: boolean | undefined) {\n\tif (multiple) {\n\t\tif (Array.isArray(value) && value.length > 0) {\n\t\t\tconst selectedIndex = options.findIndex((option) => value.includes(option.value) && !option.disabled);\n\t\t\tif (selectedIndex >= 0) {\n\t\t\t\treturn selectedIndex;\n\t\t\t}\n\t\t}\n\n\t\treturn findFirstEnabledIndex(options, isOptionDisabled);\n\t}\n\n\tif (value !== undefined) {\n\t\tconst selectedIndex = options.findIndex((option) => option.value === value && !option.disabled);\n\t\tif (selectedIndex >= 0) {\n\t\t\treturn selectedIndex;\n\t\t}\n\t}\n\n\treturn findFirstEnabledIndex(options, isOptionDisabled);\n}\n\n/**\n * Компонент выбора одного или нескольких элементов из списка. Поддерживает controlled API, поиск по данным и рендер кастомных опций.\n */\nexport function Listbox<T>(props: ListboxSingleProps<T>): JSX.Element;\nexport function Listbox<T>(props: ListboxMultiProps<T>): JSX.Element;\nexport function Listbox<T>(props: ListboxProps<T>): JSX.Element {\n\tconst {\n\t\tvalue,\n\t\tdefaultValue,\n\t\tmultiple,\n\t\tlabel,\n\t\tdescription,\n\t\tdisabled,\n\t\tfocusOnMount,\n\t\trenderItem,\n\t\tgetKey,\n\t\toptions,\n\t\tonChange,\n\t\tid: externalId,\n\t\t...rest\n\t} = props;\n\n\tconst isControlled = value !== undefined;\n\tconst [internalValue, setInternalValue] = useState<T | T[] | undefined>(defaultValue);\n\tconst listRef = useRef<HTMLDivElement>(null);\n\tconst [focusedIndex, setFocusedIndex] = useState(() => getInitialFocusIndex(options, value ?? defaultValue, multiple));\n\t/**\n\t * Прокрутка нужна только после клавиатурной навигации. Это не даёт монтированию и Fast Refresh\n\t * вызывать scrollIntoView, который иначе прокручивает внешнюю страницу до Listbox.\n\t */\n\tconst shouldScrollActiveOptionRef = useRef(false);\n\n\tconst selectedValues = useMemo(\n\t\t() => (isControlled ? value : internalValue) ?? (multiple ? [] : null),\n\t\t[internalValue, isControlled, multiple, value]\n\t);\n\tconst activeIndex = focusedIndex;\n\n\tconst handleSelect = (option: ListboxOption<T>) => {\n\t\tif (disabled || option.disabled) return;\n\n\t\tif (multiple) {\n\t\t\tconst arr = Array.isArray(selectedValues) ? selectedValues : [];\n\t\t\tconst newValue = arr.includes(option.value) ? arr.filter((v) => v !== option.value) : [...arr, option.value];\n\n\t\t\tonChange?.(newValue, option);\n\t\t\tif (!isControlled) setInternalValue(newValue);\n\t\t\treturn;\n\t\t}\n\n\t\tonChange?.(option.value, option);\n\n\t\tif (!isControlled) setInternalValue(option.value);\n\t};\n\n\tconst handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n\t\tif (disabled) return;\n\n\t\tif (e.key === \"ArrowDown\") {\n\t\t\te.preventDefault();\n\t\t\tshouldScrollActiveOptionRef.current = true;\n\t\t\t// setHoveredIndex(null);\n\t\t\tsetFocusedIndex((index) => findNextEnabledIndex(options, index, 1, isOptionDisabled));\n\t\t} else if (e.key === \"ArrowUp\") {\n\t\t\te.preventDefault();\n\t\t\tshouldScrollActiveOptionRef.current = true;\n\t\t\t// setHoveredIndex(null);\n\t\t\tsetFocusedIndex((index) => findNextEnabledIndex(options, index, -1, isOptionDisabled));\n\t\t} else if (e.key === \"Home\") {\n\t\t\te.preventDefault();\n\t\t\tshouldScrollActiveOptionRef.current = true;\n\t\t\t// setHoveredIndex(null);\n\t\t\tsetFocusedIndex(findFirstEnabledIndex(options, isOptionDisabled));\n\t\t} else if (e.key === \"End\") {\n\t\t\te.preventDefault();\n\t\t\tshouldScrollActiveOptionRef.current = true;\n\t\t\t// setHoveredIndex(null);\n\t\t\tsetFocusedIndex(findLastEnabledIndex(options, isOptionDisabled));\n\t\t} else if (\n\t\t\thandleKeyboardActivation(e, () => {\n\t\t\t\tconst activeOption = options[activeIndex];\n\t\t\t\tif (activeOption) {\n\t\t\t\t\thandleSelect(activeOption);\n\t\t\t\t}\n\t\t\t})\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t};\n\n\tuseEffect(() => {\n\t\tif (!shouldScrollActiveOptionRef.current) return;\n\n\t\tshouldScrollActiveOptionRef.current = false;\n\t\tconst el = listRef.current?.querySelectorAll<HTMLElement>('[role=\"option\"]')[activeIndex];\n\t\tif (el) el.scrollIntoView({ block: \"nearest\" });\n\t}, [activeIndex]);\n\n\tuseLayoutEffect(() => {\n\t\tif (focusOnMount) {\n\t\t\tlistRef.current?.focus();\n\t\t}\n\t}, [focusOnMount]);\n\n\treturn (\n\t\t<PickerField id={externalId} label={label} description={description} disabled={disabled}>\n\t\t\t{({ controlId: listId, labelId, describedBy }) => (\n\t\t\t\t<PickerOptions\n\t\t\t\t\trootRef={listRef}\n\t\t\t\t\tid={listId}\n\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\taria-multiselectable={multiple || undefined}\n\t\t\t\t\taria-activedescendant={activeIndex >= 0 ? `${listId}-option-${activeIndex}` : undefined}\n\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t{...rest}\n\t\t\t\t\taria-labelledby={labelId ?? rest[\"aria-labelledby\"]}\n\t\t\t\t\taria-describedby={describedBy ?? rest[\"aria-describedby\"]}\n\t\t\t\t\taria-disabled={disabled || undefined}\n\t\t\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\t\t\tclassName={rest.className}>\n\t\t\t\t\t{options.map((option, index) => {\n\t\t\t\t\t\tconst selected = multiple\n\t\t\t\t\t\t\t? Array.isArray(selectedValues) && selectedValues.includes(option.value)\n\t\t\t\t\t\t\t: selectedValues === option.value;\n\t\t\t\t\t\tconst active = index === activeIndex;\n\t\t\t\t\t\tconst optionDisabled = disabled || option.disabled || undefined;\n\n\t\t\t\t\t\tconst handleMouseDown = (e: MouseEvent<HTMLButtonElement>) => {\n\t\t\t\t\t\t\te.preventDefault(); // чтобы не сбрасывался фокус listbox\n\t\t\t\t\t\t\tif (optionDisabled) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsetFocusedIndex(index);\n\t\t\t\t\t\t\thandleSelect(option);\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Option\n\t\t\t\t\t\t\t\tkey={getKey ? getKey(option, index) : index}\n\t\t\t\t\t\t\t\tid={`${listId}-option-${index}`}\n\t\t\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\t\t\taria-selected={selected}\n\t\t\t\t\t\t\t\taria-disabled={optionDisabled}\n\t\t\t\t\t\t\t\tdisabled={optionDisabled}\n\t\t\t\t\t\t\t\tactive={active}\n\t\t\t\t\t\t\t\tselected={selected}>\n\t\t\t\t\t\t\t\t{renderItem ? (\n\t\t\t\t\t\t\t\t\t<CustomOptionButton tabIndex={-1} disabled={optionDisabled} onMouseDown={handleMouseDown}>\n\t\t\t\t\t\t\t\t\t\t{renderItem(option, selected, active)}\n\t\t\t\t\t\t\t\t\t</CustomOptionButton>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<OptionButton\n\t\t\t\t\t\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\t\t\t\t\t\tdisabled={optionDisabled}\n\t\t\t\t\t\t\t\t\t\tonMouseDown={handleMouseDown}\n\t\t\t\t\t\t\t\t\t\ticon={selected ? <CheckIcon /> : <span />}\n\t\t\t\t\t\t\t\t\t\ttext={option.label ?? String(option.value)}\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</Option>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</PickerOptions>\n\t\t\t)}\n\t\t</PickerField>\n\t);\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-DWvPB8Sk.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-B_u8Yt1Z.js";import{a as p,i as m,n as h,o as g,r as _,s as v,t as y}from"./Badge.stories-D4zH_nK5.js";function b(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(s,{of:h,parameters:{atomicCanvas:!0,layout:`padded`,docs:{toc:!0}}}),`
|
|
2
2
|
`,(0,S.jsx)(u,{children:`Badge`}),`
|
|
3
3
|
`,(0,S.jsx)(o,{children:`Компактная текстовая метка для статусов, категорий, фильтров и коротких служебных пометок`}),`
|
|
4
4
|
`,(0,S.jsx)(t.p,{children:`Badge подходит для коротких подписей, которые должны быстро читаться и не перегружать интерфейс:`}),`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e,r as t}from"./rolldown-runtime-DkW27tQK.js";import{t as n}from"./react-BZJXY1be.js";import{n as r}from"./iframe-
|
|
1
|
+
import{n as e,r as t}from"./rolldown-runtime-DkW27tQK.js";import{t as n}from"./react-BZJXY1be.js";import{n as r}from"./iframe-DWvPB8Sk.js";import{i,n as a,r as o,t as s}from"./BadgeList-CnmQ4zmg.js";var c=t({Appearances:()=>h,Basic:()=>p,RemovableList:()=>_,Sizes:()=>g,Tones:()=>m,__namedExportsOrder:()=>v,default:()=>f}),l,u,d,f,p,m,h,g,_,v;function y(){return(y=e((()=>{l=n(),i(),a(),u=r(),{useArgs:d}=__STORYBOOK_MODULE_PREVIEW_API__,f={title:`UI/Badge`,component:o,args:{children:`Новый`,size:`md`,tone:`info`,appearance:`solid`},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{children:{description:`Текст внутри бейджа.`,control:`text`},size:{description:`Размер бейджа.`,control:`inline-radio`,options:[`xs`,`sm`,`md`,`lg`,`xl`]},tone:{description:`Цветовой тон бейджа.`,control:`inline-radio`,options:[`neutral`,`brand`,`success`,`warning`,`error`,`info`]},appearance:{description:`Форма бейджа.`,control:`inline-radio`,options:[`solid`,`outline`,`ghost`,`transparent`]},onRemove:{description:`Показывает кнопку удаления и вызывает обработчик по клику.`,control:!1}}},p={render:function(){let[e]=d();return(0,u.jsx)(o,{...e})}},m={render:()=>(0,u.jsxs)(s,{children:[(0,u.jsx)(o,{tone:`neutral`,appearance:`outline`,children:`Neutral`}),(0,u.jsx)(o,{tone:`success`,appearance:`solid`,children:`Успешно`}),(0,u.jsx)(o,{tone:`warning`,appearance:`solid`,children:`Внимание`}),(0,u.jsx)(o,{tone:`error`,appearance:`solid`,children:`Ошибка`}),(0,u.jsx)(o,{tone:`info`,appearance:`solid`,children:`Информация`})]})},h={render:()=>(0,u.jsxs)(s,{children:[(0,u.jsx)(o,{tone:`neutral`,appearance:`solid`,children:`Solid`}),(0,u.jsx)(o,{tone:`neutral`,appearance:`outline`,children:`Outline`}),(0,u.jsx)(o,{tone:`info`,appearance:`ghost`,children:`Ghost`}),(0,u.jsx)(o,{tone:`warning`,appearance:`transparent`,children:`Transparent`})]})},g={render:()=>(0,u.jsxs)(s,{children:[(0,u.jsx)(o,{size:`xs`,children:`Extra Small`}),(0,u.jsx)(o,{size:`sm`,children:`Small`}),(0,u.jsx)(o,{size:`md`,children:`Medium`}),(0,u.jsx)(o,{size:`lg`,children:`Large`}),(0,u.jsx)(o,{size:`xl`,children:`Extra Large`})]})},_={render:()=>{let[e,t]=(0,l.useState)([`Фильтр A`,`Фильтр B`,`Фильтр C`]);return(0,u.jsx)(s,{children:e.map(e=>(0,u.jsx)(o,{tone:`info`,appearance:`outline`,onRemove:()=>t(t=>t.filter(t=>t!==e)),children:e},e))})}},p.parameters={...p.parameters,docs:{...p.parameters?.docs,source:{originalSource:`{
|
|
2
2
|
render: function Render() {
|
|
3
3
|
const [args] = useArgs<BadgeStoryArgs>();
|
|
4
4
|
return <Badge {...args} />;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{t}from"./react-BZJXY1be.js";import{n,t as r}from"./x-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{t}from"./react-BZJXY1be.js";import{n,t as r}from"./x-B3GmOByS.js";import{n as i}from"./iframe-DWvPB8Sk.js";import{a,i as o}from"./utils-tg3ibbzi.js";import{c as s,i as c}from"./array-D-_yMMUK-DYqn1Ozn.js";import{n as l,t as u}from"./FloatingPopover-yB9tTk9G.js";import{a as d,i as f,r as p,t as m}from"./uiClasses-Bz6cvlDQ.js";import{n as h,t as g}from"./FlexContainer-BWyPlTMB.js";function _({maxChar:e,placement:t=`left`,closeDelay:n=0,maxWidth:r,children:i,block:a,state:o,textWrap:c,textWrapProps:l}){let d=s(i);if(!d.length||e&&d.length<e)return(0,v.jsx)(`span`,{children:d});let f=c??`div`,p={style:{display:a?`block`:`inline-block`,width:e?`${e-3}ch`:`auto`},className:`textOverflow`},m={...l,...p,style:{...l?.style,...p.style},className:[l?.className,p.className].filter(Boolean).join(` `)};return(0,v.jsx)(u,{state:o,placement:t,openOnHover:!0,content:d,closeDelay:n,maxWidth:r,children:(0,v.jsx)(f,{...m,children:d})})}var v;function y(){return(y=e((()=>{c(),l(),v=i(),_.__docgenInfo={description:``,methods:[],displayName:`TextOverflow`,props:{children:{required:!0,tsType:{name:`string`},description:``},maxChar:{required:!1,tsType:{name:`number`},description:``},maxWidth:{required:!1,tsType:{name:`number`},description:`Максимальная ширина тултипа в em.`},placement:{required:!1,tsType:{name:`Placement`},description:``,defaultValue:{value:`"left"`,computed:!1}},closeDelay:{required:!1,tsType:{name:`number`},description:``,defaultValue:{value:`0`,computed:!1}},block:{required:!1,tsType:{name:`literal`,value:`true`},description:`Для работы text-overflow элемент обязан быть блочным или inline-block.
|
|
2
2
|
Если в качестве обёртки передается инлайновый компонент, то он будет
|
|
3
3
|
перезаписан через стили на display: block или inline-block в зависимости
|
|
4
4
|
от установки данного пропса.`},state:{required:!1,tsType:{name:`union`,raw:`"information" | "error" | "warning" | "success" | "negative"`,elements:[{name:`literal`,value:`"information"`},{name:`literal`,value:`"error"`},{name:`literal`,value:`"warning"`},{name:`literal`,value:`"success"`},{name:`literal`,value:`"negative"`}]},description:``},textWrap:{required:!1,tsType:{name:`T`},description:``},textWrapProps:{required:!1,tsType:{name:`Omit`,elements:[{name:`ComponentProps`,elements:[{name:`T`}],raw:`ComponentProps<T>`},{name:`literal`,value:`"children"`}],raw:`Omit<ComponentProps<T>, "children">`},description:``}}}})))()}var b,x,S,C,w,T,E,D,O,k;function A(){return(A=e((()=>{b=`qBtmnH`,x=`p-HsHY`,S=`u9tQAE`,C=`FRScRz`,w=`W13uQO`,T=`_3IRcM9`,E=`R3ybI7`,D=`DdWAaC`,O=`_5cXBQF`,k={badge:b,passive:x,sizeXs:S,sizeSm:C,sizeMd:w,sizeLg:T,sizeXl:E,content:D,removeButton:O}})))()}function j({children:e,size:t=`sm`,tone:n,appearance:i,className:o,onRemove:s}){let c=n??`neutral`,l=d({tone:n,appearance:i,fallbackTone:c,fallbackAppearance:c===`neutral`?`outline`:`solid`});return(0,M.jsxs)(`div`,{className:a(k.badge,N[t],p(l.tone),m(l.appearance),!s&&k.passive,o),children:[(0,M.jsx)(_,{maxChar:25,placement:`top`,block:!0,textWrapProps:{className:k.content},children:String(e)}),s&&(0,M.jsx)(`button`,{type:`button`,onClick:s,className:k.removeButton,"aria-label":`Удалить бейдж`,"data-ui":`badge-remove-button`,"data-action":`remove-badge`,children:(0,M.jsx)(r,{})})]})}var M,N;function P(){return(P=e((()=>{o(),n(),y(),f(),A(),M=i(),N={xs:k.sizeXs,sm:k.sizeSm,md:k.sizeMd,lg:k.sizeLg,xl:k.sizeXl},j.__docgenInfo={description:`Компактный индикатор для статусов, категорий и коротких служебных меток.`,methods:[],displayName:`Badge`,props:{children:{required:!0,tsType:{name:`union`,raw:`string | number`,elements:[{name:`string`},{name:`number`}]},description:``},size:{required:!1,tsType:{name:`union`,raw:`"xs" | "sm" | "md" | "lg" | "xl"`,elements:[{name:`literal`,value:`"xs"`},{name:`literal`,value:`"sm"`},{name:`literal`,value:`"md"`},{name:`literal`,value:`"lg"`},{name:`literal`,value:`"xl"`}]},description:``,defaultValue:{value:`"sm"`,computed:!1}},tone:{required:!1,tsType:{name:`union`,raw:`"neutral" | "brand" | "error" | "warning" | "success" | "info"`,elements:[{name:`literal`,value:`"neutral"`},{name:`literal`,value:`"brand"`},{name:`literal`,value:`"error"`},{name:`literal`,value:`"warning"`},{name:`literal`,value:`"success"`},{name:`literal`,value:`"info"`}]},description:``},appearance:{required:!1,tsType:{name:`union`,raw:`"solid" | "outline" | "ghost" | "transparent"`,elements:[{name:`literal`,value:`"solid"`},{name:`literal`,value:`"outline"`},{name:`literal`,value:`"ghost"`},{name:`literal`,value:`"transparent"`}]},description:``},className:{required:!1,tsType:{name:`string`},description:``},onRemove:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``}}}})))()}function F({children:e}){return(0,L.jsx)(g,{inline:!0,wrap:!0,gap:`sm`,align:`baseline`,children:I.Children.map(e,(e,t)=>(0,L.jsx)(I.Fragment,{children:e},t))})}var I,L;function R(){return(R=e((()=>{I=t(),h(),L=i(),F.__docgenInfo={description:"Контейнер для группы `Badge`, который выстраивает элементы в единый список с предсказуемыми отступами. Используется для компактного вывода набора меток или фильтров.",methods:[],displayName:`BadgeList`,props:{children:{required:!0,tsType:{name:`Array`,elements:[{name:`ReactElement`,elements:[{name:`union`,raw:`typeof Badge | null | undefined | false`,elements:[{name:`Badge`},{name:`null`},{name:`undefined`},{name:`literal`,value:`false`}]}],raw:`ReactElement<typeof Badge | null | undefined | false>`}],raw:`ReactElement<typeof Badge | null | undefined | false>[]`},description:``}}}})))()}export{P as i,R as n,j as r,F as t};
|