@ryuzaki13/react-foundation-ui 3.7.0 → 3.7.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/styles.css +1 -1
- package/dist/tabs/index.js +20 -13
- package/dist/tabs/index.js.map +1 -1
- package/dist/tabs/ui/TabsBox.d.ts.map +1 -1
- package/dist/tabs/ui/TabsLayout.d.ts.map +1 -1
- package/package.json +1 -1
- package/storybook-static/assets/{Badge-CV3f-YLa.js → Badge-DTUYnjUJ.js} +1 -1
- package/storybook-static/assets/{Badge.stories-BUPuimKi.js → Badge.stories-rjlZcsBa.js} +1 -1
- package/storybook-static/assets/{BadgeList-CDDAItI6.js → BadgeList-xlIWwEkW.js} +1 -1
- package/storybook-static/assets/{BarcodeScannerDialog.stories-teB8ep3A.js → BarcodeScannerDialog.stories-qfMXeaVE.js} +1 -1
- package/storybook-static/assets/{Button-BW8cBp03.js → Button-CBG6iR1d.js} +1 -1
- package/storybook-static/assets/{Button-CV4tslOZ.js → Button-CdRjxwHf.js} +1 -1
- package/storybook-static/assets/{Button.stories-DKlzPZqU.js → Button.stories-DbtwVXli.js} +1 -1
- package/storybook-static/assets/{CalendarView-CX2J7c6F.js → CalendarView-BX0PAy5V.js} +1 -1
- package/storybook-static/assets/{CheckBox-BTr4z78V.js → CheckBox-4raP7tMo.js} +1 -1
- package/storybook-static/assets/{CheckBox-BWZ_P_3Q.js → CheckBox-Dxyvwx9w.js} +1 -1
- package/storybook-static/assets/{CheckBox.stories-BUaJvDIu.js → CheckBox.stories-HBKpJ12Q.js} +1 -1
- package/storybook-static/assets/{Color-6AOWCN3U-DmrUSa8T.js → Color-6AOWCN3U-Bmlc4WNM.js} +1 -1
- package/storybook-static/assets/{ContextMenu-wBO-KcfV.js → ContextMenu-Cs3dFpcR.js} +1 -1
- package/storybook-static/assets/{ContextMenu-DsJnOtZ9.js → ContextMenu-CvsCDdTo.js} +1 -1
- package/storybook-static/assets/{ContextMenu.stories-CNOrf21k.js → ContextMenu.stories-DUco2ooo.js} +1 -1
- package/storybook-static/assets/{DateInput-DbZNB8s8.js → DateInput-BzH2yWLd.js} +1 -1
- package/storybook-static/assets/{DateInput-xQJfyfF-.js → DateInput-C876uAev.js} +1 -1
- package/storybook-static/assets/{DateInput.stories-DAku4mZt.js → DateInput.stories-B96RHwnv.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect-DHoyZyQT.js → DateRangePresetSelect-CDIZjlZR.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect-BPlpCA6c.js → DateRangePresetSelect-Dt6gakU3.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect.stories-DRvogj0c.js → DateRangePresetSelect.stories-CowdHg25.js} +1 -1
- package/storybook-static/assets/{Detail-mXagpId3.js → Detail-5gzUBcgn.js} +1 -1
- package/storybook-static/assets/{Detail.stories-D7Iwy0-s.js → Detail.stories-BmfI0TB_.js} +1 -1
- package/storybook-static/assets/{Dialog-qRvPPGeh.js → Dialog-B6cxAYUL.js} +1 -1
- package/storybook-static/assets/{Dialog-CMqH_KAI.js → Dialog-DGjQw2Fl.js} +1 -1
- package/storybook-static/assets/{Dialog.stories-J_OyVz3O.js → Dialog.stories-DGN5bZB0.js} +1 -1
- package/storybook-static/assets/{Disclosure-TdbPZNSu.js → Disclosure-BD6JU91g.js} +1 -1
- package/storybook-static/assets/{Disclosure.stories-DRoDp_Fu.js → Disclosure.stories-Blp4sjjH.js} +1 -1
- package/storybook-static/assets/{DisclosureGroup-CeBLtSCA.js → DisclosureGroup-DSs17wh1.js} +1 -1
- package/storybook-static/assets/{DocsRenderer-JROSPFPF-BdyHYSwz.js → DocsRenderer-JROSPFPF-DjsQFu6U.js} +1 -1
- package/storybook-static/assets/{DropZone-CODtJSpF.js → DropZone-BWY1s904.js} +1 -1
- package/storybook-static/assets/{DropZone-BzRKfOtd.js → DropZone-CBJ8D9YW.js} +1 -1
- package/storybook-static/assets/{DropZone.stories-BzNj9PbZ.js → DropZone.stories-BYg0y5zw.js} +1 -1
- package/storybook-static/assets/{DropdownMenu-Db-sh5Gd.js → DropdownMenu-DyxhrZHn.js} +1 -1
- package/storybook-static/assets/{ExpandableActionPanel-fOfO1fQV.js → ExpandableActionPanel-utF3k6nI.js} +1 -1
- package/storybook-static/assets/{ExpandableActionPanel.stories-C6Si_Nqk.js → ExpandableActionPanel.stories-6eYg64t8.js} +1 -1
- package/storybook-static/assets/{Flex-B9KnOucm.js → Flex-CpoGbzxR.js} +1 -1
- package/storybook-static/assets/{Flex.stories-ApvEyW4R.js → Flex.stories-DZ2R5uxU.js} +1 -1
- package/storybook-static/assets/{FlexContainer-B1y3dds2.js → FlexContainer-BK3kWiEq.js} +1 -1
- package/storybook-static/assets/{FlexItem-pEuFUX72.js → FlexItem-CmF4ezss.js} +1 -1
- package/storybook-static/assets/{FloatingPopover-CjNAEFQy.js → FloatingPopover-beid_uAU.js} +1 -1
- package/storybook-static/assets/{FormattedTableCell-DZM2eYz5.js → FormattedTableCell-BCzWQE6v.js} +1 -1
- package/storybook-static/assets/{Grid-NnstE-Tl.js → Grid-CbETXUvg.js} +1 -1
- package/storybook-static/assets/{Grid-CI6OKKu8.js → Grid-DQAYnIjp.js} +1 -1
- package/storybook-static/assets/{Grid.stories-tklnzZVg.js → Grid.stories-QZi3H8un.js} +1 -1
- package/storybook-static/assets/{GridContainer-wl6R6ToY.js → GridContainer-Dx_kHFve.js} +1 -1
- package/storybook-static/assets/{ImageCropper.stories-DFN1M8eV.js → ImageCropper.stories-hu3ETBrw.js} +1 -1
- package/storybook-static/assets/{ImageRenderer-CsIh2Gps.js → ImageRenderer-oV4w6Hxt.js} +1 -1
- package/storybook-static/assets/{ImageRenderer.stories-CFg_ibLF.js → ImageRenderer.stories-DzsFGL36.js} +1 -1
- package/storybook-static/assets/{ImageView.stories-HHd7jrjM.js → ImageView.stories-CKQ-ebNE.js} +1 -1
- package/storybook-static/assets/{ImageViewer.stories-DgWkr466.js → ImageViewer.stories-WppljG-8.js} +2 -2
- package/storybook-static/assets/{ImageViewerRuntime-6z6zV9jF.js → ImageViewerRuntime-BPONS1mi.js} +1 -1
- package/storybook-static/assets/{Input-Bvw9Sw0g.js → Input-BOFE5lvG.js} +1 -1
- package/storybook-static/assets/{Input-B7_Qlowr.js → Input-DMvnYoIe.js} +1 -1
- package/storybook-static/assets/{Input.stories-Dc2sDy4p.js → Input.stories-BqUmk40r.js} +1 -1
- package/storybook-static/assets/{InputDateTime-DUkFFY2j.js → InputDateTime-D3pmNdmh.js} +1 -1
- package/storybook-static/assets/{InputDateTime.stories-WZXWHrjO.js → InputDateTime.stories-kvtjuevO.js} +1 -1
- package/storybook-static/assets/{InputFile-DJE39TQT.js → InputFile-CKwYU9U_.js} +1 -1
- package/storybook-static/assets/{InputFile-CR2m2VQy.js → InputFile-DBXedT6h.js} +1 -1
- package/storybook-static/assets/{InputFile.stories-BxE2jR8X.js → InputFile.stories-ehK-UK6n.js} +1 -1
- package/storybook-static/assets/{InputFiles-CMkLLJOH.js → InputFiles-B7Xf4zSp.js} +1 -1
- package/storybook-static/assets/{InputFiles-CTD2obOb.js → InputFiles-BuMatkQD.js} +1 -1
- package/storybook-static/assets/{InputFiles.stories-CeLIDMcH.js → InputFiles.stories-DqZRcFkG.js} +1 -1
- package/storybook-static/assets/{InputFilesList-tUr9ob4W.js → InputFilesList-DPPmTQ1K.js} +1 -1
- package/storybook-static/assets/{InputImage-C0cIhVXy.js → InputImage-XIGsJtM-.js} +1 -1
- package/storybook-static/assets/{InputImage-CoAYtfEV.js → InputImage-YPK4ZSDe.js} +1 -1
- package/storybook-static/assets/{InputImage.stories-DpXv7PID.js → InputImage.stories-CZiBoenh.js} +1 -1
- package/storybook-static/assets/{InteractiveComponents-Dmyiy24S.js → InteractiveComponents-CSvun0IP.js} +1 -1
- package/storybook-static/assets/{InteractiveComponents.stories-B77oJ-sY.js → InteractiveComponents.stories-DY0ygaRD.js} +1 -1
- package/storybook-static/assets/{LayoutPicker-CJcSQqwn.js → LayoutPicker-3jtKH77d.js} +1 -1
- package/storybook-static/assets/{LayoutPicker-MTeK4NeO.js → LayoutPicker-BXfi7odv.js} +1 -1
- package/storybook-static/assets/{LayoutPicker.stories-CcY356LI.js → LayoutPicker.stories-CmGAGY2E.js} +1 -1
- package/storybook-static/assets/{Listbox-BGYVb_Ct.js → Listbox-B7mjWKH_.js} +1 -1
- package/storybook-static/assets/{Listbox-Cv9AQzQU.js → Listbox-CVPng_Wi.js} +1 -1
- package/storybook-static/assets/{Listbox.stories-C9_cOdMY.js → Listbox.stories-DAyqK_9S.js} +1 -1
- package/storybook-static/assets/{Modal-CnMZc0y1.js → Modal-BPnqryDJ.js} +1 -1
- package/storybook-static/assets/{Modal-CHcZjpHv.js → Modal-Chsv1ktM.js} +1 -1
- package/storybook-static/assets/{Modal.stories-DxITHZDl.js → Modal.stories-BrUWLwmT.js} +1 -1
- package/storybook-static/assets/{ModalManagerProvider-vGXTuniv.js → ModalManagerProvider-Bzz6KbJq.js} +1 -1
- package/storybook-static/assets/{MultiSelect-DqdwstLi.js → MultiSelect-BZQy9Xsb.js} +1 -1
- package/storybook-static/assets/{MultiSelect-DDC0Nrrq.js → MultiSelect-odpQ0Zm5.js} +1 -1
- package/storybook-static/assets/{MultiSelect.stories-BPsGXWR2.js → MultiSelect.stories-B2wnVhGS.js} +1 -1
- package/storybook-static/assets/{NoData-BlGdaWe6.js → NoData-gI3QuiQP.js} +1 -1
- package/storybook-static/assets/{NotificationsHost-gXnNQDp7.js → NotificationsHost-Bp69wBpO.js} +1 -1
- package/storybook-static/assets/{NotificationsHost.stories-BdkJz6WZ.js → NotificationsHost.stories-H0M2_6Ql.js} +1 -1
- package/storybook-static/assets/{ODataMultiSelect-C_Qs3Nl4.js → ODataMultiSelect-BWrI3liD.js} +1 -1
- package/storybook-static/assets/{ODataMultiSelect.stories-DfmeONnP.js → ODataMultiSelect.stories-g6CYTf9s.js} +1 -1
- package/storybook-static/assets/{ODataSelect-C5fwwi_V.js → ODataSelect-CEoeJfMu.js} +1 -1
- package/storybook-static/assets/{ODataSelect.stories-BCDjW9Of.js → ODataSelect.stories-BgqAo36O.js} +1 -1
- package/storybook-static/assets/{ODataTreeMultiSelect-bU2QW5pt.js → ODataTreeMultiSelect-DP0bwv4M.js} +1 -1
- package/storybook-static/assets/{ODataTreeMultiSelect.stories-FRT1vULJ.js → ODataTreeMultiSelect.stories-DYdYFhcJ.js} +1 -1
- package/storybook-static/assets/{ODataTreeSelect-DmNcnlbz.js → ODataTreeSelect-B_bhHDSr.js} +1 -1
- package/storybook-static/assets/{ODataTreeSelect.stories-B9Mq-Iq-.js → ODataTreeSelect.stories-C5ygaR7b.js} +1 -1
- package/storybook-static/assets/{OneStepScroller-X_sOKCiI.js → OneStepScroller-Dp5Iva_A.js} +1 -1
- package/storybook-static/assets/{Option-CSut1BkS.js → Option-DtZ6Qlvd.js} +1 -1
- package/storybook-static/assets/{OptionButton-B7wOhE1V.js → OptionButton-BQo4zeny.js} +1 -1
- package/storybook-static/assets/{OptionContent-DyxUQFu3.js → OptionContent-Yz54kdhn.js} +1 -1
- package/storybook-static/assets/{OptionContentContainer-DnzI9J61.js → OptionContentContainer-DL2-HjT2.js} +1 -1
- package/storybook-static/assets/{PeriodSelect-C1Rh75We.js → PeriodSelect-ClMxvzvw.js} +1 -1
- package/storybook-static/assets/{PeriodSelect-SjGK6Esp.js → PeriodSelect-iGcNtPrN.js} +1 -1
- package/storybook-static/assets/{PeriodSelect.stories-Bch3cN5l.js → PeriodSelect.stories-LNVQiPZe.js} +1 -1
- package/storybook-static/assets/{PickerField-B8_SoyYo.js → PickerField-BEMDq9NM.js} +1 -1
- package/storybook-static/assets/{PickerTriggerActions-DP0ZKD9L.js → PickerTriggerActions-D6nW7xw5.js} +1 -1
- package/storybook-static/assets/{Popover-DF-J3Kwx.js → Popover-BTz7W53N.js} +1 -1
- package/storybook-static/assets/{Popover-NBKcB7nc.js → Popover-C-MzjE4n.js} +1 -1
- package/storybook-static/assets/{Popover.stories-BGcAWbjW.js → Popover.stories-CI98uwbF.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput-DajjeSUc.js → PresetRangeDateInput-CA4KuCnV.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput-BAbrOHdm.js → PresetRangeDateInput-DPfbbRXi.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput.stories-Bf7YKKIQ.js → PresetRangeDateInput.stories-D5HMDaN8.js} +1 -1
- package/storybook-static/assets/{PresetSelect-CfmPZsZF.js → PresetSelect-CBFkq_MZ.js} +1 -1
- package/storybook-static/assets/{README-DUh3QGlI.js → README--OEk0Qmq.js} +1 -1
- package/storybook-static/assets/{README-BwhJA_em.js → README-B6KY4Oml.js} +1 -1
- package/storybook-static/assets/{README-CxURTiLk.js → README-B72Uf36c.js} +1 -1
- package/storybook-static/assets/{README-Ce9KyfEM.js → README-BRKPiLo6.js} +1 -1
- package/storybook-static/assets/{README-BGZN87_w.js → README-BY1Kg6xN.js} +1 -1
- package/storybook-static/assets/{README-Cj8rKrp5.js → README-BZRJIzio.js} +1 -1
- package/storybook-static/assets/{README-Bb5AJH8-.js → README-BaHSujqA.js} +1 -1
- package/storybook-static/assets/{README-DRxLVin-.js → README-Bc8GTovB.js} +1 -1
- package/storybook-static/assets/{README-Bk_A3mYt.js → README-BdyEui6q.js} +1 -1
- package/storybook-static/assets/{README-B4-JBF7Z.js → README-BhCbRil6.js} +1 -1
- package/storybook-static/assets/{README-Bew3UK8F.js → README-BiowDKRn.js} +1 -1
- package/storybook-static/assets/{README-Yp7ckVfi.js → README-BtmHHjrx.js} +1 -1
- package/storybook-static/assets/{README-DTE8nUeJ.js → README-By8-yszE.js} +1 -1
- package/storybook-static/assets/{README-DBsUCpqI.js → README-CE7L7eIW.js} +1 -1
- package/storybook-static/assets/{README-CCqwPYoe.js → README-CJOB-kej.js} +1 -1
- package/storybook-static/assets/{README-CijcMn5M.js → README-CPUclLXO.js} +1 -1
- package/storybook-static/assets/{README-CkYzrLaV.js → README-CQimRT6Y.js} +1 -1
- package/storybook-static/assets/{README-BUhZmzyX.js → README-CRovKmdk.js} +1 -1
- package/storybook-static/assets/{README-C-fD13Eo.js → README-CT2RZVHo.js} +1 -1
- package/storybook-static/assets/{README-BzhO6nn7.js → README-CU0zq6IL.js} +1 -1
- package/storybook-static/assets/{README-hq5hkADm.js → README-CUuFCVw8.js} +1 -1
- package/storybook-static/assets/{README-cBsDQvLg.js → README-CsZoOp9e.js} +1 -1
- package/storybook-static/assets/{README-CBYHjEjb.js → README-CtjmyPW7.js} +1 -1
- package/storybook-static/assets/{README-02MdhoYj.js → README-CtvayE8p.js} +1 -1
- package/storybook-static/assets/{README-DfrkaWMN.js → README-CuWuOeTb.js} +1 -1
- package/storybook-static/assets/{README-CKDAq2L0.js → README-Cy5W56vi.js} +1 -1
- package/storybook-static/assets/{README-DLlWedYv.js → README-D1jzSNUb.js} +1 -1
- package/storybook-static/assets/{README-BlTlxb7s.js → README-D3_68wtX.js} +1 -1
- package/storybook-static/assets/{README-kYUqgwYs.js → README-D74YjDJd.js} +1 -1
- package/storybook-static/assets/{README-BRvVmpDS.js → README-D8rLYV25.js} +1 -1
- package/storybook-static/assets/{README-ZzFd6eCk.js → README-DE0GwuA6.js} +1 -1
- package/storybook-static/assets/{README-l9uKtPiZ.js → README-DGWMICIa.js} +1 -1
- package/storybook-static/assets/{README-CJKEEjnI.js → README-DZA9maG5.js} +1 -1
- package/storybook-static/assets/{README--xvSptx6.js → README-Da6Nl1Ll.js} +1 -1
- package/storybook-static/assets/{README-DlJZHUr9.js → README-DbhmYFzX.js} +1 -1
- package/storybook-static/assets/{README-CXNyh6Hq.js → README-DcUxIvbg.js} +1 -1
- package/storybook-static/assets/{README-5JPwN5I3.js → README-DeBp5e_z.js} +1 -1
- package/storybook-static/assets/{README-DzfnNMhi.js → README-DiX-h2b0.js} +1 -1
- package/storybook-static/assets/{README-CvqMprlS.js → README-DiXrdaJ_.js} +1 -1
- package/storybook-static/assets/{README-B35CL6W4.js → README-Dr92oepc.js} +1 -1
- package/storybook-static/assets/{README-23NGVX-l.js → README-HMss6sQH.js} +1 -1
- package/storybook-static/assets/{README-C2dMbb8z.js → README-IU1lQ3yM.js} +1 -1
- package/storybook-static/assets/{README-EjFzMh6K.js → README-KCCeREhX.js} +1 -1
- package/storybook-static/assets/{README-DJ53d7sm.js → README-KN1rC4P4.js} +1 -1
- package/storybook-static/assets/{README-BqHDKN3N.js → README-NVT3zwjJ.js} +1 -1
- package/storybook-static/assets/{README-C7gQVhLI.js → README-O4Hp1X2l.js} +1 -1
- package/storybook-static/assets/{README-Dm0fH6Ac.js → README-PFHdcB2Q.js} +1 -1
- package/storybook-static/assets/{README-DD2eTjZe.js → README-bsNRkuj0.js} +1 -1
- package/storybook-static/assets/{README-3bVCOGDc.js → README-eAQUctyx.js} +1 -1
- package/storybook-static/assets/{README-C79arOAr.js → README-iF6KmOih.js} +1 -1
- package/storybook-static/assets/{README-B5cX2glk.js → README-vfpe_LWh.js} +1 -1
- package/storybook-static/assets/{README-BNTTx0rf.js → README-xRzBwPsx.js} +1 -1
- package/storybook-static/assets/{README-DvgeFwUN.js → README-xnGLJkj-.js} +1 -1
- package/storybook-static/assets/{RadioButton-BDpUjCQB.js → RadioButton-4iBITH-x.js} +1 -1
- package/storybook-static/assets/{RadioButton-BWpGjwT9.js → RadioButton-QWhy6_MB.js} +1 -1
- package/storybook-static/assets/{RadioButton.stories-DrOP5Alc.js → RadioButton.stories-1zA_8wcS.js} +1 -1
- package/storybook-static/assets/{RadioGroup-BljW3G4c.js → RadioGroup-BSIdg5x1.js} +1 -1
- package/storybook-static/assets/{RadioGroup-wzlE1seI.js → RadioGroup-CN92lZlY.js} +1 -1
- package/storybook-static/assets/{RadioGroup.stories-6h1qt8DI.js → RadioGroup.stories-JC6Z3CpL.js} +1 -1
- package/storybook-static/assets/{Scrollable-Dhpelsb3.js → Scrollable-DbBJQWBv.js} +1 -1
- package/storybook-static/assets/{Scrollable-C7dBSd5R.js → Scrollable-SCMKAvuD.js} +1 -1
- package/storybook-static/assets/{Scrollable.stories-Cj1mRfdX.js → Scrollable.stories-CawNbs8Y.js} +1 -1
- package/storybook-static/assets/{Select-BI1R-0nK.js → Select-BHTlNaX3.js} +1 -1
- package/storybook-static/assets/{Select-n3InYkr7.js → Select-D_kHX5a5.js} +1 -1
- package/storybook-static/assets/{Select.stories-pppfr6nn.js → Select.stories-DcY5-Hlt.js} +1 -1
- package/storybook-static/assets/{Separator-GtZBq7gL.js → Separator-BWje1Oue.js} +1 -1
- package/storybook-static/assets/{Separator-Bx2BKztN.js → Separator-DOk-N_yT.js} +1 -1
- package/storybook-static/assets/{Separator.stories-DxY_qbJt.js → Separator.stories-DT-_4yle.js} +1 -1
- package/storybook-static/assets/{SerializableSelect-DogkO2Bz.js → SerializableSelect-Cg-gWCzu.js} +1 -1
- package/storybook-static/assets/{SerializableSelect.stories-C3OU-Qlh.js → SerializableSelect.stories-DAg_4E3g.js} +1 -1
- package/storybook-static/assets/{ShimmerText-XI1rbKrT.js → ShimmerText-h0A5FdJn.js} +1 -1
- package/storybook-static/assets/{ShimmerText.stories-lvn1uLl_.js → ShimmerText.stories-MnbWai5o.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput-DK8vuf-o.js → SingleDateTimeInput-CqPmAWWa.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput-HNBKELgZ.js → SingleDateTimeInput-DOqiD7di.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput.stories-DrV6WMT9.js → SingleDateTimeInput.stories-C-uI6_Du.js} +1 -1
- package/storybook-static/assets/{Slider-bg4iXFEy.js → Slider-Djs-5-SX.js} +1 -1
- package/storybook-static/assets/{Slider-D4ec91gY.js → Slider-p_L-JzII.js} +1 -1
- package/storybook-static/assets/{Slider.stories-DhJUqLP3.js → Slider.stories-fhuweHOJ.js} +1 -1
- package/storybook-static/assets/{SliderInput-CScKm1eT.js → SliderInput-CIVj_06t.js} +1 -1
- package/storybook-static/assets/{SliderInput-o9cFbZ18.js → SliderInput-nagryhRL.js} +1 -1
- package/storybook-static/assets/{SliderInput.stories-CDNoleib.js → SliderInput.stories-BLikqr-O.js} +1 -1
- package/storybook-static/assets/{Sortable-DHqDBQQd.js → Sortable-D0KOh-TL.js} +1 -1
- package/storybook-static/assets/{Sortable.stories-CEhPetnR.js → Sortable.stories-BGdtffqB.js} +1 -1
- package/storybook-static/assets/{Splitter-BU9vPggP.js → Splitter-BsvN-OLk.js} +1 -1
- package/storybook-static/assets/{Splitter.stories-BxKoQqiy.js → Splitter.stories-cuiQiJ7g.js} +1 -1
- package/storybook-static/assets/{StateSelect-ez77Inqm.js → StateSelect-B29YeAsu.js} +1 -1
- package/storybook-static/assets/{StateSelect-Cp-vkDd6.js → StateSelect-Dbu1AJzp.js} +1 -1
- package/storybook-static/assets/{StateSelect.stories-CpZV5ol8.js → StateSelect.stories-ChvBFaM2.js} +1 -1
- package/storybook-static/assets/{StatusIndicator-BM7o68m0.js → StatusIndicator-CsQ0EPOR.js} +1 -1
- package/storybook-static/assets/{StatusIndicator.stories-DmP9Drw5.js → StatusIndicator.stories-CanvyqtM.js} +1 -1
- package/storybook-static/assets/{StringToggle.stories-TO-VXZOK.js → StringToggle.stories-D-btA7Hm.js} +1 -1
- package/storybook-static/assets/{Switch-CfDHmCm8.js → Switch-C2aUtr7H.js} +1 -1
- package/storybook-static/assets/{Switch-BnYvYOX5.js → Switch-DeDHWbqw.js} +1 -1
- package/storybook-static/assets/{Switch.stories-CX92UhBc.js → Switch.stories-BcNfmPSy.js} +1 -1
- package/storybook-static/assets/{Table-DkrNiq_n.js → Table-D9AgOQn3.js} +1 -1
- package/storybook-static/assets/{Table.stories-DsGm0-i7.js → Table.stories-Czm2C6Rx.js} +1 -1
- package/storybook-static/assets/{TableEditor.stories-sxgtoDe3.js → TableEditor.stories-CXR7o59m.js} +1 -1
- package/storybook-static/assets/{Tabs-wMDcBXIR.js → Tabs-sOp2l3XO.js} +1 -1
- package/storybook-static/assets/{Tabs.stories-BVXrXbOp.js → Tabs.stories-YkP11K26.js} +1 -1
- package/storybook-static/assets/TabsBox-Cd3niafB.css +1 -0
- package/storybook-static/assets/TabsBox-CfOR1G6c.js +2 -0
- package/storybook-static/assets/{TagInput-BATz4lHU.js → TagInput-C_yNW134.js} +1 -1
- package/storybook-static/assets/{TagInput.stories-D9IJIG_P.js → TagInput.stories-D4vh6Kh3.js} +1 -1
- package/storybook-static/assets/{Text-Bswu5PVP.js → Text-IQqUM-6S.js} +1 -1
- package/storybook-static/assets/{Textarea-CrkCHaE2.js → Textarea-B50-dJyP.js} +1 -1
- package/storybook-static/assets/{Textarea-AqkGgrCZ.js → Textarea-CQ9_SeR-.js} +1 -1
- package/storybook-static/assets/{Textarea.stories-dtpJFQAX.js → Textarea.stories-CpEKjfqY.js} +1 -1
- package/storybook-static/assets/{TimePanel-DGcJeL-M.js → TimePanel-CaX_CWTW.js} +1 -1
- package/storybook-static/assets/{TimePanel.stories-DxPuKGPZ.js → TimePanel.stories-BHKIw5mZ.js} +1 -1
- package/storybook-static/assets/{Toggle-DLZn_nZe.js → Toggle-ADeGxXl0.js} +1 -1
- package/storybook-static/assets/{Toggle-Dd08B6s5.js → Toggle-njM2fKQc.js} +1 -1
- package/storybook-static/assets/{Toggle.stories-4h-5zxJC.js → Toggle.stories-DDWsGMoy.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect-4XUsw-my.js → TreeMultiSelect-DY7zN0tt.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect-CF9O5XGt.js → TreeMultiSelect-Z4AV1Wgg.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect.stories-m5UlkTdr.js → TreeMultiSelect.stories-BhkFA2S-.js} +1 -1
- package/storybook-static/assets/{TreePickerBase-8R1GFz9r.js → TreePickerBase-DRCzJjx6.js} +1 -1
- package/storybook-static/assets/{TreeSelect-CZme7Tu-.js → TreeSelect-DQADRaC3.js} +1 -1
- package/storybook-static/assets/{TreeSelect-BPc7kRdh.js → TreeSelect-q5pDp_Os.js} +1 -1
- package/storybook-static/assets/{TreeSelect.stories-DRVi0xZP.js → TreeSelect.stories-yLxVaaSY.js} +1 -1
- package/storybook-static/assets/{TreeTable-CTBSrT9l.js → TreeTable-BeZoDjBE.js} +1 -1
- package/storybook-static/assets/{TreeTable.stories-oILl7PkB.js → TreeTable.stories-B2u51xrR.js} +1 -1
- package/storybook-static/assets/{blocks-TIr5_lNX.js → blocks-D29TdvdI.js} +3 -3
- package/storybook-static/assets/{check-Du8FuQ6e.js → check-B9kjGnTr.js} +1 -1
- package/storybook-static/assets/{chevron-down-rt2_lu7i.js → chevron-down-D0ncXJ67.js} +1 -1
- package/storybook-static/assets/{chevron-left-SdIvDBzr.js → chevron-left-CGtvJ_7j.js} +1 -1
- package/storybook-static/assets/{chevron-right-BU-pTQL2.js → chevron-right-1d8Q7foW.js} +1 -1
- package/storybook-static/assets/{chunk-W22LQPXL-C5x9oI8u.js → chunk-W22LQPXL-KzPuU6n9.js} +1 -1
- package/storybook-static/assets/{circle-alert-C-51hrK9.js → circle-alert-Dbad7hvh.js} +1 -1
- package/storybook-static/assets/{circle-check-DZ3A5xhF.js → circle-check-DvnBN33e.js} +1 -1
- package/storybook-static/assets/{components-DLKEXX2n.js → components-Pq5w8We2.js} +3 -3
- package/storybook-static/assets/{contextMenu-Cwftox4w.js → contextMenu-ChSRpnE7.js} +1 -1
- package/storybook-static/assets/{download-BIHyCgGp.js → download-Dt_hINTs.js} +1 -1
- package/storybook-static/assets/{floating-ui.react-bcuT6Qw6.js → floating-ui.react-CFUzDHMb.js} +1 -1
- package/storybook-static/assets/{foundationApi-C5uBuKS6.js → foundationApi-DHs4bOpI.js} +1 -1
- package/storybook-static/assets/{foundationLib-DRvN1n2m.js → foundationLib-D1fm6WoY.js} +1 -1
- package/storybook-static/assets/{hooks-DovKTAOG.js → hooks-DrbZUNnJ.js} +1 -1
- package/storybook-static/assets/{iframe-DfqtMMgG.js → iframe-CizMDlW9.js} +3 -3
- package/storybook-static/assets/iframe-CrGqOhca.js +1 -0
- package/storybook-static/assets/{info-CgVG4e4u.js → info-Cjey-oKN.js} +1 -1
- package/storybook-static/assets/{odata-BGOCt2tD.js → odata-BEQC_wjB.js} +1 -1
- package/storybook-static/assets/{odataStoryFixtures--hE0dv-U.js → odataStoryFixtures-CmSF4OYc.js} +1 -1
- package/storybook-static/assets/{react-CZ1I4PcW.js → react-DlE-cCYf.js} +1 -1
- package/storybook-static/assets/{refresh-cw-CGuUzrYs.js → refresh-cw-6kuFzwuj.js} +1 -1
- package/storybook-static/assets/{settings-2-BnIPgWLg.js → settings-2-Dp2kvtlU.js} +1 -1
- package/storybook-static/assets/{sortable-CSXMP4VV.js → sortable-YgZpYlFI.js} +1 -1
- package/storybook-static/assets/{syntaxhighlighter-QEQV7K2Y-BXIJBARj.js → syntaxhighlighter-QEQV7K2Y-Bgf_-1Oe.js} +1 -1
- package/storybook-static/assets/{trash-2-25yeOC8e.js → trash-2-CPnjzHnW.js} +1 -1
- package/storybook-static/assets/{triangle-alert-0L7_o0IU.js → triangle-alert-ELZCks0j.js} +1 -1
- package/storybook-static/assets/{useODataSelectBase-D9KnZAJ2.js → useODataSelectBase-C_9p8iq2.js} +1 -1
- package/storybook-static/assets/{useODataTreeData-BRlsCagQ.js → useODataTreeData-X3d38mxf.js} +1 -1
- package/storybook-static/assets/{usePickerQuery-B05uUMJ9.js → usePickerQuery-Dn0Nghs1.js} +1 -1
- package/storybook-static/assets/{usePickerTriggerController-YWagu6f6.js → usePickerTriggerController-BBzr2WZB.js} +1 -1
- package/storybook-static/assets/{x-i4zUW10Y.js → x-Buig9MSV.js} +1 -1
- package/storybook-static/iframe.html +2 -2
- package/storybook-static/project.json +1 -1
- package/storybook-static/assets/TabsBox-5NiiCrDc.js +0 -2
- package/storybook-static/assets/TabsBox-DuBKU62M.css +0 -1
- package/storybook-static/assets/iframe-CxmZ1iUO.js +0 -1
package/dist/tabs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/tabs/lib/tabs.ts","../../src/tabs/model/useTabsState.ts","../../src/tabs/ui/Tabs.module.scss","../../src/tabs/ui/TabsLoadingState.tsx","../../src/tabs/ui/TabsNoDataState.tsx","../../src/tabs/ui/TabsPanel.tsx","../../src/tabs/ui/TabsTabList.tsx","../../src/tabs/ui/TabsBox.tsx","../../src/tabs/ui/TabsLayout.tsx"],"sourcesContent":["import type { TabsDescriptor, TabsMountStrategy } from \"../model/types\";\n\n/**\n * Возвращает идентификатор первой доступной вкладки.\n */\nexport function getFirstEnabledTabId(items: TabsDescriptor[]) {\n\treturn items.find((item) => !item.disabled)?.id ?? null;\n}\n\n/**\n * Возвращает безопасный идентификатор вкладки.\n * Если переданный `candidate` недоступен, выбирается первая доступная вкладка.\n */\nexport function getSafeTabId(items: TabsDescriptor[], candidate: string | undefined | null) {\n\tif (!candidate) {\n\t\treturn getFirstEnabledTabId(items);\n\t}\n\n\tconst matchedItem = items.find((item) => item.id === candidate && !item.disabled);\n\treturn matchedItem?.id ?? getFirstEnabledTabId(items);\n}\n\n/**\n * Возвращает только доступные вкладки для roving focus и клавиатурной навигации.\n */\nexport function getEnabledTabs(items: TabsDescriptor[]) {\n\treturn items.filter((item) => !item.disabled);\n}\n\ninterface ShouldMountTabPanelOptions {\n\tmountStrategy: TabsMountStrategy;\n\tisSelected: boolean;\n\tisVisited: boolean;\n}\n\n/**\n * Определяет, должна ли панель оставаться смонтированной с учётом стратегии монтирования.\n */\nexport function shouldMountTabPanel({ mountStrategy, isSelected, isVisited }: ShouldMountTabPanelOptions) {\n\treturn mountStrategy === \"keep-mounted\" || isSelected || (mountStrategy === \"lazy\" && isVisited);\n}\n","import type React from \"react\";\nimport { FocusEvent, KeyboardEvent, useId, useMemo, useRef, useState } from \"react\";\n\nimport { getRovingFocusTargetIndex } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { getEnabledTabs, getSafeTabId } from \"../lib/tabs\";\n\nimport type { TabsActivationMode, TabsDescriptor, TabsOrientation } from \"./types\";\n\ninterface UseTabsStateOptions {\n\titems: TabsDescriptor[];\n\tvalue?: string;\n\tdefaultValue?: string;\n\tonValueChange?: (value: string) => void;\n\torientation?: TabsOrientation;\n\tactivationMode?: TabsActivationMode;\n\tloop?: boolean;\n}\n\n/**\n * Публичная часть модели, необходимая визуальным подкомпонентам tabs.\n */\nexport interface TabsStateModel {\n\tactivationMode: TabsActivationMode;\n\torientation: TabsOrientation;\n\tselectedTabId: string | null;\n\ttabbableTabId: string | null;\n\tonTabListKeyDown: (event: KeyboardEvent<HTMLDivElement>) => void;\n\tonTabListBlur: (event: FocusEvent<HTMLDivElement>) => void;\n\tgetTabElementId: (tabId: string) => string;\n\tgetPanelElementId: (tabId: string) => string;\n\tgetTabButtonProps: (item: TabsDescriptor) => React.ButtonHTMLAttributes<HTMLButtonElement> & {\n\t\tref: (node: HTMLButtonElement | null) => void;\n\t};\n\tisVisited: (tabId: string) => boolean;\n}\n\n/**\n * Инкапсулирует state, a11y-связки и клавиатурную навигацию для всех оболочек tabs.\n */\nexport function useTabsState({\n\titems,\n\tvalue,\n\tdefaultValue,\n\tonValueChange,\n\torientation = \"horizontal\",\n\tactivationMode = \"automatic\",\n\tloop = true\n}: UseTabsStateOptions): TabsStateModel {\n\tconst isControlled = value !== undefined;\n\tconst enabledTabs = useMemo(() => getEnabledTabs(items), [items]);\n\tconst fallbackTabId = enabledTabs[0]?.id ?? null;\n\tconst [internalValue, setInternalValue] = useState(() => getSafeTabId(items, defaultValue));\n\tconst [focusedTabId, setFocusedTabId] = useState<string | null>(() => getSafeTabId(items, value ?? defaultValue));\n\tconst initialVisitedTabId = getSafeTabId(items, value ?? defaultValue);\n\tconst [visitedTabsState, setVisitedTabsState] = useState<Set<string>>(() =>\n\t\tinitialVisitedTabId ? new Set([initialVisitedTabId]) : new Set()\n\t);\n\tconst tabsId = useId();\n\tconst tabRefs = useRef<Record<string, HTMLButtonElement | null>>({});\n\n\tconst selectedTabId = getSafeTabId(items, isControlled ? value : internalValue);\n\tconst nextTabbableTabId = getSafeTabId(items, focusedTabId) ?? selectedTabId ?? fallbackTabId;\n\tconst visitedTabs = useMemo(() => {\n\t\tif (!selectedTabId || visitedTabsState.has(selectedTabId)) {\n\t\t\treturn visitedTabsState;\n\t\t}\n\n\t\tconst next = new Set(visitedTabsState);\n\t\tnext.add(selectedTabId);\n\t\treturn next;\n\t}, [selectedTabId, visitedTabsState]);\n\n\tconst activateTab = (nextTabId: string) => {\n\t\tconst safeNextTabId = getSafeTabId(items, nextTabId);\n\t\tif (!safeNextTabId) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetVisitedTabsState((prev) => {\n\t\t\tif (prev.has(safeNextTabId)) {\n\t\t\t\treturn prev;\n\t\t\t}\n\n\t\t\tconst next = new Set(prev);\n\t\t\tnext.add(safeNextTabId);\n\t\t\treturn next;\n\t\t});\n\n\t\tif (!isControlled) {\n\t\t\tsetInternalValue(safeNextTabId);\n\t\t}\n\n\t\tonValueChange?.(safeNextTabId);\n\t};\n\n\tconst focusTab = (nextTabId: string) => {\n\t\ttabRefs.current[nextTabId]?.focus();\n\t};\n\n\tconst onTabListKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n\t\tif (enabledTabs.length < 2) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst activeFocusIndex = Math.max(\n\t\t\t0,\n\t\t\tenabledTabs.findIndex((item) => item.id === (nextTabbableTabId ?? selectedTabId ?? fallbackTabId))\n\t\t);\n\t\tconst nextEnabledIndex = getRovingFocusTargetIndex({\n\t\t\tcurrentIndex: activeFocusIndex,\n\t\t\titemCount: enabledTabs.length,\n\t\t\tkey: event.key,\n\t\t\torientation,\n\t\t\twrap: loop\n\t\t});\n\n\t\tif (nextEnabledIndex === null) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\n\t\tconst nextTabId = enabledTabs[nextEnabledIndex]?.id;\n\t\tif (!nextTabId) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetFocusedTabId(nextTabId);\n\t\tfocusTab(nextTabId);\n\n\t\tif (activationMode === \"automatic\") {\n\t\t\tactivateTab(nextTabId);\n\t\t}\n\t};\n\n\tconst onTabListBlur = (event: FocusEvent<HTMLDivElement>) => {\n\t\tconst nextTarget = event.relatedTarget;\n\n\t\tif (nextTarget instanceof Node && event.currentTarget.contains(nextTarget)) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetFocusedTabId(selectedTabId ?? fallbackTabId);\n\t};\n\n\tconst getTabElementId = (tabId: string) => `${tabsId}-tab-${tabId}`;\n\tconst getPanelElementId = (tabId: string) => `${tabsId}-panel-${tabId}`;\n\n\tconst getTabButtonProps = (item: TabsDescriptor) => {\n\t\tconst isSelected = item.id === selectedTabId;\n\t\tconst isTabbable = item.id === nextTabbableTabId;\n\n\t\treturn {\n\t\t\tref: (node: HTMLButtonElement | null) => {\n\t\t\t\ttabRefs.current[item.id] = node;\n\t\t\t},\n\t\t\ttype: \"button\" as const,\n\t\t\trole: \"tab\" as const,\n\t\t\tid: getTabElementId(item.id),\n\t\t\tdisabled: item.disabled,\n\t\t\t\"aria-selected\": isSelected,\n\t\t\t\"aria-controls\": getPanelElementId(item.id),\n\t\t\t\"aria-disabled\": item.disabled || undefined,\n\t\t\ttabIndex: item.disabled ? -1 : isTabbable ? 0 : -1,\n\t\t\tonFocus: () => setFocusedTabId(item.id),\n\t\t\tonClick: () => activateTab(item.id)\n\t\t};\n\t};\n\n\treturn {\n\t\tactivationMode,\n\t\torientation,\n\t\tselectedTabId,\n\t\ttabbableTabId: nextTabbableTabId,\n\t\tonTabListKeyDown,\n\t\tonTabListBlur,\n\t\tgetTabElementId,\n\t\tgetPanelElementId,\n\t\tgetTabButtonProps,\n\t\tisVisited: (tabId: string) => visitedTabs.has(tabId)\n\t};\n}\n",".tabsContainer {\n\t--tabs-border: var(--border);\n\t--tabs-panel-padding: var(--space-md);\n\n\tdisplay: grid;\n\tmin-width: 0;\n\tmin-height: 0;\n\theight: 100%;\n\toverflow: hidden;\n\n\t&.clean {\n\t\t--tabs-border: none;\n\t\t--tabs-panel-padding: 0;\n\t}\n}\n\n.tabs {\n\tdisplay: flex;\n\tmin-width: 0;\n\n\tborder: var(--tabs-border);\n\tbackground-color: var(--surface-1);\n}\n\n.panels {\n\tmin-width: 0;\n\tmin-height: 0;\n\tborder: var(--tabs-border);\n}\n\n.horizontal {\n\tgrid-template-rows: auto minmax(0, 1fr);\n\n\t.tabs {\n\t\tpadding: var(--space-sm);\n\n\t\tborder-top-left-radius: var(--radius-sm);\n\t\tborder-top-right-radius: var(--radius-sm);\n\t}\n\n\t.panels {\n\t\tborder-top: none;\n\n\t\tborder-bottom-left-radius: var(--radius-sm);\n\t\tborder-bottom-right-radius: var(--radius-sm);\n\t}\n\n\t.tab {\n\t\t&::before {\n\t\t\tcontent: \"\";\n\t\t\tposition: absolute;\n\t\t\tbottom: 0;\n\t\t\tleft: 0;\n\t\t\tright: 0;\n\t\t\tborder-bottom: var(--focus-width) solid var(--decoration-color);\n\t\t}\n\t}\n}\n\n.vertical {\n\tgrid-template-columns: 10em minmax(0, 1fr);\n\tmin-height: 0;\n\n\t.tabs {\n\t\tflex-direction: column;\n\n\t\tborder-top-left-radius: var(--radius-sm);\n\t\tborder-bottom-left-radius: var(--radius-sm);\n\t}\n\n\t.panels {\n\t\tborder-left: none;\n\n\t\tborder-top-right-radius: var(--radius-sm);\n\t\tborder-bottom-right-radius: var(--radius-sm);\n\t}\n\n\t// .tab {\n\t// \t&::before {\n\t// \t\tcontent: \"\";\n\t// \t\tposition: absolute;\n\t// \t\ttop: 0;\n\t// \t\tbottom: 0;\n\t// \t\tright: 0;\n\t// \t\tborder-right: var(--focus-width) solid var(--decoration-color);\n\t// \t}\n\t// }\n}\n\n.panelScrollable {\n\toverflow: auto;\n}\n\n.tab {\n\t--decoration-color: transparent;\n\n\ttext-align: left;\n\n\tposition: relative;\n\tmin-height: var(--control-height);\n\tpadding: var(--space-xs) var(--space-md);\n\tcolor: var(--content-1);\n\tborder-radius: var(--radius-sm);\n\tfont-weight: 700;\n\tfont-variation-settings: \"wght\" 700;\n\n\tflex-shrink: 0;\n\n\t&:hover {\n\t\tcursor: pointer;\n\t\tcolor: var(--accent-text);\n\t\t// background-color: var(--accent-fill);\n\t\t--decoration-color: var(--accent-border);\n\t}\n\n\t&.selected {\n\t\tcolor: var(--brand-text);\n\t\t// color: var(--content-0);\n\t\t// background-color: var(--brand-fill);\n\t\t--decoration-color: var(--brand-border);\n\t}\n\n\t&:disabled {\n\t\tcursor: not-allowed;\n\t\tcolor: var(--content-2);\n\t\tbackground-color: var(--surface-2);\n\t}\n}\n\n.panel {\n\tpadding: 0;\n\tmin-width: 0;\n\tmin-height: 0;\n\theight: 100%;\n}\n\n.panelBody {\n\tmin-width: 0;\n\tmin-height: 0;\n\n\theight: 100%;\n\tpadding: var(--tabs-panel-padding);\n}\n\n.layoutPanels {\n\toverflow: hidden;\n}\n\n.layoutPanel {\n\tdisplay: grid;\n\tgap: var(--space-md);\n\tmin-width: 0;\n\tmin-height: 0;\n\theight: 100%;\n\tpadding: var(--tabs-panel-padding);\n}\n\n.layoutSection {\n\tmin-width: 0;\n}\n\n.layoutContent {\n\tmin-height: 0;\n}\n","import { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { LoadingMessage } from \"../../misc\";\n\nimport styles from \"./Tabs.module.scss\";\n\ninterface TabsLoadingStateProps {\n\tcontainerClassName: string;\n\ttabListClassName: string;\n\tpanelsClassName: string;\n\tpanelClassName: string;\n\tpanelBodyClassName: string;\n\tloadingText?: string;\n}\n\n/**\n * Служебное loading-состояние для `TabsBox`.\n */\nexport function TabsLoadingState({\n\tcontainerClassName,\n\ttabListClassName,\n\tpanelsClassName,\n\tpanelClassName,\n\tpanelBodyClassName,\n\tloadingText\n}: TabsLoadingStateProps) {\n\treturn (\n\t\t<div className={containerClassName}>\n\t\t\t<div className={tabListClassName} aria-hidden=\"true\">\n\t\t\t\t<button type=\"button\" disabled data-disabled=\"\" className={cn(styles.tab, \"skeletonLine\")}>\n\t\t\t\t\tЗагрузка...\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<div className={panelsClassName} aria-busy=\"true\">\n\t\t\t\t<div className={panelClassName}>\n\t\t\t\t\t<div className={panelBodyClassName}>\n\t\t\t\t\t\t<LoadingMessage text={loadingText} className=\"radiusSm\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { NoData } from \"../../misc\";\n\ninterface TabsNoDataStateProps {\n\tcontainerClassName: string;\n\tpanelsClassName: string;\n\tpanelClassName: string;\n\tpanelBodyClassName: string;\n}\n\n/**\n * Служебное empty-состояние для `TabsBox`.\n */\nexport function TabsNoDataState({ containerClassName, panelsClassName, panelClassName, panelBodyClassName }: TabsNoDataStateProps) {\n\treturn (\n\t\t<div className={containerClassName}>\n\t\t\t<div className={panelsClassName}>\n\t\t\t\t<div className={panelClassName}>\n\t\t\t\t\t<div className={panelBodyClassName}>\n\t\t\t\t\t\t<NoData className=\"radiusSm\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { type ReactNode } from \"react\";\n\n/**\n * Унифицированная ARIA-обёртка для содержимого активной панели tabs.\n */\ninterface TabsPanelProps {\n\ttabId: string;\n\tisSelected: boolean;\n\tclassName?: string;\n\tgetTabElementId: (tabId: string) => string;\n\tgetPanelElementId: (tabId: string) => string;\n\tchildren?: ReactNode;\n}\n\nexport function TabsPanel({ tabId, isSelected, className, getTabElementId, getPanelElementId, children }: TabsPanelProps) {\n\treturn (\n\t\t<div\n\t\t\trole=\"tabpanel\"\n\t\t\tid={getPanelElementId(tabId)}\n\t\t\taria-labelledby={getTabElementId(tabId)}\n\t\t\thidden={!isSelected}\n\t\t\ttabIndex={isSelected ? 0 : -1}\n\t\t\tclassName={className}>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n","import { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { OneStepScroller } from \"../../misc\";\nimport { type TabsDescriptor } from \"../model/types\";\nimport { type TabsStateModel } from \"../model/useTabsState\";\n\nimport styles from \"./Tabs.module.scss\";\n\n/**\n * Рендерит tablist и кнопки вкладок поверх общей модели tabs.\n */\ninterface TabsTabListProps {\n\titems: TabsDescriptor[];\n\tstate: TabsStateModel;\n\tclassName?: string;\n\tariaLabel?: string;\n\tariaLabelledBy?: string;\n}\n\nexport function TabsTabList({ items, state, className, ariaLabel, ariaLabelledBy }: TabsTabListProps) {\n\tconst tabList = (\n\t\t<div\n\t\t\tdata-ui=\"tabs-tablist\"\n\t\t\tclassName={className}\n\t\t\trole=\"tablist\"\n\t\t\taria-orientation={state.orientation}\n\t\t\taria-label={ariaLabelledBy ? undefined : (ariaLabel ?? \"Вкладки\")}\n\t\t\taria-labelledby={ariaLabelledBy}\n\t\t\taria-live=\"off\"\n\t\t\tonKeyDown={state.onTabListKeyDown}\n\t\t\tonBlur={state.onTabListBlur}>\n\t\t\t{items.map((item) => (\n\t\t\t\t<button\n\t\t\t\t\tkey={item.id}\n\t\t\t\t\t{...state.getTabButtonProps(item)}\n\t\t\t\t\tdata-ui=\"tabs-tab\"\n\t\t\t\t\tdata-action=\"select-tab\"\n\t\t\t\t\tclassName={cn(styles.tab, \"textWrap\", item.id === state.selectedTabId && styles.selected)}>\n\t\t\t\t\t{item.title}\n\t\t\t\t</button>\n\t\t\t))}\n\t\t</div>\n\t);\n\n\tif (state.orientation === \"horizontal\") {\n\t\treturn <OneStepScroller itemSelector=\"[role='tab']\">{tabList}</OneStepScroller>;\n\t}\n\n\treturn tabList;\n}\n","import { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport uiStyles from \"../../ui.module.scss\";\nimport { getUiPanelToneClassName } from \"../../uiClasses\";\nimport { shouldMountTabPanel } from \"../lib/tabs\";\nimport { type TabsBoxProps } from \"../model/types\";\nimport { useTabsState } from \"../model/useTabsState\";\n\nimport styles from \"./Tabs.module.scss\";\nimport { TabsLoadingState } from \"./TabsLoadingState\";\nimport { TabsNoDataState } from \"./TabsNoDataState\";\nimport { TabsPanel } from \"./TabsPanel\";\nimport { TabsTabList } from \"./TabsTabList\";\n\n/**\n * Простой items-based tabs-компонент.\n * Сам управляет областью панели и её прокруткой.\n */\nexport function TabsBox({\n\titems,\n\tvalue,\n\tdefaultValue,\n\tonValueChange,\n\tclassName,\n\tisLoading,\n\tloadingText,\n\torientation = \"horizontal\",\n\tactivationMode = \"automatic\",\n\tmountStrategy = \"unmount\",\n\tloop = true,\n\ttone = \"primary\",\n\tclean = false,\n\t\"aria-label\": ariaLabel,\n\t\"aria-labelledby\": ariaLabelledBy\n}: TabsBoxProps) {\n\tconst state = useTabsState({\n\t\titems,\n\t\tvalue,\n\t\tdefaultValue,\n\t\tonValueChange,\n\t\torientation,\n\t\tactivationMode,\n\t\tloop\n\t});\n\n\tconst rootClassName = cn(\n\t\tstyles.tabsContainer,\n\t\tclean ? styles.clean : uiStyles.uiFilledPanel,\n\t\tstyles[orientation],\n\t\tgetUiPanelToneClassName(tone),\n\t\tclassName\n\t);\n\tconst tabListClassName = styles.tabs;\n\tconst panelsClassName = cn(styles.panels, styles.panelScrollable, \"scrollable overscroll\");\n\tconst panelClassName = styles.panel;\n\tconst panelBodyClassName = styles.panelBody;\n\n\tif (isLoading) {\n\t\treturn (\n\t\t\t<TabsLoadingState\n\t\t\t\tcontainerClassName={rootClassName}\n\t\t\t\ttabListClassName={tabListClassName}\n\t\t\t\tpanelsClassName={panelsClassName}\n\t\t\t\tpanelClassName={panelClassName}\n\t\t\t\tpanelBodyClassName={panelBodyClassName}\n\t\t\t\tloadingText={loadingText}\n\t\t\t/>\n\t\t);\n\t}\n\n\tif (!items.length) {\n\t\treturn (\n\t\t\t<TabsNoDataState\n\t\t\t\tcontainerClassName={rootClassName}\n\t\t\t\tpanelsClassName={panelsClassName}\n\t\t\t\tpanelClassName={panelClassName}\n\t\t\t\tpanelBodyClassName={panelBodyClassName}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className={rootClassName}>\n\t\t\t<TabsTabList items={items} state={state} className={tabListClassName} ariaLabel={ariaLabel} ariaLabelledBy={ariaLabelledBy} />\n\n\t\t\t<div className={panelsClassName}>\n\t\t\t\t{items.map((item) => {\n\t\t\t\t\tconst isSelected = item.id === state.selectedTabId;\n\t\t\t\t\tconst isMounted = shouldMountTabPanel({\n\t\t\t\t\t\tmountStrategy,\n\t\t\t\t\t\tisSelected,\n\t\t\t\t\t\tisVisited: state.isVisited(item.id)\n\t\t\t\t\t});\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<TabsPanel\n\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\ttabId={item.id}\n\t\t\t\t\t\t\tisSelected={isSelected}\n\t\t\t\t\t\t\tclassName={panelClassName}\n\t\t\t\t\t\t\tgetTabElementId={state.getTabElementId}\n\t\t\t\t\t\t\tgetPanelElementId={state.getPanelElementId}>\n\t\t\t\t\t\t\t{isMounted ? <div className={panelBodyClassName}>{item.content}</div> : null}\n\t\t\t\t\t\t</TabsPanel>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import React, { Children, isValidElement, useMemo } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport uiStyles from \"../../ui.module.scss\";\nimport { getUiPanelToneClassName } from \"../../uiClasses\";\nimport { shouldMountTabPanel } from \"../lib/tabs\";\nimport { useTabsState } from \"../model/useTabsState\";\n\nimport styles from \"./Tabs.module.scss\";\nimport { TabsPanel } from \"./TabsPanel\";\nimport { TabsTabList } from \"./TabsTabList\";\n\nimport type { TabsDescriptor, TabsLayoutProps, TabsLayoutSectionProps, TabsLayoutTabProps } from \"../model/types\";\n\ninterface ParsedTabsLayoutTab extends TabsDescriptor {\n\ttoolbar: TabsLayoutSectionProps | null;\n\tcontent: TabsLayoutSectionProps;\n\tfooter: TabsLayoutSectionProps | null;\n}\n\nconst tabsLayoutTabDisplayName = \"TabsLayout.Tab\";\nconst tabsLayoutToolbarDisplayName = \"TabsLayout.Toolbar\";\nconst tabsLayoutContentDisplayName = \"TabsLayout.Content\";\nconst tabsLayoutFooterDisplayName = \"TabsLayout.Footer\";\n\n/**\n * Возвращает стабильный displayName compound-элемента.\n * Это нужно для корректной работы HMR, где ссылочное сравнение `child.type` может ломаться.\n */\nfunction getTabsLayoutElementDisplayName(child: React.ReactElement) {\n\tconst { type } = child;\n\n\tif (typeof type === \"function\") {\n\t\tconst componentType = type as React.JSXElementConstructor<unknown> & {\n\t\t\tdisplayName?: string;\n\t\t\tname?: string;\n\t\t};\n\n\t\treturn componentType.displayName ?? componentType.name ?? null;\n\t}\n\n\tif (typeof type === \"object\" && type !== null && \"displayName\" in type) {\n\t\tconst componentType = type as {\n\t\t\tdisplayName?: string;\n\t\t};\n\n\t\treturn typeof componentType.displayName === \"string\" ? componentType.displayName : null;\n\t}\n\n\treturn null;\n}\n\nfunction isTabsLayoutElement<Props>(child: React.ReactNode, displayName: string): child is React.ReactElement<Props> {\n\treturn isValidElement<Props>(child) && getTabsLayoutElementDisplayName(child) === displayName;\n}\n\n/**\n * Маркер верхнеуровневой вкладки в compound-режиме `TabsLayout`.\n */\nfunction TabsLayoutTab({ children }: TabsLayoutTabProps) {\n\treturn <>{children}</>;\n}\n\nTabsLayoutTab.displayName = tabsLayoutTabDisplayName;\n\n/**\n * Верхняя секция панели, исключённая из прокручиваемого содержимого.\n */\nfunction TabsLayoutToolbar({ children }: TabsLayoutSectionProps) {\n\treturn <>{children}</>;\n}\n\nTabsLayoutToolbar.displayName = tabsLayoutToolbarDisplayName;\n\n/**\n * Основное содержимое панели, которое само управляет своим layout и scroll.\n */\nfunction TabsLayoutContent({ children }: TabsLayoutSectionProps) {\n\treturn <>{children}</>;\n}\n\nTabsLayoutContent.displayName = tabsLayoutContentDisplayName;\n\n/**\n * Нижняя секция панели, исключённая из прокручиваемого содержимого.\n */\nfunction TabsLayoutFooter({ children }: TabsLayoutSectionProps) {\n\treturn <>{children}</>;\n}\n\nTabsLayoutFooter.displayName = tabsLayoutFooterDisplayName;\n\nfunction parseTabsLayoutSections(children: React.ReactNode, tabId: string) {\n\tlet toolbar: TabsLayoutSectionProps | null = null;\n\tlet content: TabsLayoutSectionProps | null = null;\n\tlet footer: TabsLayoutSectionProps | null = null;\n\n\tfor (const child of Children.toArray(children)) {\n\t\tif (!isValidElement(child)) {\n\t\t\tthrow new Error(\n\t\t\t\t`TabsLayout.Tab \"${tabId}\" поддерживает только дочерние элементы TabsLayout.Toolbar, TabsLayout.Content и TabsLayout.Footer.`\n\t\t\t);\n\t\t}\n\n\t\tif (isTabsLayoutElement<TabsLayoutSectionProps>(child, tabsLayoutToolbarDisplayName)) {\n\t\t\tif (toolbar) {\n\t\t\t\tthrow new Error(`TabsLayout.Tab \"${tabId}\" содержит более одного блока TabsLayout.Toolbar.`);\n\t\t\t}\n\n\t\t\ttoolbar = child.props;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (isTabsLayoutElement<TabsLayoutSectionProps>(child, tabsLayoutContentDisplayName)) {\n\t\t\tif (content) {\n\t\t\t\tthrow new Error(`TabsLayout.Tab \"${tabId}\" содержит более одного блока TabsLayout.Content.`);\n\t\t\t}\n\n\t\t\tcontent = child.props;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (isTabsLayoutElement<TabsLayoutSectionProps>(child, tabsLayoutFooterDisplayName)) {\n\t\t\tif (footer) {\n\t\t\t\tthrow new Error(`TabsLayout.Tab \"${tabId}\" содержит более одного блока TabsLayout.Footer.`);\n\t\t\t}\n\n\t\t\tfooter = child.props;\n\t\t\tcontinue;\n\t\t}\n\n\t\tthrow new Error(\n\t\t\t`TabsLayout.Tab \"${tabId}\" поддерживает только дочерние элементы TabsLayout.Toolbar, TabsLayout.Content и TabsLayout.Footer.`\n\t\t);\n\t}\n\n\tif (!content) {\n\t\tthrow new Error(`TabsLayout.Tab \"${tabId}\" должен содержать блок TabsLayout.Content.`);\n\t}\n\n\treturn { toolbar, content, footer };\n}\n\nfunction parseTabsLayoutChildren(children: React.ReactNode): ParsedTabsLayoutTab[] {\n\treturn Children.toArray(children).map((child) => {\n\t\tif (!isTabsLayoutElement<TabsLayoutTabProps>(child, tabsLayoutTabDisplayName)) {\n\t\t\tthrow new Error(\"TabsLayout принимает только дочерние элементы TabsLayout.Tab.\");\n\t\t}\n\n\t\treturn {\n\t\t\tid: child.props.id,\n\t\t\ttitle: child.props.title,\n\t\t\tdisabled: child.props.disabled,\n\t\t\t...parseTabsLayoutSections(child.props.children, child.props.id)\n\t\t};\n\t});\n}\n\n/**\n * Compound-оболочка tabs для составных panel-layout сценариев.\n * Сам компонент управляет только переключением и каркасом панели.\n */\nexport function TabsLayout({\n\tchildren,\n\tvalue,\n\tdefaultValue,\n\tonValueChange,\n\tclassName,\n\torientation = \"horizontal\",\n\tactivationMode = \"manual\",\n\tmountStrategy = \"lazy\",\n\tloop = true,\n\ttone = \"primary\",\n\tclean = false,\n\t\"aria-label\": ariaLabel,\n\t\"aria-labelledby\": ariaLabelledBy\n}: TabsLayoutProps) {\n\tconst tabs = useMemo(() => parseTabsLayoutChildren(children), [children]);\n\tconst state = useTabsState({\n\t\titems: tabs,\n\t\tvalue,\n\t\tdefaultValue,\n\t\tonValueChange,\n\t\torientation,\n\t\tactivationMode,\n\t\tloop\n\t});\n\tconst rootClassName = cn(\n\t\tstyles.tabsContainer,\n\t\tclean ? styles.clean : uiStyles.uiFilledPanel,\n\t\tstyles[orientation],\n\t\tgetUiPanelToneClassName(tone),\n\t\tclassName\n\t);\n\tconst panelsClassName = cn(styles.panels, styles.layoutPanels);\n\n\treturn (\n\t\t<div className={rootClassName}>\n\t\t\t<TabsTabList items={tabs} state={state} className={styles.tabs} ariaLabel={ariaLabel} ariaLabelledBy={ariaLabelledBy} />\n\n\t\t\t<div className={panelsClassName}>\n\t\t\t\t{tabs.map((tab) => {\n\t\t\t\t\tconst isSelected = tab.id === state.selectedTabId;\n\t\t\t\t\tconst isMounted = shouldMountTabPanel({\n\t\t\t\t\t\tmountStrategy,\n\t\t\t\t\t\tisSelected,\n\t\t\t\t\t\tisVisited: state.isVisited(tab.id)\n\t\t\t\t\t});\n\n\t\t\t\t\tconst templateRows = `${tab.toolbar ? \"auto \" : \"\"}minmax(0, 1fr)${tab.footer ? \" auto\" : \"\"}`;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<TabsPanel\n\t\t\t\t\t\t\tkey={tab.id}\n\t\t\t\t\t\t\ttabId={tab.id}\n\t\t\t\t\t\t\tisSelected={isSelected}\n\t\t\t\t\t\t\tclassName={styles.panel}\n\t\t\t\t\t\t\tgetTabElementId={state.getTabElementId}\n\t\t\t\t\t\t\tgetPanelElementId={state.getPanelElementId}>\n\t\t\t\t\t\t\t{isMounted ? (\n\t\t\t\t\t\t\t\t<div className={styles.layoutPanel} style={{ gridTemplateRows: templateRows }}>\n\t\t\t\t\t\t\t\t\t{tab.toolbar ? (\n\t\t\t\t\t\t\t\t\t\t<div className={cn(styles.layoutSection, tab.toolbar.className)}>{tab.toolbar.children}</div>\n\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t<div className={cn(styles.layoutSection, styles.layoutContent, tab.content.className)}>\n\t\t\t\t\t\t\t\t\t\t{tab.content.children}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t{tab.footer ? (\n\t\t\t\t\t\t\t\t\t\t<div className={cn(styles.layoutSection, tab.footer.className)}>{tab.footer.children}</div>\n\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</TabsPanel>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nTabsLayout.Tab = TabsLayoutTab;\nTabsLayout.Toolbar = TabsLayoutToolbar;\nTabsLayout.Content = TabsLayoutContent;\nTabsLayout.Footer = TabsLayoutFooter;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/tabs/lib/tabs.ts","../../src/tabs/model/useTabsState.ts","../../src/tabs/ui/Tabs.module.scss","../../src/tabs/ui/TabsLoadingState.tsx","../../src/tabs/ui/TabsNoDataState.tsx","../../src/tabs/ui/TabsPanel.tsx","../../src/tabs/ui/TabsTabList.tsx","../../src/tabs/ui/TabsBox.tsx","../../src/tabs/ui/TabsLayout.tsx"],"sourcesContent":["import type { TabsDescriptor, TabsMountStrategy } from \"../model/types\";\n\n/**\n * Возвращает идентификатор первой доступной вкладки.\n */\nexport function getFirstEnabledTabId(items: TabsDescriptor[]) {\n\treturn items.find((item) => !item.disabled)?.id ?? null;\n}\n\n/**\n * Возвращает безопасный идентификатор вкладки.\n * Если переданный `candidate` недоступен, выбирается первая доступная вкладка.\n */\nexport function getSafeTabId(items: TabsDescriptor[], candidate: string | undefined | null) {\n\tif (!candidate) {\n\t\treturn getFirstEnabledTabId(items);\n\t}\n\n\tconst matchedItem = items.find((item) => item.id === candidate && !item.disabled);\n\treturn matchedItem?.id ?? getFirstEnabledTabId(items);\n}\n\n/**\n * Возвращает только доступные вкладки для roving focus и клавиатурной навигации.\n */\nexport function getEnabledTabs(items: TabsDescriptor[]) {\n\treturn items.filter((item) => !item.disabled);\n}\n\ninterface ShouldMountTabPanelOptions {\n\tmountStrategy: TabsMountStrategy;\n\tisSelected: boolean;\n\tisVisited: boolean;\n}\n\n/**\n * Определяет, должна ли панель оставаться смонтированной с учётом стратегии монтирования.\n */\nexport function shouldMountTabPanel({ mountStrategy, isSelected, isVisited }: ShouldMountTabPanelOptions) {\n\treturn mountStrategy === \"keep-mounted\" || isSelected || (mountStrategy === \"lazy\" && isVisited);\n}\n","import type React from \"react\";\nimport { FocusEvent, KeyboardEvent, useId, useMemo, useRef, useState } from \"react\";\n\nimport { getRovingFocusTargetIndex } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { getEnabledTabs, getSafeTabId } from \"../lib/tabs\";\n\nimport type { TabsActivationMode, TabsDescriptor, TabsOrientation } from \"./types\";\n\ninterface UseTabsStateOptions {\n\titems: TabsDescriptor[];\n\tvalue?: string;\n\tdefaultValue?: string;\n\tonValueChange?: (value: string) => void;\n\torientation?: TabsOrientation;\n\tactivationMode?: TabsActivationMode;\n\tloop?: boolean;\n}\n\n/**\n * Публичная часть модели, необходимая визуальным подкомпонентам tabs.\n */\nexport interface TabsStateModel {\n\tactivationMode: TabsActivationMode;\n\torientation: TabsOrientation;\n\tselectedTabId: string | null;\n\ttabbableTabId: string | null;\n\tonTabListKeyDown: (event: KeyboardEvent<HTMLDivElement>) => void;\n\tonTabListBlur: (event: FocusEvent<HTMLDivElement>) => void;\n\tgetTabElementId: (tabId: string) => string;\n\tgetPanelElementId: (tabId: string) => string;\n\tgetTabButtonProps: (item: TabsDescriptor) => React.ButtonHTMLAttributes<HTMLButtonElement> & {\n\t\tref: (node: HTMLButtonElement | null) => void;\n\t};\n\tisVisited: (tabId: string) => boolean;\n}\n\n/**\n * Инкапсулирует state, a11y-связки и клавиатурную навигацию для всех оболочек tabs.\n */\nexport function useTabsState({\n\titems,\n\tvalue,\n\tdefaultValue,\n\tonValueChange,\n\torientation = \"horizontal\",\n\tactivationMode = \"automatic\",\n\tloop = true\n}: UseTabsStateOptions): TabsStateModel {\n\tconst isControlled = value !== undefined;\n\tconst enabledTabs = useMemo(() => getEnabledTabs(items), [items]);\n\tconst fallbackTabId = enabledTabs[0]?.id ?? null;\n\tconst [internalValue, setInternalValue] = useState(() => getSafeTabId(items, defaultValue));\n\tconst [focusedTabId, setFocusedTabId] = useState<string | null>(() => getSafeTabId(items, value ?? defaultValue));\n\tconst initialVisitedTabId = getSafeTabId(items, value ?? defaultValue);\n\tconst [visitedTabsState, setVisitedTabsState] = useState<Set<string>>(() =>\n\t\tinitialVisitedTabId ? new Set([initialVisitedTabId]) : new Set()\n\t);\n\tconst tabsId = useId();\n\tconst tabRefs = useRef<Record<string, HTMLButtonElement | null>>({});\n\n\tconst selectedTabId = getSafeTabId(items, isControlled ? value : internalValue);\n\tconst nextTabbableTabId = getSafeTabId(items, focusedTabId) ?? selectedTabId ?? fallbackTabId;\n\tconst visitedTabs = useMemo(() => {\n\t\tif (!selectedTabId || visitedTabsState.has(selectedTabId)) {\n\t\t\treturn visitedTabsState;\n\t\t}\n\n\t\tconst next = new Set(visitedTabsState);\n\t\tnext.add(selectedTabId);\n\t\treturn next;\n\t}, [selectedTabId, visitedTabsState]);\n\n\tconst activateTab = (nextTabId: string) => {\n\t\tconst safeNextTabId = getSafeTabId(items, nextTabId);\n\t\tif (!safeNextTabId) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetVisitedTabsState((prev) => {\n\t\t\tif (prev.has(safeNextTabId)) {\n\t\t\t\treturn prev;\n\t\t\t}\n\n\t\t\tconst next = new Set(prev);\n\t\t\tnext.add(safeNextTabId);\n\t\t\treturn next;\n\t\t});\n\n\t\tif (!isControlled) {\n\t\t\tsetInternalValue(safeNextTabId);\n\t\t}\n\n\t\tonValueChange?.(safeNextTabId);\n\t};\n\n\tconst focusTab = (nextTabId: string) => {\n\t\ttabRefs.current[nextTabId]?.focus();\n\t};\n\n\tconst onTabListKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n\t\tif (enabledTabs.length < 2) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst activeFocusIndex = Math.max(\n\t\t\t0,\n\t\t\tenabledTabs.findIndex((item) => item.id === (nextTabbableTabId ?? selectedTabId ?? fallbackTabId))\n\t\t);\n\t\tconst nextEnabledIndex = getRovingFocusTargetIndex({\n\t\t\tcurrentIndex: activeFocusIndex,\n\t\t\titemCount: enabledTabs.length,\n\t\t\tkey: event.key,\n\t\t\torientation,\n\t\t\twrap: loop\n\t\t});\n\n\t\tif (nextEnabledIndex === null) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\n\t\tconst nextTabId = enabledTabs[nextEnabledIndex]?.id;\n\t\tif (!nextTabId) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetFocusedTabId(nextTabId);\n\t\tfocusTab(nextTabId);\n\n\t\tif (activationMode === \"automatic\") {\n\t\t\tactivateTab(nextTabId);\n\t\t}\n\t};\n\n\tconst onTabListBlur = (event: FocusEvent<HTMLDivElement>) => {\n\t\tconst nextTarget = event.relatedTarget;\n\n\t\tif (nextTarget instanceof Node && event.currentTarget.contains(nextTarget)) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetFocusedTabId(selectedTabId ?? fallbackTabId);\n\t};\n\n\tconst getTabElementId = (tabId: string) => `${tabsId}-tab-${tabId}`;\n\tconst getPanelElementId = (tabId: string) => `${tabsId}-panel-${tabId}`;\n\n\tconst getTabButtonProps = (item: TabsDescriptor) => {\n\t\tconst isSelected = item.id === selectedTabId;\n\t\tconst isTabbable = item.id === nextTabbableTabId;\n\n\t\treturn {\n\t\t\tref: (node: HTMLButtonElement | null) => {\n\t\t\t\ttabRefs.current[item.id] = node;\n\t\t\t},\n\t\t\ttype: \"button\" as const,\n\t\t\trole: \"tab\" as const,\n\t\t\tid: getTabElementId(item.id),\n\t\t\tdisabled: item.disabled,\n\t\t\t\"aria-selected\": isSelected,\n\t\t\t\"aria-controls\": getPanelElementId(item.id),\n\t\t\t\"aria-disabled\": item.disabled || undefined,\n\t\t\ttabIndex: item.disabled ? -1 : isTabbable ? 0 : -1,\n\t\t\tonFocus: () => setFocusedTabId(item.id),\n\t\t\tonClick: () => activateTab(item.id)\n\t\t};\n\t};\n\n\treturn {\n\t\tactivationMode,\n\t\torientation,\n\t\tselectedTabId,\n\t\ttabbableTabId: nextTabbableTabId,\n\t\tonTabListKeyDown,\n\t\tonTabListBlur,\n\t\tgetTabElementId,\n\t\tgetPanelElementId,\n\t\tgetTabButtonProps,\n\t\tisVisited: (tabId: string) => visitedTabs.has(tabId)\n\t};\n}\n",".tabsContainer {\n\t--tabs-border: var(--border);\n\t--tabs-panel-padding: var(--space-md);\n\n\tdisplay: grid;\n\tmin-width: 0;\n\tmin-height: 0;\n\theight: 100%;\n\toverflow: hidden;\n\tborder: var(--tabs-border);\n\tborder-radius: var(--radius-md);\n\n\t&.clean {\n\t\t--tabs-border: none;\n\t\t--tabs-panel-padding: 0;\n\t}\n}\n\n.tabsWrapper {\n\tbackground-color: var(--surface-1);\n}\n\n.tabs {\n\tdisplay: flex;\n\tmin-width: 0;\n\tpadding: var(--space-sm);\n}\n\n.panels {\n\tmin-width: 0;\n\tmin-height: 0;\n}\n\n.horizontal {\n\tgrid-template-rows: auto minmax(0, 1fr);\n\n\t.tabsWrapper {\n\t\tborder-bottom: var(--border);\n\t}\n\n\t// .tab {\n\t// \tborder-top-left-radius: var(--radius-sm);\n\t// \tborder-top-right-radius: var(--radius-sm);\n\t// \tborder-bottom: var(--focus-width) solid var(--decoration-color);\n\t// }\n}\n\n.vertical {\n\tgrid-template-columns: 10em minmax(0, 1fr);\n\tmin-height: 0;\n\n\t.tabsWrapper {\n\t\tborder-right: var(--border);\n\t}\n\n\t// .tab {\n\t// \tborder-top-left-radius: var(--radius-sm);\n\t// \tborder-bottom-left-radius: var(--radius-sm);\n\t// \tborder-right: var(--focus-width) solid var(--decoration-color);\n\t// }\n\n\t.tabs {\n\t\tflex-direction: column;\n\n\t\tborder-top-left-radius: var(--radius-sm);\n\t\tborder-bottom-left-radius: var(--radius-sm);\n\t}\n\n\t.panels {\n\t\tborder-left: none;\n\n\t\tborder-top-right-radius: var(--radius-sm);\n\t\tborder-bottom-right-radius: var(--radius-sm);\n\t}\n\n\t// .tab {\n\t// \t&::before {\n\t// \t\tcontent: \"\";\n\t// \t\tposition: absolute;\n\t// \t\ttop: 0;\n\t// \t\tbottom: 0;\n\t// \t\tright: 0;\n\t// \t\tborder-right: var(--focus-width) solid var(--decoration-color);\n\t// \t}\n\t// }\n}\n\n.panelScrollable {\n\toverflow: auto;\n}\n\n.tab {\n\ttext-align: left;\n\n\tposition: relative;\n\tmin-height: var(--control-height);\n\tpadding: var(--space-xs) var(--space-md);\n\tcolor: var(--content-1);\n\tborder-radius: var(--radius-sm);\n\tfont-weight: 700;\n\tfont-variation-settings: \"wght\" 700;\n\n\tflex-shrink: 0;\n\n\t&:hover {\n\t\tcursor: pointer;\n\t\tcolor: var(--accent-text);\n\t\tbackground-color: var(--accent-fill-hover);\n\t}\n\n\t&.selected {\n\t\tcolor: var(--brand-text);\n\t\t// color: var(--content-0);\n\t\tbackground-color: var(--accent-fill);\n\t}\n\n\t&:disabled {\n\t\tcursor: not-allowed;\n\t\tcolor: var(--content-2);\n\t\t// background-color: var(--surface-2);\n\t}\n}\n\n.panel {\n\tpadding: 0;\n\tmin-width: 0;\n\tmin-height: 0;\n\theight: 100%;\n}\n\n.panelBody {\n\tmin-width: 0;\n\tmin-height: 0;\n\n\theight: 100%;\n\tpadding: var(--tabs-panel-padding);\n}\n\n.layoutPanels {\n\toverflow: hidden;\n}\n\n.layoutPanel {\n\tdisplay: grid;\n\tgap: var(--space-md);\n\tmin-width: 0;\n\tmin-height: 0;\n\theight: 100%;\n\tpadding: var(--tabs-panel-padding);\n}\n\n.layoutSection {\n\tmin-width: 0;\n}\n\n.layoutContent {\n\tmin-height: 0;\n}\n","import { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { LoadingMessage } from \"../../misc\";\n\nimport styles from \"./Tabs.module.scss\";\n\ninterface TabsLoadingStateProps {\n\tcontainerClassName: string;\n\ttabListClassName: string;\n\tpanelsClassName: string;\n\tpanelClassName: string;\n\tpanelBodyClassName: string;\n\tloadingText?: string;\n}\n\n/**\n * Служебное loading-состояние для `TabsBox`.\n */\nexport function TabsLoadingState({\n\tcontainerClassName,\n\ttabListClassName,\n\tpanelsClassName,\n\tpanelClassName,\n\tpanelBodyClassName,\n\tloadingText\n}: TabsLoadingStateProps) {\n\treturn (\n\t\t<div className={containerClassName}>\n\t\t\t<div className={tabListClassName} aria-hidden=\"true\">\n\t\t\t\t<button type=\"button\" disabled data-disabled=\"\" className={cn(styles.tab, \"skeletonLine\")}>\n\t\t\t\t\tЗагрузка...\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<div className={panelsClassName} aria-busy=\"true\">\n\t\t\t\t<div className={panelClassName}>\n\t\t\t\t\t<div className={panelBodyClassName}>\n\t\t\t\t\t\t<LoadingMessage text={loadingText} className=\"radiusSm\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { NoData } from \"../../misc\";\n\ninterface TabsNoDataStateProps {\n\tcontainerClassName: string;\n\tpanelsClassName: string;\n\tpanelClassName: string;\n\tpanelBodyClassName: string;\n}\n\n/**\n * Служебное empty-состояние для `TabsBox`.\n */\nexport function TabsNoDataState({ containerClassName, panelsClassName, panelClassName, panelBodyClassName }: TabsNoDataStateProps) {\n\treturn (\n\t\t<div className={containerClassName}>\n\t\t\t<div className={panelsClassName}>\n\t\t\t\t<div className={panelClassName}>\n\t\t\t\t\t<div className={panelBodyClassName}>\n\t\t\t\t\t\t<NoData className=\"radiusSm\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { type ReactNode } from \"react\";\n\n/**\n * Унифицированная ARIA-обёртка для содержимого активной панели tabs.\n */\ninterface TabsPanelProps {\n\ttabId: string;\n\tisSelected: boolean;\n\tclassName?: string;\n\tgetTabElementId: (tabId: string) => string;\n\tgetPanelElementId: (tabId: string) => string;\n\tchildren?: ReactNode;\n}\n\nexport function TabsPanel({ tabId, isSelected, className, getTabElementId, getPanelElementId, children }: TabsPanelProps) {\n\treturn (\n\t\t<div\n\t\t\trole=\"tabpanel\"\n\t\t\tid={getPanelElementId(tabId)}\n\t\t\taria-labelledby={getTabElementId(tabId)}\n\t\t\thidden={!isSelected}\n\t\t\ttabIndex={isSelected ? 0 : -1}\n\t\t\tclassName={className}>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n","import { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { OneStepScroller } from \"../../misc\";\nimport { type TabsDescriptor } from \"../model/types\";\nimport { type TabsStateModel } from \"../model/useTabsState\";\n\nimport styles from \"./Tabs.module.scss\";\n\n/**\n * Рендерит tablist и кнопки вкладок поверх общей модели tabs.\n */\ninterface TabsTabListProps {\n\titems: TabsDescriptor[];\n\tstate: TabsStateModel;\n\tclassName?: string;\n\tariaLabel?: string;\n\tariaLabelledBy?: string;\n}\n\nexport function TabsTabList({ items, state, className, ariaLabel, ariaLabelledBy }: TabsTabListProps) {\n\tconst tabList = (\n\t\t<div\n\t\t\tdata-ui=\"tabs-tablist\"\n\t\t\tclassName={className}\n\t\t\trole=\"tablist\"\n\t\t\taria-orientation={state.orientation}\n\t\t\taria-label={ariaLabelledBy ? undefined : (ariaLabel ?? \"Вкладки\")}\n\t\t\taria-labelledby={ariaLabelledBy}\n\t\t\taria-live=\"off\"\n\t\t\tonKeyDown={state.onTabListKeyDown}\n\t\t\tonBlur={state.onTabListBlur}>\n\t\t\t{items.map((item) => (\n\t\t\t\t<button\n\t\t\t\t\tkey={item.id}\n\t\t\t\t\t{...state.getTabButtonProps(item)}\n\t\t\t\t\tdata-ui=\"tabs-tab\"\n\t\t\t\t\tdata-action=\"select-tab\"\n\t\t\t\t\tclassName={cn(styles.tab, \"textWrap\", item.id === state.selectedTabId && styles.selected)}>\n\t\t\t\t\t{item.title}\n\t\t\t\t</button>\n\t\t\t))}\n\t\t</div>\n\t);\n\n\tif (state.orientation === \"horizontal\") {\n\t\treturn <OneStepScroller itemSelector=\"[role='tab']\">{tabList}</OneStepScroller>;\n\t}\n\n\treturn tabList;\n}\n","import { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport uiStyles from \"../../ui.module.scss\";\nimport { getUiPanelToneClassName } from \"../../uiClasses\";\nimport { shouldMountTabPanel } from \"../lib/tabs\";\nimport { type TabsBoxProps } from \"../model/types\";\nimport { useTabsState } from \"../model/useTabsState\";\n\nimport styles from \"./Tabs.module.scss\";\nimport { TabsLoadingState } from \"./TabsLoadingState\";\nimport { TabsNoDataState } from \"./TabsNoDataState\";\nimport { TabsPanel } from \"./TabsPanel\";\nimport { TabsTabList } from \"./TabsTabList\";\n\n/**\n * Простой items-based tabs-компонент.\n * Сам управляет областью панели и её прокруткой.\n */\nexport function TabsBox({\n\titems,\n\tvalue,\n\tdefaultValue,\n\tonValueChange,\n\tclassName,\n\tisLoading,\n\tloadingText,\n\torientation = \"horizontal\",\n\tactivationMode = \"automatic\",\n\tmountStrategy = \"unmount\",\n\tloop = true,\n\ttone = \"primary\",\n\tclean = false,\n\t\"aria-label\": ariaLabel,\n\t\"aria-labelledby\": ariaLabelledBy\n}: TabsBoxProps) {\n\tconst state = useTabsState({\n\t\titems,\n\t\tvalue,\n\t\tdefaultValue,\n\t\tonValueChange,\n\t\torientation,\n\t\tactivationMode,\n\t\tloop\n\t});\n\n\tconst rootClassName = cn(\n\t\tstyles.tabsContainer,\n\t\tclean ? styles.clean : uiStyles.uiFilledPanel,\n\t\tstyles[orientation],\n\t\tgetUiPanelToneClassName(tone),\n\t\tclassName\n\t);\n\tconst tabListClassName = styles.tabs;\n\tconst panelsClassName = cn(styles.panels, styles.panelScrollable, \"scrollable overscroll\");\n\tconst panelClassName = styles.panel;\n\tconst panelBodyClassName = styles.panelBody;\n\n\tif (isLoading) {\n\t\treturn (\n\t\t\t<TabsLoadingState\n\t\t\t\tcontainerClassName={rootClassName}\n\t\t\t\ttabListClassName={tabListClassName}\n\t\t\t\tpanelsClassName={panelsClassName}\n\t\t\t\tpanelClassName={panelClassName}\n\t\t\t\tpanelBodyClassName={panelBodyClassName}\n\t\t\t\tloadingText={loadingText}\n\t\t\t/>\n\t\t);\n\t}\n\n\tif (!items.length) {\n\t\treturn (\n\t\t\t<TabsNoDataState\n\t\t\t\tcontainerClassName={rootClassName}\n\t\t\t\tpanelsClassName={panelsClassName}\n\t\t\t\tpanelClassName={panelClassName}\n\t\t\t\tpanelBodyClassName={panelBodyClassName}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className={rootClassName}>\n\t\t\t<div className={styles.tabsWrapper}>\n\t\t\t\t<TabsTabList\n\t\t\t\t\titems={items}\n\t\t\t\t\tstate={state}\n\t\t\t\t\tclassName={tabListClassName}\n\t\t\t\t\tariaLabel={ariaLabel}\n\t\t\t\t\tariaLabelledBy={ariaLabelledBy}\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<div className={panelsClassName}>\n\t\t\t\t{items.map((item) => {\n\t\t\t\t\tconst isSelected = item.id === state.selectedTabId;\n\t\t\t\t\tconst isMounted = shouldMountTabPanel({\n\t\t\t\t\t\tmountStrategy,\n\t\t\t\t\t\tisSelected,\n\t\t\t\t\t\tisVisited: state.isVisited(item.id)\n\t\t\t\t\t});\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<TabsPanel\n\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\ttabId={item.id}\n\t\t\t\t\t\t\tisSelected={isSelected}\n\t\t\t\t\t\t\tclassName={panelClassName}\n\t\t\t\t\t\t\tgetTabElementId={state.getTabElementId}\n\t\t\t\t\t\t\tgetPanelElementId={state.getPanelElementId}>\n\t\t\t\t\t\t\t{isMounted ? <div className={panelBodyClassName}>{item.content}</div> : null}\n\t\t\t\t\t\t</TabsPanel>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import React, { Children, isValidElement, useMemo } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport uiStyles from \"../../ui.module.scss\";\nimport { getUiPanelToneClassName } from \"../../uiClasses\";\nimport { shouldMountTabPanel } from \"../lib/tabs\";\nimport { useTabsState } from \"../model/useTabsState\";\n\nimport styles from \"./Tabs.module.scss\";\nimport { TabsPanel } from \"./TabsPanel\";\nimport { TabsTabList } from \"./TabsTabList\";\n\nimport type { TabsDescriptor, TabsLayoutProps, TabsLayoutSectionProps, TabsLayoutTabProps } from \"../model/types\";\n\ninterface ParsedTabsLayoutTab extends TabsDescriptor {\n\ttoolbar: TabsLayoutSectionProps | null;\n\tcontent: TabsLayoutSectionProps;\n\tfooter: TabsLayoutSectionProps | null;\n}\n\nconst tabsLayoutTabDisplayName = \"TabsLayout.Tab\";\nconst tabsLayoutToolbarDisplayName = \"TabsLayout.Toolbar\";\nconst tabsLayoutContentDisplayName = \"TabsLayout.Content\";\nconst tabsLayoutFooterDisplayName = \"TabsLayout.Footer\";\n\n/**\n * Возвращает стабильный displayName compound-элемента.\n * Это нужно для корректной работы HMR, где ссылочное сравнение `child.type` может ломаться.\n */\nfunction getTabsLayoutElementDisplayName(child: React.ReactElement) {\n\tconst { type } = child;\n\n\tif (typeof type === \"function\") {\n\t\tconst componentType = type as React.JSXElementConstructor<unknown> & {\n\t\t\tdisplayName?: string;\n\t\t\tname?: string;\n\t\t};\n\n\t\treturn componentType.displayName ?? componentType.name ?? null;\n\t}\n\n\tif (typeof type === \"object\" && type !== null && \"displayName\" in type) {\n\t\tconst componentType = type as {\n\t\t\tdisplayName?: string;\n\t\t};\n\n\t\treturn typeof componentType.displayName === \"string\" ? componentType.displayName : null;\n\t}\n\n\treturn null;\n}\n\nfunction isTabsLayoutElement<Props>(child: React.ReactNode, displayName: string): child is React.ReactElement<Props> {\n\treturn isValidElement<Props>(child) && getTabsLayoutElementDisplayName(child) === displayName;\n}\n\n/**\n * Маркер верхнеуровневой вкладки в compound-режиме `TabsLayout`.\n */\nfunction TabsLayoutTab({ children }: TabsLayoutTabProps) {\n\treturn <>{children}</>;\n}\n\nTabsLayoutTab.displayName = tabsLayoutTabDisplayName;\n\n/**\n * Верхняя секция панели, исключённая из прокручиваемого содержимого.\n */\nfunction TabsLayoutToolbar({ children }: TabsLayoutSectionProps) {\n\treturn <>{children}</>;\n}\n\nTabsLayoutToolbar.displayName = tabsLayoutToolbarDisplayName;\n\n/**\n * Основное содержимое панели, которое само управляет своим layout и scroll.\n */\nfunction TabsLayoutContent({ children }: TabsLayoutSectionProps) {\n\treturn <>{children}</>;\n}\n\nTabsLayoutContent.displayName = tabsLayoutContentDisplayName;\n\n/**\n * Нижняя секция панели, исключённая из прокручиваемого содержимого.\n */\nfunction TabsLayoutFooter({ children }: TabsLayoutSectionProps) {\n\treturn <>{children}</>;\n}\n\nTabsLayoutFooter.displayName = tabsLayoutFooterDisplayName;\n\nfunction parseTabsLayoutSections(children: React.ReactNode, tabId: string) {\n\tlet toolbar: TabsLayoutSectionProps | null = null;\n\tlet content: TabsLayoutSectionProps | null = null;\n\tlet footer: TabsLayoutSectionProps | null = null;\n\n\tfor (const child of Children.toArray(children)) {\n\t\tif (!isValidElement(child)) {\n\t\t\tthrow new Error(\n\t\t\t\t`TabsLayout.Tab \"${tabId}\" поддерживает только дочерние элементы TabsLayout.Toolbar, TabsLayout.Content и TabsLayout.Footer.`\n\t\t\t);\n\t\t}\n\n\t\tif (isTabsLayoutElement<TabsLayoutSectionProps>(child, tabsLayoutToolbarDisplayName)) {\n\t\t\tif (toolbar) {\n\t\t\t\tthrow new Error(`TabsLayout.Tab \"${tabId}\" содержит более одного блока TabsLayout.Toolbar.`);\n\t\t\t}\n\n\t\t\ttoolbar = child.props;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (isTabsLayoutElement<TabsLayoutSectionProps>(child, tabsLayoutContentDisplayName)) {\n\t\t\tif (content) {\n\t\t\t\tthrow new Error(`TabsLayout.Tab \"${tabId}\" содержит более одного блока TabsLayout.Content.`);\n\t\t\t}\n\n\t\t\tcontent = child.props;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (isTabsLayoutElement<TabsLayoutSectionProps>(child, tabsLayoutFooterDisplayName)) {\n\t\t\tif (footer) {\n\t\t\t\tthrow new Error(`TabsLayout.Tab \"${tabId}\" содержит более одного блока TabsLayout.Footer.`);\n\t\t\t}\n\n\t\t\tfooter = child.props;\n\t\t\tcontinue;\n\t\t}\n\n\t\tthrow new Error(\n\t\t\t`TabsLayout.Tab \"${tabId}\" поддерживает только дочерние элементы TabsLayout.Toolbar, TabsLayout.Content и TabsLayout.Footer.`\n\t\t);\n\t}\n\n\tif (!content) {\n\t\tthrow new Error(`TabsLayout.Tab \"${tabId}\" должен содержать блок TabsLayout.Content.`);\n\t}\n\n\treturn { toolbar, content, footer };\n}\n\nfunction parseTabsLayoutChildren(children: React.ReactNode): ParsedTabsLayoutTab[] {\n\treturn Children.toArray(children).map((child) => {\n\t\tif (!isTabsLayoutElement<TabsLayoutTabProps>(child, tabsLayoutTabDisplayName)) {\n\t\t\tthrow new Error(\"TabsLayout принимает только дочерние элементы TabsLayout.Tab.\");\n\t\t}\n\n\t\treturn {\n\t\t\tid: child.props.id,\n\t\t\ttitle: child.props.title,\n\t\t\tdisabled: child.props.disabled,\n\t\t\t...parseTabsLayoutSections(child.props.children, child.props.id)\n\t\t};\n\t});\n}\n\n/**\n * Compound-оболочка tabs для составных panel-layout сценариев.\n * Сам компонент управляет только переключением и каркасом панели.\n */\nexport function TabsLayout({\n\tchildren,\n\tvalue,\n\tdefaultValue,\n\tonValueChange,\n\tclassName,\n\torientation = \"horizontal\",\n\tactivationMode = \"manual\",\n\tmountStrategy = \"lazy\",\n\tloop = true,\n\ttone = \"primary\",\n\tclean = false,\n\t\"aria-label\": ariaLabel,\n\t\"aria-labelledby\": ariaLabelledBy\n}: TabsLayoutProps) {\n\tconst tabs = useMemo(() => parseTabsLayoutChildren(children), [children]);\n\tconst state = useTabsState({\n\t\titems: tabs,\n\t\tvalue,\n\t\tdefaultValue,\n\t\tonValueChange,\n\t\torientation,\n\t\tactivationMode,\n\t\tloop\n\t});\n\tconst rootClassName = cn(\n\t\tstyles.tabsContainer,\n\t\tclean ? styles.clean : uiStyles.uiFilledPanel,\n\t\tstyles[orientation],\n\t\tgetUiPanelToneClassName(tone),\n\t\tclassName\n\t);\n\tconst panelsClassName = cn(styles.panels, styles.layoutPanels);\n\n\treturn (\n\t\t<div className={rootClassName}>\n\t\t\t<div className={styles.tabsWrapper}>\n\t\t\t\t<TabsTabList items={tabs} state={state} className={styles.tabs} ariaLabel={ariaLabel} ariaLabelledBy={ariaLabelledBy} />\n\t\t\t</div>\n\n\t\t\t<div className={panelsClassName}>\n\t\t\t\t{tabs.map((tab) => {\n\t\t\t\t\tconst isSelected = tab.id === state.selectedTabId;\n\t\t\t\t\tconst isMounted = shouldMountTabPanel({\n\t\t\t\t\t\tmountStrategy,\n\t\t\t\t\t\tisSelected,\n\t\t\t\t\t\tisVisited: state.isVisited(tab.id)\n\t\t\t\t\t});\n\n\t\t\t\t\tconst templateRows = `${tab.toolbar ? \"auto \" : \"\"}minmax(0, 1fr)${tab.footer ? \" auto\" : \"\"}`;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<TabsPanel\n\t\t\t\t\t\t\tkey={tab.id}\n\t\t\t\t\t\t\ttabId={tab.id}\n\t\t\t\t\t\t\tisSelected={isSelected}\n\t\t\t\t\t\t\tclassName={styles.panel}\n\t\t\t\t\t\t\tgetTabElementId={state.getTabElementId}\n\t\t\t\t\t\t\tgetPanelElementId={state.getPanelElementId}>\n\t\t\t\t\t\t\t{isMounted ? (\n\t\t\t\t\t\t\t\t<div className={styles.layoutPanel} style={{ gridTemplateRows: templateRows }}>\n\t\t\t\t\t\t\t\t\t{tab.toolbar ? (\n\t\t\t\t\t\t\t\t\t\t<div className={cn(styles.layoutSection, tab.toolbar.className)}>{tab.toolbar.children}</div>\n\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t<div className={cn(styles.layoutSection, styles.layoutContent, tab.content.className)}>\n\t\t\t\t\t\t\t\t\t\t{tab.content.children}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t{tab.footer ? (\n\t\t\t\t\t\t\t\t\t\t<div className={cn(styles.layoutSection, tab.footer.className)}>{tab.footer.children}</div>\n\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</TabsPanel>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nTabsLayout.Tab = TabsLayoutTab;\nTabsLayout.Toolbar = TabsLayoutToolbar;\nTabsLayout.Content = TabsLayoutContent;\nTabsLayout.Footer = TabsLayoutFooter;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabsBox.d.ts","sourceRoot":"","sources":["../../../src/tabs/ui/TabsBox.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AASnD;;;GAGG;AACH,wBAAgB,OAAO,CAAC,EACvB,KAAK,EACL,KAAK,EACL,YAAY,EACZ,aAAa,EACb,SAAS,EACT,SAAS,EACT,WAAW,EACX,WAA0B,EAC1B,cAA4B,EAC5B,aAAyB,EACzB,IAAW,EACX,IAAgB,EAChB,KAAa,EACb,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,EACjC,EAAE,YAAY,+
|
|
1
|
+
{"version":3,"file":"TabsBox.d.ts","sourceRoot":"","sources":["../../../src/tabs/ui/TabsBox.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AASnD;;;GAGG;AACH,wBAAgB,OAAO,CAAC,EACvB,KAAK,EACL,KAAK,EACL,YAAY,EACZ,aAAa,EACb,SAAS,EACT,SAAS,EACT,WAAW,EACX,WAA0B,EAC1B,cAA4B,EAC5B,aAAyB,EACzB,IAAW,EACX,IAAgB,EAChB,KAAa,EACb,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,EACjC,EAAE,YAAY,+BAmFd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabsLayout.d.ts","sourceRoot":"","sources":["../../../src/tabs/ui/TabsLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4C,MAAM,OAAO,CAAC;AAajE,OAAO,KAAK,EAAkB,eAAe,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AA4ClH;;GAEG;AACH,iBAAS,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE,kBAAkB,qBAEtD;kBAFQ,aAAa;;;AAMtB;;GAEG;AACH,iBAAS,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE,sBAAsB,qBAE9D;kBAFQ,iBAAiB;;;AAM1B;;GAEG;AACH,iBAAS,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE,sBAAsB,qBAE9D;kBAFQ,iBAAiB;;;AAM1B;;GAEG;AACH,iBAAS,gBAAgB,CAAC,EAAE,QAAQ,EAAE,EAAE,sBAAsB,qBAE7D;kBAFQ,gBAAgB;;;AAwEzB;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EAC1B,QAAQ,EACR,KAAK,EACL,YAAY,EACZ,aAAa,EACb,SAAS,EACT,WAA0B,EAC1B,cAAyB,EACzB,aAAsB,EACtB,IAAW,EACX,IAAgB,EAChB,KAAa,EACb,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,EACjC,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"TabsLayout.d.ts","sourceRoot":"","sources":["../../../src/tabs/ui/TabsLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4C,MAAM,OAAO,CAAC;AAajE,OAAO,KAAK,EAAkB,eAAe,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AA4ClH;;GAEG;AACH,iBAAS,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE,kBAAkB,qBAEtD;kBAFQ,aAAa;;;AAMtB;;GAEG;AACH,iBAAS,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE,sBAAsB,qBAE9D;kBAFQ,iBAAiB;;;AAM1B;;GAEG;AACH,iBAAS,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE,sBAAsB,qBAE9D;kBAFQ,iBAAiB;;;AAM1B;;GAEG;AACH,iBAAS,gBAAgB,CAAC,EAAE,QAAQ,EAAE,EAAE,sBAAsB,qBAE7D;kBAFQ,gBAAgB;;;AAwEzB;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EAC1B,QAAQ,EACR,KAAK,EACL,YAAY,EACZ,aAAa,EACb,SAAS,EACT,WAA0B,EAC1B,cAAyB,EACzB,aAAsB,EACtB,IAAW,EACX,IAAgB,EAChB,KAAa,EACb,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,EACjC,EAAE,eAAe,qBAgEjB;yBA9Ee,UAAU"}
|
package/package.json
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-CizMDlW9.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-D29TdvdI.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-rjlZcsBa.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-CizMDlW9.js";import{i,n as a,r as o,t as s}from"./BadgeList-xlIWwEkW.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`,`accent`,`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:`accent`,appearance:`solid`,children:`Акцент`}),(0,u.jsx)(o,{tone:`brand`,appearance:`solid`,children:`Бренд`}),(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-Buig9MSV.js";import{n as i}from"./iframe-CizMDlW9.js";import{a,i as o}from"./utils-tg3ibbzi.js";import{c as s,i as c}from"./array-D-_yMMUK-DnJ_b27D.js";import{n as l,t as u}from"./FloatingPopover-beid_uAU.js";import{a as d,i as f,r as p,t as m}from"./uiClasses-Bar5W7-L.js";import{n as h,t as g}from"./FlexContainer-BK3kWiEq.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:`"accent" | "neutral" | "brand" | "error" | "warning" | "success" | "info"`,elements:[{name:`literal`,value:`"accent"`},{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};
|