@ryuzaki13/react-foundation-ui 1.9.3 → 1.10.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/README.md +43 -0
- package/package.json +1 -1
- package/src/styles/config/_index.scss +26 -2
- package/src/styles/themes/_index.scss +1 -0
- package/src/styles/themes/_interactive-surface.scss +1 -1
- package/src/styles/themes/_theme.scss +173 -6
- package/src/styles/themes/dark/_default.scss +1 -3
- package/src/styles/themes/light/_default.scss +1 -3
- package/src/styles/themes/theme.test.ts +110 -0
- package/storybook-static/assets/{Badge-C1KbJFb6.js → Badge-_EizT2jv.js} +1 -1
- package/storybook-static/assets/{Badge.stories-CMV5YKMU.js → Badge.stories-hEpGMTKr.js} +1 -1
- package/storybook-static/assets/{BadgeList-Dp3AYrwv.js → BadgeList-BkSAtS2i.js} +1 -1
- package/storybook-static/assets/{Button-B2I2pMcy.js → Button-6gGebvgA.js} +1 -1
- package/storybook-static/assets/{Button-CcbXFAnn.js → Button-BM6kIoG9.js} +1 -1
- package/storybook-static/assets/{Button.stories-BzQjIelZ.js → Button.stories-BaHXZdjg.js} +1 -1
- package/storybook-static/assets/{CalendarView-BjM9oIc_.js → CalendarView-CTmr-9oB.js} +1 -1
- package/storybook-static/assets/{CheckBox-DX62RRB8.js → CheckBox-B6M9Ugeb.js} +1 -1
- package/storybook-static/assets/{CheckBox-BIVJcOqm.js → CheckBox-BGSLxY6H.js} +1 -1
- package/storybook-static/assets/{CheckBox.stories-CDVi7HoJ.js → CheckBox.stories-Cnwc5F1y.js} +1 -1
- package/storybook-static/assets/{Color-6AOWCN3U-BQUTqYuX.js → Color-6AOWCN3U-BGQxQLOE.js} +1 -1
- package/storybook-static/assets/{ContextMenu-DXdSsiE4.js → ContextMenu-6p-5GMAX.js} +1 -1
- package/storybook-static/assets/{ContextMenu-D1cYiYLX.js → ContextMenu-B-CEGklC.js} +1 -1
- package/storybook-static/assets/{ContextMenu.stories-CuHmimS8.js → ContextMenu.stories-BhFtKe9B.js} +1 -1
- package/storybook-static/assets/{CustomOptionButton-7RqaHQyF.js → CustomOptionButton-BtxdL6Pc.js} +1 -1
- package/storybook-static/assets/{DateInput-DiEqHlzH.js → DateInput-C3jJcnHA.js} +1 -1
- package/storybook-static/assets/{DateInput-itc81ORI.js → DateInput-D6H2qUcf.js} +1 -1
- package/storybook-static/assets/{DateInput.stories-BKinQKwP.js → DateInput.stories-CnMz9Gbl.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect-DPcNI2ev.js → DateRangePresetSelect-BR09ai82.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect-CXftu_8X.js → DateRangePresetSelect-C0Y0ZQ9M.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect.stories-C6q-yBU_.js → DateRangePresetSelect.stories-DBlIpDg9.js} +1 -1
- package/storybook-static/assets/{Detail-TKBhJXM1.js → Detail-4eidm8Uj.js} +1 -1
- package/storybook-static/assets/{Detail.stories-DrXBGm1b.js → Detail.stories-KHnEkJkj.js} +1 -1
- package/storybook-static/assets/{Dialog-CllCzJ5n.js → Dialog-fX-24IcZ.js} +1 -1
- package/storybook-static/assets/{Dialog-CRne1UkS.js → Dialog-oEX4S2LW.js} +1 -1
- package/storybook-static/assets/{Dialog.stories-Dr3E6XaP.js → Dialog.stories-DmVdpzhy.js} +1 -1
- package/storybook-static/assets/{Disclosure-CEuBeKUQ.js → Disclosure-kz-zI5WC.js} +1 -1
- package/storybook-static/assets/{Disclosure.stories-BSvAGMk4.js → Disclosure.stories-DVS_MmGS.js} +1 -1
- package/storybook-static/assets/{DisclosureGroup-CJs0KMvV.js → DisclosureGroup-C5spmyJC.js} +1 -1
- package/storybook-static/assets/{DocsRenderer-JROSPFPF-Ck6uvxG3.js → DocsRenderer-JROSPFPF-h4fsaU1T.js} +1 -1
- package/storybook-static/assets/{DropZone-DpsMRYuH.js → DropZone-C9ddViCj.js} +1 -1
- package/storybook-static/assets/{DropZone-BiG2d1OF.js → DropZone-uOkqppiy.js} +1 -1
- package/storybook-static/assets/{DropZone.stories-C3txCzNd.js → DropZone.stories-V_wInuE9.js} +1 -1
- package/storybook-static/assets/{DropdownMenu-BxLAvF2W.js → DropdownMenu-BfHbAx8n.js} +1 -1
- package/storybook-static/assets/{ExpandableActionPanel-GrT_b2Du.js → ExpandableActionPanel-O7Qtx9I_.js} +1 -1
- package/storybook-static/assets/{ExpandableActionPanel.stories-ZjZaIthK.js → ExpandableActionPanel.stories-DcEG2C7d.js} +1 -1
- package/storybook-static/assets/{Flex-Cv3Qmndv.js → Flex-DODx2gzB.js} +1 -1
- package/storybook-static/assets/{Flex.stories-CbGZJhgz.js → Flex.stories-uotfXpmi.js} +1 -1
- package/storybook-static/assets/{FloatingPopover-D4NxEU-n.js → FloatingPopover-B3nQlBso.js} +1 -1
- package/storybook-static/assets/{FormattedTableCell-DQOSRRXD.js → FormattedTableCell-BDDu1kp-.js} +1 -1
- package/storybook-static/assets/{Grid-CoCaqqJf.js → Grid-ClgafeLd.js} +1 -1
- package/storybook-static/assets/{Grid.stories-V3BXNQmF.js → Grid.stories-DYJDC1PC.js} +1 -1
- package/storybook-static/assets/{ImageCropper.stories-CHcshTek.js → ImageCropper.stories-uYiteU-F.js} +1 -1
- package/storybook-static/assets/{ImageRenderer-qHPGMl-l.js → ImageRenderer-K2ZLKgPh.js} +1 -1
- package/storybook-static/assets/{ImageRenderer.stories-O1ZPo7dd.js → ImageRenderer.stories-sZczXHPI.js} +1 -1
- package/storybook-static/assets/{ImageView.stories-CbrRE1YO.js → ImageView.stories-CDyFnYSM.js} +1 -1
- package/storybook-static/assets/{ImageViewer.stories-CbdAdVl2.js → ImageViewer.stories-DIuzTf1G.js} +2 -2
- package/storybook-static/assets/{ImageViewerRuntime-DnppwdQ8.js → ImageViewerRuntime-CtuKquXa.js} +1 -1
- package/storybook-static/assets/{Input-BW_KIjON.js → Input-D4tfWqd4.js} +1 -1
- package/storybook-static/assets/{Input-Eg9_PEo7.js → Input-cHEAcYed.js} +1 -1
- package/storybook-static/assets/{Input.stories-CifVnhP6.js → Input.stories-DxA7bFdU.js} +1 -1
- package/storybook-static/assets/{InputDateTime-d2w9tw72.js → InputDateTime-DMDXNI5Q.js} +1 -1
- package/storybook-static/assets/{InputDateTime.stories-CbdBjQVo.js → InputDateTime.stories-DNbof7D-.js} +1 -1
- package/storybook-static/assets/{InputFile-CCFrrpJv.js → InputFile-es_Dfi_m.js} +1 -1
- package/storybook-static/assets/{InputFile-DL7GKeGm.js → InputFile-jKZeiiyH.js} +1 -1
- package/storybook-static/assets/{InputFile.stories-Cvz70MX3.js → InputFile.stories-4qpeQAtU.js} +1 -1
- package/storybook-static/assets/{InputFiles-DKoTbSyC.js → InputFiles-DLBHMt-J.js} +1 -1
- package/storybook-static/assets/{InputFiles-1u5FHnaN.js → InputFiles-NOgnII1-.js} +1 -1
- package/storybook-static/assets/{InputFiles.stories-CW8enyCo.js → InputFiles.stories-BlXt2q0R.js} +1 -1
- package/storybook-static/assets/{InputFilesList-FAb5sH37.js → InputFilesList-jGdK2Bpv.js} +1 -1
- package/storybook-static/assets/{InputImage-DMEXLyoX.js → InputImage-BntWobt1.js} +1 -1
- package/storybook-static/assets/{InputImage-WuRkrpds.js → InputImage-Dwk1rgTF.js} +1 -1
- package/storybook-static/assets/{InputImage.stories-BdP_AhB9.js → InputImage.stories-g6_VheXC.js} +1 -1
- package/storybook-static/assets/{InteractiveComponents-BMQYO7fl.js → InteractiveComponents-Cj-hhs7B.js} +1 -1
- package/storybook-static/assets/{InteractiveComponents.stories-DJirNn_h.js → InteractiveComponents.stories-BYeU6IJM.js} +1 -1
- package/storybook-static/assets/{LayoutPicker-BZAwV4lf.js → LayoutPicker-CXz4IOwK.js} +1 -1
- package/storybook-static/assets/{LayoutPicker-C0oo_b-r.js → LayoutPicker-Dki87LGU.js} +1 -1
- package/storybook-static/assets/{LayoutPicker.stories-C8BzcbMh.js → LayoutPicker.stories-BBKD3V9F.js} +1 -1
- package/storybook-static/assets/{Listbox-CaEVOoYD.js → Listbox-CYDjztQQ.js} +1 -1
- package/storybook-static/assets/{Listbox-DbnMN1m2.js → Listbox-WrKuMKtp.js} +1 -1
- package/storybook-static/assets/{Listbox.stories-BkEYOlwL.js → Listbox.stories-B8Ex0N4a.js} +1 -1
- package/storybook-static/assets/{Modal-DjYwqol2.js → Modal-CklJ13a7.js} +1 -1
- package/storybook-static/assets/{Modal.stories-BchGkw0K.js → Modal.stories-Bou2z6wg.js} +1 -1
- package/storybook-static/assets/{ModalManagerProvider-DTKcyL8t.js → ModalManagerProvider-Ch_-390V.js} +1 -1
- package/storybook-static/assets/{MultiSelect-Ddsn1hXj.js → MultiSelect-DIUS_A1T.js} +1 -1
- package/storybook-static/assets/{MultiSelect-Dz5E5Pbf.js → MultiSelect-DTLa2pXR.js} +1 -1
- package/storybook-static/assets/{MultiSelect.stories-DEIKHwy1.js → MultiSelect.stories-BBMt0yCs.js} +1 -1
- package/storybook-static/assets/{NoData-CKGcddxk.js → NoData-DbdBWJjI.js} +1 -1
- package/storybook-static/assets/{NotificationsHost-CEfH53W5.js → NotificationsHost-BDzrnm0E.js} +1 -1
- package/storybook-static/assets/{NotificationsHost.stories-MTxFeVoy.js → NotificationsHost.stories-DRxhyBsq.js} +1 -1
- package/storybook-static/assets/{ODataMultiSelect-CvQSOety.js → ODataMultiSelect-BRqeU81R.js} +1 -1
- package/storybook-static/assets/{ODataMultiSelect.stories-DtCodUVW.js → ODataMultiSelect.stories-ER9gIab1.js} +1 -1
- package/storybook-static/assets/{ODataSelect-C5RMxZjc.js → ODataSelect-BbehbC8b.js} +1 -1
- package/storybook-static/assets/{ODataSelect.stories-CZ9mL0_j.js → ODataSelect.stories-B48c_2gZ.js} +1 -1
- package/storybook-static/assets/{ODataTreeMultiSelect-0fCn87D6.js → ODataTreeMultiSelect-PTn9G8gs.js} +1 -1
- package/storybook-static/assets/{ODataTreeMultiSelect.stories-DQDCllvF.js → ODataTreeMultiSelect.stories-C03Wgm5Y.js} +1 -1
- package/storybook-static/assets/{ODataTreeSelect-Bzfdon5Z.js → ODataTreeSelect-8gMkig_I.js} +1 -1
- package/storybook-static/assets/{ODataTreeSelect.stories-D5scx29T.js → ODataTreeSelect.stories-Bv2I7KCu.js} +1 -1
- package/storybook-static/assets/{OneStepScroller-COlpXyui.js → OneStepScroller-cJaBAa1u.js} +1 -1
- package/storybook-static/assets/{Option-wQK2X0Kl.js → Option-Cv4uUJtC.js} +1 -1
- package/storybook-static/assets/{OptionButton-C_lBxJnN.js → OptionButton-CfCsCZj9.js} +1 -1
- package/storybook-static/assets/{PeriodSelect-DgineFIH.js → PeriodSelect-BjlsDIpD.js} +1 -1
- package/storybook-static/assets/{PeriodSelect-heOd8pO8.js → PeriodSelect-CL1e2fFt.js} +1 -1
- package/storybook-static/assets/{PeriodSelect.stories-uiPmpg5A.js → PeriodSelect.stories-DunYr1Aw.js} +1 -1
- package/storybook-static/assets/{PickerTriggerActions-B567GsTL.js → PickerTriggerActions-BsZzXt1Y.js} +1 -1
- package/storybook-static/assets/{Popover-DGySGg9z.js → Popover-Cf_xTicI.js} +1 -1
- package/storybook-static/assets/{Popover-kJOIlyWU.js → Popover-CtQzsPDo.js} +1 -1
- package/storybook-static/assets/{Popover.stories-Cv154XF5.js → Popover.stories-JKUan9Fl.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput-VSoCHhMT.js → PresetRangeDateInput-3wxmAie1.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput-DvH7YmsA.js → PresetRangeDateInput-C2ExI6WD.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput.stories-CGlbX94O.js → PresetRangeDateInput.stories-CZqV5x9S.js} +1 -1
- package/storybook-static/assets/{PresetSelect-BcMVurGB.js → PresetSelect-Dgnuj0EX.js} +1 -1
- package/storybook-static/assets/{README-DY3q19ya.js → README-2-FHir8H.js} +1 -1
- package/storybook-static/assets/{README-Blg3xPoc.js → README-A0z2LdVH.js} +1 -1
- package/storybook-static/assets/{README-B-DLLxyh.js → README-B1BbZvY0.js} +1 -1
- package/storybook-static/assets/{README-C_F5QX-F.js → README-B3KAbq75.js} +1 -1
- package/storybook-static/assets/{README-DXqBns-d.js → README-BHIuzytK.js} +1 -1
- package/storybook-static/assets/{README-CEaGnPRF.js → README-BJ6iL_Oi.js} +1 -1
- package/storybook-static/assets/{README-B_nDVUsP.js → README-BKwyBGXN.js} +1 -1
- package/storybook-static/assets/{README-AHbsuUw8.js → README-BP1UlbEK.js} +1 -1
- package/storybook-static/assets/{README-BtCpxXgd.js → README-BRfQEn6d.js} +1 -1
- package/storybook-static/assets/{README-CC4dIKt_.js → README-BVS94DUR.js} +1 -1
- package/storybook-static/assets/{README-DAYyheBK.js → README-BYFlhYZu.js} +1 -1
- package/storybook-static/assets/{README-Dj6ep9U_.js → README-BZqzLhdi.js} +1 -1
- package/storybook-static/assets/{README-DKaFdYbR.js → README-B_JU9VFe.js} +1 -1
- package/storybook-static/assets/{README-DMZC3tWr.js → README-BcEBjxwv.js} +1 -1
- package/storybook-static/assets/{README-Bu7OMSUf.js → README-Bd88pBi9.js} +1 -1
- package/storybook-static/assets/{README-DMvggye-.js → README-BlrLSqAp.js} +1 -1
- package/storybook-static/assets/{README-BoZyIQir.js → README-BqyJY4sE.js} +1 -1
- package/storybook-static/assets/{README-CeK7FNh1.js → README-C0QsPT5U.js} +1 -1
- package/storybook-static/assets/{README-DBYrpsH8.js → README-C6GtvJxT.js} +1 -1
- package/storybook-static/assets/{README-TEnjnkJ8.js → README-CG4CDDCg.js} +1 -1
- package/storybook-static/assets/{README-C1Of7Jrs.js → README-CGaMjt_7.js} +1 -1
- package/storybook-static/assets/{README-CAiHTGCl.js → README-CRV3BVDl.js} +1 -1
- package/storybook-static/assets/{README-kgYtNaRd.js → README-CXqkVBN3.js} +1 -1
- package/storybook-static/assets/{README-FwXp4Pjy.js → README-CZVcJsrW.js} +1 -1
- package/storybook-static/assets/{README-Bi4zPzN1.js → README-Cmo_HdRn.js} +1 -1
- package/storybook-static/assets/{README-DjMYJYhe.js → README-CobGlBU3.js} +1 -1
- package/storybook-static/assets/{README-DVpSJuVZ.js → README-CohIDuHg.js} +1 -1
- package/storybook-static/assets/{README-MP9oEhDT.js → README-CpIso2nB.js} +1 -1
- package/storybook-static/assets/{README-BV3c8FDT.js → README-Cq_oiYsv.js} +1 -1
- package/storybook-static/assets/{README-CVSfzXX9.js → README-D-AaI8vq.js} +1 -1
- package/storybook-static/assets/{README-T0jrvm8P.js → README-D1CxTEac.js} +1 -1
- package/storybook-static/assets/{README-DiOpga3T.js → README-D1EK7i8x.js} +1 -1
- package/storybook-static/assets/{README-CXLCa134.js → README-D54wVMvG.js} +1 -1
- package/storybook-static/assets/{README-CCOdpywR.js → README-DCDfUIRn.js} +1 -1
- package/storybook-static/assets/{README-C2PSAh21.js → README-DEIW0tyL.js} +1 -1
- package/storybook-static/assets/{README-_kJbfY6a.js → README-DEpKhgOR.js} +1 -1
- package/storybook-static/assets/{README-DYgLLZOR.js → README-DFGmcWGC.js} +1 -1
- package/storybook-static/assets/{README-y0FYYKqJ.js → README-DPhAT1In.js} +1 -1
- package/storybook-static/assets/{README-Bdd3XZWr.js → README-DSwSQVlh.js} +1 -1
- package/storybook-static/assets/{README-Dbmtpfl0.js → README-DgthBxqb.js} +1 -1
- package/storybook-static/assets/{README-B_t_BiM-.js → README-DjMWtiAg.js} +1 -1
- package/storybook-static/assets/{README-DSNmiIfN.js → README-DkIuOHZM.js} +1 -1
- package/storybook-static/assets/{README-DCP8j0A2.js → README-DwXM60XH.js} +1 -1
- package/storybook-static/assets/{README-BOK-j9I7.js → README-DzjXoocv.js} +1 -1
- package/storybook-static/assets/{README-9b6mmXZa.js → README-ERqn3s8m.js} +1 -1
- package/storybook-static/assets/{README-RFcuJdu5.js → README-KP-zP3wT.js} +1 -1
- package/storybook-static/assets/{README-w1uOSyJu.js → README-WfYC8Np3.js} +1 -1
- package/storybook-static/assets/{README-Ba5xoJYB.js → README-ZzPAIWgs.js} +1 -1
- package/storybook-static/assets/{README-CNnubKZC.js → README-aSTOCLUT.js} +1 -1
- package/storybook-static/assets/{README-CukqSL-4.js → README-fuBwKtST.js} +1 -1
- package/storybook-static/assets/{README-DhImd5pH.js → README-j_y9R5i5.js} +1 -1
- package/storybook-static/assets/{README-CUlzrvUa.js → README-ne2eW1G_.js} +1 -1
- package/storybook-static/assets/{RadioButton-o4av6A8a.js → RadioButton-B-mjqqNn.js} +1 -1
- package/storybook-static/assets/{RadioButton-BQKjKxAe.js → RadioButton-DOPeKTpq.js} +1 -1
- package/storybook-static/assets/{RadioButton.stories-DcSQNaXN.js → RadioButton.stories-DmJ2WYTz.js} +1 -1
- package/storybook-static/assets/{RadioGroup-C10vUMZk.js → RadioGroup-BeWujwoV.js} +1 -1
- package/storybook-static/assets/{RadioGroup-8EH0MZWC.js → RadioGroup-Ceg8JuOb.js} +1 -1
- package/storybook-static/assets/{RadioGroup.stories-BqS79JtE.js → RadioGroup.stories-De-LJkUg.js} +1 -1
- package/storybook-static/assets/{Scrollable-ddtSKo90.js → Scrollable-CQ0VriMf.js} +1 -1
- package/storybook-static/assets/{Select-BY6ORdvS.js → Select-BXxlKe2v.js} +1 -1
- package/storybook-static/assets/{Select-B5ShJKKc.js → Select-LKcPO0Z7.js} +1 -1
- package/storybook-static/assets/{Select.stories-BSF0Wnux.js → Select.stories-DHLXo13w.js} +1 -1
- package/storybook-static/assets/{SerializableSelect-CS19oFlz.js → SerializableSelect-BuM3dkAs.js} +1 -1
- package/storybook-static/assets/{SerializableSelect.stories-BPmCTl6L.js → SerializableSelect.stories-vWkW4jhX.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput-CTfMcncR.js → SingleDateTimeInput-CoFQ5YsH.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput-BEJu-R1m.js → SingleDateTimeInput-Dg4Eerlb.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput.stories-CYxHrxxd.js → SingleDateTimeInput.stories-DPiJvWWi.js} +1 -1
- package/storybook-static/assets/{Slider-BeAKJm-a.js → Slider-BSh7kV-S.js} +1 -1
- package/storybook-static/assets/{Slider-DVzdB5yx.js → Slider-DOvFZbXf.js} +1 -1
- package/storybook-static/assets/{Slider.stories-K2VPtjGi.js → Slider.stories-DFJaeUh7.js} +1 -1
- package/storybook-static/assets/{SliderInput-BAfXIzNG.js → SliderInput-BcRtUjB0.js} +1 -1
- package/storybook-static/assets/{SliderInput-ApivV4in.js → SliderInput-C4ihlBc-.js} +1 -1
- package/storybook-static/assets/{SliderInput.stories-PcR7jo6v.js → SliderInput.stories-Ce_t8Ix5.js} +1 -1
- package/storybook-static/assets/{Sortable-DiswLDg5.js → Sortable-BIs6lhP7.js} +1 -1
- package/storybook-static/assets/{Sortable.stories-fsl44zmS.js → Sortable.stories-DQURE991.js} +1 -1
- package/storybook-static/assets/{Splitter-Ct-47bE7.js → Splitter-ckdXxBXg.js} +1 -1
- package/storybook-static/assets/{Splitter.stories-Bz79Lc6H.js → Splitter.stories-CUFNp4Tn.js} +1 -1
- package/storybook-static/assets/{StateSelect-XihqGd4j.js → StateSelect-H0lz2NEb.js} +1 -1
- package/storybook-static/assets/{StateSelect-BIhp7x_B.js → StateSelect-n21UcZSA.js} +1 -1
- package/storybook-static/assets/{StateSelect.stories-C3rxpGIl.js → StateSelect.stories-Dxuw0udu.js} +1 -1
- package/storybook-static/assets/{StringToggle.stories-CxLLcq91.js → StringToggle.stories-CtyQZeTV.js} +1 -1
- package/storybook-static/assets/{Switch-DNR82Wwo.js → Switch-D7Zf25cb.js} +1 -1
- package/storybook-static/assets/{Switch-CrtYGIaI.js → Switch-lqdPHHBM.js} +1 -1
- package/storybook-static/assets/{Switch.stories-BPDQ5GN3.js → Switch.stories-Dh43AKbd.js} +1 -1
- package/storybook-static/assets/{Table-cJR7vlNL.js → Table-C1rPn-XQ.js} +1 -1
- package/storybook-static/assets/{Table.stories-DiKmKEFg.js → Table.stories-BEPbfhV-.js} +1 -1
- package/storybook-static/assets/{Tabs-m055f4P9.js → Tabs-D3frsSel.js} +1 -1
- package/storybook-static/assets/{Tabs.stories-CDKX0533.js → Tabs.stories-DPuD45Yh.js} +1 -1
- package/storybook-static/assets/{TabsBox-C7XivHOT.js → TabsBox-CvM1qdOv.js} +1 -1
- package/storybook-static/assets/{TagInput-9CihyZlQ.js → TagInput-CuEEqvZ4.js} +1 -1
- package/storybook-static/assets/{TagInput.stories-Dum4KJFn.js → TagInput.stories-UZgdbBXc.js} +1 -1
- package/storybook-static/assets/{Text-CCM2eK9R.js → Text-kiZvmGXF.js} +1 -1
- package/storybook-static/assets/{Textarea-C21w8uCg.js → Textarea-Bd-m6AMQ.js} +1 -1
- package/storybook-static/assets/{Textarea-DQZ24GYg.js → Textarea-aMAWt5G7.js} +1 -1
- package/storybook-static/assets/{Textarea.stories-yFLMuluS.js → Textarea.stories-CPFBr-oG.js} +1 -1
- package/storybook-static/assets/{TimePanel-Bogchh-c.js → TimePanel-DdPcQTGj.js} +1 -1
- package/storybook-static/assets/{TimePanel.stories-BlP2rln-.js → TimePanel.stories-D4OIcGjj.js} +1 -1
- package/storybook-static/assets/{Toggle-CEtTYP_r.js → Toggle-B0dOcoN3.js} +1 -1
- package/storybook-static/assets/{Toggle-C3ZDjRb5.js → Toggle-CsG6nw-K.js} +1 -1
- package/storybook-static/assets/{Toggle.stories-BaOfYMcT.js → Toggle.stories-Cg0viZ-3.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect-BmYBPzAL.js → TreeMultiSelect-CIZ7swZO.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect-Bpp3Axoc.js → TreeMultiSelect-Cvrt2tVd.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect.stories-CNmwscoQ.js → TreeMultiSelect.stories-BuCRlJo2.js} +1 -1
- package/storybook-static/assets/{TreePickerBase-DyhXguNc.js → TreePickerBase-BmeYui_g.js} +1 -1
- package/storybook-static/assets/{TreeSelect-Dp57_GsP.js → TreeSelect-DYNdOo9o.js} +1 -1
- package/storybook-static/assets/{TreeSelect-DuPG1BmQ.js → TreeSelect-uqNgYOmu.js} +1 -1
- package/storybook-static/assets/{TreeSelect.stories-BRRmTO1d.js → TreeSelect.stories-CcTsXgqj.js} +1 -1
- package/storybook-static/assets/{TreeTable-DwX5hSn0.js → TreeTable-CVeU69sr.js} +1 -1
- package/storybook-static/assets/{TreeTable.stories-CUUpqLpH.js → TreeTable.stories-wbPuT4sc.js} +1 -1
- package/storybook-static/assets/{blocks-CBEn2XET.js → blocks-DJAWDNJL.js} +3 -3
- package/storybook-static/assets/{check-DVP2RrW4.js → check-BQjlxuuS.js} +1 -1
- package/storybook-static/assets/{chevron-down-pB5aBt7f.js → chevron-down-DdaB0emH.js} +1 -1
- package/storybook-static/assets/{chevron-left--IVT8TOE.js → chevron-left-DGH3zWjp.js} +1 -1
- package/storybook-static/assets/{chevron-right-iLA_AfbS.js → chevron-right-BQCoBw1U.js} +1 -1
- package/storybook-static/assets/{chunk-W22LQPXL-YYPDaIiD.js → chunk-W22LQPXL-Bg_6bTj9.js} +1 -1
- package/storybook-static/assets/{circle-alert-DOF8EPXy.js → circle-alert-CMkR4f70.js} +1 -1
- package/storybook-static/assets/{circle-check-BjGJW_s0.js → circle-check-cbaoMVLN.js} +1 -1
- package/storybook-static/assets/{components-CzWrpiYt.js → components-Dkk47tSj.js} +3 -3
- package/storybook-static/assets/{contextMenu-BFKXs6m5.js → contextMenu-BqC4Sspp.js} +1 -1
- package/storybook-static/assets/{download-4iQ_Vsh9.js → download-B970bwbP.js} +1 -1
- package/storybook-static/assets/{floating-ui.react-D3bibiBm.js → floating-ui.react-C_v_mn2Q.js} +1 -1
- package/storybook-static/assets/{foundationApi-BV_TLuEz.js → foundationApi-gbfIQc-_.js} +1 -1
- package/storybook-static/assets/{foundationLib-D_yb9R0g.js → foundationLib-CVJOY_Zl.js} +1 -1
- package/storybook-static/assets/{hooks-BbSZNRij.js → hooks-CaQmmGjr.js} +1 -1
- package/storybook-static/assets/{iframe-D8QmYZNe.css → iframe-B-mSv97o.css} +1 -1
- package/storybook-static/assets/iframe-BJHdWoiL.js +1 -0
- package/storybook-static/assets/{iframe-B3pr0MSX.js → iframe-P2lWyit5.js} +3 -3
- package/storybook-static/assets/{info-BKZSxeDX.js → info-DiEB7Sol.js} +1 -1
- package/storybook-static/assets/{odata-49160IRT.js → odata-Bd7GUMGD.js} +1 -1
- package/storybook-static/assets/{odataStoryFixtures-1xkPz1fv.js → odataStoryFixtures-BERkpW2l.js} +1 -1
- package/storybook-static/assets/{react-Dt1l_ilq.js → react-JmKyT7SE.js} +1 -1
- package/storybook-static/assets/{refresh-cw-DP6ayqeB.js → refresh-cw-BH23X1DD.js} +1 -1
- package/storybook-static/assets/{settings-2-CJlqldqu.js → settings-2-CzsrV2MM.js} +1 -1
- package/storybook-static/assets/{sortable-BGvg9h6F.js → sortable-BB-dflOx.js} +1 -1
- package/storybook-static/assets/{syntaxhighlighter-QEQV7K2Y-Bx8YXbZx.js → syntaxhighlighter-QEQV7K2Y-Cn17pOSq.js} +1 -1
- package/storybook-static/assets/{trash-2-BjN-x0Jv.js → trash-2-BXS3JzUd.js} +1 -1
- package/storybook-static/assets/{triangle-alert-BClbPGD8.js → triangle-alert-WCBU4otF.js} +1 -1
- package/storybook-static/assets/{useODataSelectBase-A-C5_yHs.js → useODataSelectBase-B8unXxru.js} +1 -1
- package/storybook-static/assets/{useODataTreeData-COxjc88A.js → useODataTreeData-DY-RbpqR.js} +1 -1
- package/storybook-static/assets/{usePickerQuery-DNMGmR5c.js → usePickerQuery-DY-5rS3f.js} +1 -1
- package/storybook-static/assets/{usePickerTriggerController-CK41xnO5.js → usePickerTriggerController-DHXXSvyS.js} +1 -1
- package/storybook-static/assets/{x-DKa9bKVJ.js → x-3HZ4js_c.js} +1 -1
- package/storybook-static/iframe.html +3 -3
- package/storybook-static/project.json +1 -1
- package/storybook-static/assets/iframe-BOWfmfT4.js +0 -1
package/README.md
CHANGED
|
@@ -106,6 +106,49 @@ import "@ryuzaki13/react-foundation-ui/styles.css";
|
|
|
106
106
|
|
|
107
107
|
Обычно в host-проекте это оформляется отдельным entrypoint, например `src/app/styles/shared.scss`, который сначала настраивает foundation config, затем подключает foundation styles, темы и доменные CSS-переменные приложения.
|
|
108
108
|
|
|
109
|
+
### Точные палитры host-приложения
|
|
110
|
+
|
|
111
|
+
Если одной OKLCH-точки недостаточно для воспроизведения брендовой палитры, публичный mixin `theme` принимает точные accent/status scales. Неуказанные значения наследуются из настроенного baseline схемы; границы статуса по умолчанию повторяют text scale, а `soft` вычисляется из точного fill. Карта `tokens` выводится последней и предназначена для точечных semantic-token overrides. Для custom theme без отдельных `brand` и `neutral` scales эти тона связываются с её accent и базовыми content/surface/border tokens; недостающие border/soft tokens остальных статусов также следуют за их точными text/fill значениями.
|
|
112
|
+
|
|
113
|
+
```scss
|
|
114
|
+
@use "@ryuzaki13/react-foundation-ui/styles/themes" as foundationThemes;
|
|
115
|
+
|
|
116
|
+
:root[data-theme="light:brand"] {
|
|
117
|
+
@include foundationThemes.theme(
|
|
118
|
+
light,
|
|
119
|
+
(
|
|
120
|
+
tokens: (
|
|
121
|
+
"--surface-0": #fffaf2,
|
|
122
|
+
"--surface-1": #f8ecd9,
|
|
123
|
+
"--focus-ring": #c2410c
|
|
124
|
+
),
|
|
125
|
+
accent: (
|
|
126
|
+
content: #9a3412,
|
|
127
|
+
surface: #ffedd5,
|
|
128
|
+
border: #ea580c
|
|
129
|
+
),
|
|
130
|
+
status: (
|
|
131
|
+
error: (
|
|
132
|
+
text: (
|
|
133
|
+
base: #b91c1c,
|
|
134
|
+
hover: #991b1b,
|
|
135
|
+
active: #7f1d1d
|
|
136
|
+
),
|
|
137
|
+
fill: (
|
|
138
|
+
base: #dc2626,
|
|
139
|
+
hover: #b91c1c,
|
|
140
|
+
active: #991b1b,
|
|
141
|
+
on-fill: #ffffff
|
|
142
|
+
)
|
|
143
|
+
)
|
|
144
|
+
)
|
|
145
|
+
)
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Для `accent` точная форма содержит `content`, `surface` и `border`. Для статуса обязательна карта `text` с `base`; `hover` и `active` имеют последовательные fallback. Карта `fill` и её поля опциональны, а `border` может отдельно задать `base`, `hover`, `active` и `focus`. Такой контракт позволяет переносить существующие темы без аппроксимации цветов и при этом сохраняет все новые semantic-токены foundation UI.
|
|
151
|
+
|
|
109
152
|
## Просмотр изображений
|
|
110
153
|
|
|
111
154
|
`ImageViewer` из точечного entrypoint `@ryuzaki13/react-foundation-ui/image` предоставляет controlled lightbox для одного изображения или галереи. Реализация использует Yet Another React Lightbox как внутренний runtime, но наружу публикует только foundation-контракты `ImageViewerImage`, `ImageViewerFeatures`, `ImageViewerLabels` и `ImageViewerStyle`.
|
package/package.json
CHANGED
|
@@ -203,7 +203,19 @@ $light-theme-defaults: (
|
|
|
203
203
|
"--shadow-xs": 0 0 0.25em rgba(0, 0, 0, 0.15),
|
|
204
204
|
"--shadow-sm": 0 0 0.25em rgba(0, 0, 0, 0.25),
|
|
205
205
|
"--shadow-md": 0 0 0.5em rgba(0, 0, 0, 0.25),
|
|
206
|
-
"--shadow-lg": 0 0 1em rgba(0, 0, 0, 0.25)
|
|
206
|
+
"--shadow-lg": 0 0 1em rgba(0, 0, 0, 0.25),
|
|
207
|
+
"--interactive-color": inherit,
|
|
208
|
+
"--interactive-hover-color": var(--content-0),
|
|
209
|
+
"--interactive-active-color": var(--content-0),
|
|
210
|
+
"--interactive-selected-color": var(--content-0),
|
|
211
|
+
"--interactive-surface": transparent,
|
|
212
|
+
"--interactive-hover-surface": var(--surface-accent),
|
|
213
|
+
"--interactive-active-surface": var(--surface-accent),
|
|
214
|
+
"--interactive-selected-surface": var(--surface-accent),
|
|
215
|
+
"--interactive-border": transparent,
|
|
216
|
+
"--interactive-hover-border": var(--border-accent),
|
|
217
|
+
"--interactive-active-border": var(--border-accent),
|
|
218
|
+
"--interactive-selected-border": var(--border-accent)
|
|
207
219
|
),
|
|
208
220
|
accent: (
|
|
209
221
|
l: 0.55,
|
|
@@ -301,7 +313,19 @@ $dark-theme-defaults: (
|
|
|
301
313
|
"--shadow-xs": 0 0 0.25em rgba(0, 0, 0, 0.15),
|
|
302
314
|
"--shadow-sm": 0 0 0.25em rgba(0, 0, 0, 0.25),
|
|
303
315
|
"--shadow-md": 0 0 0.5em rgba(0, 0, 0, 0.25),
|
|
304
|
-
"--shadow-lg": 0 0 1em rgba(0, 0, 0, 0.25)
|
|
316
|
+
"--shadow-lg": 0 0 1em rgba(0, 0, 0, 0.25),
|
|
317
|
+
"--interactive-color": inherit,
|
|
318
|
+
"--interactive-hover-color": var(--content-0),
|
|
319
|
+
"--interactive-active-color": var(--content-0),
|
|
320
|
+
"--interactive-selected-color": var(--content-0),
|
|
321
|
+
"--interactive-surface": transparent,
|
|
322
|
+
"--interactive-hover-surface": var(--surface-accent),
|
|
323
|
+
"--interactive-active-surface": var(--surface-accent),
|
|
324
|
+
"--interactive-selected-surface": var(--surface-accent),
|
|
325
|
+
"--interactive-border": transparent,
|
|
326
|
+
"--interactive-hover-border": var(--border-accent),
|
|
327
|
+
"--interactive-active-border": var(--border-accent),
|
|
328
|
+
"--interactive-selected-border": var(--border-accent)
|
|
305
329
|
),
|
|
306
330
|
accent: (
|
|
307
331
|
l: 0.7,
|
|
@@ -1,17 +1,184 @@
|
|
|
1
1
|
@use "sass:map";
|
|
2
|
+
@use "sass:meta";
|
|
2
3
|
|
|
4
|
+
@use "../config" as stylesConfig;
|
|
3
5
|
@use "../mixins/" as *;
|
|
4
6
|
|
|
5
|
-
@
|
|
7
|
+
@function _theme-base($mode) {
|
|
8
|
+
@if $mode == light {
|
|
9
|
+
@return stylesConfig.$light-theme;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
@if $mode == dark {
|
|
13
|
+
@return stylesConfig.$dark-theme;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@error "Цветовая схема темы должна иметь значение light или dark, получено: #{$mode}.";
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
@function _scale-value($scale, $name, $fallback) {
|
|
20
|
+
@if meta.type-of($scale) == map and map.has-key($scale, $name) {
|
|
21
|
+
@return map.get($scale, $name);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@return $fallback;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
@mixin _exact-accent-palette($accent) {
|
|
28
|
+
--content-accent: var(--hc-content-accent, #{map.get($accent, content)});
|
|
29
|
+
--surface-accent: var(--hc-surface-accent, #{map.get($accent, surface)});
|
|
30
|
+
--border-accent: var(--hc-border-accent, #{map.get($accent, border)});
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
@mixin _exact-status-palette($name, $status) {
|
|
34
|
+
$text: map.get($status, text);
|
|
35
|
+
$fill: map.get($status, fill);
|
|
36
|
+
$border: map.get($status, border);
|
|
37
|
+
$text-base: map.get($text, base);
|
|
38
|
+
$text-hover: _scale-value($text, hover, $text-base);
|
|
39
|
+
$text-active: _scale-value($text, active, $text-hover);
|
|
40
|
+
$fill-base: _scale-value($fill, base, $text-base);
|
|
41
|
+
$fill-hover: _scale-value($fill, hover, $fill-base);
|
|
42
|
+
$fill-active: _scale-value($fill, active, $fill-hover);
|
|
43
|
+
$fill-on: _scale-value($fill, on-fill, var(--surface-0));
|
|
44
|
+
$border-base: _scale-value($border, base, $text-base);
|
|
45
|
+
$border-hover: _scale-value($border, hover, $text-hover);
|
|
46
|
+
$border-active: _scale-value($border, active, $text-active);
|
|
47
|
+
$border-focus: _scale-value($border, focus, $border-active);
|
|
48
|
+
|
|
49
|
+
--status-#{$name}-text: var(--hc-status-#{$name}-text, #{$text-base});
|
|
50
|
+
--status-#{$name}-text-hover: var(--hc-status-#{$name}-text, #{$text-hover});
|
|
51
|
+
--status-#{$name}-text-active: var(--hc-status-#{$name}-text, #{$text-active});
|
|
52
|
+
|
|
53
|
+
--status-#{$name}-fill: var(--hc-status-#{$name}-fill, #{$fill-base});
|
|
54
|
+
--status-#{$name}-fill-hover: var(--hc-status-#{$name}-fill, #{$fill-hover});
|
|
55
|
+
--status-#{$name}-fill-active: var(--hc-status-#{$name}-fill, #{$fill-active});
|
|
56
|
+
--status-#{$name}-on-fill: var(--hc-status-#{$name}-on-fill, #{$fill-on});
|
|
57
|
+
|
|
58
|
+
@if map.has-key($fill, soft) {
|
|
59
|
+
--status-#{$name}-soft: var(--hc-status-#{$name}-soft, #{map.get($fill, soft)});
|
|
60
|
+
} @else {
|
|
61
|
+
--status-#{$name}-soft: var(--hc-status-#{$name}-soft, color-mix(in srgb, var(--status-#{$name}-fill) 12%, var(--surface-0)));
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
--status-#{$name}-border: var(--hc-status-#{$name}-border, #{$border-base});
|
|
65
|
+
--status-#{$name}-border-hover: var(--hc-status-#{$name}-border, #{$border-hover});
|
|
66
|
+
--status-#{$name}-border-active: var(--hc-status-#{$name}-border, #{$border-active});
|
|
67
|
+
--status-#{$name}-border-focus: var(--hc-status-#{$name}-border, #{$border-focus});
|
|
68
|
+
|
|
69
|
+
@if $name == neutral {
|
|
70
|
+
--border-0: var(--hc-border, #{$border-base});
|
|
71
|
+
--border-1: var(--hc-border, #{$border-hover});
|
|
72
|
+
--border-2: var(--hc-border, #{$border-active});
|
|
73
|
+
--border-focus: var(--hc-border-focus, #{$border-focus});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
@function _status-overridden($status-overrides, $name) {
|
|
78
|
+
@return meta.type-of($status-overrides) == map and map.has-key($status-overrides, $name);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
@mixin _adaptive-custom-statuses($mode, $status-overrides) {
|
|
82
|
+
@if not _status-overridden($status-overrides, brand) {
|
|
83
|
+
$brand-on-fill: var(--surface-0);
|
|
84
|
+
|
|
85
|
+
@if $mode == light {
|
|
86
|
+
$brand-on-fill: var(--content-0);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
@include _exact-status-palette(
|
|
90
|
+
brand,
|
|
91
|
+
(
|
|
92
|
+
text: (
|
|
93
|
+
base: var(--content-accent)
|
|
94
|
+
),
|
|
95
|
+
fill: (
|
|
96
|
+
base: var(--content-accent),
|
|
97
|
+
hover: var(--border-accent),
|
|
98
|
+
active: var(--border-accent),
|
|
99
|
+
on-fill: $brand-on-fill,
|
|
100
|
+
soft: var(--surface-accent)
|
|
101
|
+
),
|
|
102
|
+
border: (
|
|
103
|
+
base: var(--border-accent)
|
|
104
|
+
)
|
|
105
|
+
)
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
@if not _status-overridden($status-overrides, neutral) {
|
|
110
|
+
@include _exact-status-palette(
|
|
111
|
+
neutral,
|
|
112
|
+
(
|
|
113
|
+
text: (
|
|
114
|
+
base: var(--content-0),
|
|
115
|
+
hover: var(--content-1),
|
|
116
|
+
active: var(--content-0)
|
|
117
|
+
),
|
|
118
|
+
fill: (
|
|
119
|
+
base: var(--content-0),
|
|
120
|
+
hover: var(--content-1),
|
|
121
|
+
active: var(--content-0),
|
|
122
|
+
on-fill: var(--surface-0),
|
|
123
|
+
soft: var(--surface-1)
|
|
124
|
+
),
|
|
125
|
+
border: (
|
|
126
|
+
base: var(--border-0),
|
|
127
|
+
hover: var(--border-1),
|
|
128
|
+
active: var(--border-2),
|
|
129
|
+
focus: var(--focus-ring)
|
|
130
|
+
)
|
|
131
|
+
)
|
|
132
|
+
);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
@each $name in error, warning, success, info {
|
|
136
|
+
@if not _status-overridden($status-overrides, $name) {
|
|
137
|
+
// Плоские exact-token overrides меняют text/fill ниже по каскаду,
|
|
138
|
+
// поэтому производные значения связываются через CSS variables, а не копируют baseline.
|
|
139
|
+
--status-#{$name}-soft: var(--hc-status-#{$name}-soft, color-mix(in srgb, var(--status-#{$name}-fill) 12%, var(--surface-0)));
|
|
140
|
+
--status-#{$name}-border: var(--hc-status-#{$name}-border, var(--status-#{$name}-text));
|
|
141
|
+
--status-#{$name}-border-hover: var(--hc-status-#{$name}-border, var(--status-#{$name}-text-hover));
|
|
142
|
+
--status-#{$name}-border-active: var(--hc-status-#{$name}-border, var(--status-#{$name}-text-active));
|
|
143
|
+
--status-#{$name}-border-focus: var(--hc-status-#{$name}-border, var(--status-#{$name}-text-active));
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
@mixin _theme-palette($theme, $mode) {
|
|
6
149
|
$accent: map.get($theme, accent);
|
|
7
150
|
|
|
8
|
-
@
|
|
151
|
+
@if map.has-key($accent, content) {
|
|
152
|
+
@include _exact-accent-palette($accent);
|
|
153
|
+
} @else {
|
|
154
|
+
@include generate-accent(map.get($accent, l), map.get($accent, c), map.get($accent, h), $mode);
|
|
155
|
+
}
|
|
9
156
|
|
|
10
157
|
@each $name, $status in map.get($theme, status) {
|
|
11
|
-
|
|
12
|
-
|
|
158
|
+
@if map.has-key($status, text) {
|
|
159
|
+
@include _exact-status-palette($name, $status);
|
|
160
|
+
} @else {
|
|
161
|
+
$fill: map.get($status, fill);
|
|
162
|
+
$border: map.get($status, border);
|
|
13
163
|
|
|
14
|
-
|
|
15
|
-
|
|
164
|
+
@include generate-status-fill($name, map.get($fill, l), map.get($fill, c), map.get($fill, h), $mode);
|
|
165
|
+
@include generate-status-border($name, map.get($border, l), map.get($border, c), map.get($border, h), $mode);
|
|
166
|
+
}
|
|
16
167
|
}
|
|
17
168
|
}
|
|
169
|
+
|
|
170
|
+
/// Формирует полную тему из настроенного baseline выбранной схемы и точечных переопределений.
|
|
171
|
+
/// `accent` и элементы `status` принимают либо OKLCH seed `l/c/h`, либо точные semantic scales;
|
|
172
|
+
/// плоская карта `tokens` выводится последней и остаётся escape hatch для любого CSS custom property.
|
|
173
|
+
@mixin theme($mode, $overrides: ()) {
|
|
174
|
+
$resolved-theme: map.deep-merge(_theme-base($mode), $overrides);
|
|
175
|
+
$status-overrides: map.get($overrides, status);
|
|
176
|
+
|
|
177
|
+
@include _theme-palette($resolved-theme, $mode);
|
|
178
|
+
|
|
179
|
+
@if $overrides != () {
|
|
180
|
+
@include _adaptive-custom-statuses($mode, $status-overrides);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
@include stylesConfig.emit-declarations(stylesConfig.theme-tokens($resolved-theme));
|
|
184
|
+
}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
@use "../../config" as stylesConfig;
|
|
2
1
|
@use "../theme" as theme;
|
|
3
2
|
|
|
4
3
|
@mixin dark-theme {
|
|
5
|
-
@include
|
|
6
|
-
@include theme.generated-theme-palette(stylesConfig.$dark-theme, dark);
|
|
4
|
+
@include theme.theme(dark);
|
|
7
5
|
}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
@use "../../config" as stylesConfig;
|
|
2
1
|
@use "../theme" as theme;
|
|
3
2
|
|
|
4
3
|
@mixin light-theme {
|
|
5
|
-
@include
|
|
6
|
-
@include theme.generated-theme-palette(stylesConfig.$light-theme, light);
|
|
4
|
+
@include theme.theme(light);
|
|
7
5
|
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { compileString } from "sass-embedded";
|
|
2
|
+
import { describe, expect, it } from "vitest";
|
|
3
|
+
|
|
4
|
+
import { resolve } from "node:path";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Компилирует публичный themes entrypoint с точной палитрой host-приложения.
|
|
8
|
+
* Тест защищает порядок слоёв: baseline обязан заполнить контракт, а exact values — победить генератор.
|
|
9
|
+
*/
|
|
10
|
+
function compileExactTheme(): string {
|
|
11
|
+
return compileString(
|
|
12
|
+
`@use "themes" as foundationThemes;
|
|
13
|
+
|
|
14
|
+
.custom-theme {
|
|
15
|
+
@include foundationThemes.theme(light, (
|
|
16
|
+
tokens: (
|
|
17
|
+
"--surface-0": #fefefe,
|
|
18
|
+
"--status-error-text": #990011
|
|
19
|
+
),
|
|
20
|
+
accent: (
|
|
21
|
+
content: #123456,
|
|
22
|
+
surface: #ddeeff,
|
|
23
|
+
border: #345678
|
|
24
|
+
),
|
|
25
|
+
status: (
|
|
26
|
+
error: (
|
|
27
|
+
text: (
|
|
28
|
+
base: #aa0011,
|
|
29
|
+
hover: #bb1122,
|
|
30
|
+
active: #880000
|
|
31
|
+
),
|
|
32
|
+
fill: (
|
|
33
|
+
base: #cc2233,
|
|
34
|
+
hover: #dd3344,
|
|
35
|
+
active: #aa1122,
|
|
36
|
+
on-fill: #ffffff
|
|
37
|
+
)
|
|
38
|
+
)
|
|
39
|
+
)
|
|
40
|
+
));
|
|
41
|
+
}`,
|
|
42
|
+
{
|
|
43
|
+
loadPaths: [resolve("src/styles")],
|
|
44
|
+
style: "expanded"
|
|
45
|
+
}
|
|
46
|
+
).css;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
describe("theme", () => {
|
|
50
|
+
it("наследует полный baseline и принимает точные accent/status scales", () => {
|
|
51
|
+
const css = compileExactTheme();
|
|
52
|
+
|
|
53
|
+
expect(css).toContain("--surface-1: var(--hc-surface, #f8f8f9)");
|
|
54
|
+
expect(css).toContain("--content-accent: var(--hc-content-accent, #123456)");
|
|
55
|
+
expect(css).toContain("--status-error-text-hover: var(--hc-status-error-text, #bb1122)");
|
|
56
|
+
expect(css).toContain("--status-error-border-hover: var(--hc-status-error-border, #bb1122)");
|
|
57
|
+
expect(css).toMatch(
|
|
58
|
+
/--status-error-soft:\s*var\(\s*--hc-status-error-soft,\s*color-mix\(in srgb, var\(--status-error-fill\) 12%, var\(--surface-0\)\)\s*\)/
|
|
59
|
+
);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it("выводит плоские token overrides после сгенерированной палитры", () => {
|
|
63
|
+
const css = compileExactTheme();
|
|
64
|
+
const generatedTextIndex = css.indexOf("--status-error-text: var(--hc-status-error-text, #aa0011)");
|
|
65
|
+
const exactTokenIndex = css.lastIndexOf("--status-error-text: #990011");
|
|
66
|
+
|
|
67
|
+
expect(generatedTextIndex).toBeGreaterThanOrEqual(0);
|
|
68
|
+
expect(exactTokenIndex).toBeGreaterThan(generatedTextIndex);
|
|
69
|
+
expect(css).toContain("--surface-0: #fefefe");
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
it("связывает brand, neutral и недостающие status tokens с точной палитрой", () => {
|
|
73
|
+
const css = compileString(
|
|
74
|
+
`@use "themes" as foundationThemes;
|
|
75
|
+
|
|
76
|
+
.custom-theme {
|
|
77
|
+
@include foundationThemes.theme(dark, (
|
|
78
|
+
tokens: (
|
|
79
|
+
"--content-accent": #00ffaa,
|
|
80
|
+
"--surface-accent": #003322,
|
|
81
|
+
"--border-accent": #00cc88,
|
|
82
|
+
"--status-error-text": #ff6677,
|
|
83
|
+
"--status-error-text-hover": #ff8899,
|
|
84
|
+
"--status-error-text-active": #dd4455,
|
|
85
|
+
"--status-error-fill": #991122
|
|
86
|
+
)
|
|
87
|
+
));
|
|
88
|
+
}`,
|
|
89
|
+
{
|
|
90
|
+
loadPaths: [resolve("src/styles")],
|
|
91
|
+
style: "expanded"
|
|
92
|
+
}
|
|
93
|
+
).css;
|
|
94
|
+
|
|
95
|
+
expect(css).toContain("--status-brand-fill: var(--hc-status-brand-fill, var(--content-accent))");
|
|
96
|
+
expect(css).toContain("--status-neutral-border-focus: var(--hc-status-neutral-border, var(--focus-ring))");
|
|
97
|
+
expect(css).toContain("--status-error-border-hover: var(--hc-status-error-border, var(--status-error-text-hover))");
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
describe("interactive surface", () => {
|
|
102
|
+
it("применяет отдельный border token выбранного состояния", () => {
|
|
103
|
+
const css = compileString('@use "interactive-surface";', {
|
|
104
|
+
loadPaths: [resolve("src/styles/themes")],
|
|
105
|
+
style: "expanded"
|
|
106
|
+
}).css;
|
|
107
|
+
|
|
108
|
+
expect(css).toMatch(/\.interactiveSurface\[data-selected=true\]\.interactiveSurfaceFrame\s*\{\s*border-color: var\(--bs\);\s*\}/);
|
|
109
|
+
});
|
|
110
|
+
});
|
|
@@ -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-P2lWyit5.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-DJAWDNJL.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-hEpGMTKr.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-P2lWyit5.js";import{i,n as a,r as o,t as s}from"./BadgeList-BkSAtS2i.js";var c=t({Appearances:()=>h,Basic:()=>p,RemovableList:()=>_,Sizes:()=>g,Tones:()=>m,__namedExportsOrder:()=>v,default:()=>f}),l,u,d,f,p,m,h,g,_,v;function y(){return(y=e((()=>{l=n(),i(),a(),u=r(),{useArgs:d}=__STORYBOOK_MODULE_PREVIEW_API__,f={title:`UI/Badge`,component:o,args:{children:`Новый`,size:`md`,tone:`info`,appearance:`solid`},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{children:{description:`Текст внутри бейджа.`,control:`text`},size:{description:`Размер бейджа.`,control:`inline-radio`,options:[`xs`,`sm`,`md`,`lg`,`xl`]},tone:{description:`Цветовой тон бейджа.`,control:`inline-radio`,options:[`neutral`,`brand`,`success`,`warning`,`error`,`info`]},appearance:{description:`Форма бейджа.`,control:`inline-radio`,options:[`solid`,`outline`,`ghost`,`transparent`]},onRemove:{description:`Показывает кнопку удаления и вызывает обработчик по клику.`,control:!1}}},p={render:function(){let[e]=d();return(0,u.jsx)(o,{...e})}},m={render:()=>(0,u.jsxs)(s,{children:[(0,u.jsx)(o,{tone:`neutral`,appearance:`outline`,children:`Neutral`}),(0,u.jsx)(o,{tone:`success`,appearance:`solid`,children:`Успешно`}),(0,u.jsx)(o,{tone:`warning`,appearance:`solid`,children:`Внимание`}),(0,u.jsx)(o,{tone:`error`,appearance:`solid`,children:`Ошибка`}),(0,u.jsx)(o,{tone:`info`,appearance:`solid`,children:`Информация`})]})},h={render:()=>(0,u.jsxs)(s,{children:[(0,u.jsx)(o,{tone:`neutral`,appearance:`solid`,children:`Solid`}),(0,u.jsx)(o,{tone:`neutral`,appearance:`outline`,children:`Outline`}),(0,u.jsx)(o,{tone:`info`,appearance:`ghost`,children:`Ghost`}),(0,u.jsx)(o,{tone:`warning`,appearance:`transparent`,children:`Transparent`})]})},g={render:()=>(0,u.jsxs)(s,{children:[(0,u.jsx)(o,{size:`xs`,children:`Extra Small`}),(0,u.jsx)(o,{size:`sm`,children:`Small`}),(0,u.jsx)(o,{size:`md`,children:`Medium`}),(0,u.jsx)(o,{size:`lg`,children:`Large`}),(0,u.jsx)(o,{size:`xl`,children:`Extra Large`})]})},_={render:()=>{let[e,t]=(0,l.useState)([`Фильтр A`,`Фильтр B`,`Фильтр C`]);return(0,u.jsx)(s,{children:e.map(e=>(0,u.jsx)(o,{tone:`info`,appearance:`outline`,onRemove:()=>t(t=>t.filter(t=>t!==e)),children:e},e))})}},p.parameters={...p.parameters,docs:{...p.parameters?.docs,source:{originalSource:`{
|
|
2
2
|
render: function Render() {
|
|
3
3
|
const [args] = useArgs<BadgeStoryArgs>();
|
|
4
4
|
return <Badge {...args} />;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{t}from"./react-BZJXY1be.js";import{n,t as r}from"./x-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{t}from"./react-BZJXY1be.js";import{n,t as r}from"./x-3HZ4js_c.js";import{n as i}from"./iframe-P2lWyit5.js";import{a,i as o}from"./utils-tg3ibbzi.js";import{a as s,l as c}from"./array-D-_yMMUK-BQ0uu1hZ.js";import{n as l,t as u}from"./FloatingPopover-B3nQlBso.js";import{a as d,i as f,r as p,t as m}from"./uiClasses-Bz6cvlDQ.js";import{n as h,t as g}from"./FlexContainer-BWyPlTMB.js";function _({maxChar:e,placement:t=`left`,closeDelay:n=0,maxWidth:r,children:i,block:a,state:o,textWrap:s,textWrapProps:l}){let d=c(i);if(!d.length||e&&d.length<e)return(0,v.jsx)(`span`,{children:d});let f=s??`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((()=>{s(),l(),v=i(),_.__docgenInfo={description:``,methods:[],displayName:`TextOverflow`,props:{children:{required:!0,tsType:{name:`string`},description:``},maxChar:{required:!1,tsType:{name:`number`},description:``},maxWidth:{required:!1,tsType:{name:`number`},description:`Максимальная ширина тултипа в em.`},placement:{required:!1,tsType:{name:`Placement`},description:``,defaultValue:{value:`"left"`,computed:!1}},closeDelay:{required:!1,tsType:{name:`number`},description:``,defaultValue:{value:`0`,computed:!1}},block:{required:!1,tsType:{name:`literal`,value:`true`},description:`Для работы text-overflow элемент обязан быть блочным или inline-block.
|
|
2
2
|
Если в качестве обёртки передается инлайновый компонент, то он будет
|
|
3
3
|
перезаписан через стили на display: block или inline-block в зависимости
|
|
4
4
|
от установки данного пропса.`},state:{required:!1,tsType:{name:`union`,raw:`"information" | "error" | "warning" | "success" | "negative"`,elements:[{name:`literal`,value:`"information"`},{name:`literal`,value:`"error"`},{name:`literal`,value:`"warning"`},{name:`literal`,value:`"success"`},{name:`literal`,value:`"negative"`}]},description:``},textWrap:{required:!1,tsType:{name:`T`},description:``},textWrapProps:{required:!1,tsType:{name:`Omit`,elements:[{name:`ComponentProps`,elements:[{name:`T`}],raw:`ComponentProps<T>`},{name:`literal`,value:`"children"`}],raw:`Omit<ComponentProps<T>, "children">`},description:``}}}})))()}var b,x,S,C,w,T,E,D,O,k;function A(){return(A=e((()=>{b=`qBtmnH`,x=`p-HsHY`,S=`u9tQAE`,C=`FRScRz`,w=`W13uQO`,T=`_3IRcM9`,E=`R3ybI7`,D=`DdWAaC`,O=`_5cXBQF`,k={badge:b,passive:x,sizeXs:S,sizeSm:C,sizeMd:w,sizeLg:T,sizeXl:E,content:D,removeButton:O}})))()}function j({children:e,size:t=`sm`,tone:n,appearance:i,className:o,onRemove:s}){let c=n??`neutral`,l=d({tone:n,appearance:i,fallbackTone:c,fallbackAppearance:c===`neutral`?`outline`:`solid`});return(0,M.jsxs)(`div`,{className:a(k.badge,N[t],p(l.tone),m(l.appearance),!s&&k.passive,o),children:[(0,M.jsx)(_,{maxChar:25,placement:`top`,block:!0,textWrapProps:{className:k.content},children:String(e)}),s&&(0,M.jsx)(`button`,{type:`button`,onClick:s,className:k.removeButton,"aria-label":`Удалить бейдж`,"data-ui":`badge-remove-button`,"data-action":`remove-badge`,children:(0,M.jsx)(r,{})})]})}var M,N;function P(){return(P=e((()=>{o(),n(),y(),f(),A(),M=i(),N={xs:k.sizeXs,sm:k.sizeSm,md:k.sizeMd,lg:k.sizeLg,xl:k.sizeXl},j.__docgenInfo={description:`Компактный индикатор для статусов, категорий и коротких служебных меток.`,methods:[],displayName:`Badge`,props:{children:{required:!0,tsType:{name:`union`,raw:`string | number`,elements:[{name:`string`},{name:`number`}]},description:``},size:{required:!1,tsType:{name:`union`,raw:`"xs" | "sm" | "md" | "lg" | "xl"`,elements:[{name:`literal`,value:`"xs"`},{name:`literal`,value:`"sm"`},{name:`literal`,value:`"md"`},{name:`literal`,value:`"lg"`},{name:`literal`,value:`"xl"`}]},description:``,defaultValue:{value:`"sm"`,computed:!1}},tone:{required:!1,tsType:{name:`union`,raw:`"neutral" | "brand" | "error" | "warning" | "success" | "info"`,elements:[{name:`literal`,value:`"neutral"`},{name:`literal`,value:`"brand"`},{name:`literal`,value:`"error"`},{name:`literal`,value:`"warning"`},{name:`literal`,value:`"success"`},{name:`literal`,value:`"info"`}]},description:``},appearance:{required:!1,tsType:{name:`union`,raw:`"solid" | "outline" | "ghost" | "transparent"`,elements:[{name:`literal`,value:`"solid"`},{name:`literal`,value:`"outline"`},{name:`literal`,value:`"ghost"`},{name:`literal`,value:`"transparent"`}]},description:``},className:{required:!1,tsType:{name:`string`},description:``},onRemove:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``}}}})))()}function F({children:e}){return(0,L.jsx)(g,{inline:!0,wrap:!0,gap:`sm`,align:`baseline`,children:I.Children.map(e,(e,t)=>(0,L.jsx)(I.Fragment,{children:e},t))})}var I,L;function R(){return(R=e((()=>{I=t(),h(),L=i(),F.__docgenInfo={description:"Контейнер для группы `Badge`, который выстраивает элементы в единый список с предсказуемыми отступами. Используется для компактного вывода набора меток или фильтров.",methods:[],displayName:`BadgeList`,props:{children:{required:!0,tsType:{name:`Array`,elements:[{name:`ReactElement`,elements:[{name:`union`,raw:`typeof Badge | null | undefined | false`,elements:[{name:`Badge`},{name:`null`},{name:`undefined`},{name:`literal`,value:`false`}]}],raw:`ReactElement<typeof Badge | null | undefined | false>`}],raw:`ReactElement<typeof Badge | null | undefined | false>[]`},description:``}}}})))()}export{P as i,R as n,j as r,F as t};
|
|
@@ -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-P2lWyit5.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-DJAWDNJL.js";import{a as p,i as m,n as h,o as g,r as _,t as v}from"./Button.stories-BaHXZdjg.js";function y(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(s,{of:h,parameters:{atomicCanvas:!0,layout:`padded`,docs:{toc:!0}}}),`
|
|
2
2
|
`,(0,x.jsx)(u,{children:`Button`}),`
|
|
3
3
|
`,(0,x.jsx)(o,{children:`Базовая action-кнопка дизайн-системы для пользовательских действий, подтверждений и быстрых операций`}),`
|
|
4
4
|
`,(0,x.jsxs)(t.p,{children:[(0,x.jsx)(t.code,{children:`Button`}),` используется как универсальная кнопка интерфейса: в формах, тулбарах, модальных окнах, карточках, таблицах и компактных icon-only сценариях.`]}),`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as e,n as t}from"./rolldown-runtime-DkW27tQK.js";import{t as n}from"./react-BZJXY1be.js";import{n as r}from"./iframe-
|
|
1
|
+
import{a as e,n as t}from"./rolldown-runtime-DkW27tQK.js";import{t as n}from"./react-BZJXY1be.js";import{n as r}from"./iframe-P2lWyit5.js";import{a as i,i as a}from"./utils-tg3ibbzi.js";import{n as o,t as s}from"./FloatingPopover-B3nQlBso.js";import{n as c,t as l}from"./ui.module-31LPbZGK.js";import{a as u,i as d,r as f,t as p}from"./uiClasses-Bz6cvlDQ.js";var m,h,g,_,v;function y(){return(y=t((()=>{m=`wLOHwj`,h=`lFsM-Y`,g=`LPob63`,_=`tsaGtv`,v={button:m,iconOnly:h,buttonInner:g,buttonIcon:_}})))()}var b,x,S;function C(){return(C=t((()=>{b=e(n(),1),a(),o(),l(),d(),y(),x=r(),S=(0,b.forwardRef)(function({children:e,disabled:t,className:n,icon:r,iconEnd:a,title:o,variant:l,tone:d,appearance:m,type:h=`button`,"aria-label":g,..._},y){let S=b.Children.count(e)>0,C=!!r&&!S,w=u({variant:l,tone:d,appearance:m,fallbackAppearance:d&&d!==`neutral`?`solid`:`outline`}),T=C?g??o:g,E=(0,x.jsx)(`button`,{..._,ref:y,type:h,disabled:t,"aria-label":T,className:i(c.uiElement,c.uiInputControl,v.button,f(w.tone),p(w.appearance),C?v.iconOnly:``,`textNoWrap`,n??``),children:(0,x.jsxs)(`span`,{className:v.buttonInner,children:[r&&!a&&(0,x.jsx)(`span`,{"aria-hidden":`true`,className:v.buttonIcon,children:r}),S&&(0,x.jsx)(`span`,{className:`flexEllipsis`,children:e}),r&&a&&(0,x.jsx)(`span`,{"aria-hidden":`true`,className:v.buttonIcon,children:r})]})});return o?(0,x.jsx)(s,{placement:`bottom`,tooltip:!0,content:(0,x.jsx)(x.Fragment,{children:o}),children:E}):E}),S.__docgenInfo={description:'Базовая кнопка дизайн-системы для пользовательских действий.\nПоддерживает состояния, tone + appearance, иконки и безопасный `type="button"` по умолчанию.',methods:[],displayName:`Button`,props:{variant:{required:!1,tsType:{name:`union`,raw:`| "transparent"
|
|
2
2
|
| "ghost"
|
|
3
3
|
| "neutral"
|
|
4
4
|
| "brand"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e,r as t}from"./rolldown-runtime-DkW27tQK.js";import{n,t as r}from"./check-
|
|
1
|
+
import{n as e,r as t}from"./rolldown-runtime-DkW27tQK.js";import{n,t as r}from"./check-BQjlxuuS.js";import{n as i,t as a}from"./download-B970bwbP.js";import{i as o,n as s,r as c}from"./iframe-P2lWyit5.js";import{n as l,t as u}from"./Button-BM6kIoG9.js";var d,f;function p(){return(p=e((()=>{o(),d=[[`path`,{d:`M10.268 21a2 2 0 0 0 3.464 0`,key:`vwvbt9`}],[`path`,{d:`M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326`,key:`11g9vi`}]],f=c(`bell`,d)})))()}var m,h;function g(){return(g=e((()=>{o(),m=[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]],h=c(`plus`,m)})))()}var _=t({Basic:()=>x,ComposableScheme:()=>C,Variants:()=>S,WithIcons:()=>w,__namedExportsOrder:()=>T,default:()=>b}),v,y,b,x,S,C,w,T;function E(){return(E=e((()=>{p(),n(),i(),g(),l(),v=s(),{useArgs:y}=__STORYBOOK_MODULE_PREVIEW_API__,b={title:`UI/Button`,component:u,args:{children:`Действие`,variant:`neutralOutline`,disabled:!1,iconEnd:!1},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{children:{description:`Текстовое содержимое кнопки.`,control:`text`},variant:{description:"Готовая схема для обратной совместимости. Если заданы `tone` или `appearance`, они имеют приоритет.",control:`select`,options:[`neutral`,`neutralOutline`,`ghost`,`brand`,`error`,`warning`,`success`,`info`,`brandOutline`,`errorOutline`,`warningOutline`,`successOutline`,`infoOutline`,`transparent`]},tone:{description:`Цветовой тон кнопки.`,control:`inline-radio`,options:[`neutral`,`brand`,`error`,`warning`,`success`,`info`]},appearance:{description:`Визуальная форма кнопки.`,control:`inline-radio`,options:[`solid`,`outline`,`ghost`,`transparent`]},icon:{description:`Иконка слева или справа от текста.`,control:!1},iconEnd:{description:`Перемещает иконку в конец кнопки.`,control:`boolean`},type:{description:"Тип нативной кнопки; по умолчанию безопасный `button`.",control:`select`,options:[`button`,`submit`,`reset`]},disabled:{description:`Блокирует нажатие.`,control:`boolean`}}},x={render:function(){let[e]=y();return(0,v.jsx)(u,{...e})}},S={render:()=>(0,v.jsxs)(`div`,{style:{display:`grid`,gap:12,gridTemplateColumns:`repeat(auto-fit, minmax(180px, 1fr))`},children:[(0,v.jsx)(u,{variant:`neutral`,children:`Neutral Solid`}),(0,v.jsx)(u,{variant:`neutralOutline`,children:`Neutral Outline`}),(0,v.jsx)(u,{variant:`ghost`,children:`Ghost`}),(0,v.jsx)(u,{variant:`brand`,children:`Brand Solid`}),(0,v.jsx)(u,{variant:`brandOutline`,children:`Brand Outline`}),(0,v.jsx)(u,{variant:`info`,children:`Info Solid`}),(0,v.jsx)(u,{variant:`success`,children:`Success Solid`}),(0,v.jsx)(u,{variant:`warning`,children:`Warning Solid`}),(0,v.jsx)(u,{variant:`error`,children:`Error Solid`}),(0,v.jsx)(u,{variant:`infoOutline`,children:`Info Outline`}),(0,v.jsx)(u,{variant:`successOutline`,children:`Success Outline`}),(0,v.jsx)(u,{variant:`warningOutline`,children:`Warning Outline`}),(0,v.jsx)(u,{variant:`errorOutline`,children:`Error Outline`}),(0,v.jsx)(u,{variant:`transparent`,children:`Transparent`})]}),args:{children:`Действие`}},C={render:()=>(0,v.jsxs)(`div`,{style:{display:`grid`,gap:12,gridTemplateColumns:`repeat(auto-fit, minmax(180px, 1fr))`},children:[(0,v.jsx)(u,{tone:`neutral`,appearance:`solid`,children:`Neutral Solid`}),(0,v.jsx)(u,{tone:`neutral`,appearance:`outline`,children:`Neutral Outline`}),(0,v.jsx)(u,{tone:`neutral`,appearance:`ghost`,children:`Neutral Ghost`}),(0,v.jsx)(u,{tone:`brand`,appearance:`solid`,children:`Brand Solid`}),(0,v.jsx)(u,{tone:`brand`,appearance:`outline`,children:`Brand Outline`}),(0,v.jsx)(u,{tone:`brand`,appearance:`ghost`,children:`Brand Ghost`}),(0,v.jsx)(u,{tone:`brand`,appearance:`transparent`,children:`Brand Transparent`}),(0,v.jsx)(u,{tone:`info`,appearance:`outline`,children:`Info Outline`}),(0,v.jsx)(u,{tone:`success`,appearance:`solid`,children:`Success Solid`}),(0,v.jsx)(u,{tone:`error`,appearance:`transparent`,children:`Error Transparent`})]})},w={render:()=>(0,v.jsxs)(`div`,{style:{display:`flex`,gap:12,flexWrap:`wrap`},children:[(0,v.jsx)(u,{icon:(0,v.jsx)(a,{}),children:`Скачать`}),(0,v.jsx)(u,{icon:(0,v.jsx)(h,{}),tone:`info`,appearance:`solid`,children:`Создать`}),(0,v.jsx)(u,{icon:(0,v.jsx)(r,{}),iconEnd:!0,tone:`success`,appearance:`solid`,children:`Подтвердить`}),(0,v.jsx)(u,{icon:(0,v.jsx)(f,{}),title:`Уведомления`})]}),args:{children:`Действие`}},x.parameters={...x.parameters,docs:{...x.parameters?.docs,source:{originalSource:`{
|
|
2
2
|
render: function Render() {
|
|
3
3
|
const [args] = useArgs<ButtonProps>();
|
|
4
4
|
return <Button {...args} />;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{t}from"./react-BZJXY1be.js";import{n,t as r}from"./chevron-left--IVT8TOE.js";import{n as i,t as a}from"./chevron-right-iLA_AfbS.js";import{i as o,n as s,r as c}from"./iframe-B3pr0MSX.js";import{a as l,i as u}from"./utils-tg3ibbzi.js";import{C as d,b as f,c as p,h as m,m as h,n as g,o as _,w as v,x as y,y as b}from"./formatters-D33Uh3si-Df97arf9.js";import{n as x,t as S}from"./Button-CcbXFAnn.js";var C,w;function T(){return(T=e((()=>{o(),C=[[`path`,{d:`M8 2v3`,key:`1ioesn`}],[`path`,{d:`M16 2v3`,key:`otl347`}],[`rect`,{x:`3`,y:`3`,width:`18`,height:`18`,rx:`2`,key:`h1oib`}],[`path`,{d:`M3 9h18`,key:`1pudct`}],[`path`,{d:`M8 13h.01`,key:`1sbv64`}],[`path`,{d:`M12 13h.01`,key:`y0uutt`}],[`path`,{d:`M16 13h.01`,key:`wip0gl`}],[`path`,{d:`M8 17h.01`,key:`p3bg7i`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}],[`path`,{d:`M16 17h.01`,key:`ql8jdd`}]],w=c(`calendar-days`,C)})))()}function ee(e){return e===`month`?`month`:e===`year`?`year`:`day`}function E(e,t){return k.indexOf(e)>=k.indexOf(t)}function te(e,t){let n=ee(e);return E(n,t)?n:t}function D(e,t){return!e||!t?!1:e.start.getTime()===t.start.getTime()&&e.end.getTime()===t.end.getTime()}function ne(e,t,n){if(!e||!t||!n)return!1;let r=Math.min(t.start.getTime(),n.start.getTime()),i=Math.max(t.end.getTime(),n.end.getTime());return e.start.getTime()>=r&&e.end.getTime()<=i}function O({date:e,value:t,hoveredDate:n,selectsRange:r,selectionOptions:i}){let a=g(e,i),o=!r&&t instanceof Date?t:null,s=g(o,i);if(!r||!Array.isArray(t))return{selected:_(e,s),range:!1,rangeStart:!1,rangeEnd:!1};let[c,l]=t,u=g(c,i),d=g(l??(c?n:null),i),f=D(a,u),p=D(a,d);return{selected:!1,range:ne(a,u,d)&&!f&&!p,rangeStart:f,rangeEnd:p}}var k,re;function A(){return(A=e((()=>{b(),k=[`day`,`month`,`year`],re=[`friday`,`saturday`,`sunday`]})))()}var ie,ae,oe,se,ce,le,ue,de,fe,j,M,N,P,F,I,L,R;function z(){return(z=e((()=>{ie=`Dshr-j`,ae=`esetVt`,oe=`i-LJYe`,se=`XZsnCH`,ce=`_2KDjTS`,le=`o-freG`,ue=`GcV08-`,de=`UCrE-I`,fe=`L2V3uq`,j=`Te9oCq`,M=`cUF2pQ`,N=`d1L5uw`,P=`LU0M9Y`,F=`MR3y5p`,I=`VDqDpm`,L=`CLR-7m`,R={dayView:ie,weekdays:ae,weekday:oe,daysGrid:se,week:ce,day:le,disabled:ue,outsideMonth:de,periodSelection:fe,periodPreview:j,selected:M,range:N,rangeStart:P,rangeEnd:F,weekend:I,now:L}})))()}var B,V,H,pe,U;function me(){return(me=e((()=>{B=t(),b(),u(),z(),V=s(),H=[`Пн`,`Вт`,`Ср`,`Чт`,`Пт`,`Сб`,`Вс`],pe=new Intl.DateTimeFormat(`ru-RU`,{weekday:`long`,year:`numeric`,month:`long`,day:`numeric`}),U=({now:e,currentDate:t,value:n,onChange:r,minDate:i,maxDate:a,selectsRange:o,selectionMode:s=`day`,weekEndDay:c=`sunday`})=>{let[u,f]=(0,B.useState)(null),m={selectionMode:s,weekEndDay:c},v=(()=>{let e=t.getFullYear(),n=t.getMonth(),r=h(e,n,1),i=h(e,n+1,0),a=r.getDay()===0?6:r.getDay()-1,o=42-(a+i.getDate()),s=[],c=h(e,n,0).getDate();for(let t=a;t>0;--t)s.push(h(e,n-1,c-t+1));for(let t=1;t<=i.getDate();t+=1)s.push(h(e,n,t));for(let t=1;t<=o;t+=1)s.push(h(e,n+1,t));let l=[];for(let e=0;e<s.length;e+=7)l.push(s.slice(e,e+7));return l})(),b=o&&Array.isArray(n)?n[0]:null,x=o&&Array.isArray(n)?n[1]:null,S=g(o?null:n,m),C=g(u,m),w=x??(b?C?.end??null:null),T=s===`week`,ee=T&&(!o||!b),E=e=>{if(!o||!b||!w)return!1;let t=d(e).getTime(),n=b.getTime(),r=w.getTime();return t>=Math.min(n,r)&&t<=Math.max(n,r)},te=e=>!y(g(e,m),{minDate:i,maxDate:a}),D=(e,t)=>{t||(T&&f(e),!(!o||!b||x)&&(T||f(e)))};return(0,V.jsxs)(`div`,{className:R.dayView,children:[(0,V.jsx)(`div`,{className:R.weekdays,children:H.map(e=>(0,V.jsx)(`div`,{className:R.weekday,children:e},e))}),(0,V.jsx)(`div`,{className:R.daysGrid,onMouseLeave:()=>{(T||!x)&&f(null)},children:v.map((n,i)=>(0,V.jsx)(`div`,{className:R.week,children:n.map((n,a)=>{let o=n.getMonth()===t.getMonth(),c=_(n,S),u=ee&&_(n,C),d=E(n),f=p(n,b),m=p(n,w),h=p(n,e),g=te(n);return(0,V.jsx)(`button`,{type:`button`,onClick:()=>!g&&r(n),onMouseEnter:()=>D(n,g),disabled:g,"data-ui":`calendar-day-button`,"data-action":`select-calendar-day`,className:l(R.day,{[R.outsideMonth]:!o,[R.periodSelection]:s===`week`,[R.periodPreview]:u&&!c,[R.selected]:c,[R.range]:d&&!f&&!m,[R.rangeStart]:f,[R.rangeEnd]:m,[R.disabled]:g,[R.weekend]:a>4,[R.now]:h}),"aria-label":pe.format(n),"aria-pressed":c||d||f||m,children:n.getDate()},`${i}-${a}`)})},i))})]})},U.__docgenInfo={description:`Отображает сетку дней месяца в календарной семантике без timezone-сдвига.`,methods:[],displayName:`CalendarDayView`,props:{selectionMode:{defaultValue:{value:`"day"`,computed:!1},required:!1},weekEndDay:{defaultValue:{value:`"sunday"`,computed:!1},required:!1}}}})))()}var he,ge,_e,ve,ye,be,xe,Se,W;function Ce(){return(Ce=e((()=>{he=`p5pRGW`,ge=`pUHpxD`,_e=`lwWv-z`,ve=`_8gn-3z`,ye=`b57d-c`,be=`nGc5FO`,xe=`JLqjri`,Se=`UQMYwg`,W={monthView:he,monthsGrid:ge,month:_e,disabled:ve,range:ye,selected:be,rangeStart:xe,rangeEnd:Se}})))()}var we,G,Te,Ee,K;function De(){return(De=e((()=>{we=t(),b(),u(),A(),Ce(),G=s(),Te=new Intl.DateTimeFormat(`ru-RU`,{month:`short`}),Ee=new Intl.DateTimeFormat(`ru-RU`,{month:`long`,year:`numeric`}),K=({currentDate:e,value:t,onChange:n,minDate:r,maxDate:i,selectsRange:a,selectsPeriod:o,selectionMode:s=`day`,weekEndDay:c=`sunday`})=>{let[u,d]=(0,we.useState)(null),f=Array.from({length:12},(e,t)=>t),p=e.getFullYear(),m={selectionMode:s,weekEndDay:c},_=a&&Array.isArray(t)?t[0]:null,v=a&&Array.isArray(t)?t[1]:null,b=e=>Te.format(h(p,e,1)),x=e=>{if(!r&&!i)return!1;let t=h(p,e,1),n=h(p,e+1,0,23,59,59);return o?!y(g(t,m),{minDate:r,maxDate:i}):!!(r&&n<r||i&&t>i)},S=(e,t)=>{!a||!_||v||t||d(e)};return(0,G.jsx)(`div`,{className:W.monthView,children:(0,G.jsx)(`div`,{className:W.monthsGrid,onMouseLeave:()=>{v||d(null)},children:f.map(e=>{let r=x(e),i=h(p,e,1),o=O({date:i,value:t,hoveredDate:u,selectsRange:a,selectionOptions:m});return(0,G.jsx)(`button`,{type:`button`,onClick:()=>!r&&n(i),onMouseEnter:()=>S(i,r),disabled:r,"data-ui":`calendar-month-button`,"data-action":`select-calendar-month`,className:l(W.month,{[W.selected]:o.selected,[W.range]:o.range,[W.rangeStart]:o.rangeStart,[W.rangeEnd]:o.rangeEnd,[W.disabled]:r}),"aria-label":Ee.format(i),"aria-pressed":o.selected||o.range||o.rangeStart||o.rangeEnd,children:b(e)},e)})})})},K.__docgenInfo={description:`Отображает выбор месяца в календарной семантике без timezone-сдвига.`,methods:[],displayName:`CalendarMonthView`,props:{selectionMode:{defaultValue:{value:`"day"`,computed:!1},required:!1},weekEndDay:{defaultValue:{value:`"sunday"`,computed:!1},required:!1}}}})))()}var Oe,ke,q;function Ae(){return(Ae=e((()=>{Oe=`E35KE6`,ke=`L14Qef`,q={calendarView:Oe,calendarHeader:ke}})))()}var je,Me,Ne,Pe,Fe,Ie,Le,Re,J;function Y(){return(Y=e((()=>{je=`_--xW7O`,Me=`-N-5Jk`,Ne=`hhY92S`,Pe=`IhX7jj`,Fe=`NWNpWj`,Ie=`d1SfcV`,Le=`Gkui4r`,Re=`_0dVZLW`,J={yearView:je,yearsGrid:Me,year:Ne,disabled:Pe,range:Fe,selected:Ie,rangeStart:Le,rangeEnd:Re}})))()}var ze,X,Z;function Be(){return(Be=e((()=>{ze=t(),b(),u(),A(),Y(),X=s(),Z=({currentDate:e,value:t,onChange:n,minDate:r,maxDate:i,selectsRange:a,selectsPeriod:o,selectionMode:s=`day`,weekEndDay:c=`sunday`})=>{let[u,d]=(0,ze.useState)(null),f=Math.floor(e.getFullYear()/12)*12,p=Array.from({length:12},(e,t)=>f+t),m={selectionMode:s,weekEndDay:c},_=a&&Array.isArray(t)?t[0]:null,v=a&&Array.isArray(t)?t[1]:null,b=e=>{if(!r&&!i)return!1;let t=h(e,0,1),n=h(e,11,31,23,59,59);return o?!y(g(t,m),{minDate:r,maxDate:i}):!!(r&&n<r||i&&t>i)},x=(e,t)=>{!a||!_||v||t||d(e)};return(0,X.jsx)(`div`,{className:J.yearView,children:(0,X.jsx)(`div`,{className:J.yearsGrid,onMouseLeave:()=>{v||d(null)},children:p.map(e=>{let r=b(e),i=h(e,0,1),o=O({date:i,value:t,hoveredDate:u,selectsRange:a,selectionOptions:m});return(0,X.jsx)(`button`,{type:`button`,onClick:()=>!r&&n(i),onMouseEnter:()=>x(i,r),disabled:r,"data-ui":`calendar-year-button`,"data-action":`select-calendar-year`,className:l(J.year,{[J.selected]:o.selected,[J.range]:o.range,[J.rangeStart]:o.rangeStart,[J.rangeEnd]:o.rangeEnd,[J.disabled]:r}),"aria-label":e.toString(),"aria-pressed":o.selected||o.range||o.rangeStart||o.rangeEnd,children:e},e)})})})},Z.__docgenInfo={description:`Отображает выбор года в календарной семантике без timezone-сдвига.`,methods:[],displayName:`CalendarYearView`,props:{selectionMode:{defaultValue:{value:`"day"`,computed:!1},required:!1},weekEndDay:{defaultValue:{value:`"sunday"`,computed:!1},required:!1}}}})))()}function Ve(e,t){if(t&&f(e)&&e[0]instanceof Date)return e[0];if(!t&&e instanceof Date)return e}function He({view:e,datePickerLevel:t,selectionMode:n=`day`,weekEndDay:i=`sunday`,onViewChange:o,...s}){let[c]=(0,Q.useState)(()=>d(new Date)),l=Ve(s.value,s.selectsRange),u=l?.getTime()??null,[f,p]=(0,Q.useState)(()=>({sourceValueTime:u,currentDate:l??d(new Date)})),h=l&&f.sourceValueTime!==u?l:f.currentDate,_=s.currentDate??h,b={selectionMode:n,weekEndDay:i},x=e=>{let t=typeof e==`function`?e(_):e;s.currentDate===void 0&&p({sourceValueTime:u,currentDate:t}),s.onCurrentDateChange?.(t)},C=()=>{if(e===`day`){x(e=>m(e,-1));return}if(e===`month`){x(e=>v(e,-1));return}x(e=>v(e,-12))},w=()=>{if(e===`day`){x(e=>m(e,1));return}if(e===`month`){x(e=>v(e,1));return}x(e=>v(e,12))};return(0,$.jsxs)(`div`,{className:q.calendarView,children:[(()=>{let t=``;if(e===`day`)t=_.toLocaleDateString(`ru-RU`,{month:`long`,year:`numeric`});else if(e===`month`)t=_.getFullYear().toString();else{let e=Math.floor(_.getFullYear()/12)*12;t=`${e} - ${e+11}`}return(0,$.jsxs)(`div`,{className:q.calendarHeader,children:[(0,$.jsx)(S,{icon:(0,$.jsx)(r,{}),onClick:C,variant:`ghost`,"aria-label":`Предыдущий`,"data-action":`calendar-previous`}),(0,$.jsx)(S,{onClick:()=>{e===`day`?o(`month`):e===`month`&&o(`year`)},variant:`ghost`,className:`flex1`,"data-ui":`calendar-view-switch-button`,"data-action":`calendar-switch-view`,children:t}),(0,$.jsx)(S,{icon:(0,$.jsx)(a,{}),onClick:w,variant:`ghost`,"aria-label":`Следующий`,"data-ui":`calendar-next-button`,"data-action":`calendar-next`})]})})(),(()=>{let r=e=>{let t=g(e,b);if(!(!t||!y(t,{minDate:s.minDate,maxDate:s.maxDate}))){if(s.selectsRange){let e=null,n=null;if(Array.isArray(s.value)&&([e,n]=s.value),!e||n){s.onChange([t.start,null]);return}let r=g(e,b);if(!r)return;if(t.start<r.start){s.onChange([t.start,r.end]);return}s.onChange([r.start,t.end]);return}s.onChange(t.start)}},a=e=>{if(x(e),n===`month`||!E(`day`,t)){r(e);return}o(`day`)},l=e=>{if(x(e),n===`year`||!E(`month`,t)){r(e);return}o(`month`)};switch(e){case`day`:return(0,$.jsx)(U,{now:c,currentDate:_,value:s.value,onChange:r,minDate:s.minDate,maxDate:s.maxDate,selectsRange:s.selectsRange,selectionMode:n,weekEndDay:i});case`month`:return(0,$.jsx)(K,{currentDate:_,value:s.value,onChange:a,minDate:s.minDate,maxDate:s.maxDate,selectsRange:s.selectsRange,selectsPeriod:n===`month`||!E(`day`,t),selectionMode:n,weekEndDay:i});case`year`:return(0,$.jsx)(Z,{currentDate:_,value:s.value,onChange:l,minDate:s.minDate,maxDate:s.maxDate,selectsRange:s.selectsRange,selectsPeriod:n===`year`||!E(`month`,t),selectionMode:n,weekEndDay:i});default:return null}})()]})}var Q,$;function Ue(){return(Ue=e((()=>{Q=t(),b(),n(),i(),x(),A(),me(),De(),Ae(),Be(),$=s(),He.__docgenInfo={description:`Отображает календарь выбора даты в календарной семантике без timezone-сдвига.`,methods:[],displayName:`CalendarView`,props:{view:{required:!0,tsType:{name:`union`,raw:`"day" | "month" | "year"`,elements:[{name:`literal`,value:`"day"`},{name:`literal`,value:`"month"`},{name:`literal`,value:`"year"`}]},description:``},datePickerLevel:{required:!0,tsType:{name:`union`,raw:`"day" | "month" | "year"`,elements:[{name:`literal`,value:`"day"`},{name:`literal`,value:`"month"`},{name:`literal`,value:`"year"`}]},description:``},selectionMode:{required:!1,tsType:{name:`CalendarPeriodSelectionMode`},description:``,defaultValue:{value:`"day"`,computed:!1}},weekEndDay:{required:!1,tsType:{name:`CalendarWeekEndDay`},description:``,defaultValue:{value:`"sunday"`,computed:!1}},onViewChange:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(view: CalendarType) => void`,signature:{arguments:[{type:{name:`union`,raw:`"day" | "month" | "year"`,elements:[{name:`literal`,value:`"day"`},{name:`literal`,value:`"month"`},{name:`literal`,value:`"year"`}]},name:`view`}],return:{name:`void`}}},description:``},selectsRange:{required:!1,tsType:{name:`boolean`},description:``},value:{required:!0,tsType:{name:`union`,raw:`Date | NullableDateRange | null`,elements:[{name:`Date`},{name:`NullableDateRange`},{name:`null`}]},description:``},onChange:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(date: Date | NullableDateRange) => void`,signature:{arguments:[{type:{name:`union`,raw:`Date | NullableDateRange`,elements:[{name:`Date`},{name:`NullableDateRange`}]},name:`date`}],return:{name:`void`}}},description:``},minDate:{required:!1,tsType:{name:`Date`},description:``},maxDate:{required:!1,tsType:{name:`Date`},description:``},currentDate:{required:!1,tsType:{name:`Date`},description:``},onCurrentDateChange:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(date: Date) => void`,signature:{arguments:[{type:{name:`Date`},name:`date`}],return:{name:`void`}}},description:``}}}})))()}export{E as a,T as c,A as i,Ue as n,te as o,re as r,w as s,He as t};
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{t}from"./react-BZJXY1be.js";import{n,t as r}from"./chevron-left-DGH3zWjp.js";import{n as i,t as a}from"./chevron-right-BQCoBw1U.js";import{i as o,n as s,r as c}from"./iframe-P2lWyit5.js";import{a as l,i as u}from"./utils-tg3ibbzi.js";import{C as d,b as f,c as p,h as m,m as h,n as g,o as _,w as v,x as y,y as b}from"./formatters-D33Uh3si-Df97arf9.js";import{n as x,t as S}from"./Button-BM6kIoG9.js";var C,w;function T(){return(T=e((()=>{o(),C=[[`path`,{d:`M8 2v3`,key:`1ioesn`}],[`path`,{d:`M16 2v3`,key:`otl347`}],[`rect`,{x:`3`,y:`3`,width:`18`,height:`18`,rx:`2`,key:`h1oib`}],[`path`,{d:`M3 9h18`,key:`1pudct`}],[`path`,{d:`M8 13h.01`,key:`1sbv64`}],[`path`,{d:`M12 13h.01`,key:`y0uutt`}],[`path`,{d:`M16 13h.01`,key:`wip0gl`}],[`path`,{d:`M8 17h.01`,key:`p3bg7i`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}],[`path`,{d:`M16 17h.01`,key:`ql8jdd`}]],w=c(`calendar-days`,C)})))()}function ee(e){return e===`month`?`month`:e===`year`?`year`:`day`}function E(e,t){return k.indexOf(e)>=k.indexOf(t)}function te(e,t){let n=ee(e);return E(n,t)?n:t}function D(e,t){return!e||!t?!1:e.start.getTime()===t.start.getTime()&&e.end.getTime()===t.end.getTime()}function ne(e,t,n){if(!e||!t||!n)return!1;let r=Math.min(t.start.getTime(),n.start.getTime()),i=Math.max(t.end.getTime(),n.end.getTime());return e.start.getTime()>=r&&e.end.getTime()<=i}function O({date:e,value:t,hoveredDate:n,selectsRange:r,selectionOptions:i}){let a=g(e,i),o=!r&&t instanceof Date?t:null,s=g(o,i);if(!r||!Array.isArray(t))return{selected:_(e,s),range:!1,rangeStart:!1,rangeEnd:!1};let[c,l]=t,u=g(c,i),d=g(l??(c?n:null),i),f=D(a,u),p=D(a,d);return{selected:!1,range:ne(a,u,d)&&!f&&!p,rangeStart:f,rangeEnd:p}}var k,re;function A(){return(A=e((()=>{b(),k=[`day`,`month`,`year`],re=[`friday`,`saturday`,`sunday`]})))()}var ie,ae,oe,se,ce,le,ue,de,fe,j,M,N,P,F,I,L,R;function z(){return(z=e((()=>{ie=`Dshr-j`,ae=`esetVt`,oe=`i-LJYe`,se=`XZsnCH`,ce=`_2KDjTS`,le=`o-freG`,ue=`GcV08-`,de=`UCrE-I`,fe=`L2V3uq`,j=`Te9oCq`,M=`cUF2pQ`,N=`d1L5uw`,P=`LU0M9Y`,F=`MR3y5p`,I=`VDqDpm`,L=`CLR-7m`,R={dayView:ie,weekdays:ae,weekday:oe,daysGrid:se,week:ce,day:le,disabled:ue,outsideMonth:de,periodSelection:fe,periodPreview:j,selected:M,range:N,rangeStart:P,rangeEnd:F,weekend:I,now:L}})))()}var B,V,H,pe,U;function me(){return(me=e((()=>{B=t(),b(),u(),z(),V=s(),H=[`Пн`,`Вт`,`Ср`,`Чт`,`Пт`,`Сб`,`Вс`],pe=new Intl.DateTimeFormat(`ru-RU`,{weekday:`long`,year:`numeric`,month:`long`,day:`numeric`}),U=({now:e,currentDate:t,value:n,onChange:r,minDate:i,maxDate:a,selectsRange:o,selectionMode:s=`day`,weekEndDay:c=`sunday`})=>{let[u,f]=(0,B.useState)(null),m={selectionMode:s,weekEndDay:c},v=(()=>{let e=t.getFullYear(),n=t.getMonth(),r=h(e,n,1),i=h(e,n+1,0),a=r.getDay()===0?6:r.getDay()-1,o=42-(a+i.getDate()),s=[],c=h(e,n,0).getDate();for(let t=a;t>0;--t)s.push(h(e,n-1,c-t+1));for(let t=1;t<=i.getDate();t+=1)s.push(h(e,n,t));for(let t=1;t<=o;t+=1)s.push(h(e,n+1,t));let l=[];for(let e=0;e<s.length;e+=7)l.push(s.slice(e,e+7));return l})(),b=o&&Array.isArray(n)?n[0]:null,x=o&&Array.isArray(n)?n[1]:null,S=g(o?null:n,m),C=g(u,m),w=x??(b?C?.end??null:null),T=s===`week`,ee=T&&(!o||!b),E=e=>{if(!o||!b||!w)return!1;let t=d(e).getTime(),n=b.getTime(),r=w.getTime();return t>=Math.min(n,r)&&t<=Math.max(n,r)},te=e=>!y(g(e,m),{minDate:i,maxDate:a}),D=(e,t)=>{t||(T&&f(e),!(!o||!b||x)&&(T||f(e)))};return(0,V.jsxs)(`div`,{className:R.dayView,children:[(0,V.jsx)(`div`,{className:R.weekdays,children:H.map(e=>(0,V.jsx)(`div`,{className:R.weekday,children:e},e))}),(0,V.jsx)(`div`,{className:R.daysGrid,onMouseLeave:()=>{(T||!x)&&f(null)},children:v.map((n,i)=>(0,V.jsx)(`div`,{className:R.week,children:n.map((n,a)=>{let o=n.getMonth()===t.getMonth(),c=_(n,S),u=ee&&_(n,C),d=E(n),f=p(n,b),m=p(n,w),h=p(n,e),g=te(n);return(0,V.jsx)(`button`,{type:`button`,onClick:()=>!g&&r(n),onMouseEnter:()=>D(n,g),disabled:g,"data-ui":`calendar-day-button`,"data-action":`select-calendar-day`,className:l(R.day,{[R.outsideMonth]:!o,[R.periodSelection]:s===`week`,[R.periodPreview]:u&&!c,[R.selected]:c,[R.range]:d&&!f&&!m,[R.rangeStart]:f,[R.rangeEnd]:m,[R.disabled]:g,[R.weekend]:a>4,[R.now]:h}),"aria-label":pe.format(n),"aria-pressed":c||d||f||m,children:n.getDate()},`${i}-${a}`)})},i))})]})},U.__docgenInfo={description:`Отображает сетку дней месяца в календарной семантике без timezone-сдвига.`,methods:[],displayName:`CalendarDayView`,props:{selectionMode:{defaultValue:{value:`"day"`,computed:!1},required:!1},weekEndDay:{defaultValue:{value:`"sunday"`,computed:!1},required:!1}}}})))()}var he,ge,_e,ve,ye,be,xe,Se,W;function Ce(){return(Ce=e((()=>{he=`p5pRGW`,ge=`pUHpxD`,_e=`lwWv-z`,ve=`_8gn-3z`,ye=`b57d-c`,be=`nGc5FO`,xe=`JLqjri`,Se=`UQMYwg`,W={monthView:he,monthsGrid:ge,month:_e,disabled:ve,range:ye,selected:be,rangeStart:xe,rangeEnd:Se}})))()}var we,G,Te,Ee,K;function De(){return(De=e((()=>{we=t(),b(),u(),A(),Ce(),G=s(),Te=new Intl.DateTimeFormat(`ru-RU`,{month:`short`}),Ee=new Intl.DateTimeFormat(`ru-RU`,{month:`long`,year:`numeric`}),K=({currentDate:e,value:t,onChange:n,minDate:r,maxDate:i,selectsRange:a,selectsPeriod:o,selectionMode:s=`day`,weekEndDay:c=`sunday`})=>{let[u,d]=(0,we.useState)(null),f=Array.from({length:12},(e,t)=>t),p=e.getFullYear(),m={selectionMode:s,weekEndDay:c},_=a&&Array.isArray(t)?t[0]:null,v=a&&Array.isArray(t)?t[1]:null,b=e=>Te.format(h(p,e,1)),x=e=>{if(!r&&!i)return!1;let t=h(p,e,1),n=h(p,e+1,0,23,59,59);return o?!y(g(t,m),{minDate:r,maxDate:i}):!!(r&&n<r||i&&t>i)},S=(e,t)=>{!a||!_||v||t||d(e)};return(0,G.jsx)(`div`,{className:W.monthView,children:(0,G.jsx)(`div`,{className:W.monthsGrid,onMouseLeave:()=>{v||d(null)},children:f.map(e=>{let r=x(e),i=h(p,e,1),o=O({date:i,value:t,hoveredDate:u,selectsRange:a,selectionOptions:m});return(0,G.jsx)(`button`,{type:`button`,onClick:()=>!r&&n(i),onMouseEnter:()=>S(i,r),disabled:r,"data-ui":`calendar-month-button`,"data-action":`select-calendar-month`,className:l(W.month,{[W.selected]:o.selected,[W.range]:o.range,[W.rangeStart]:o.rangeStart,[W.rangeEnd]:o.rangeEnd,[W.disabled]:r}),"aria-label":Ee.format(i),"aria-pressed":o.selected||o.range||o.rangeStart||o.rangeEnd,children:b(e)},e)})})})},K.__docgenInfo={description:`Отображает выбор месяца в календарной семантике без timezone-сдвига.`,methods:[],displayName:`CalendarMonthView`,props:{selectionMode:{defaultValue:{value:`"day"`,computed:!1},required:!1},weekEndDay:{defaultValue:{value:`"sunday"`,computed:!1},required:!1}}}})))()}var Oe,ke,q;function Ae(){return(Ae=e((()=>{Oe=`E35KE6`,ke=`L14Qef`,q={calendarView:Oe,calendarHeader:ke}})))()}var je,Me,Ne,Pe,Fe,Ie,Le,Re,J;function Y(){return(Y=e((()=>{je=`_--xW7O`,Me=`-N-5Jk`,Ne=`hhY92S`,Pe=`IhX7jj`,Fe=`NWNpWj`,Ie=`d1SfcV`,Le=`Gkui4r`,Re=`_0dVZLW`,J={yearView:je,yearsGrid:Me,year:Ne,disabled:Pe,range:Fe,selected:Ie,rangeStart:Le,rangeEnd:Re}})))()}var ze,X,Z;function Be(){return(Be=e((()=>{ze=t(),b(),u(),A(),Y(),X=s(),Z=({currentDate:e,value:t,onChange:n,minDate:r,maxDate:i,selectsRange:a,selectsPeriod:o,selectionMode:s=`day`,weekEndDay:c=`sunday`})=>{let[u,d]=(0,ze.useState)(null),f=Math.floor(e.getFullYear()/12)*12,p=Array.from({length:12},(e,t)=>f+t),m={selectionMode:s,weekEndDay:c},_=a&&Array.isArray(t)?t[0]:null,v=a&&Array.isArray(t)?t[1]:null,b=e=>{if(!r&&!i)return!1;let t=h(e,0,1),n=h(e,11,31,23,59,59);return o?!y(g(t,m),{minDate:r,maxDate:i}):!!(r&&n<r||i&&t>i)},x=(e,t)=>{!a||!_||v||t||d(e)};return(0,X.jsx)(`div`,{className:J.yearView,children:(0,X.jsx)(`div`,{className:J.yearsGrid,onMouseLeave:()=>{v||d(null)},children:p.map(e=>{let r=b(e),i=h(e,0,1),o=O({date:i,value:t,hoveredDate:u,selectsRange:a,selectionOptions:m});return(0,X.jsx)(`button`,{type:`button`,onClick:()=>!r&&n(i),onMouseEnter:()=>x(i,r),disabled:r,"data-ui":`calendar-year-button`,"data-action":`select-calendar-year`,className:l(J.year,{[J.selected]:o.selected,[J.range]:o.range,[J.rangeStart]:o.rangeStart,[J.rangeEnd]:o.rangeEnd,[J.disabled]:r}),"aria-label":e.toString(),"aria-pressed":o.selected||o.range||o.rangeStart||o.rangeEnd,children:e},e)})})})},Z.__docgenInfo={description:`Отображает выбор года в календарной семантике без timezone-сдвига.`,methods:[],displayName:`CalendarYearView`,props:{selectionMode:{defaultValue:{value:`"day"`,computed:!1},required:!1},weekEndDay:{defaultValue:{value:`"sunday"`,computed:!1},required:!1}}}})))()}function Ve(e,t){if(t&&f(e)&&e[0]instanceof Date)return e[0];if(!t&&e instanceof Date)return e}function He({view:e,datePickerLevel:t,selectionMode:n=`day`,weekEndDay:i=`sunday`,onViewChange:o,...s}){let[c]=(0,Q.useState)(()=>d(new Date)),l=Ve(s.value,s.selectsRange),u=l?.getTime()??null,[f,p]=(0,Q.useState)(()=>({sourceValueTime:u,currentDate:l??d(new Date)})),h=l&&f.sourceValueTime!==u?l:f.currentDate,_=s.currentDate??h,b={selectionMode:n,weekEndDay:i},x=e=>{let t=typeof e==`function`?e(_):e;s.currentDate===void 0&&p({sourceValueTime:u,currentDate:t}),s.onCurrentDateChange?.(t)},C=()=>{if(e===`day`){x(e=>m(e,-1));return}if(e===`month`){x(e=>v(e,-1));return}x(e=>v(e,-12))},w=()=>{if(e===`day`){x(e=>m(e,1));return}if(e===`month`){x(e=>v(e,1));return}x(e=>v(e,12))};return(0,$.jsxs)(`div`,{className:q.calendarView,children:[(()=>{let t=``;if(e===`day`)t=_.toLocaleDateString(`ru-RU`,{month:`long`,year:`numeric`});else if(e===`month`)t=_.getFullYear().toString();else{let e=Math.floor(_.getFullYear()/12)*12;t=`${e} - ${e+11}`}return(0,$.jsxs)(`div`,{className:q.calendarHeader,children:[(0,$.jsx)(S,{icon:(0,$.jsx)(r,{}),onClick:C,variant:`ghost`,"aria-label":`Предыдущий`,"data-action":`calendar-previous`}),(0,$.jsx)(S,{onClick:()=>{e===`day`?o(`month`):e===`month`&&o(`year`)},variant:`ghost`,className:`flex1`,"data-ui":`calendar-view-switch-button`,"data-action":`calendar-switch-view`,children:t}),(0,$.jsx)(S,{icon:(0,$.jsx)(a,{}),onClick:w,variant:`ghost`,"aria-label":`Следующий`,"data-ui":`calendar-next-button`,"data-action":`calendar-next`})]})})(),(()=>{let r=e=>{let t=g(e,b);if(!(!t||!y(t,{minDate:s.minDate,maxDate:s.maxDate}))){if(s.selectsRange){let e=null,n=null;if(Array.isArray(s.value)&&([e,n]=s.value),!e||n){s.onChange([t.start,null]);return}let r=g(e,b);if(!r)return;if(t.start<r.start){s.onChange([t.start,r.end]);return}s.onChange([r.start,t.end]);return}s.onChange(t.start)}},a=e=>{if(x(e),n===`month`||!E(`day`,t)){r(e);return}o(`day`)},l=e=>{if(x(e),n===`year`||!E(`month`,t)){r(e);return}o(`month`)};switch(e){case`day`:return(0,$.jsx)(U,{now:c,currentDate:_,value:s.value,onChange:r,minDate:s.minDate,maxDate:s.maxDate,selectsRange:s.selectsRange,selectionMode:n,weekEndDay:i});case`month`:return(0,$.jsx)(K,{currentDate:_,value:s.value,onChange:a,minDate:s.minDate,maxDate:s.maxDate,selectsRange:s.selectsRange,selectsPeriod:n===`month`||!E(`day`,t),selectionMode:n,weekEndDay:i});case`year`:return(0,$.jsx)(Z,{currentDate:_,value:s.value,onChange:l,minDate:s.minDate,maxDate:s.maxDate,selectsRange:s.selectsRange,selectsPeriod:n===`year`||!E(`month`,t),selectionMode:n,weekEndDay:i});default:return null}})()]})}var Q,$;function Ue(){return(Ue=e((()=>{Q=t(),b(),n(),i(),x(),A(),me(),De(),Ae(),Be(),$=s(),He.__docgenInfo={description:`Отображает календарь выбора даты в календарной семантике без timezone-сдвига.`,methods:[],displayName:`CalendarView`,props:{view:{required:!0,tsType:{name:`union`,raw:`"day" | "month" | "year"`,elements:[{name:`literal`,value:`"day"`},{name:`literal`,value:`"month"`},{name:`literal`,value:`"year"`}]},description:``},datePickerLevel:{required:!0,tsType:{name:`union`,raw:`"day" | "month" | "year"`,elements:[{name:`literal`,value:`"day"`},{name:`literal`,value:`"month"`},{name:`literal`,value:`"year"`}]},description:``},selectionMode:{required:!1,tsType:{name:`CalendarPeriodSelectionMode`},description:``,defaultValue:{value:`"day"`,computed:!1}},weekEndDay:{required:!1,tsType:{name:`CalendarWeekEndDay`},description:``,defaultValue:{value:`"sunday"`,computed:!1}},onViewChange:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(view: CalendarType) => void`,signature:{arguments:[{type:{name:`union`,raw:`"day" | "month" | "year"`,elements:[{name:`literal`,value:`"day"`},{name:`literal`,value:`"month"`},{name:`literal`,value:`"year"`}]},name:`view`}],return:{name:`void`}}},description:``},selectsRange:{required:!1,tsType:{name:`boolean`},description:``},value:{required:!0,tsType:{name:`union`,raw:`Date | NullableDateRange | null`,elements:[{name:`Date`},{name:`NullableDateRange`},{name:`null`}]},description:``},onChange:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(date: Date | NullableDateRange) => void`,signature:{arguments:[{type:{name:`union`,raw:`Date | NullableDateRange`,elements:[{name:`Date`},{name:`NullableDateRange`}]},name:`date`}],return:{name:`void`}}},description:``},minDate:{required:!1,tsType:{name:`Date`},description:``},maxDate:{required:!1,tsType:{name:`Date`},description:``},currentDate:{required:!1,tsType:{name:`Date`},description:``},onCurrentDateChange:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(date: Date) => void`,signature:{arguments:[{type:{name:`Date`},name:`date`}],return:{name:`void`}}},description:``}}}})))()}export{E as a,T as c,A as i,Ue as n,te as o,re as r,w as s,He as t};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as e,n as t}from"./rolldown-runtime-DkW27tQK.js";import{t as n}from"./react-BZJXY1be.js";import{n as r,t as i}from"./check-
|
|
1
|
+
import{a as e,n as t}from"./rolldown-runtime-DkW27tQK.js";import{t as n}from"./react-BZJXY1be.js";import{n as r,t as i}from"./check-BQjlxuuS.js";import{i as a,n as o,r as s}from"./iframe-P2lWyit5.js";import{a as c,i as l}from"./utils-tg3ibbzi.js";import{n as u,t as d}from"./ui.module-31LPbZGK.js";import{i as f,r as p}from"./uiClasses-Bz6cvlDQ.js";import{n as m,t as h}from"./CheckBox.module-BOAVN-Ny.js";var g,_;function v(){return(v=t((()=>{a(),g=[[`path`,{d:`M5 12h14`,key:`1ays0h`}]],_=s(`minus`,g)})))()}function y({label:e,description:t,placeholder:n,disabled:r,size:a,className:o,onChange:s,value:l,noWrap:d,id:f,tone:m=`neutral`,indeterminate:g=!1,...v}){let y=(0,b.useId)(),S=f??y,C=t?`${S}-description`:void 0,w=e??n,T=l??!1,E=e=>{e&&(e.indeterminate=g)};return(0,x.jsxs)(`div`,{className:c(u.uiElement,a&&u.uiSizable,a&&u[a],r&&u.disabled,o),"aria-disabled":r||void 0,children:[(0,x.jsxs)(`div`,{className:h.row,children:[(0,x.jsxs)(`div`,{className:c(h.wrapper,p(m)),children:[(0,x.jsx)(`input`,{...v,ref:E,id:S,type:`checkbox`,checked:T,disabled:r,"aria-checked":g?`mixed`:T,"aria-describedby":C,className:c(u.uiSelectionControl,h.input,g&&h.inputIndeterminate),onChange:()=>s?.(!T)}),(0,x.jsx)(`div`,{className:c(u.uiSelectionIcon,h.icon),"aria-hidden":`true`,children:g?(0,x.jsx)(_,{}):(0,x.jsx)(i,{})})]}),w&&(0,x.jsx)(`label`,{htmlFor:S,className:c(u.uiLabelBase,d&&`textNoWrap`),children:w})]}),t&&(0,x.jsx)(`p`,{id:C,className:u.uiDescription,children:t})]})}var b,x;function S(){return(S=t((()=>{b=e(n(),1),l(),r(),v(),d(),f(),m(),x=o(),y.__docgenInfo={description:`Компонент флажка для выбора булевого значения в формах и списках.
|
|
2
2
|
Поддерживает tone + appearance и использует общие selection utility-классы из ui.module.scss.`,methods:[],displayName:`CheckBox`,props:{label:{required:!1,tsType:{name:`ReactNode`},description:``},description:{required:!1,tsType:{name:`string`},description:``},placeholder:{required:!1,tsType:{name:`string`},description:``},disabled:{required:!1,tsType:{name:`boolean`},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:``},value:{required:!0,tsType:{name:`V`},description:"Если начальное состояние может быть `null | undefined`\nзначит `onChange` тоже должен ументь сбрасывать.\nПоэтому такой контрол явно должен передавать `UiBaseProps<AnyType | undefined>`"},onChange:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(value: T) => void`,signature:{arguments:[{type:{name:`C`},name:`value`}],return:{name:`void`}}},description:``},tone:{required:!1,tsType:{name:`union`,raw:`"neutral" | "brand" | "error" | "warning" | "success" | "info"`,elements:[{name:`literal`,value:`"neutral"`},{name:`literal`,value:`"brand"`},{name:`literal`,value:`"error"`},{name:`literal`,value:`"warning"`},{name:`literal`,value:`"success"`},{name:`literal`,value:`"info"`}]},description:``,defaultValue:{value:`"neutral"`,computed:!1}},noWrap:{required:!1,tsType:{name:`boolean`},description:``},indeterminate:{required:!1,tsType:{name:`boolean`},description:'Показывает частично выбранную группу и публикует `aria-checked="mixed"`.',defaultValue:{value:`false`,computed:!1}}},composes:[`Omit`]}})))()}export{S as n,y as t};
|
|
@@ -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-P2lWyit5.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-DJAWDNJL.js";import{a as p,i as m,n as h,o as g,r as _,t as v}from"./CheckBox.stories-Cnwc5F1y.js";function y(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(s,{of:v,parameters:{docs:{toc:!0}}}),`
|
|
2
2
|
`,(0,x.jsx)(u,{children:`CheckBox`}),`
|
|
3
3
|
`,(0,x.jsx)(o,{children:`Флажок для булевых полей с общими UI-схемами tone и appearance`}),`
|
|
4
4
|
`,(0,x.jsx)(t.p,{children:`CheckBox уже имеет живые stories, а эта страница собирает их в структурированную документацию с краткими рекомендациями, примерами подключения и API.
|