@ryuzaki13/react-foundation-ui 1.12.4 → 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 +5 -5
- package/storybook-static/assets/{Badge-D34jY6Gi.js → Badge-DTV2OL5k.js} +1 -1
- package/storybook-static/assets/{Badge.stories-BviYPkwq.js → Badge.stories-D4zH_nK5.js} +1 -1
- package/storybook-static/assets/{BadgeList-D1opuTdU.js → BadgeList-CnmQ4zmg.js} +1 -1
- package/storybook-static/assets/{BarcodeScannerDialog.stories-CGdzqa8a.js → BarcodeScannerDialog.stories-Cm7ouwg8.js} +1 -1
- package/storybook-static/assets/{Button-GlOmKXxP.js → Button-6JuiM3Sj.js} +1 -1
- package/storybook-static/assets/{Button-TDS2LnG9.js → Button-HheQm8vu.js} +1 -1
- package/storybook-static/assets/{Button.stories-DZc3uOlJ.js → Button.stories-B3Q5B_2w.js} +1 -1
- package/storybook-static/assets/{CalendarView-BZUnLT-3.js → CalendarView-CEfB4HLd.js} +1 -1
- package/storybook-static/assets/{CheckBox-nJdvYZhM.js → CheckBox-CWGCGHUS.js} +1 -1
- package/storybook-static/assets/{CheckBox-CLBqWi7z.js → CheckBox-CzvA4ttT.js} +1 -1
- package/storybook-static/assets/{CheckBox.stories-CYOLxCPI.js → CheckBox.stories-D2lA5F8B.js} +1 -1
- package/storybook-static/assets/{Color-6AOWCN3U-D18f6KeQ.js → Color-6AOWCN3U-RvvVvZ9f.js} +1 -1
- package/storybook-static/assets/{ContextMenu-CQSxlBWi.js → ContextMenu-BJnj7lO4.js} +1 -1
- package/storybook-static/assets/{ContextMenu-sE3MNnCR.js → ContextMenu-DCpglNe4.js} +1 -1
- package/storybook-static/assets/{ContextMenu.stories-BLY5Ujpn.js → ContextMenu.stories-CZabvzR6.js} +1 -1
- package/storybook-static/assets/{CustomOptionButton-Dskg5LhM.js → CustomOptionButton-B9bzr3ba.js} +1 -1
- package/storybook-static/assets/{DateInput-C1ICOvMl.js → DateInput-Cud2arem.js} +1 -1
- package/storybook-static/assets/{DateInput-Bzodnz-9.js → DateInput-DoMGeEvO.js} +1 -1
- package/storybook-static/assets/{DateInput.stories-BzVMkjA3.js → DateInput.stories-DFd5wyMy.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect-Br2__e-_.js → DateRangePresetSelect-C8jA3mur.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect-D4nDDXcv.js → DateRangePresetSelect-DfGcFHV8.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect.stories-BGjTzO7y.js → DateRangePresetSelect.stories-DtR83uwx.js} +1 -1
- package/storybook-static/assets/{Detail-0FlptHQe.js → Detail-CMcVxOrr.js} +1 -1
- package/storybook-static/assets/{Detail.stories-BxrUGFvI.js → Detail.stories-DGT8An8z.js} +1 -1
- package/storybook-static/assets/{Dialog-DkLXNVzZ.js → Dialog-BPzpu7Iw.js} +1 -1
- package/storybook-static/assets/{Dialog-BfPgyIcU.js → Dialog-DBh-yDZW.js} +1 -1
- package/storybook-static/assets/{Dialog.stories-D949y8s0.js → Dialog.stories-DU3SgOkL.js} +1 -1
- package/storybook-static/assets/{Disclosure-Cyh5B4JR.js → Disclosure-BGsPaAxH.js} +1 -1
- package/storybook-static/assets/{Disclosure.stories-CvuTZlF_.js → Disclosure.stories-DpwyYh7T.js} +1 -1
- package/storybook-static/assets/{DisclosureGroup-Wae8qmS8.js → DisclosureGroup-CJI8B2x_.js} +1 -1
- package/storybook-static/assets/{DocsRenderer-JROSPFPF-CGjmbQhP.js → DocsRenderer-JROSPFPF-Cf85Uxwt.js} +1 -1
- package/storybook-static/assets/{DropZone-BFX_F_oU.js → DropZone-C7qTrvkq.js} +1 -1
- package/storybook-static/assets/{DropZone-fvEwB1kz.js → DropZone-cYl1w3wQ.js} +1 -1
- package/storybook-static/assets/{DropZone.stories-BKXYN11y.js → DropZone.stories-o02bE6DI.js} +1 -1
- package/storybook-static/assets/{DropdownMenu-eld8h4zt.js → DropdownMenu-DqqPU9RU.js} +1 -1
- package/storybook-static/assets/{ExpandableActionPanel-CsulBc_X.js → ExpandableActionPanel-B_pjHQ5m.js} +1 -1
- package/storybook-static/assets/{ExpandableActionPanel.stories-DorKO7Y7.js → ExpandableActionPanel.stories-C7dJ5dht.js} +1 -1
- package/storybook-static/assets/{Flex-Bos8Qsbf.js → Flex-CIHkkwFK.js} +1 -1
- package/storybook-static/assets/{Flex.stories-uMO88BD-.js → Flex.stories-DteEPY0y.js} +1 -1
- package/storybook-static/assets/{FloatingPopover-Cc604wgC.js → FloatingPopover-yB9tTk9G.js} +1 -1
- package/storybook-static/assets/{FormattedTableCell-BBvQf7q4.js → FormattedTableCell-QVYQepjk.js} +3 -3
- package/storybook-static/assets/{Grid-DEWQZjLv.js → Grid-BUVtGaZY.js} +1 -1
- package/storybook-static/assets/{Grid.stories-BLE0L0zk.js → Grid.stories-CWGqCVB2.js} +1 -1
- package/storybook-static/assets/{ImageCropper.stories-BW7Ozi0T.js → ImageCropper.stories-D8l7iHQA.js} +1 -1
- package/storybook-static/assets/{ImageRenderer-BejoR1lv.js → ImageRenderer-BcPmp9P9.js} +1 -1
- package/storybook-static/assets/{ImageRenderer.stories-DP10_K4c.js → ImageRenderer.stories-CcLUz8Ml.js} +1 -1
- package/storybook-static/assets/{ImageView.stories-Bw13WxSu.js → ImageView.stories-BwvjVmuF.js} +1 -1
- package/storybook-static/assets/{ImageViewer.stories-B0crB6gM.js → ImageViewer.stories-BjT782dr.js} +2 -2
- package/storybook-static/assets/{ImageViewerRuntime-B7phOl_8.js → ImageViewerRuntime-DnQ-rQ_M.js} +1 -1
- package/storybook-static/assets/{Input-DiBxtZDI.js → Input-CmEkIaR0.js} +1 -1
- package/storybook-static/assets/{Input-B5POVG-l.js → Input-DebpyMJg.js} +1 -1
- package/storybook-static/assets/{Input.stories-BBu0KoQ3.js → Input.stories-y2LCVkT2.js} +1 -1
- package/storybook-static/assets/{InputDateTime-CF1I9kaz.js → InputDateTime-B5oKuCea.js} +1 -1
- package/storybook-static/assets/{InputDateTime.stories-COzwJ_xA.js → InputDateTime.stories-Cwi0acf9.js} +1 -1
- package/storybook-static/assets/{InputFile-Czxpud9Y.js → InputFile-B2dVbDrE.js} +1 -1
- package/storybook-static/assets/{InputFile-DV4LbiGx.js → InputFile-DbRU7crz.js} +1 -1
- package/storybook-static/assets/{InputFile.stories-C4UrANxS.js → InputFile.stories-DrXG5hWA.js} +1 -1
- package/storybook-static/assets/{InputFiles-B93BMp0i.js → InputFiles-CsgKJXOD.js} +1 -1
- package/storybook-static/assets/{InputFiles-B_WMnvSr.js → InputFiles-DEBKMzlt.js} +1 -1
- package/storybook-static/assets/{InputFiles.stories-CTun1-En.js → InputFiles.stories-EZDcefG0.js} +1 -1
- package/storybook-static/assets/{InputFilesList-ChdmhHw0.js → InputFilesList-GjMJ14Ln.js} +1 -1
- package/storybook-static/assets/{InputImage-xpaTZ7wq.js → InputImage-CFFK9MbG.js} +1 -1
- package/storybook-static/assets/{InputImage-DR7Ed0Vu.js → InputImage-qjJ7xrKX.js} +1 -1
- package/storybook-static/assets/{InputImage.stories-DTvBlwrQ.js → InputImage.stories-B32AtBda.js} +1 -1
- package/storybook-static/assets/{InteractiveComponents-BYjJFrHD.js → InteractiveComponents-DustBT4l.js} +1 -1
- package/storybook-static/assets/{InteractiveComponents.stories-CTbNtPbV.js → InteractiveComponents.stories-J-7t7y-v.js} +1 -1
- package/storybook-static/assets/{LayoutPicker-CInTlBMe.js → LayoutPicker-DlzXd6kS.js} +1 -1
- package/storybook-static/assets/LayoutPicker-DwNtjoeb.js +376 -0
- package/storybook-static/assets/{LayoutPicker.stories-DQ_lYy0l.js → LayoutPicker.stories-2bG0TvXm.js} +1 -1
- package/storybook-static/assets/{Listbox-D4HihpJQ.js → Listbox-BAhrUu_I.js} +16 -4
- package/storybook-static/assets/Listbox-C9qCMY31.js +1 -0
- package/storybook-static/assets/{Listbox.stories-CzP9_sD-.js → Listbox.stories-BfakOrPT.js} +1 -1
- package/storybook-static/assets/{Modal-DUYVQZu5.js → Modal-D5znEvBs.js} +1 -1
- package/storybook-static/assets/{Modal-LmkJ7CHS.js → Modal-wGyoEzau.js} +1 -1
- package/storybook-static/assets/{Modal.stories-BGui6fT5.js → Modal.stories-DotZ88Ut.js} +1 -1
- package/storybook-static/assets/{ModalManagerProvider-DOLfRB2E.js → ModalManagerProvider-DXPaYU4j.js} +1 -1
- package/storybook-static/assets/MultiSelect-BxKmL7sF.js +2 -0
- package/storybook-static/assets/{MultiSelect-CWIM68HY.js → MultiSelect-DN1NhXH9.js} +1 -1
- package/storybook-static/assets/{MultiSelect.stories-C45HfpYj.js → MultiSelect.stories-Cdrx9hhT.js} +1 -1
- package/storybook-static/assets/{NoData-BFixErI8.js → NoData-mAjM6Vuy.js} +1 -1
- package/storybook-static/assets/{NotificationsHost-DSFid0wi.js → NotificationsHost-gBWuk9v-.js} +1 -1
- package/storybook-static/assets/{NotificationsHost.stories-BRb4w9We.js → NotificationsHost.stories-DONKtSKb.js} +1 -1
- package/storybook-static/assets/{ODataMultiSelect-BWAo87rZ.js → ODataMultiSelect-Daq3ksSA.js} +1 -1
- package/storybook-static/assets/{ODataMultiSelect.stories-9JY7dCz7.js → ODataMultiSelect.stories-De0WwTKp.js} +1 -1
- package/storybook-static/assets/{ODataSelect-CNaZGImQ.js → ODataSelect-BUO-vyqK.js} +1 -1
- package/storybook-static/assets/{ODataSelect.stories-DmUKhDNz.js → ODataSelect.stories-CJ2RCZGP.js} +1 -1
- package/storybook-static/assets/{ODataTreeMultiSelect-C_qAbPca.js → ODataTreeMultiSelect-Ctyo-uib.js} +1 -1
- package/storybook-static/assets/{ODataTreeMultiSelect.stories-CEfHC6t_.js → ODataTreeMultiSelect.stories-BX4wjGkG.js} +1 -1
- package/storybook-static/assets/{ODataTreeSelect-BSFpOn9W.js → ODataTreeSelect-BZzwG_Ve.js} +1 -1
- package/storybook-static/assets/{ODataTreeSelect.stories-caU47o0f.js → ODataTreeSelect.stories-B0jQNyMj.js} +1 -1
- package/storybook-static/assets/{OneStepScroller-Bs7JuMLb.js → OneStepScroller-BL3gxJh1.js} +1 -1
- package/storybook-static/assets/{Option-CSnKA-Xd.js → Option-JgQ-duDq.js} +1 -1
- package/storybook-static/assets/{OptionButton-DIGMZVy9.js → OptionButton-CATaxLh0.js} +1 -1
- package/storybook-static/assets/PeriodSelect-4LpRQDP5.js +5 -0
- package/storybook-static/assets/{PeriodSelect-Cd0ESjew.js → PeriodSelect-BIsC_Ew6.js} +1 -1
- package/storybook-static/assets/{PeriodSelect.stories-Dir9DbtU.js → PeriodSelect.stories-D5fKpF2P.js} +1 -1
- package/storybook-static/assets/PickerField-BkqWIWZw.js +1 -0
- package/storybook-static/assets/{PickerTriggerActions-CJMxsesn.js → PickerTriggerActions-BVrXKKJ9.js} +1 -1
- package/storybook-static/assets/{Popover-CRhHLoew.js → Popover-BTrxASXR.js} +1 -1
- package/storybook-static/assets/{Popover-D6-lu_yc.js → Popover-DZlEnjse.js} +1 -1
- package/storybook-static/assets/{Popover.stories-BCMMP7px.js → Popover.stories-BdyB4Q7K.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput-CrZgAMBR.js → PresetRangeDateInput-Cp66aUGT.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput-BlRfDcUL.js → PresetRangeDateInput-DUES355B.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput.stories-Zl5sur2x.js → PresetRangeDateInput.stories-D4jLrF6o.js} +1 -1
- package/storybook-static/assets/{PresetSelect-wNDulYVW.js → PresetSelect-CmRrk7FZ.js} +1 -1
- package/storybook-static/assets/{README-D65oLCnS.js → README--fYBobJK.js} +1 -1
- package/storybook-static/assets/{README-Bdm71C27.js → README-4AGJG--w.js} +1 -1
- package/storybook-static/assets/{README-BB-q729e.js → README-52AHLz83.js} +1 -1
- package/storybook-static/assets/{README-DFlnpjEv.js → README-55mkSTZb.js} +1 -1
- package/storybook-static/assets/README-B00ewV67.js +37 -0
- package/storybook-static/assets/{README-C9cYGWK6.js → README-B20cH-BV.js} +1 -1
- package/storybook-static/assets/{README-BZdQ6muO.js → README-B4CJVRtX.js} +1 -1
- package/storybook-static/assets/{README-DKMmI4G2.js → README-B7BK3gkk.js} +1 -1
- package/storybook-static/assets/{README-BdNMeUCv.js → README-B9foBRQ-.js} +1 -1
- package/storybook-static/assets/{README-BJ7S9lBU.js → README-BCNsNQNj.js} +1 -1
- package/storybook-static/assets/{README-z6dqmkvs.js → README-BGA2Ek3H.js} +1 -1
- package/storybook-static/assets/{README-BT0TE4lM.js → README-BUknkyU6.js} +1 -1
- package/storybook-static/assets/{README-D55OX9pN.js → README-BfGp1q9n.js} +1 -1
- package/storybook-static/assets/{README-Cfj0BoXs.js → README-BhRGrTHx.js} +1 -1
- package/storybook-static/assets/{README-BEZWi2C2.js → README-Bh_zrJ_j.js} +1 -1
- package/storybook-static/assets/{README-lN1Ljv0O.js → README-BlWMNqE5.js} +1 -1
- package/storybook-static/assets/{README-CcRUd05A.js → README-BmKEL3jy.js} +1 -1
- package/storybook-static/assets/{README-CN8Y6HC2.js → README-BoGNjKgW.js} +1 -1
- package/storybook-static/assets/README-Bq8FLza7.js +121 -0
- package/storybook-static/assets/{README-DP8Jhu4s.js → README-BrJaVHU_.js} +1 -1
- package/storybook-static/assets/{README-Csisl067.js → README-BsUvf6lk.js} +37 -8
- package/storybook-static/assets/{README-BWVWcDb4.js → README-C28SDMRx.js} +1 -1
- package/storybook-static/assets/{README-DC6IHyBW.js → README-C8Xo5jEX.js} +1 -1
- package/storybook-static/assets/{README-Cf-es484.js → README-CHw6-PVx.js} +9 -2
- package/storybook-static/assets/{README-D35QrmDs.js → README-CPYFZwZE.js} +1 -1
- package/storybook-static/assets/{README-CaQ_OfNG.js → README-CU_f1CMq.js} +1 -1
- package/storybook-static/assets/{README-j3HSmhET.js → README-C_SQjJtW.js} +1 -1
- package/storybook-static/assets/{README-Des11J57.js → README-C_WyDQDz.js} +1 -1
- package/storybook-static/assets/{README-D93oAq59.js → README-CmK6hELS.js} +1 -1
- package/storybook-static/assets/{README-DIgOgGI7.js → README-CnRKlFuJ.js} +1 -1
- package/storybook-static/assets/{README-B7i5ChbN.js → README-CoD7FHU_.js} +1 -1
- package/storybook-static/assets/{README-CJy-3cCT.js → README-Cs-dnvtW.js} +1 -1
- package/storybook-static/assets/{README-CR0j-jFh.js → README-CzKPWsNs.js} +1 -1
- package/storybook-static/assets/{README-COQcoKT9.js → README-D-TgbUSA.js} +1 -1
- package/storybook-static/assets/{README-CCHc0Xyu.js → README-D6pLFtqL.js} +45 -1
- package/storybook-static/assets/{README-CDaOPhz8.js → README-D7jyja4l.js} +1 -1
- package/storybook-static/assets/{README-DPYg_Acv.js → README-D8YPmvQw.js} +1 -1
- package/storybook-static/assets/{README-Ch7v2uGS.js → README-DG5knhc9.js} +1 -1
- package/storybook-static/assets/{README-LyF6lMIs.js → README-DK-Bw1l1.js} +1 -1
- package/storybook-static/assets/{README-BRfBuhla.js → README-DK-US_zR.js} +1 -1
- package/storybook-static/assets/{README-8YjqwqnH.js → README-DNUrBjgg.js} +1 -1
- package/storybook-static/assets/{README-r-4LRVav.js → README-DPuLgYuK.js} +12 -4
- package/storybook-static/assets/{README-CaM6cf-O.js → README-DgudM-2t.js} +1 -1
- package/storybook-static/assets/{README-iF0ok9Vi.js → README-Ds6OSOC0.js} +1 -1
- package/storybook-static/assets/{README-B6h01Pmu.js → README-DsfBjN9N.js} +1 -1
- package/storybook-static/assets/{README-Rjv-h87w.js → README-Duppk6f6.js} +4 -2
- package/storybook-static/assets/{README-C3jNJJpP.js → README-DvZ8ZhlH.js} +1 -1
- package/storybook-static/assets/{README-CRga2fgb.js → README-DyLt9P77.js} +1 -1
- package/storybook-static/assets/{README-GIOQUZhr.js → README-DzVNZdfo.js} +1 -1
- package/storybook-static/assets/{README-CsYG82LK.js → README-E5QziGK8.js} +1 -1
- package/storybook-static/assets/{README-BRKMZAGf.js → README-EIhMMZ0t.js} +107 -28
- package/storybook-static/assets/{README-Bubi5gTJ.js → README-LqD1V5ru.js} +1 -1
- package/storybook-static/assets/{README-B_NLFfpp.js → README-lgRhlVsq.js} +1 -1
- package/storybook-static/assets/{RadioButton-CCR0zu3W.js → RadioButton-BLHXpf6L.js} +1 -1
- package/storybook-static/assets/{RadioButton-SDIHkMqE.js → RadioButton-CmcExRQs.js} +1 -1
- package/storybook-static/assets/{RadioButton.stories-CWlAzbso.js → RadioButton.stories-P1SEMdJ1.js} +1 -1
- package/storybook-static/assets/{RadioGroup-B8dC3Beb.js → RadioGroup-BBv2Na1n.js} +1 -1
- package/storybook-static/assets/{RadioGroup-CvMAbZis.js → RadioGroup-DkCSA8me.js} +1 -1
- package/storybook-static/assets/{RadioGroup.stories-B7g9iK7V.js → RadioGroup.stories-5-uFHs1b.js} +1 -1
- package/storybook-static/assets/{Scrollable-Duhb4hgF.js → Scrollable-XhGz9dwJ.js} +1 -1
- package/storybook-static/assets/Select-BEMtNq5M.js +12 -0
- package/storybook-static/assets/{Select-HfN2ur_G.js → Select-CyA-PHrU.js} +1 -1
- package/storybook-static/assets/{Select.stories-B9ulZxEn.js → Select.stories-B_GbDG58.js} +1 -1
- package/storybook-static/assets/{SerializableSelect-CnOm3Egr.js → SerializableSelect-CJ74e_Vc.js} +1 -1
- package/storybook-static/assets/{SerializableSelect.stories-Ct4iR6JB.js → SerializableSelect.stories-PUXPFPFx.js} +1 -1
- package/storybook-static/assets/SingleDateTimeInput-BlpQ8t9f.js +1 -0
- package/storybook-static/assets/{SingleDateTimeInput-CoW7Kbyn.js → SingleDateTimeInput-wqb75Yrz.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput.stories-CSMgGAWO.js → SingleDateTimeInput.stories-CdogRh5M.js} +1 -1
- package/storybook-static/assets/{Slider-N8mF8qmG.js → Slider-CZa1f0vP.js} +1 -1
- package/storybook-static/assets/{Slider-B8CLVfcP.js → Slider-r8Be9wJ4.js} +1 -1
- package/storybook-static/assets/{Slider.stories-KBmRK3s8.js → Slider.stories-BUwg0h15.js} +1 -1
- package/storybook-static/assets/{SliderInput-BDJi-cgo.js → SliderInput-BWFbcA5R.js} +1 -1
- package/storybook-static/assets/{SliderInput-BkiUt9jK.js → SliderInput-BaZBNhhF.js} +1 -1
- package/storybook-static/assets/{SliderInput.stories-BYJemRSZ.js → SliderInput.stories-Cbxo0ku_.js} +1 -1
- package/storybook-static/assets/{Sortable-B9KSdQoM.js → Sortable-JfLmQUdm.js} +1 -1
- package/storybook-static/assets/{Sortable.stories-DkgQcmlF.js → Sortable.stories-Cz9xM3Tw.js} +1 -1
- package/storybook-static/assets/{Splitter-RwtbhIP_.js → Splitter-BkQcPRYJ.js} +1 -1
- package/storybook-static/assets/{Splitter.stories-C7WMeiBU.js → Splitter.stories-zQf1fK4D.js} +1 -1
- package/storybook-static/assets/StateSelect-DxH1oWnK.js +4 -0
- package/storybook-static/assets/{StateSelect-Cu3-TJjY.js → StateSelect-TLRMUmko.js} +1 -1
- package/storybook-static/assets/{StateSelect.stories-C1SXNtZm.js → StateSelect.stories-CReLNG_6.js} +1 -1
- package/storybook-static/assets/{StringToggle.stories-CSWTlbeH.js → StringToggle.stories-BYqTdRbD.js} +1 -1
- package/storybook-static/assets/{Switch-C0VQpcAN.js → Switch-ChsLVAse.js} +1 -1
- package/storybook-static/assets/{Switch-CMm26s02.js → Switch-DE9rqHmp.js} +1 -1
- package/storybook-static/assets/{Switch.stories-BdeMw5vh.js → Switch.stories-BaVgLi3_.js} +1 -1
- package/storybook-static/assets/{Table-BdN7l9nU.js → Table-qoMvYV1q.js} +1 -1
- package/storybook-static/assets/{Table.stories-n1jzcEtU.js → Table.stories-BdLScKfS.js} +1 -1
- package/storybook-static/assets/{Tabs-3QRIKQu4.js → Tabs-CuALrdgt.js} +1 -1
- package/storybook-static/assets/{Tabs.stories-Br_vn86G.js → Tabs.stories-BrLtxZ_a.js} +1 -1
- package/storybook-static/assets/{TabsBox-oUhSAA8j.js → TabsBox-DzfWhIHb.js} +1 -1
- package/storybook-static/assets/{TagInput-CXLkDkGR.js → TagInput-Tyn5Jgus.js} +1 -1
- package/storybook-static/assets/{TagInput.stories-Oug-n_Cc.js → TagInput.stories-Bbs3olyB.js} +1 -1
- package/storybook-static/assets/{Text-EA5QyBz4.js → Text-B4GUKigV.js} +1 -1
- package/storybook-static/assets/{Textarea-BhnGClU1.js → Textarea-CNu-scX8.js} +1 -1
- package/storybook-static/assets/{Textarea-JWCJNKsl.js → Textarea-D3iwzB-S.js} +1 -1
- package/storybook-static/assets/{Textarea.stories-nyyWW7AG.js → Textarea.stories-CE2gt74x.js} +1 -1
- package/storybook-static/assets/{TimePanel-CWnqPBjv.js → TimePanel-BESMLCVl.js} +1 -1
- package/storybook-static/assets/{TimePanel.stories-C-iXXNjE.js → TimePanel.stories-BYhTpaoS.js} +1 -1
- package/storybook-static/assets/{Toggle-C_aM5aMQ.js → Toggle-0-SlfDXC.js} +1 -1
- package/storybook-static/assets/{Toggle-DSSRTisC.js → Toggle-BexBc-UO.js} +1 -1
- package/storybook-static/assets/{Toggle.stories-mFCOmo4Y.js → Toggle.stories-CG4rBYOZ.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect-CyW6oUN_.js → TreeMultiSelect-Cne9qXjN.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect-CxOnGdzT.js → TreeMultiSelect-QId1DJUn.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect.stories-CC1X33-d.js → TreeMultiSelect.stories-D6ElJY8Y.js} +1 -1
- package/storybook-static/assets/{TreePickerBase-B5pChx5i.js → TreePickerBase-Dq3HMrua.js} +2 -2
- package/storybook-static/assets/{TreeSelect-LtUUGYjX.js → TreeSelect-BJKtAh4x.js} +1 -1
- package/storybook-static/assets/{TreeSelect-PjRafYC5.js → TreeSelect-q4gdFfBH.js} +1 -1
- package/storybook-static/assets/{TreeSelect.stories-kT556sYJ.js → TreeSelect.stories-DfCxZuVy.js} +1 -1
- package/storybook-static/assets/{TreeTable-MLb4c6PD.js → TreeTable-5fAWCnhQ.js} +1 -1
- package/storybook-static/assets/{TreeTable.stories-CAiwbwxz.js → TreeTable.stories-B1fSfYHg.js} +1 -1
- package/storybook-static/assets/{array-D-_yMMUK-BQ0uu1hZ.js → array-D-_yMMUK-DYqn1Ozn.js} +1 -1
- package/storybook-static/assets/{blocks-DxyL_jCu.js → blocks-B_u8Yt1Z.js} +3 -3
- package/storybook-static/assets/{check-BXD_Pkw4.js → check-r01NGn4c.js} +1 -1
- package/storybook-static/assets/{chevron-down-PsXs4TLU.js → chevron-down-DxMviYn3.js} +1 -1
- package/storybook-static/assets/{chevron-left-C4gxRcJZ.js → chevron-left-mKnQH53V.js} +1 -1
- package/storybook-static/assets/{chevron-right-BoNNSE4i.js → chevron-right-CeJNqWTb.js} +1 -1
- package/storybook-static/assets/{chunk-W22LQPXL-Bw8Gaqb1.js → chunk-W22LQPXL-DorleiwX.js} +1 -1
- package/storybook-static/assets/{circle-alert-C0KskPN2.js → circle-alert-H7OZyDmF.js} +1 -1
- package/storybook-static/assets/{circle-check-BU7bRDDY.js → circle-check-my8Ev6ar.js} +1 -1
- package/storybook-static/assets/{components-BCyH0mtu.js → components-CDMhSXUo.js} +3 -3
- package/storybook-static/assets/{contextMenu-CI7IuUSN.js → contextMenu-fMt3iyZv.js} +1 -1
- package/storybook-static/assets/{defaultRenderers-Dinv2uRZ.js → defaultRenderers-CyUQG_f-.js} +1 -1
- package/storybook-static/assets/{download-Ba6RrPW1.js → download-BCwj5k1S.js} +1 -1
- package/storybook-static/assets/{floating-ui.react-CzenezcL.js → floating-ui.react-Cy32mouo.js} +1 -1
- package/storybook-static/assets/formatters-DVE1YVNQ-CMsbb5-m.js +1 -0
- package/storybook-static/assets/{foundationApi-Cjni4JEg.js → foundationApi-BtZYXGDY.js} +4 -4
- package/storybook-static/assets/{foundationLib-C3-64Grv.js → foundationLib-CHOUG7NK.js} +1 -1
- package/storybook-static/assets/{hooks-DNb8U9od.js → hooks-CEvNG7IN.js} +2 -2
- package/storybook-static/assets/iframe-CDVsimPQ.js +1 -0
- package/storybook-static/assets/{iframe-I7-gyNVJ.js → iframe-DWvPB8Sk.js} +4 -4
- package/storybook-static/assets/{info-HJuo7Txr.js → info-CA6M6l6h.js} +1 -1
- package/storybook-static/assets/odata-CHl7sWAn.js +1 -0
- package/storybook-static/assets/odata-service-CWkHASdw-DAt28ZWr.js +50 -0
- package/storybook-static/assets/{odataStoryFixtures-BlAGWLfC.js → odataStoryFixtures-BvjpoqqT.js} +1 -1
- package/storybook-static/assets/{react-DOm5uwVv.js → react-B37E__uI.js} +1 -1
- package/storybook-static/assets/{refresh-cw-CgbYtCzg.js → refresh-cw-Bt4yd-lG.js} +1 -1
- package/storybook-static/assets/{settings-2-B96G1M3R.js → settings-2-B7Uyk4j8.js} +1 -1
- package/storybook-static/assets/{sortable-CsGAvVat.js → sortable-B8UMQCaH.js} +1 -1
- package/storybook-static/assets/{syntaxhighlighter-QEQV7K2Y-CJHmYDVV.js → syntaxhighlighter-QEQV7K2Y-QGUDFNNj.js} +1 -1
- package/storybook-static/assets/{trash-2-NFv7s58u.js → trash-2-Bhjh1o0B.js} +1 -1
- package/storybook-static/assets/{triangle-alert-DVmi0Yoe.js → triangle-alert-D1c-iB00.js} +1 -1
- package/storybook-static/assets/{useODataSelectBase-DRX6eayS.js → useODataSelectBase-CYnvX8wM.js} +1 -1
- package/storybook-static/assets/{useODataTreeData-D7aS01Or.js → useODataTreeData-C2risfo7.js} +1 -1
- package/storybook-static/assets/{usePickerDefaultFilter-5Q1pAV4d.js → usePickerDefaultFilter-BMBLqfz8.js} +1 -1
- package/storybook-static/assets/{usePickerQuery-D5WukLFG.js → usePickerQuery-CjSFlUmn.js} +1 -1
- package/storybook-static/assets/usePickerTriggerController-Bqo5fhOa.js +6 -0
- package/storybook-static/assets/validators-D82aYLRK.js +1 -0
- package/storybook-static/assets/{x-DlvQAqG5.js → x-B3GmOByS.js} +1 -1
- package/storybook-static/iframe.html +2 -2
- package/storybook-static/index.json +1 -1
- package/storybook-static/project.json +1 -1
- package/storybook-static/assets/LayoutPicker-BIB30zdc.js +0 -376
- package/storybook-static/assets/Listbox-hDPss1Hf.js +0 -1
- package/storybook-static/assets/MultiSelect-BuWgggHX.js +0 -2
- package/storybook-static/assets/PeriodSelect-DIIe0NfH.js +0 -5
- package/storybook-static/assets/README-C5s5K0h_.js +0 -324
- package/storybook-static/assets/Select-B-zeXEgK.js +0 -12
- package/storybook-static/assets/SingleDateTimeInput-BmEpx1-W.js +0 -1
- package/storybook-static/assets/StateSelect-BrgGuYMY.js +0 -4
- package/storybook-static/assets/formatters-D33Uh3si-Df97arf9.js +0 -1
- package/storybook-static/assets/iframe-BHNt9Av8.js +0 -1
- package/storybook-static/assets/odata-6-rqoXfe.js +0 -1
- package/storybook-static/assets/odata-service-CWkHASdw-CXhFi03v.js +0 -3
- package/storybook-static/assets/usePickerTriggerController-e8hbwGar.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":"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"}
|
|
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,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ryuzaki13/react-foundation-ui",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"description": "Reusable React foundation UI primitives and Storybook stories.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Ryuzaki13",
|
|
@@ -384,8 +384,8 @@
|
|
|
384
384
|
"@lexical/rich-text": ">=0.46.0 <1.0.0",
|
|
385
385
|
"@lexical/selection": ">=0.46.0 <1.0.0",
|
|
386
386
|
"@lexical/utils": ">=0.46.0 <1.0.0",
|
|
387
|
-
"@ryuzaki13/react-foundation-api": ">=0.
|
|
388
|
-
"@ryuzaki13/react-foundation-lib": ">=0.
|
|
387
|
+
"@ryuzaki13/react-foundation-api": ">=2.0.0 <3.0.0",
|
|
388
|
+
"@ryuzaki13/react-foundation-lib": ">=2.0.0 <3.0.0",
|
|
389
389
|
"@tanstack/react-query": ">=5.101.4 <6.0.0",
|
|
390
390
|
"@tanstack/react-router": ">=1.170.23 <2.0.0",
|
|
391
391
|
"@tanstack/react-table": ">=9.1.0 <10.0.0",
|
|
@@ -481,8 +481,8 @@
|
|
|
481
481
|
"@lexical/rich-text": "^0.49.0",
|
|
482
482
|
"@lexical/selection": "^0.49.0",
|
|
483
483
|
"@lexical/utils": "^0.49.0",
|
|
484
|
-
"@ryuzaki13/react-foundation-api": "^
|
|
485
|
-
"@ryuzaki13/react-foundation-lib": "^
|
|
484
|
+
"@ryuzaki13/react-foundation-api": "^2.0.0",
|
|
485
|
+
"@ryuzaki13/react-foundation-lib": "^2.0.0",
|
|
486
486
|
"@storybook/addon-a11y": "^10.5.5",
|
|
487
487
|
"@storybook/addon-docs": "^10.5.5",
|
|
488
488
|
"@storybook/addon-vitest": "^10.5.5",
|
|
@@ -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};
|