@ryuzaki13/react-foundation-ui 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/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/dist/status-indicator/StatusIndicator.d.ts +14 -0
- package/dist/status-indicator/StatusIndicator.d.ts.map +1 -0
- package/dist/status-indicator/index.d.ts +2 -0
- package/dist/status-indicator/index.d.ts.map +1 -0
- package/dist/status-indicator/index.js +38 -0
- package/dist/status-indicator/index.js.map +1 -0
- package/dist/styles.css +1 -1
- package/package.json +5 -1
- package/storybook-static/assets/{Badge-DTLs_n8R.js → Badge-BXbiidny.js} +1 -1
- package/storybook-static/assets/{Badge.stories-CovEhEDD.js → Badge.stories-DCOkVsyk.js} +1 -1
- package/storybook-static/assets/{BadgeList-DjTg_9cc.js → BadgeList-DgUScGRc.js} +1 -1
- package/storybook-static/assets/{BarcodeScannerDialog.stories-C5rK3W2F.js → BarcodeScannerDialog.stories-7Bv_TejN.js} +1 -1
- package/storybook-static/assets/{Button-xWt087rv.js → Button-0UDcBhBt.js} +1 -1
- package/storybook-static/assets/{Button-DMPKoI7-.js → Button-BpQRrzrS.js} +1 -1
- package/storybook-static/assets/{Button.stories-ClLOimQw.js → Button.stories-CLMnxj3w.js} +1 -1
- package/storybook-static/assets/{CalendarView-C8D421Nm.js → CalendarView-B93LI4f_.js} +1 -1
- package/storybook-static/assets/{CheckBox-ByaB_AWI.js → CheckBox-BaAouU5d.js} +1 -1
- package/storybook-static/assets/{CheckBox-CHNYWbr9.js → CheckBox-CFusvDS8.js} +1 -1
- package/storybook-static/assets/{CheckBox.stories-DMFiXHJV.js → CheckBox.stories-Bdr_GC0M.js} +1 -1
- package/storybook-static/assets/{Color-6AOWCN3U-CP9Nd4vj.js → Color-6AOWCN3U-B8A6Hc7V.js} +1 -1
- package/storybook-static/assets/{ContextMenu-DSg2_txz.js → ContextMenu-BcNU89-b.js} +1 -1
- package/storybook-static/assets/{ContextMenu-68QC2EAu.js → ContextMenu-CvHpWBGV.js} +1 -1
- package/storybook-static/assets/{ContextMenu.stories-C8CldSPG.js → ContextMenu.stories-DQDlVNxB.js} +1 -1
- package/storybook-static/assets/{CustomOptionButton-xAusSjnU.js → CustomOptionButton-DkGlBvWP.js} +1 -1
- package/storybook-static/assets/{DateInput-2ESK1wDg.js → DateInput-CWsb-NhT.js} +1 -1
- package/storybook-static/assets/{DateInput-DOuoBC8j.js → DateInput-NkrPSWMl.js} +1 -1
- package/storybook-static/assets/{DateInput.stories-D5t5QnTV.js → DateInput.stories-Bvz465d-.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect-C8k5BN7p.js → DateRangePresetSelect-DC6_r8SQ.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect-CD2n8zWv.js → DateRangePresetSelect-DQlphKzc.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect.stories-COktncMK.js → DateRangePresetSelect.stories-DVfqPYN5.js} +1 -1
- package/storybook-static/assets/{Detail-oc_R1sEu.js → Detail-CXQYyd94.js} +1 -1
- package/storybook-static/assets/{Detail.stories-1XrWL_s3.js → Detail.stories-BEXByYXt.js} +1 -1
- package/storybook-static/assets/{Dialog-CLTQa6Kw.js → Dialog-B2UTbDCv.js} +1 -1
- package/storybook-static/assets/{Dialog-CfnOq258.js → Dialog-CyYTYgbp.js} +1 -1
- package/storybook-static/assets/{Dialog.stories-D5PPDse-.js → Dialog.stories-BWluB4Ya.js} +1 -1
- package/storybook-static/assets/{Disclosure-ByNKoHvP.js → Disclosure-Dv5XOsna.js} +1 -1
- package/storybook-static/assets/{Disclosure.stories-CBdZfYjY.js → Disclosure.stories-BxK_fmJE.js} +1 -1
- package/storybook-static/assets/{DisclosureGroup-D3XWBJXQ.js → DisclosureGroup-B2O8D8CG.js} +1 -1
- package/storybook-static/assets/{DocsRenderer-JROSPFPF-gxuFq2Pd.js → DocsRenderer-JROSPFPF-7N0jH0Oi.js} +1 -1
- package/storybook-static/assets/{DropZone-BxLXKfqY.js → DropZone-DL34ooyF.js} +1 -1
- package/storybook-static/assets/{DropZone-C6xiwfG-.js → DropZone-ZlPjdEuO.js} +1 -1
- package/storybook-static/assets/{DropZone.stories-BpRrpoAa.js → DropZone.stories-BT9JvF9d.js} +1 -1
- package/storybook-static/assets/{DropdownMenu-CmzYr9oI.js → DropdownMenu-BhC5f2Qc.js} +1 -1
- package/storybook-static/assets/{ExpandableActionPanel-YeKyHEkM.js → ExpandableActionPanel-C77qVHBP.js} +1 -1
- package/storybook-static/assets/{ExpandableActionPanel.stories-D2Kz4YaV.js → ExpandableActionPanel.stories-D1MJEw6F.js} +1 -1
- package/storybook-static/assets/{Flex-QTek1QSS.js → Flex-BHt3-yoh.js} +1 -1
- package/storybook-static/assets/{Flex.stories-DbQJjxyG.js → Flex.stories-M8QVGuVA.js} +1 -1
- package/storybook-static/assets/{FloatingPopover-Z_pT8RTr.js → FloatingPopover-Dch6_6e0.js} +1 -1
- package/storybook-static/assets/{FormattedTableCell-sTTQO4a-.js → FormattedTableCell-CXyG4Yj2.js} +1 -1
- package/storybook-static/assets/{Grid-BplOAlTQ.js → Grid-CcyaioK_.js} +1 -1
- package/storybook-static/assets/{Grid.stories-3z3Ey-d3.js → Grid.stories-CTHcYkKa.js} +1 -1
- package/storybook-static/assets/{ImageCropper.stories-CRS_mYqv.js → ImageCropper.stories-B84lQIPy.js} +1 -1
- package/storybook-static/assets/{ImageRenderer-B-6CUiXT.js → ImageRenderer-kTsPC-b5.js} +1 -1
- package/storybook-static/assets/{ImageRenderer.stories-r1qsDpQo.js → ImageRenderer.stories-pozsCEPL.js} +1 -1
- package/storybook-static/assets/{ImageView.stories-JTwPOvTV.js → ImageView.stories-CNttofCE.js} +1 -1
- package/storybook-static/assets/{ImageViewer.stories-EXX-1Tq3.js → ImageViewer.stories-D_7oQpyX.js} +2 -2
- package/storybook-static/assets/{ImageViewerRuntime-D9mEsiiW.js → ImageViewerRuntime-Dnc70fBS.js} +1 -1
- package/storybook-static/assets/{Input-o_oY36pr.js → Input-BO9q-b1i.js} +1 -1
- package/storybook-static/assets/{Input-t9m3sVNs.js → Input-DvRmrrtj.js} +1 -1
- package/storybook-static/assets/{Input.stories-BWFSZL_N.js → Input.stories-DeKdGxIC.js} +1 -1
- package/storybook-static/assets/{InputDateTime-lu3pzt-n.js → InputDateTime-hqRtizlN.js} +1 -1
- package/storybook-static/assets/{InputDateTime.stories-DhWcuSxT.js → InputDateTime.stories-BpGhWbRp.js} +1 -1
- package/storybook-static/assets/{InputFile-B5JzTYSK.js → InputFile-CExDbGYJ.js} +1 -1
- package/storybook-static/assets/{InputFile-DR6qGFRh.js → InputFile-CTDHdo2g.js} +1 -1
- package/storybook-static/assets/{InputFile.stories-BDkbSn8C.js → InputFile.stories-BIinoG-U.js} +1 -1
- package/storybook-static/assets/{InputFiles-D1flVl2f.js → InputFiles-BWeRuTCh.js} +1 -1
- package/storybook-static/assets/{InputFiles-CQU1IgFq.js → InputFiles-Cvdn_5IV.js} +1 -1
- package/storybook-static/assets/{InputFiles.stories-DyNBsbIL.js → InputFiles.stories-J2bb48sN.js} +1 -1
- package/storybook-static/assets/{InputFilesList-DcnsEkjI.js → InputFilesList-DO6IJW98.js} +1 -1
- package/storybook-static/assets/{InputImage-trdfpmT-.js → InputImage-BtsIbqEc.js} +1 -1
- package/storybook-static/assets/{InputImage-DyS8prBK.js → InputImage-C7zaIkCa.js} +1 -1
- package/storybook-static/assets/{InputImage.stories-DEk-50bc.js → InputImage.stories--ewdBKin.js} +1 -1
- package/storybook-static/assets/{InteractiveComponents-CJQb2Kqe.js → InteractiveComponents-Cy9Y2J_q.js} +1 -1
- package/storybook-static/assets/{InteractiveComponents.stories-A25AcgXi.js → InteractiveComponents.stories-CgC4nhd3.js} +1 -1
- package/storybook-static/assets/{LayoutPicker-Cyr59f6W.js → LayoutPicker-CfgWKTDC.js} +1 -1
- package/storybook-static/assets/LayoutPicker-DhJgMxdf.js +376 -0
- package/storybook-static/assets/{LayoutPicker.stories-BN6ES2FK.js → LayoutPicker.stories-Bli7rQRh.js} +1 -1
- package/storybook-static/assets/{Listbox-CpOkTSus.js → Listbox-_MNXWNW7.js} +16 -4
- package/storybook-static/assets/Listbox-bq5sSQnZ.js +1 -0
- package/storybook-static/assets/{Listbox.stories-CuJAPNNF.js → Listbox.stories-BP9mqHoo.js} +1 -1
- package/storybook-static/assets/{Modal-BDbbUiVP.js → Modal-CNt7-iWI.js} +1 -1
- package/storybook-static/assets/{Modal-0h4g26vg.js → Modal-Dwqp7agw.js} +1 -1
- package/storybook-static/assets/{Modal.stories-BJTQMX6r.js → Modal.stories-D2Hj75pl.js} +1 -1
- package/storybook-static/assets/{ModalManagerProvider-CKUlkLye.js → ModalManagerProvider-BoCpnUex.js} +1 -1
- package/storybook-static/assets/{MultiSelect-jTomHycE.js → MultiSelect-B1BckUGX.js} +1 -1
- package/storybook-static/assets/MultiSelect-CTfbXQVD.js +2 -0
- package/storybook-static/assets/{MultiSelect.stories-KUrIgYcH.js → MultiSelect.stories-BdMJk22c.js} +1 -1
- package/storybook-static/assets/{NoData-Cg-72gvD.js → NoData-CNK8-UBc.js} +1 -1
- package/storybook-static/assets/{NotificationsHost-BGUy6Nwm.js → NotificationsHost-Cczj_pFY.js} +1 -1
- package/storybook-static/assets/{NotificationsHost.stories-UqcdAxbV.js → NotificationsHost.stories-BPB6hfSI.js} +1 -1
- package/storybook-static/assets/{ODataMultiSelect-ogSmpbiq.js → ODataMultiSelect-CahWMsCQ.js} +1 -1
- package/storybook-static/assets/{ODataMultiSelect.stories-CFSWPA1t.js → ODataMultiSelect.stories-Dnyu2-gz.js} +1 -1
- package/storybook-static/assets/{ODataSelect-XrSMzI_c.js → ODataSelect-DxbjbdNx.js} +1 -1
- package/storybook-static/assets/{ODataSelect.stories-DzQ8kx1B.js → ODataSelect.stories-DfK9yHK7.js} +1 -1
- package/storybook-static/assets/{ODataTreeMultiSelect-Bd6N1nUD.js → ODataTreeMultiSelect-DOgHyKon.js} +1 -1
- package/storybook-static/assets/{ODataTreeMultiSelect.stories-BL3LegRZ.js → ODataTreeMultiSelect.stories-Dv0-ackb.js} +1 -1
- package/storybook-static/assets/{ODataTreeSelect-LP9MrILe.js → ODataTreeSelect-DIoygv27.js} +1 -1
- package/storybook-static/assets/{ODataTreeSelect.stories-B1xaZzaX.js → ODataTreeSelect.stories-D4mZcW9Z.js} +1 -1
- package/storybook-static/assets/{OneStepScroller-Ccn3TcUI.js → OneStepScroller-DNTilSDM.js} +1 -1
- package/storybook-static/assets/{Option-CdzPub1C.js → Option-qcKM13Ly.js} +1 -1
- package/storybook-static/assets/{OptionButton-BmRyJTuO.js → OptionButton-DrNo-DMV.js} +1 -1
- package/storybook-static/assets/{PeriodSelect-kQAjEWSH.js → PeriodSelect-DjzmUohy.js} +1 -1
- package/storybook-static/assets/{PeriodSelect-BngzAU_C.js → PeriodSelect-Dk-_iKeR.js} +1 -1
- package/storybook-static/assets/{PeriodSelect.stories-BRvyn_JH.js → PeriodSelect.stories-d58Lz3DJ.js} +1 -1
- package/storybook-static/assets/PickerField-Dv1S8Wit.js +1 -0
- package/storybook-static/assets/{PickerTriggerActions-C0nuR9kw.js → PickerTriggerActions-dbXPGPRy.js} +1 -1
- package/storybook-static/assets/{Popover-CsDztf-o.js → Popover-DMrefrsO.js} +1 -1
- package/storybook-static/assets/{Popover-GYtSL_1f.js → Popover-tPH8grZD.js} +1 -1
- package/storybook-static/assets/{Popover.stories-Bqt_2L3Y.js → Popover.stories-BGgMddUi.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput-C9G9Gebd.js → PresetRangeDateInput-Bi01AT1-.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput-BSssho5H.js → PresetRangeDateInput-Bi5D7AvA.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput.stories-CwdMXBFw.js → PresetRangeDateInput.stories-BK9PG5Us.js} +1 -1
- package/storybook-static/assets/{PresetSelect-BPsCLuct.js → PresetSelect-Bo_urWXj.js} +1 -1
- package/storybook-static/assets/{README-DtQcSyrT.js → README-5MsrC0tc.js} +1 -1
- package/storybook-static/assets/{README-DS_nuTod.js → README-B2NTIwVC.js} +1 -1
- package/storybook-static/assets/{README-Tw0ZHHwr.js → README-BCXhBI3h.js} +1 -1
- package/storybook-static/assets/{README-vDg-39Yq.js → README-BIYrg5Jw.js} +1 -1
- package/storybook-static/assets/{README-D_a06RNK.js → README-BO0pPMhH.js} +1 -1
- package/storybook-static/assets/{README-D67Ndgh9.js → README-BOY9oCZ5.js} +1 -1
- package/storybook-static/assets/{README-DFCutGv3.js → README-BPDYLPfh.js} +1 -1
- package/storybook-static/assets/{README-Ckp4sw5f.js → README-BRxnSb_H.js} +1 -1
- package/storybook-static/assets/{README-D43Puppu.js → README-BTCDTs4l.js} +1 -1
- package/storybook-static/assets/{README-9XRn3-ED.js → README-BatM3k6o.js} +1 -1
- package/storybook-static/assets/{README-DQysVKmM.js → README-BbwNWG_A.js} +1 -1
- package/storybook-static/assets/{README-DoPWzeQH.js → README-Bccm-jZn.js} +1 -1
- package/storybook-static/assets/{README-C7j7n7jq.js → README-BrnWLQ7I.js} +1 -1
- package/storybook-static/assets/{README-Bq38hDzk.js → README-Bsm0nJfv.js} +1 -1
- package/storybook-static/assets/{README-BYHSzLwv.js → README-BxY8B5jC.js} +1 -1
- package/storybook-static/assets/{README-Dz8_KWoz.js → README-Bzz8tDjY.js} +1 -1
- package/storybook-static/assets/{README-BpmlhmtG.js → README-C1EYYUCN.js} +1 -1
- package/storybook-static/assets/{README-Y1Smckdh.js → README-C9LAWG5A.js} +1 -1
- package/storybook-static/assets/{README-PcQNwv17.js → README-CAYUX5Nb.js} +1 -1
- package/storybook-static/assets/{README-oKCgmTdw.js → README-CDXBNJlU.js} +1 -1
- package/storybook-static/assets/{README-HY5c2Bbn.js → README-CHOXjCGT.js} +1 -1
- package/storybook-static/assets/{README-CXq89IOI.js → README-CIy0Pj6l.js} +1 -1
- package/storybook-static/assets/{README-CV61J_JK.js → README-CLfxQA5V.js} +1 -1
- package/storybook-static/assets/{README-BhoxLtlr.js → README-CSkB_qWo.js} +1 -1
- package/storybook-static/assets/{README-BOBlSnDn.js → README-CUw7AGFv.js} +1 -1
- package/storybook-static/assets/{README-BXb7J1i8.js → README-CgvojwYv.js} +1 -1
- package/storybook-static/assets/{README-CxDM046q.js → README-ChyNimpn.js} +1 -1
- package/storybook-static/assets/{README-DXBpQ2ho.js → README-CiRdh2G1.js} +1 -1
- package/storybook-static/assets/{README-Del1wUfr.js → README-CsYvQc-H.js} +1 -1
- package/storybook-static/assets/{README-C07t0NIU.js → README-CvomZuv4.js} +1 -1
- package/storybook-static/assets/{README-Bc8lHbXV.js → README-D7IkoGLE.js} +1 -1
- package/storybook-static/assets/{README-CJtOh4Sd.js → README-DCitesDJ.js} +1 -1
- package/storybook-static/assets/{README-XW0y0mGh.js → README-DENkRq75.js} +1 -1
- package/storybook-static/assets/{README-DqbwD6RO.js → README-DI6PuVn_.js} +1 -1
- package/storybook-static/assets/{README-DXRNhATk.js → README-DJeVd42x.js} +1 -1
- package/storybook-static/assets/{README-BmzSVH7U.js → README-DLL_V1qq.js} +1 -1
- package/storybook-static/assets/{README-BRpdVUr9.js → README-DNkooR8C.js} +1 -1
- package/storybook-static/assets/{README-BLXGXOo5.js → README-DOqinQqt.js} +1 -1
- package/storybook-static/assets/{README-n1zI-vYE.js → README-DQzhOQJs.js} +1 -1
- package/storybook-static/assets/{README-GLir3V8b.js → README-DRTv3qN5.js} +1 -1
- package/storybook-static/assets/{README-e8EWTIws.js → README-DSx__uJY.js} +1 -1
- package/storybook-static/assets/{README-V9DD9H9z.js → README-DXV0j4Y9.js} +1 -1
- package/storybook-static/assets/{README-BIqQ7jYg.js → README-DnE0W6xN.js} +1 -1
- package/storybook-static/assets/{README-ZguU3X5y.js → README-DnjCb77l.js} +1 -1
- package/storybook-static/assets/{README-wKqwiHb4.js → README-DqTSHU_3.js} +1 -1
- package/storybook-static/assets/{README-pexCW3yI.js → README-G5BEMzLO.js} +1 -1
- package/storybook-static/assets/{README-Do7nnQ_n.js → README-WDknu02X.js} +1 -1
- package/storybook-static/assets/{README-Ba0tB6ZN.js → README-XlmyqVIs.js} +1 -1
- package/storybook-static/assets/{README-C53FAkdN.js → README-cmKi-NfO.js} +1 -1
- package/storybook-static/assets/{README-5RP00KZZ.js → README-iy7SbqPS.js} +1 -1
- package/storybook-static/assets/{README-CVql_W36.js → README-lyLRoc9A.js} +1 -1
- package/storybook-static/assets/{README-D-fVNtRb.js → README-oTjX8jJr.js} +1 -1
- package/storybook-static/assets/{README-DcWifa4y.js → README-qyGL-RQj.js} +1 -1
- package/storybook-static/assets/{RadioButton-DvDDf9wn.js → RadioButton-C5lYvVIl.js} +1 -1
- package/storybook-static/assets/{RadioButton-DGT616TU.js → RadioButton-_-grgF60.js} +1 -1
- package/storybook-static/assets/{RadioButton.stories-BSA2eNrW.js → RadioButton.stories-BNifE29D.js} +1 -1
- package/storybook-static/assets/{RadioGroup-Cj-zQisA.js → RadioGroup-CmDrRqLi.js} +1 -1
- package/storybook-static/assets/{RadioGroup-C_ZapH6C.js → RadioGroup-DWfHyBaQ.js} +1 -1
- package/storybook-static/assets/{RadioGroup.stories-B6HK1X-8.js → RadioGroup.stories-1PW9Krj9.js} +1 -1
- package/storybook-static/assets/{Scrollable-DCvN6Jjw.js → Scrollable-CWkMU4wH.js} +1 -1
- package/storybook-static/assets/Select-BCGnO525.js +12 -0
- package/storybook-static/assets/{Select-DY9-upm8.js → Select-DYtEG5uI.js} +1 -1
- package/storybook-static/assets/{Select.stories-CZ_QR5HG.js → Select.stories-CgldXYRU.js} +1 -1
- package/storybook-static/assets/{SerializableSelect-11vTkd0H.js → SerializableSelect-MmvKHZiv.js} +1 -1
- package/storybook-static/assets/{SerializableSelect.stories-BguIknSO.js → SerializableSelect.stories-Di0iM37P.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput-DCsz6UCV.js → SingleDateTimeInput-Cz2Y7KEq.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput-BoGhy8Ht.js → SingleDateTimeInput-Ds5YsLHg.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput.stories-DxuSYUFA.js → SingleDateTimeInput.stories-BnuERNSZ.js} +1 -1
- package/storybook-static/assets/{Slider-CysM6SsH.js → Slider-CiZ7R_NX.js} +1 -1
- package/storybook-static/assets/{Slider-OjWEFAVX.js → Slider-Csaz4BeY.js} +1 -1
- package/storybook-static/assets/{Slider.stories-D9yfMGAr.js → Slider.stories-7Heg0Pgz.js} +1 -1
- package/storybook-static/assets/{SliderInput-DBTFSE4e.js → SliderInput-bTh2JTHG.js} +1 -1
- package/storybook-static/assets/{SliderInput-CI_NLQ0q.js → SliderInput-qWpLFzxj.js} +1 -1
- package/storybook-static/assets/{SliderInput.stories-D0oX3RFL.js → SliderInput.stories-DR_zyE-u.js} +1 -1
- package/storybook-static/assets/{Sortable-wMgs80Np.js → Sortable-P86Ancoa.js} +1 -1
- package/storybook-static/assets/{Sortable.stories-CzLFp8Yi.js → Sortable.stories-iiOkIM-G.js} +1 -1
- package/storybook-static/assets/{Splitter-BKw_fa4-.js → Splitter-mG3bB-U4.js} +1 -1
- package/storybook-static/assets/{Splitter.stories-BESoJ6o1.js → Splitter.stories-WhQOQVRq.js} +1 -1
- package/storybook-static/assets/{StateSelect-BO-jFCLn.js → StateSelect-De2PQDzp.js} +1 -1
- package/storybook-static/assets/{StateSelect-BwNBFERr.js → StateSelect-u1kaZwdD.js} +1 -1
- package/storybook-static/assets/{StateSelect.stories-BK7SyuXQ.js → StateSelect.stories-BO-C9UTF.js} +1 -1
- package/storybook-static/assets/StatusIndicator-BiTbPB5o.js +37 -0
- package/storybook-static/assets/StatusIndicator-CU9ICMrC.css +1 -0
- package/storybook-static/assets/StatusIndicator.stories-COaZnrFa.js +31 -0
- package/storybook-static/assets/{StringToggle.stories-A6pkEO-O.js → StringToggle.stories-CBt8bXzz.js} +1 -1
- package/storybook-static/assets/{Switch-Ca3gnf5f.js → Switch-BC2KYLX2.js} +1 -1
- package/storybook-static/assets/{Switch-8JotpfFf.js → Switch-BRKFbtp4.js} +1 -1
- package/storybook-static/assets/{Switch.stories-o3vvp8L8.js → Switch.stories-BAmX4W8J.js} +1 -1
- package/storybook-static/assets/{Table-C_IPJbR2.js → Table-D1OJnVmO.js} +1 -1
- package/storybook-static/assets/{Table.stories-DOFEu7Ua.js → Table.stories-C_JSdhJl.js} +1 -1
- package/storybook-static/assets/{Tabs-BLBo4OAv.js → Tabs-DiUKiz-h.js} +1 -1
- package/storybook-static/assets/{Tabs.stories-RBnCQrM-.js → Tabs.stories-DGys1vSD.js} +1 -1
- package/storybook-static/assets/{TabsBox-apqD4XLH.js → TabsBox-D4yfPiDY.js} +1 -1
- package/storybook-static/assets/{TagInput-CSYOG896.js → TagInput-ZyC-89b3.js} +1 -1
- package/storybook-static/assets/{TagInput.stories-BnGuMi6T.js → TagInput.stories-hVoLW5qr.js} +1 -1
- package/storybook-static/assets/{Text-mRhkARXu.js → Text-CMJA_7QZ.js} +1 -1
- package/storybook-static/assets/{Textarea-DS1hM5rM.js → Textarea-DjKw5r4e.js} +1 -1
- package/storybook-static/assets/{Textarea-Covk__BL.js → Textarea-Du012ObX.js} +1 -1
- package/storybook-static/assets/{Textarea.stories-BdpsMxDY.js → Textarea.stories-ShFda4o7.js} +1 -1
- package/storybook-static/assets/{TimePanel-PDYyBCbF.js → TimePanel-Bfkpbjrx.js} +1 -1
- package/storybook-static/assets/{TimePanel.stories-BFS31y6L.js → TimePanel.stories-4pV3fQVB.js} +1 -1
- package/storybook-static/assets/{Toggle-zWHGLyKm.js → Toggle-CPohFihI.js} +1 -1
- package/storybook-static/assets/{Toggle-DTX4Q7y6.js → Toggle-ChC8G1Et.js} +1 -1
- package/storybook-static/assets/{Toggle.stories-fZ7WRE_7.js → Toggle.stories-B3H1M8Ra.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect-BSZO9xe1.js → TreeMultiSelect-BpuHCHgJ.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect-C4y6p4PX.js → TreeMultiSelect-CbNz09Jk.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect.stories-DXKBBf5r.js → TreeMultiSelect.stories-Cmt05HgT.js} +1 -1
- package/storybook-static/assets/{TreePickerBase-CMHFqHVa.js → TreePickerBase-DGvBAQiy.js} +2 -2
- package/storybook-static/assets/{TreeSelect-Dh5uT4_T.js → TreeSelect-C_GCYsA3.js} +1 -1
- package/storybook-static/assets/{TreeSelect-DGXveWx3.js → TreeSelect-DvAlRur3.js} +1 -1
- package/storybook-static/assets/{TreeSelect.stories-Byy-mMTP.js → TreeSelect.stories-Cch2A2z5.js} +1 -1
- package/storybook-static/assets/{TreeTable-BN7J72I8.js → TreeTable-CmVxMvld.js} +1 -1
- package/storybook-static/assets/{TreeTable.stories-FYHTdBr3.js → TreeTable.stories-B46N8o8E.js} +1 -1
- package/storybook-static/assets/{blocks-o5-z1BZu.js → blocks-Bu5I-6jJ.js} +3 -3
- package/storybook-static/assets/{check-C4AaNZYo.js → check-BdRTIK6S.js} +1 -1
- package/storybook-static/assets/{chevron-down-DvNqUDlQ.js → chevron-down-EtmpBUf8.js} +1 -1
- package/storybook-static/assets/{chevron-left-DjMG1A8Y.js → chevron-left-CTLa8HIb.js} +1 -1
- package/storybook-static/assets/{chevron-right-Mitq9JQN.js → chevron-right-D_c_Cvi0.js} +1 -1
- package/storybook-static/assets/{chunk-W22LQPXL-DNwhYDee.js → chunk-W22LQPXL-B7ERYz6B.js} +1 -1
- package/storybook-static/assets/{circle-alert-RsaUYk8p.js → circle-alert-Dj1kZNNX.js} +1 -1
- package/storybook-static/assets/{circle-check-Bf5GP89g.js → circle-check-B1w7Ls8y.js} +1 -1
- package/storybook-static/assets/{components-B4tZ3-vQ.js → components-DqRn1i2k.js} +3 -3
- package/storybook-static/assets/{contextMenu-Ftv13fjh.js → contextMenu-ylNgC9hS.js} +1 -1
- package/storybook-static/assets/{download-BmjzCCZo.js → download-dw_WzNlC.js} +1 -1
- package/storybook-static/assets/{floating-ui.react-BY7cYh9B.js → floating-ui.react-C9sdi3nv.js} +1 -1
- package/storybook-static/assets/{foundationApi-C7zGaHuR.js → foundationApi-BJETphYp.js} +1 -1
- package/storybook-static/assets/{foundationLib-CQpPkJlc.js → foundationLib-DfRlYoD7.js} +1 -1
- package/storybook-static/assets/{hooks-DQXnNniA.js → hooks-B-ZW7F36.js} +1 -1
- package/storybook-static/assets/iframe-COgZ5GwG.js +1 -0
- package/storybook-static/assets/{iframe-Cb11iJVP.js → iframe-D0R9pFj7.js} +4 -4
- package/storybook-static/assets/{info-BmiY6Ur5.js → info-B0qzF0Mr.js} +1 -1
- package/storybook-static/assets/{odata-D-cQAIdp.js → odata-tqjAk19x.js} +1 -1
- package/storybook-static/assets/{odataStoryFixtures-BddSr1SB.js → odataStoryFixtures-D2yHs_jK.js} +1 -1
- package/storybook-static/assets/{react-wmXnhrTV.js → react-ClkCNz5L.js} +1 -1
- package/storybook-static/assets/{refresh-cw-BoUt7cjC.js → refresh-cw-K68D1zRy.js} +1 -1
- package/storybook-static/assets/{settings-2-BnEmfu4n.js → settings-2-D0jFfhpt.js} +1 -1
- package/storybook-static/assets/{sortable-BG6M9j0E.js → sortable-fWu4d9fl.js} +1 -1
- package/storybook-static/assets/{syntaxhighlighter-QEQV7K2Y-DTU-Nj55.js → syntaxhighlighter-QEQV7K2Y-Cs3Bxe3I.js} +1 -1
- package/storybook-static/assets/{trash-2-CEuSrdHe.js → trash-2-Bj60L0sq.js} +1 -1
- package/storybook-static/assets/{triangle-alert-BB6HrHL-.js → triangle-alert-CmzQ-r9i.js} +1 -1
- package/storybook-static/assets/{useODataSelectBase-DiMVVy-k.js → useODataSelectBase-CC4MnYeK.js} +1 -1
- package/storybook-static/assets/{useODataTreeData-DiV_gN4z.js → useODataTreeData-DsQmGQij.js} +1 -1
- package/storybook-static/assets/{usePickerQuery-Dc3Jdhg0.js → usePickerQuery-Qg7qGfmP.js} +1 -1
- package/storybook-static/assets/usePickerTriggerController-D-mhhmpS.js +6 -0
- package/storybook-static/assets/{x-CcdATVNL.js → x-DU3Tpzms.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-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":"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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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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { HTMLAttributes } from "react";
|
|
2
|
+
import type { UiSize, UiTone } from "../types";
|
|
3
|
+
export type StatusIndicatorTone = Exclude<UiTone, "brand">;
|
|
4
|
+
export type StatusIndicatorSize = Extract<UiSize, "sm" | "md" | "lg">;
|
|
5
|
+
export interface StatusIndicatorProps extends Omit<HTMLAttributes<HTMLSpanElement>, "children"> {
|
|
6
|
+
tone?: StatusIndicatorTone;
|
|
7
|
+
size?: StatusIndicatorSize;
|
|
8
|
+
animated?: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Декоративный цветовой маркер статуса. Передавайте смысл состояния видимым текстом рядом с индикатором.
|
|
12
|
+
*/
|
|
13
|
+
export declare function StatusIndicator({ tone, size, animated, className, ...htmlProps }: StatusIndicatorProps): import("react").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=StatusIndicator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatusIndicator.d.ts","sourceRoot":"","sources":["../../src/status-indicator/StatusIndicator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAM5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAE/C,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC3D,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AAEtE,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,UAAU,CAAC;IAC9F,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAgBD;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,IAAgB,EAAE,IAAW,EAAE,QAAgB,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,EAAE,oBAAoB,+BAajI"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/status-indicator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { cn as e } from "@ryuzaki13/react-foundation-lib/utils";
|
|
2
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
3
|
+
var n = {
|
|
4
|
+
statusIndicator: "bJvCcD",
|
|
5
|
+
neutral: "UhVDLa",
|
|
6
|
+
info: "bRw83O",
|
|
7
|
+
success: "VQh7sh",
|
|
8
|
+
warning: "zdESHk",
|
|
9
|
+
error: "-KLln9",
|
|
10
|
+
sizeSm: "Ak9M6g",
|
|
11
|
+
sizeMd: "_43MsRd",
|
|
12
|
+
sizeLg: "FpGv5-",
|
|
13
|
+
animated: "y-1aex",
|
|
14
|
+
statusIndicatorPulse: "_56N544"
|
|
15
|
+
}, r = {
|
|
16
|
+
neutral: n.neutral,
|
|
17
|
+
info: n.info,
|
|
18
|
+
success: n.success,
|
|
19
|
+
warning: n.warning,
|
|
20
|
+
error: n.error
|
|
21
|
+
}, i = {
|
|
22
|
+
sm: n.sizeSm,
|
|
23
|
+
md: n.sizeMd,
|
|
24
|
+
lg: n.sizeLg
|
|
25
|
+
};
|
|
26
|
+
function a({ tone: a = "neutral", size: o = "md", animated: s = !1, className: c, ...l }) {
|
|
27
|
+
let u = l.role !== void 0 || l["aria-label"] !== void 0 || l["aria-labelledby"] !== void 0, d = l["aria-hidden"] ?? (!u || void 0);
|
|
28
|
+
return /* @__PURE__ */ t("span", {
|
|
29
|
+
...l,
|
|
30
|
+
className: e(n.statusIndicator, r[a], i[o], s && n.animated, c),
|
|
31
|
+
"aria-hidden": d,
|
|
32
|
+
"data-ui": "status-indicator"
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
//#endregion
|
|
36
|
+
export { a as StatusIndicator };
|
|
37
|
+
|
|
38
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/status-indicator/StatusIndicator.module.scss","../../src/status-indicator/StatusIndicator.tsx"],"sourcesContent":[".statusIndicator {\n\t--status-indicator-fill: var(--status-neutral-fill);\n\t--status-indicator-size: 0.5em;\n\n\tdisplay: inline-block;\n\tflex: 0 0 auto;\n\twidth: var(--status-indicator-size);\n\theight: var(--status-indicator-size);\n\tborder-radius: 50%;\n\tvertical-align: middle;\n\tbackground-color: var(--status-indicator-fill);\n}\n\n.neutral {\n\t--status-indicator-fill: var(--status-neutral-fill);\n}\n\n.info {\n\t--status-indicator-fill: var(--status-info-fill);\n}\n\n.success {\n\t--status-indicator-fill: var(--status-success-fill);\n}\n\n.warning {\n\t--status-indicator-fill: var(--status-warning-fill);\n}\n\n.error {\n\t--status-indicator-fill: var(--status-error-fill);\n}\n\n.sizeSm {\n\t--status-indicator-size: 0.375em;\n}\n\n.sizeMd {\n\t--status-indicator-size: 0.5em;\n}\n\n.sizeLg {\n\t--status-indicator-size: 0.75em;\n}\n\n.animated {\n\ttransform-origin: center;\n\tanimation: statusIndicatorPulse var(--animation-2s) ease-in-out infinite;\n}\n\n@keyframes statusIndicatorPulse {\n\t0%,\n\t100% {\n\t\topacity: 0.7;\n\t\ttransform: scale(0.9);\n\t}\n\n\t50% {\n\t\topacity: 1;\n\t\ttransform: scale(1.05);\n\t}\n}\n\n@media (prefers-reduced-motion: reduce) {\n\t.animated {\n\t\tanimation: none;\n\t}\n}\n","import type { HTMLAttributes } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport styles from \"./StatusIndicator.module.scss\";\n\nimport type { UiSize, UiTone } from \"../types\";\n\nexport type StatusIndicatorTone = Exclude<UiTone, \"brand\">;\nexport type StatusIndicatorSize = Extract<UiSize, \"sm\" | \"md\" | \"lg\">;\n\nexport interface StatusIndicatorProps extends Omit<HTMLAttributes<HTMLSpanElement>, \"children\"> {\n\ttone?: StatusIndicatorTone;\n\tsize?: StatusIndicatorSize;\n\tanimated?: boolean;\n}\n\nconst toneClasses: Record<StatusIndicatorTone, string> = {\n\tneutral: styles.neutral,\n\tinfo: styles.info,\n\tsuccess: styles.success,\n\twarning: styles.warning,\n\terror: styles.error\n};\n\nconst sizeClasses: Record<StatusIndicatorSize, string> = {\n\tsm: styles.sizeSm,\n\tmd: styles.sizeMd,\n\tlg: styles.sizeLg\n};\n\n/**\n * Декоративный цветовой маркер статуса. Передавайте смысл состояния видимым текстом рядом с индикатором.\n */\nexport function StatusIndicator({ tone = \"neutral\", size = \"md\", animated = false, className, ...htmlProps }: StatusIndicatorProps) {\n\tconst hasAccessibleSemantics =\n\t\thtmlProps.role !== undefined || htmlProps[\"aria-label\"] !== undefined || htmlProps[\"aria-labelledby\"] !== undefined;\n\tconst ariaHidden = htmlProps[\"aria-hidden\"] ?? (hasAccessibleSemantics ? undefined : true);\n\n\treturn (\n\t\t<span\n\t\t\t{...htmlProps}\n\t\t\tclassName={cn(styles.statusIndicator, toneClasses[tone], sizeClasses[size], animated && styles.animated, className)}\n\t\t\taria-hidden={ariaHidden}\n\t\t\tdata-ui=\"status-indicator\"\n\t\t/>\n\t);\n}\n"],"mappings":";;;;;;;;;;;;;;GCiBM,IAAmD;CACxD,SAAS,EAAO;CAChB,MAAM,EAAO;CACb,SAAS,EAAO;CAChB,SAAS,EAAO;CAChB,OAAO,EAAO;AACf,GAEM,IAAmD;CACxD,IAAI,EAAO;CACX,IAAI,EAAO;CACX,IAAI,EAAO;AACZ;AAKA,SAAgB,EAAgB,EAAE,UAAO,WAAW,UAAO,MAAM,cAAW,IAAO,cAAW,GAAG,KAAmC;CACnI,IAAM,IACL,EAAU,SAAS,KAAA,KAAa,EAAU,kBAAkB,KAAA,KAAa,EAAU,uBAAuB,KAAA,GACrG,IAAa,EAAU,mBAAmB,MAAyB,KAAA;CAEzE,OACC,kBAAC,QAAD;EACC,GAAI;EACJ,WAAW,EAAG,EAAO,iBAAiB,EAAY,IAAO,EAAY,IAAO,KAAY,EAAO,UAAU,CAAS;EAClH,eAAa;EACb,WAAQ;CACR,CAAA;AAEH"}
|