@ryuzaki13/react-foundation-ui 1.2.7 → 1.2.8
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/package.json +5 -1
- package/storybook-static/addon-visual-tests-assets/visual-test-illustration.mp4 +0 -0
- package/storybook-static/assets/Badge-BqGrcxAM.js +139 -0
- package/storybook-static/assets/Badge.stories-D-4FPPMr.js +51 -0
- package/storybook-static/assets/Button-Dk2YMZua.js +12 -0
- package/storybook-static/assets/{Button-R2ebF86Y.js → Button-iCkwBEDP.js} +47 -47
- package/storybook-static/assets/Button.stories-BkV_xVnD.js +75 -0
- package/storybook-static/assets/{CheckBox-CaI3XPfw.js → CheckBox-BQhsynyB.js} +1 -1
- package/storybook-static/assets/{CheckBox-jIOKCtKS.js → CheckBox-C-f5AsCI.js} +31 -31
- package/storybook-static/assets/CheckBox.stories-7V9WkaKi.js +60 -0
- package/storybook-static/assets/Color-KMSTOMOX-CYcFidZH.js +1 -0
- package/storybook-static/assets/ContextMenu-DinzhWx_.js +40 -0
- package/storybook-static/assets/{ContextMenu.stories-DuHhaMZG.js → ContextMenu.stories-B9O_FkLB.js} +1 -1
- package/storybook-static/assets/DateInput-BT_5pRV0.js +40 -0
- package/storybook-static/assets/DateInput-CvJvdtwa.js +1 -0
- package/storybook-static/assets/{DateInput.stories-DA4m_bt-.js → DateInput.stories-BDKMX9K3.js} +1 -1
- package/storybook-static/assets/DateRangePresetSelect-Bck3ITZr.js +30 -0
- package/storybook-static/assets/DateRangePresetSelect-CPZ6FKGz.js +3 -0
- package/storybook-static/assets/DateRangePresetSelect.stories-D5fRZmWy.js +11 -0
- package/storybook-static/assets/Detail-DBH4WUCF.js +40 -0
- package/storybook-static/assets/Detail.stories-Kvnqo8Un.js +44 -0
- package/storybook-static/assets/{Dialog-DRwO9iJS.js → Dialog-Cv_od09Q.js} +22 -22
- package/storybook-static/assets/Dialog.stories-CY8mr-2o.js +31 -0
- package/storybook-static/assets/Disclosure-BVz61VJq.js +32 -0
- package/storybook-static/assets/{Disclosure.stories-Bu_i_1U_.js → Disclosure.stories-CufTvUiK.js} +2 -2
- package/storybook-static/assets/DocsRenderer-JROSPFPF-BJw82UhU.js +2 -0
- package/storybook-static/assets/DropZone-DOvkWmBD.js +36 -0
- package/storybook-static/assets/{DropZone.stories-DlaN01G9.js → DropZone.stories-K1bqdB2U.js} +2 -2
- package/storybook-static/assets/DropdownMenu-Cx08nIaY.js +1 -0
- package/storybook-static/assets/{ExpandableActionPanel.stories-DzfL1phg.js → ExpandableActionPanel.stories-BZ3P24ES.js} +2 -2
- package/storybook-static/assets/Flex-Brzvr0YX.js +3 -0
- package/storybook-static/assets/Flex-CVjyrD9i.js +61 -0
- package/storybook-static/assets/{Flex.stories-BYls_CQf.js → Flex.stories-B9dkwuh5.js} +1 -1
- package/storybook-static/assets/{Grid-C-xko03k.js → Grid-DhASlspp.js} +1 -1
- package/storybook-static/assets/Grid-blnYLgOs.js +61 -0
- package/storybook-static/assets/{Grid.stories-D_D0IapG.js → Grid.stories-DafgjrQm.js} +1 -1
- package/storybook-static/assets/{ImageCropper.stories-CswLqd0C.js → ImageCropper.stories-638pLg4D.js} +1 -1
- package/storybook-static/assets/ImageRenderer-C6DwGwQl.js +2 -0
- package/storybook-static/assets/{ImageRenderer.stories-Bw_FhRQS.js → ImageRenderer.stories-DJJiqQFU.js} +1 -1
- package/storybook-static/assets/{ImageView.stories-W43xyxSy.js → ImageView.stories-DVeX-CzY.js} +1 -1
- package/storybook-static/assets/{ImageViewer.stories-p81pm72u.js → ImageViewer.stories-NqiR5Eyj.js} +2 -2
- package/storybook-static/assets/{ImageViewerRuntime-DkG2C2vh.js → ImageViewerRuntime-C0uGYGQl.js} +2 -2
- package/storybook-static/assets/Input-4QsBT-dh.js +39 -0
- package/storybook-static/assets/Input-CjJUuLEX.js +3 -0
- package/storybook-static/assets/Input.stories-DX8FX7AI.js +38 -0
- package/storybook-static/assets/InputDateTime-C6cR1WP9.js +39 -0
- package/storybook-static/assets/InputDateTime.stories-DPK8Y5p2.js +35 -0
- package/storybook-static/assets/{InputFile-ZiotxlMe.js → InputFile-BwI_udQQ.js} +26 -26
- package/storybook-static/assets/InputFile.stories-BdWP2iBM.js +36 -0
- package/storybook-static/assets/InputFiles-CPY6AJQJ.js +1 -0
- package/storybook-static/assets/{InputFiles-DWUxFStB.js → InputFiles-CfmNIDk_.js} +26 -26
- package/storybook-static/assets/InputFiles.stories-DnXD0hgD.js +33 -0
- package/storybook-static/assets/{InputImage-DmGIfR7v.js → InputImage-CgjrjJiq.js} +26 -26
- package/storybook-static/assets/{InputImage.stories-BD6OuYSL.js → InputImage.stories-CFHzEXGv.js} +1 -1
- package/storybook-static/assets/LayoutPicker-BfwRb9HQ.js +66 -0
- package/storybook-static/assets/{LayoutPicker.stories-CHQeF27J.js → LayoutPicker.stories-C9sMcU1k.js} +3 -3
- package/storybook-static/assets/Listbox-B2FoYInE.js +38 -0
- package/storybook-static/assets/Listbox.stories-BnGRDEMg.js +47 -0
- package/storybook-static/assets/{Modal-Cu6UplI8.js → Modal-Bd8v3vU8.js} +32 -32
- package/storybook-static/assets/Modal.stories-CmYJeAAz.js +180 -0
- package/storybook-static/assets/MultiSelect-BeRfLM-g.js +2 -0
- package/storybook-static/assets/MultiSelect-Bswj23vq.js +56 -0
- package/storybook-static/assets/MultiSelect.stories-iKlesibJ.js +29 -0
- package/storybook-static/assets/{NotificationsHost-CzBey-gZ.js → NotificationsHost-Cf0puFJk.js} +22 -22
- package/storybook-static/assets/NotificationsHost.stories-DX1niytc.js +25 -0
- package/storybook-static/assets/ODataMultiSelect-BvFXZlGZ.js +53 -0
- package/storybook-static/assets/ODataMultiSelect-CiZ3aEy3.js +1 -0
- package/storybook-static/assets/ODataMultiSelect.stories-BcRrzHnf.js +73 -0
- package/storybook-static/assets/ODataSelect-Bo0yPtod.js +1 -0
- package/storybook-static/assets/{ODataSelect-BTue1iaA.js → ODataSelect-DgH5G-C_.js} +32 -32
- package/storybook-static/assets/ODataSelect.stories-DEOly20_.js +73 -0
- package/storybook-static/assets/ODataTreeMultiSelect-IKfvxL7p.js +17 -0
- package/storybook-static/assets/ODataTreeMultiSelect.stories-uPDVAyMu.js +28 -0
- package/storybook-static/assets/ODataTreeSelect-BujgjSkl.js +16 -0
- package/storybook-static/assets/ODataTreeSelect.stories-BzlUExoW.js +21 -0
- package/storybook-static/assets/{PeriodSelect-BMZas-k8.js → PeriodSelect-BJIPDLq1.js} +31 -31
- package/storybook-static/assets/{PeriodSelect.stories-3w66x0Wx.js → PeriodSelect.stories-D12q6-YO.js} +1 -1
- package/storybook-static/assets/{Popover-Cp69zYWt.js → Popover-D25DhaiJ.js} +29 -29
- package/storybook-static/assets/{Popover.stories-Dm2olc8x.js → Popover.stories-CF3zUe0j.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput-7DV2qzpJ.js → PresetRangeDateInput-CDw6HtWA.js} +19 -19
- package/storybook-static/assets/PresetRangeDateInput.stories-BQZI6HOn.js +15 -0
- package/storybook-static/assets/{RadioButton-CZgaZarn.js → RadioButton-BgEBxZJi.js} +27 -27
- package/storybook-static/assets/{RadioButton.stories-DRGhwy-6.js → RadioButton.stories-BkFGEJXb.js} +2 -2
- package/storybook-static/assets/{RadioGroup-B9pw-kxR.js → RadioGroup-C-K84fCC.js} +26 -26
- package/storybook-static/assets/RadioGroup-Jq-lWcgE.js +1 -0
- package/storybook-static/assets/RadioGroup.stories-DyuW8DaF.js +42 -0
- package/storybook-static/assets/Select-BrRZA3Up.js +12 -0
- package/storybook-static/assets/{Select-DcRA8coi.js → Select-ChYAdfkx.js} +35 -35
- package/storybook-static/assets/Select.stories-D-onxXmT.js +46 -0
- package/storybook-static/assets/SelectOptionContent-Cwd0p14r.js +1 -0
- package/storybook-static/assets/SerializableSelect-CcBh49iS.js +4 -0
- package/storybook-static/assets/{SerializableSelect-BFMP4RoU.js → SerializableSelect-D9BlCZ4x.js} +32 -32
- package/storybook-static/assets/SerializableSelect.stories-BXMFTNDx.js +43 -0
- package/storybook-static/assets/SingleDateTimeInput-cHIGelrz.js +53 -0
- package/storybook-static/assets/SingleDateTimeInput.stories-BdPyEPUr.js +78 -0
- package/storybook-static/assets/Slider-Cb_nb9P2.js +63 -0
- package/storybook-static/assets/Slider.stories-CoKGxwRT.js +77 -0
- package/storybook-static/assets/SliderInput-DyxDl1Mo.js +58 -0
- package/storybook-static/assets/{SliderInput.stories-CDS4YS_3.js → SliderInput.stories-DgbBm38V.js} +1 -1
- package/storybook-static/assets/Sortable-DC3bPcbn.js +72 -0
- package/storybook-static/assets/{Sortable.stories--yPzhn7U.js → Sortable.stories-B_IhqW5F.js} +1 -1
- package/storybook-static/assets/{Splitter-6_oQu3c4.js → Splitter-CGw6p5-z.js} +39 -39
- package/storybook-static/assets/Splitter.stories-DNlOAJY9.js +22 -0
- package/storybook-static/assets/{StateSelect-ClrBKHfD.js → StateSelect-cU_bLcpU.js} +25 -25
- package/storybook-static/assets/{StateSelect.stories-DtpIwsdv.js → StateSelect.stories-D0Z05ltu.js} +2 -2
- package/storybook-static/assets/Switch-C-3mRPBf.js +36 -0
- package/storybook-static/assets/Switch.stories-Csqx8bKj.js +26 -0
- package/storybook-static/assets/Table-4x8XIQpa.js +197 -0
- package/storybook-static/assets/{Table.stories-BZOmuXFd.js → Table.stories-DLsx7_5W.js} +1 -1
- package/storybook-static/assets/Tabs-BYxa2MdO.js +72 -0
- package/storybook-static/assets/{Tabs.stories-p59QJ2Tc.js → Tabs.stories-Bs2uE5X2.js} +1 -1
- package/storybook-static/assets/TagInput.stories-8_Uk7z4a.js +18 -0
- package/storybook-static/assets/{Textarea-DtmMCSxT.js → Textarea-C9do4TkE.js} +26 -26
- package/storybook-static/assets/Textarea.stories-khYPBnjL.js +27 -0
- package/storybook-static/assets/TimePanel-DAQw6BvJ.js +1 -0
- package/storybook-static/assets/{TimePanel.stories-D2scop0x.js → TimePanel.stories-D8uZoVpL.js} +1 -1
- package/storybook-static/assets/{Toggle-C9Yg9JE_.js → Toggle-C4pQIuyy.js} +26 -26
- package/storybook-static/assets/Toggle.stories-DhF17j-W.js +30 -0
- package/storybook-static/assets/TreeMultiSelect-B6_6vRxE.js +15 -0
- package/storybook-static/assets/TreeMultiSelect-Drs35VVA.js +1 -0
- package/storybook-static/assets/TreeMultiSelect.stories-D6YSwiei.js +31 -0
- package/storybook-static/assets/{TreePickerBase-p_zyJtun.js → TreePickerBase-DCognf3p.js} +2 -2
- package/storybook-static/assets/TreeSelect-CAAu7_OB.js +15 -0
- package/storybook-static/assets/TreeSelect-DxdqUuJ6.js +1 -0
- package/storybook-static/assets/TreeSelect.stories-BqF-qAB9.js +16 -0
- package/storybook-static/assets/TreeTable-TKNA-uIN.js +175 -0
- package/storybook-static/assets/{TreeTable.stories-BZLmxdzp.js → TreeTable.stories-yeAD18Zw.js} +2 -2
- package/storybook-static/assets/WithTooltip-7X4HQR7L-CxfB6hD8.js +9 -0
- package/storybook-static/assets/{base-table-C7bVdENP.js → base-table-ByITBr1J.js} +1 -1
- package/storybook-static/assets/blocks-0RiOsxIK.js +285 -0
- package/storybook-static/assets/button-B1ZGqKIL.js +1 -0
- package/storybook-static/assets/{check-box-B71d1lgw.js → check-box-NnScD6BH.js} +1 -1
- package/storybook-static/assets/chunk-3LY4VQVK-DprWWQ6L.js +6 -0
- package/storybook-static/assets/{chunk-LITCR56V-kr_6KJh-.js → chunk-LITCR56V-CsoWERay.js} +2 -2
- package/storybook-static/assets/contextMenu-B7OY9AUe.js +2 -0
- package/storybook-static/assets/error-B-BZQLMk.js +1 -0
- package/storybook-static/assets/flex-DjZzX5cW.js +1 -0
- package/storybook-static/assets/floating-ui.react-6aWiJn-w.js +1 -0
- package/storybook-static/assets/formatter-L2YTDE3Q-Bhbxmhyr.js +1 -0
- package/storybook-static/assets/{formatters-Br290Dmy.js → formatters-3Nbt_zpw.js} +1 -1
- package/storybook-static/assets/grid-CXx-3eN4.js +1 -0
- package/storybook-static/assets/{hooks-DzbwAWAd.js → hooks-cOC2wx_S.js} +1 -1
- package/storybook-static/assets/{iframe-B1Ua6ocI.js → iframe-GmIo3IOR.js} +199 -197
- package/storybook-static/assets/input-BZoBzauA.js +1 -0
- package/storybook-static/assets/{mdx-react-shim-DHWnLJR9.js → mdx-react-shim-DQ40dZsI.js} +1 -1
- package/storybook-static/assets/media-CaNRzUMK.js +1 -0
- package/storybook-static/assets/misc-DSZ85X5k.js +5 -0
- package/storybook-static/assets/notifications-dwTsOfAG.js +1 -0
- package/storybook-static/assets/odata-BXYPW5TY.js +1 -0
- package/storybook-static/assets/odata-service-CdmjwNQZ.js +1 -0
- package/storybook-static/assets/{odataStoryFixtures-DS1zYaZm.js → odataStoryFixtures-qHROzCso.js} +1 -1
- package/storybook-static/assets/picker-Ly9fNo5I.js +2 -0
- package/storybook-static/assets/popover-hHS3Q1Eb.js +2 -0
- package/storybook-static/assets/preset-select-DSUOhzZJ.js +5 -0
- package/storybook-static/assets/{react-18-D4G2zUNp.js → react-18-C8dLShAR.js} +1 -1
- package/storybook-static/assets/react-CufbfMTd.js +9 -0
- package/storybook-static/assets/react-dom-B1EOrd4K.js +1 -0
- package/storybook-static/assets/select-CjW1dQXg.js +1 -0
- package/storybook-static/assets/slider-CKtA1jkD.js +2 -0
- package/storybook-static/assets/sortable-C7z1FJM0.js +1 -0
- package/storybook-static/assets/{syntaxhighlighter-RTCFPKCB-D-6cX_EQ.js → syntaxhighlighter-RTCFPKCB-DUS1jW_J.js} +2 -2
- package/storybook-static/assets/text-Cw7Vu082.js +4 -0
- package/storybook-static/assets/theming-Ce0TAFtT.js +39 -0
- package/storybook-static/assets/ui-Dlg5NgOB.js +1 -0
- package/storybook-static/assets/useODataSelectBase-BE8nJXZo.js +1 -0
- package/storybook-static/assets/useODataTreeData-Dli9NQVP.js +1 -0
- package/storybook-static/assets/utils-B73_kE2n.js +1 -0
- package/storybook-static/iframe.html +2 -2
- package/storybook-static/index.html +16 -6
- package/storybook-static/index.json +1 -1
- package/storybook-static/project.json +1 -1
- package/storybook-static/sb-addons/chromatic-com-storybook-1/manager-bundle.js +352 -0
- package/storybook-static/sb-addons/chromatic-com-storybook-1/manager-bundle.js.LEGAL.txt +31 -0
- package/storybook-static/sb-addons/vitest-4/manager-bundle.js +3 -0
- package/storybook-static/assets/Badge-BNG4jaAG.js +0 -139
- package/storybook-static/assets/Badge.stories-DBR_TCrU.js +0 -51
- package/storybook-static/assets/Button-CV6qRYrS.js +0 -12
- package/storybook-static/assets/Button.stories-BxQyR9Jj.js +0 -75
- package/storybook-static/assets/CheckBox.stories-B53ABl5i.js +0 -60
- package/storybook-static/assets/Color-KMSTOMOX-Cyl8cJgb.js +0 -1
- package/storybook-static/assets/ContextMenu-BwtAOupO.js +0 -40
- package/storybook-static/assets/DateInput-BdC-rKjp.js +0 -40
- package/storybook-static/assets/DateInput-Bn8ERC92.js +0 -1
- package/storybook-static/assets/DateRangePresetSelect-9x2PXji2.js +0 -3
- package/storybook-static/assets/DateRangePresetSelect-BAxLf-sI.js +0 -30
- package/storybook-static/assets/DateRangePresetSelect.stories-Cpm9i1Gs.js +0 -11
- package/storybook-static/assets/Detail-jSNmxeK-.js +0 -40
- package/storybook-static/assets/Detail.stories-CnI5n5T5.js +0 -44
- package/storybook-static/assets/Dialog.stories-BzFqMgrU.js +0 -31
- package/storybook-static/assets/Disclosure-BbjuwgPN.js +0 -32
- package/storybook-static/assets/DocsRenderer-JROSPFPF-BijI6psg.js +0 -2
- package/storybook-static/assets/DropZone-8RM16_68.js +0 -36
- package/storybook-static/assets/DropdownMenu-COmcfMmT.js +0 -1
- package/storybook-static/assets/Flex-BQBzh4Tr.js +0 -3
- package/storybook-static/assets/Flex-CHaV6K7m.js +0 -61
- package/storybook-static/assets/Grid-DloPlrCB.js +0 -61
- package/storybook-static/assets/ImageRenderer-DbFiaYXn.js +0 -2
- package/storybook-static/assets/Input--cNyU-Ag.js +0 -3
- package/storybook-static/assets/Input-ZH34LSnz.js +0 -39
- package/storybook-static/assets/Input.stories-DM-fUL_7.js +0 -38
- package/storybook-static/assets/InputDateTime-BZGJSifI.js +0 -39
- package/storybook-static/assets/InputDateTime.stories-BVdDIO_9.js +0 -35
- package/storybook-static/assets/InputFile.stories-CU0wd7SJ.js +0 -36
- package/storybook-static/assets/InputFiles-B3vHz3jd.js +0 -1
- package/storybook-static/assets/InputFiles.stories-DfzkzBu8.js +0 -33
- package/storybook-static/assets/LayoutPicker-DO0Hq5wg.js +0 -66
- package/storybook-static/assets/Listbox-BoBf1VYa.js +0 -38
- package/storybook-static/assets/Listbox.stories-Cs6ABkXs.js +0 -47
- package/storybook-static/assets/Modal.stories-DDHOCfX1.js +0 -180
- package/storybook-static/assets/MultiSelect-BVATOh-_.js +0 -2
- package/storybook-static/assets/MultiSelect-Dkv3SI5J.js +0 -56
- package/storybook-static/assets/MultiSelect.stories-CPNipIbC.js +0 -29
- package/storybook-static/assets/NotificationsHost.stories-CeRXDmBa.js +0 -25
- package/storybook-static/assets/ODataMultiSelect-BIDgmui6.js +0 -53
- package/storybook-static/assets/ODataMultiSelect-U8WlXc3y.js +0 -1
- package/storybook-static/assets/ODataMultiSelect.stories-DmeX7-ss.js +0 -73
- package/storybook-static/assets/ODataSelect-BO4av_hn.js +0 -1
- package/storybook-static/assets/ODataSelect.stories-DpQp77ZX.js +0 -73
- package/storybook-static/assets/ODataTreeMultiSelect-tcWnebHq.js +0 -17
- package/storybook-static/assets/ODataTreeMultiSelect.stories-C6of8u9F.js +0 -28
- package/storybook-static/assets/ODataTreeSelect-B88XSjq4.js +0 -16
- package/storybook-static/assets/ODataTreeSelect.stories-CXN2zOja.js +0 -21
- package/storybook-static/assets/PresetRangeDateInput.stories-CWwkINdd.js +0 -15
- package/storybook-static/assets/RadioGroup-DPNg9UXg.js +0 -1
- package/storybook-static/assets/RadioGroup.stories-D_nQ2UMX.js +0 -42
- package/storybook-static/assets/Select-C5DH0hMi.js +0 -12
- package/storybook-static/assets/Select.stories-BxlItwVq.js +0 -46
- package/storybook-static/assets/SelectOptionContent-RFIk8-W0.js +0 -1
- package/storybook-static/assets/SerializableSelect-CJtC_MVh.js +0 -4
- package/storybook-static/assets/SerializableSelect.stories-Cwk9kf8V.js +0 -43
- package/storybook-static/assets/SingleDateTimeInput-BM_emntS.js +0 -53
- package/storybook-static/assets/SingleDateTimeInput.stories-DK0JJ19r.js +0 -78
- package/storybook-static/assets/Slider-BjAGWnmv.js +0 -63
- package/storybook-static/assets/Slider.stories-AFZ3sK6N.js +0 -77
- package/storybook-static/assets/SliderInput-CEmHsnm3.js +0 -58
- package/storybook-static/assets/Sortable-BwTtVBVt.js +0 -72
- package/storybook-static/assets/Splitter.stories-BLDqjnbb.js +0 -22
- package/storybook-static/assets/Switch-cwvSIlOe.js +0 -36
- package/storybook-static/assets/Switch.stories-BNMmFr3z.js +0 -26
- package/storybook-static/assets/Table-BScnaCwl.js +0 -197
- package/storybook-static/assets/Tabs-WCUd456k.js +0 -72
- package/storybook-static/assets/TagInput.stories-UojVk_Jy.js +0 -18
- package/storybook-static/assets/Textarea.stories-Db3Pigr7.js +0 -27
- package/storybook-static/assets/TimePanel-Bjn51Vi_.js +0 -1
- package/storybook-static/assets/Toggle.stories-Ok2NhICE.js +0 -30
- package/storybook-static/assets/TreeMultiSelect-DJzqY2Hd.js +0 -1
- package/storybook-static/assets/TreeMultiSelect-DxFQkzpN.js +0 -15
- package/storybook-static/assets/TreeMultiSelect.stories-BOgyH5ny.js +0 -31
- package/storybook-static/assets/TreeSelect-C2_2A0_N.js +0 -15
- package/storybook-static/assets/TreeSelect-CejsBEz8.js +0 -1
- package/storybook-static/assets/TreeSelect.stories-DerIIWQL.js +0 -16
- package/storybook-static/assets/TreeTable-3l5conv1.js +0 -175
- package/storybook-static/assets/WithTooltip-7X4HQR7L-C39XELKG.js +0 -9
- package/storybook-static/assets/blocks-DBWaa853.js +0 -285
- package/storybook-static/assets/button-DhCvGY9d.js +0 -1
- package/storybook-static/assets/chunk-3LY4VQVK-Cy15UFby.js +0 -6
- package/storybook-static/assets/contextMenu-P53ulGd4.js +0 -2
- package/storybook-static/assets/error-BF58nufO.js +0 -1
- package/storybook-static/assets/flex-OzI2qdBD.js +0 -1
- package/storybook-static/assets/floating-ui.react-BCZnZKor.js +0 -1
- package/storybook-static/assets/formatter-L2YTDE3Q-Bu16EJYG.js +0 -1
- package/storybook-static/assets/grid-BRIKMdnO.js +0 -1
- package/storybook-static/assets/input-CKW6wgYr.js +0 -1
- package/storybook-static/assets/jsx-runtime-BBQGix-2.js +0 -1
- package/storybook-static/assets/lucide-react-DiTL2FZl.js +0 -1
- package/storybook-static/assets/media-CP09Ak2C.js +0 -1
- package/storybook-static/assets/misc-CI386biM.js +0 -5
- package/storybook-static/assets/notifications-El-91bgG.js +0 -1
- package/storybook-static/assets/odata-jXHOPHLv.js +0 -1
- package/storybook-static/assets/odata-service-DMzLjWr8.js +0 -1
- package/storybook-static/assets/picker-DhufeWWq.js +0 -2
- package/storybook-static/assets/popover-DCygDZB4.js +0 -2
- package/storybook-static/assets/preset-select-C0o8oMRZ.js +0 -5
- package/storybook-static/assets/react-DXmRDR8e.js +0 -9
- package/storybook-static/assets/react-dom-DaUZFAdI.js +0 -1
- package/storybook-static/assets/select-Dcb4X2qB.js +0 -1
- package/storybook-static/assets/slider-D7YUv9lW.js +0 -2
- package/storybook-static/assets/sortable-_Ry8I9Yk.js +0 -1
- package/storybook-static/assets/text-DpidzPjQ.js +0 -4
- package/storybook-static/assets/theming-BWpdH-US.js +0 -39
- package/storybook-static/assets/ui-wilQ6cnk.js +0 -1
- package/storybook-static/assets/useODataSelectBase-8RpFkVBi.js +0 -1
- package/storybook-static/assets/useODataTreeData-Bc19nm97.js +0 -1
- package/storybook-static/assets/utils-DKOsD-4R.js +0 -1
- /package/storybook-static/sb-addons/{a11y-2 → a11y-3}/manager-bundle.js +0 -0
- /package/storybook-static/sb-addons/{docs-1 → docs-2}/manager-bundle.js +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import{i as e}from"./preload-helper-B45gAKPr.js";import{E as
|
|
2
|
-
`,(0,b.jsx)(
|
|
3
|
-
`,(0,b.jsx)(
|
|
4
|
-
`,(0,b.jsx)(
|
|
1
|
+
import{i as e}from"./preload-helper-B45gAKPr.js";import{t}from"./iframe-GmIo3IOR.js";import{E as n,a as r,d as i,f as a,l as o,m as s,n as c,p as l,r as u,u as d}from"./blocks-0RiOsxIK.js";import{t as f}from"./mdx-react-shim-DQ40dZsI.js";import{ArrayBufferMode as p,Controlled as m,WithInitialValue as h,n as g,t as _}from"./InputFile.stories-BdWP2iBM.js";function v(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(o,{of:_,parameters:{docs:{toc:!0}}}),`
|
|
2
|
+
`,(0,b.jsx)(l,{children:`InputFile`}),`
|
|
3
|
+
`,(0,b.jsx)(a,{children:`Контрол для выбора одного файла с поддержкой предварительного значения и бинарного режима`}),`
|
|
4
|
+
`,(0,b.jsx)(t.p,{children:`InputFile уже имеет живые stories, а эта страница собирает их в структурированную документацию с краткими рекомендациями, примерами подключения и API.
|
|
5
5
|
Ниже можно быстро проверить базовый сценарий, а затем перейти к отдельным режимам использования и состояниям компонента. Отдельно разобраны контролируемые сценарии.`}),`
|
|
6
|
-
`,(0,b.jsx)(
|
|
7
|
-
`,(0,b.jsx)(
|
|
8
|
-
`,(0,b.jsx)(
|
|
9
|
-
`,(0,b.jsx)(
|
|
6
|
+
`,(0,b.jsx)(t.h2,{id:`основной-сценарий`,children:`Основной сценарий`}),`
|
|
7
|
+
`,(0,b.jsx)(d,{}),`
|
|
8
|
+
`,(0,b.jsx)(r,{of:m}),`
|
|
9
|
+
`,(0,b.jsx)(t.pre,{children:(0,b.jsx)(t.code,{className:`language-tsx`,children:`import { useState } from "react";
|
|
10
10
|
|
|
11
11
|
import { InputFile } from "@/shared/ui";
|
|
12
12
|
|
|
@@ -16,22 +16,22 @@ export function Example() {
|
|
|
16
16
|
return <InputFile label="Файл" value={value} onChange={setValue} />;
|
|
17
17
|
}
|
|
18
18
|
`})}),`
|
|
19
|
-
`,(0,b.jsx)(
|
|
20
|
-
`,(0,b.jsxs)(
|
|
21
|
-
`,(0,b.jsx)(
|
|
22
|
-
`,(0,b.jsx)(
|
|
19
|
+
`,(0,b.jsx)(t.h2,{id:`практические-рекомендации`,children:`Практические рекомендации`}),`
|
|
20
|
+
`,(0,b.jsxs)(t.ul,{children:[`
|
|
21
|
+
`,(0,b.jsx)(t.li,{children:`Если состояние должно жить во внешней форме или модели, ориентируйтесь на контролируемый режим из документации.`}),`
|
|
22
|
+
`,(0,b.jsx)(t.li,{children:`При редактировании сущностей проверьте сценарий инициализации компонента уже существующими данными.`}),`
|
|
23
23
|
`]}),`
|
|
24
|
-
`,(0,b.jsx)(
|
|
25
|
-
`,(0,b.jsx)(
|
|
26
|
-
`,(0,b.jsx)(
|
|
27
|
-
`,(0,b.jsx)(
|
|
28
|
-
`,(0,b.jsx)(
|
|
29
|
-
`,(0,b.jsx)(
|
|
30
|
-
`,(0,b.jsx)(
|
|
31
|
-
`,(0,b.jsx)(
|
|
32
|
-
`,(0,b.jsx)(
|
|
33
|
-
`,(0,b.jsx)(
|
|
34
|
-
`,(0,b.jsx)(
|
|
35
|
-
`,(0,b.jsx)(
|
|
36
|
-
`,(0,b.jsx)(
|
|
37
|
-
`,(0,b.jsx)(
|
|
24
|
+
`,(0,b.jsx)(t.h2,{id:`сценарии-использования`,children:`Сценарии использования`}),`
|
|
25
|
+
`,(0,b.jsx)(t.h3,{id:`компонент-работает-в-контролируемом-режиме-когда-состояние-хранится-во-внешнем-компоненте`,children:`Компонент работает в контролируемом режиме, когда состояние хранится во внешнем компоненте`}),`
|
|
26
|
+
`,(0,b.jsx)(t.p,{children:`Компонент работает в контролируемом режиме, когда состояние хранится во внешнем компоненте.`}),`
|
|
27
|
+
`,(0,b.jsx)(u,{of:m}),`
|
|
28
|
+
`,(0,b.jsx)(t.h3,{id:`инициализация-предварительно-выбранным-значением`,children:`Инициализация предварительно выбранным значением`}),`
|
|
29
|
+
`,(0,b.jsx)(t.p,{children:`Инициализация предварительно выбранным значением.`}),`
|
|
30
|
+
`,(0,b.jsx)(u,{of:h}),`
|
|
31
|
+
`,(0,b.jsx)(t.h3,{id:`сценарий-работы-с-бинарными-данными`,children:`Сценарий работы с бинарными данными`}),`
|
|
32
|
+
`,(0,b.jsx)(t.p,{children:`Сценарий работы с бинарными данными.`}),`
|
|
33
|
+
`,(0,b.jsx)(u,{of:p}),`
|
|
34
|
+
`,(0,b.jsx)(t.h2,{id:`api`,children:`API`}),`
|
|
35
|
+
`,(0,b.jsx)(c,{of:_}),`
|
|
36
|
+
`,(0,b.jsx)(t.h2,{id:`все-сторисы`,children:`Все сторисы`}),`
|
|
37
|
+
`,(0,b.jsx)(i,{includePrimary:!1})]})}function y(e={}){let{wrapper:t}={...n(),...e.components};return t?(0,b.jsx)(t,{...e,children:(0,b.jsx)(v,{...e})}):v(e)}var b;e((()=>{b=t(),f(),s(),g()}))();export{y as default};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import{a as e,c as t,i as n}from"./preload-helper-B45gAKPr.js";import{pn as r,t as i}from"./iframe-GmIo3IOR.js";import{a,i as o,n as s}from"./utils-B73_kE2n.js";import{n as c,t as l}from"./ui.module-wFHXkJzp.js";import{n as u,o as d,r as f,u as p}from"./Input-CjJUuLEX.js";import{t as m}from"./input-BZoBzauA.js";import{a as h,i as g,o as _,r as v,s as y}from"./file-hArYcyES.js";var b,x,S,C,w=n((()=>{b=`Ggxyuj`,x=`fthcmO`,S=`wyY60X`,C={control:b,fileName:x,hiddenInput:S}}));function T(e){let{value:t,onClear:n,onReadError:r,accept:i,allowedMime:o,maxBytes:l,label:m,description:g,placeholder:b=`Выберите файл`,disabled:x,size:S,error:w,onClearError:T,className:O}=e;h(o),_(i);let k=(0,E.useRef)(null),{controlId:A,labelId:j,descriptionId:M,errorId:N,describedBy:P}=p({hasLabel:m!=null,hasDescription:!!g,hasError:!!w}),F=(0,E.useCallback)(async t=>{let n=t.target.files?.[0];if(n){t.target.value=``,w&&T&&T();try{if(e.readMode===`array-buffer`){let t=await y(n,{allowedMime:o,maxBytes:l,mode:`array-buffer`});e.onChange(t);return}let t=await y(n,{allowedMime:o,maxBytes:l});e.onChange(t)}catch(e){e instanceof v&&r&&r(e)}}},[e,o,l,r,w,T]),I=(0,E.useCallback)(()=>{k.current?.click()},[]);return(0,D.jsxs)(d,{label:m,description:g,disabled:x,className:O,size:S,error:w,controlId:A,labelId:j,descriptionId:M,errorId:N,children:[(0,D.jsx)(`input`,{ref:k,id:A,type:`file`,accept:(i??o)?.join(`,`),disabled:x,className:C.hiddenInput,onChange:F,tabIndex:-1}),(0,D.jsx)(f,{endAdornment:n?(0,D.jsx)(u,{onClick:n,disabled:x}):void 0,endAdornmentWidth:n?`var(--control-height)`:void 0,children:({controlClassName:e})=>(0,D.jsx)(`div`,{role:`button`,tabIndex:x?-1:0,onClick:I,onKeyDown:e=>s(e,I,{disabled:x}),className:a(c.uiInputControl,C.control,e,!!w&&c.invalid),"data-disabled":x||void 0,"aria-invalid":!!w||void 0,"aria-disabled":x,"aria-labelledby":j,"aria-describedby":P,children:t?(0,D.jsx)(`span`,{className:C.fileName,children:t.meta.name}):(0,D.jsx)(`span`,{className:c.uiPlaceholder,children:b})})})]})}var E,D,O=n((()=>{E=t(r(),1),g(),o(),m(),l(),w(),D=i(),T.__docgenInfo={description:'InputFile — компонент выбора одного файла.\n\nВизуально идентичен InputText: поле с label, description, placeholder,\nкнопкой очистки (крестик) и блоком ошибки.\n\nПри клике открывается нативный диалог выбора файла.\nПосле выбора файл читается через readFile, результат передаётся в onChange.\n\nInputFile позволяет выбрать один файл и передаёт наружу типизированный результат чтения.\nЕсли `readMode` не задан или равен `"data-url"`, в `onChange` приходит объект с `dataUrl`.\nЕсли `readMode` равен `"array-buffer"`, в `onChange` приходит объект с `buffer`.',methods:[],displayName:`InputFile`}})),k=e({ArrayBufferMode:()=>I,Controlled:()=>P,WithInitialValue:()=>F,__namedExportsOrder:()=>L,default:()=>N}),A,j,M,N,P,F,I,L,R=n((()=>{A=t(r(),1),O(),j=i(),M=(e,t=`application/pdf`)=>{let n=new File([`demo-file`],e,{type:t,lastModified:17040672e5});return{mode:`data-url`,meta:{name:n.name,mime:n.type,size:n.size,lastModified:n.lastModified},dataUrl:`data:${t};base64,ZGVtby1maWxl`,file:n}},N={title:`Shared/UI/InputFile`,component:T,args:{value:void 0,onChange:()=>{}},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{label:{description:`Заголовок поля загрузки.`,control:`text`},description:{description:`Описание под заголовком.`,control:`text`},placeholder:{description:`Текст в поле, пока файл не выбран.`,control:`text`},value:{description:`Текущий результат чтения выбранного файла.`,control:!1},onChange:{description:`Вызывается после успешного чтения файла.`,control:!1},onReadError:{description:`Вызывается при ошибке чтения или валидации файла.`,control:!1},onClear:{description:`Очищает выбранный файл и показывает кнопку очистки.`,control:!1},accept:{description:"HTML `accept` для нативного диалога выбора файла.",control:`text`},allowedMime:{description:`Белый список MIME-типов для readFile-валидации.`,control:!1},maxBytes:{description:`Максимальный размер файла в байтах.`,control:`number`},readMode:{description:`Режим чтения файла: data-url или array-buffer.`,control:`inline-radio`,options:[`data-url`,`array-buffer`]},error:{description:`Текст ошибки под полем.`,control:`text`},onClearError:{description:`Callback сброса ошибки при повторном выборе файла.`,control:!1},disabled:{description:`Блокирует выбор файла.`,control:`boolean`},size:{description:`Размер визуального контрола.`,control:`select`,options:[`xs`,`sm`,`md`,`lg`,`xl`]}}},P={render:e=>{let[t,n]=(0,A.useState)(e.value),[r,i]=(0,A.useState)(e.error??``);return(0,j.jsx)(T,{...e,value:t,error:r||void 0,onChange:n,onClear:()=>n(void 0),onClearError:()=>i(``)})},args:{label:`Документ`,description:`Загрузите один файл.`,placeholder:`Выберите файл`,accept:[`.pdf`,`.docx`],readMode:`data-url`,value:void 0}},F={render:e=>{let[t,n]=(0,A.useState)(M(`report.pdf`));return(0,j.jsx)(T,{...e,value:t,onChange:n,onClear:()=>n(void 0)})},args:{label:`Файл с предзаполнением`,description:`Демонстрация состояния после успешной загрузки.`}},I={render:e=>{let[t,n]=(0,A.useState)(void 0);return(0,j.jsx)(T,{...e,value:t,onChange:n,onClear:()=>n(void 0)})},args:{label:`Двоичное чтение`,description:"Режим `array-buffer` для дальнейшей бинарной обработки.",readMode:`array-buffer`,accept:[`.zip`,`.pdf`],value:void 0}},P.parameters={...P.parameters,docs:{...P.parameters?.docs,source:{originalSource:`{
|
|
2
|
+
render: args => {
|
|
3
|
+
const [value, setValue] = useState<ReadFileResult | undefined>(args.value);
|
|
4
|
+
const [error, setError] = useState(args.error ?? "");
|
|
5
|
+
return <InputFile {...args} value={value} error={error || undefined} onChange={setValue} onClear={() => setValue(undefined)} onClearError={() => setError("")} />;
|
|
6
|
+
},
|
|
7
|
+
args: {
|
|
8
|
+
label: "Документ",
|
|
9
|
+
description: "Загрузите один файл.",
|
|
10
|
+
placeholder: "Выберите файл",
|
|
11
|
+
accept: [".pdf", ".docx"],
|
|
12
|
+
readMode: "data-url",
|
|
13
|
+
value: undefined
|
|
14
|
+
}
|
|
15
|
+
}`,...P.parameters?.docs?.source}}},F.parameters={...F.parameters,docs:{...F.parameters?.docs,source:{originalSource:`{
|
|
16
|
+
render: args => {
|
|
17
|
+
const [value, setValue] = useState<ReadFileResult | undefined>(createMockReadFileResult("report.pdf"));
|
|
18
|
+
return <InputFile {...args} value={value} onChange={setValue} onClear={() => setValue(undefined)} />;
|
|
19
|
+
},
|
|
20
|
+
args: {
|
|
21
|
+
label: "Файл с предзаполнением",
|
|
22
|
+
description: "Демонстрация состояния после успешной загрузки."
|
|
23
|
+
}
|
|
24
|
+
}`,...F.parameters?.docs?.source}}},I.parameters={...I.parameters,docs:{...I.parameters?.docs,source:{originalSource:`{
|
|
25
|
+
render: args => {
|
|
26
|
+
const [value, setValue] = useState<ReadFileResult | undefined>(undefined);
|
|
27
|
+
return <InputFile {...args} value={value} onChange={setValue} onClear={() => setValue(undefined)} />;
|
|
28
|
+
},
|
|
29
|
+
args: {
|
|
30
|
+
label: "Двоичное чтение",
|
|
31
|
+
description: "Режим \`array-buffer\` для дальнейшей бинарной обработки.",
|
|
32
|
+
readMode: "array-buffer",
|
|
33
|
+
accept: [".zip", ".pdf"],
|
|
34
|
+
value: undefined
|
|
35
|
+
}
|
|
36
|
+
}`,...I.parameters?.docs?.source}}},L=[`Controlled`,`WithInitialValue`,`ArrayBufferMode`]}));R();export{I as ArrayBufferMode,P as Controlled,F as WithInitialValue,L as __namedExportsOrder,N as default,R as n,k as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as e,i as t}from"./preload-helper-B45gAKPr.js";import{n,pn as r,s as i,t as a}from"./iframe-GmIo3IOR.js";import{a as o,i as s,n as c}from"./utils-B73_kE2n.js";import{n as l,t as u}from"./ui.module-wFHXkJzp.js";import{o as d,r as f,u as p}from"./Input-CjJUuLEX.js";import{t as m}from"./input-BZoBzauA.js";import{a as h,i as g,o as _,r as v,s as y}from"./file-hArYcyES.js";var b,x,S,C,w,T,E,D=t((()=>{b=`h9SMea`,x=`rUyh0y`,S=`Q0CY1r`,C=`AJuYXd`,w=`CKKkOD`,T=`UgxhS1`,E={control:b,hiddenInput:x,fileList:S,fileItem:C,fileItemName:w,removeButton:T}}));function O({files:e,onChange:t}){let n=(0,k.useCallback)(n=>{t(e.filter((e,t)=>t!==n))},[e,t]);return!e||!e.length?null:(0,A.jsx)(`ul`,{className:E.fileList,children:e.map((e,t)=>(0,A.jsxs)(`li`,{className:E.fileItem,children:[(0,A.jsx)(`span`,{className:E.fileItemName,children:e.meta.name}),(0,A.jsx)(`button`,{type:`button`,className:o(E.removeButton,`flexCenter`),onClick:()=>n(t),"aria-label":`Удалить ${e.meta.name}`,children:(0,A.jsx)(i,{})})]},`${e.meta.name}-${e.meta.lastModified}`))})}var k,A,j=t((()=>{k=e(r(),1),s(),n(),D(),A=a(),O.__docgenInfo={description:``,methods:[],displayName:`InputFilesList`,props:{files:{required:!0,tsType:{name:`Array`,elements:[{name:`TFile`}],raw:`TFile[]`},description:``},onChange:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(files: TFile[]) => void`,signature:{arguments:[{type:{name:`Array`,elements:[{name:`TFile`}],raw:`TFile[]`},name:`files`}],return:{name:`void`}}},description:``}}}}));function M(e){let{value:t,onReadError:n,accept:r,allowedMime:i,maxBytes:a,maxFiles:s,label:u,description:m,placeholder:g=`Выберите файлы`,disabled:b,size:x,error:S,onClearError:C,className:w}=e;h(i),_(r);let T=(0,N.useRef)(null),{controlId:D,labelId:k,descriptionId:A,errorId:j,describedBy:M}=p({hasLabel:u!=null,hasDescription:!!m,hasError:!!S}),F=typeof s==`number`&&t.length>=s,I=(0,N.useCallback)(async r=>{let o=r.target.files;if(!o||o.length===0)return;let c=Array.from(o);r.target.value=``,S&&C&&C();let l=typeof s==`number`?s-t.length:c.length,u=c.slice(0,l);if(e.readMode===`array-buffer`){let t=[];for(let e of u)try{let n=await y(e,{allowedMime:i,maxBytes:a,mode:`array-buffer`});t.push(n)}catch(e){e instanceof v&&n&&n(e)}t.length>0&&e.onChange([...e.value,...t]);return}let d=[];for(let e of u)try{let t=await y(e,{allowedMime:i,maxBytes:a});d.push(t)}catch(e){e instanceof v&&n&&n(e)}d.length>0&&e.onChange([...e.value,...d])},[e,s,t.length,i,a,n,S,C]),L=(0,N.useCallback)(()=>{T.current?.click()},[]),R=(e.readMode,(0,P.jsx)(O,{files:e.value,onChange:e.onChange}));return(0,P.jsxs)(d,{label:u,description:m,disabled:b,className:w,size:x,error:S,controlId:D,labelId:k,descriptionId:A,errorId:j,children:[(0,P.jsx)(`input`,{ref:T,id:D,type:`file`,accept:(r??i)?.join(`,`),multiple:!0,disabled:b||F,className:E.hiddenInput,onChange:I,tabIndex:-1}),(0,P.jsx)(f,{children:()=>(0,P.jsx)(`div`,{role:`button`,tabIndex:b||F?-1:0,onClick:L,onKeyDown:e=>c(e,L,{disabled:b||F}),className:o(l.uiInputControl,E.control,!!S&&`invalid`),"data-disabled":b||void 0,"aria-invalid":!!S||void 0,"aria-disabled":b||F,"aria-labelledby":k,"aria-describedby":M,children:(0,P.jsx)(`span`,{className:l.uiPlaceholder,children:F?`Максимум ${s} файлов`:g})})}),R]})}var N,P,F=t((()=>{N=e(r(),1),g(),s(),m(),u(),D(),j(),P=a(),M.__docgenInfo={description:'InputFiles — компонент выбора нескольких файлов.\n\nПоле стилизовано как InputText. При клике открывается нативный\nдиалог с multiple. Каждый выбранный файл читается через readFile\nи добавляется в массив value.\n\nСписок выбранных файлов отображается под полем.\nКаждый файл можно удалить кнопкой «крестик».\n\nInputFiles типизирует массив по `readMode`.\nЕсли `readMode` не задан или равен `"data-url"`, в `value` и `onChange`\nиспользуется массив объектов с `dataUrl`. Если `readMode` равен\n`"array-buffer"`, используется массив объектов с `buffer`.',methods:[],displayName:`InputFiles`}}));export{j as i,F as n,O as r,M as t};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import{i as e}from"./preload-helper-B45gAKPr.js";import{E as
|
|
2
|
-
`,(0,b.jsx)(
|
|
3
|
-
`,(0,b.jsx)(
|
|
4
|
-
`,(0,b.jsx)(
|
|
1
|
+
import{i as e}from"./preload-helper-B45gAKPr.js";import{t}from"./iframe-GmIo3IOR.js";import{E as n,a as r,d as i,f as a,l as o,m as s,n as c,p as l,r as u,u as d}from"./blocks-0RiOsxIK.js";import{t as f}from"./mdx-react-shim-DQ40dZsI.js";import{Controlled as p,LimitReached as m,WithInitialFiles as h,n as g,t as _}from"./InputFiles.stories-DnXD0hgD.js";function v(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(o,{of:_,parameters:{docs:{toc:!0}}}),`
|
|
2
|
+
`,(0,b.jsx)(l,{children:`InputFiles`}),`
|
|
3
|
+
`,(0,b.jsx)(a,{children:`Выбор и хранение нескольких файлов в контролируемом режиме`}),`
|
|
4
|
+
`,(0,b.jsx)(t.p,{children:`InputFiles уже имеет живые stories, а эта страница собирает их в структурированную документацию с краткими рекомендациями, примерами подключения и API.
|
|
5
5
|
Ниже можно быстро проверить базовый сценарий, а затем перейти к отдельным режимам использования и состояниям компонента. Отдельно разобраны контролируемые сценарии.`}),`
|
|
6
|
-
`,(0,b.jsx)(
|
|
7
|
-
`,(0,b.jsx)(
|
|
8
|
-
`,(0,b.jsx)(
|
|
9
|
-
`,(0,b.jsx)(
|
|
6
|
+
`,(0,b.jsx)(t.h2,{id:`основной-сценарий`,children:`Основной сценарий`}),`
|
|
7
|
+
`,(0,b.jsx)(d,{}),`
|
|
8
|
+
`,(0,b.jsx)(r,{of:p}),`
|
|
9
|
+
`,(0,b.jsx)(t.pre,{children:(0,b.jsx)(t.code,{className:`language-tsx`,children:`import { useState } from "react";
|
|
10
10
|
|
|
11
11
|
import { InputFiles } from "@/shared/ui";
|
|
12
12
|
|
|
@@ -16,22 +16,22 @@ export function Example() {
|
|
|
16
16
|
return <InputFiles label="Вложения" value={value} onChange={setValue} />;
|
|
17
17
|
}
|
|
18
18
|
`})}),`
|
|
19
|
-
`,(0,b.jsx)(
|
|
20
|
-
`,(0,b.jsxs)(
|
|
21
|
-
`,(0,b.jsx)(
|
|
22
|
-
`,(0,b.jsx)(
|
|
19
|
+
`,(0,b.jsx)(t.h2,{id:`практические-рекомендации`,children:`Практические рекомендации`}),`
|
|
20
|
+
`,(0,b.jsxs)(t.ul,{children:[`
|
|
21
|
+
`,(0,b.jsx)(t.li,{children:`Если состояние должно жить во внешней форме или модели, ориентируйтесь на контролируемый режим из документации.`}),`
|
|
22
|
+
`,(0,b.jsx)(t.li,{children:`При редактировании сущностей проверьте сценарий инициализации компонента уже существующими данными.`}),`
|
|
23
23
|
`]}),`
|
|
24
|
-
`,(0,b.jsx)(
|
|
25
|
-
`,(0,b.jsx)(
|
|
26
|
-
`,(0,b.jsx)(
|
|
27
|
-
`,(0,b.jsx)(
|
|
28
|
-
`,(0,b.jsx)(
|
|
29
|
-
`,(0,b.jsx)(
|
|
30
|
-
`,(0,b.jsx)(
|
|
31
|
-
`,(0,b.jsx)(
|
|
32
|
-
`,(0,b.jsxs)(
|
|
33
|
-
`,(0,b.jsx)(
|
|
34
|
-
`,(0,b.jsx)(
|
|
35
|
-
`,(0,b.jsx)(
|
|
36
|
-
`,(0,b.jsx)(
|
|
37
|
-
`,(0,b.jsx)(
|
|
24
|
+
`,(0,b.jsx)(t.h2,{id:`сценарии-использования`,children:`Сценарии использования`}),`
|
|
25
|
+
`,(0,b.jsx)(t.h3,{id:`компонент-работает-в-контролируемом-режиме-когда-состояние-хранится-во-внешнем-компоненте`,children:`Компонент работает в контролируемом режиме, когда состояние хранится во внешнем компоненте`}),`
|
|
26
|
+
`,(0,b.jsx)(t.p,{children:`Компонент работает в контролируемом режиме, когда состояние хранится во внешнем компоненте.`}),`
|
|
27
|
+
`,(0,b.jsx)(u,{of:p}),`
|
|
28
|
+
`,(0,b.jsx)(t.h3,{id:`инициализация-заранее-выбранными-файлами`,children:`Инициализация заранее выбранными файлами`}),`
|
|
29
|
+
`,(0,b.jsx)(t.p,{children:`Инициализация заранее выбранными файлами.`}),`
|
|
30
|
+
`,(0,b.jsx)(u,{of:h}),`
|
|
31
|
+
`,(0,b.jsx)(t.h3,{id:`limit-reached`,children:`Limit Reached`}),`
|
|
32
|
+
`,(0,b.jsxs)(t.p,{children:[`Сценарий демонстрирует вариант `,(0,b.jsx)(t.code,{children:`LimitReached`}),` и помогает быстро сравнить его с остальными режимами компонента.`]}),`
|
|
33
|
+
`,(0,b.jsx)(u,{of:m}),`
|
|
34
|
+
`,(0,b.jsx)(t.h2,{id:`api`,children:`API`}),`
|
|
35
|
+
`,(0,b.jsx)(c,{of:_}),`
|
|
36
|
+
`,(0,b.jsx)(t.h2,{id:`все-сторисы`,children:`Все сторисы`}),`
|
|
37
|
+
`,(0,b.jsx)(i,{includePrimary:!1})]})}function y(e={}){let{wrapper:t}={...n(),...e.components};return t?(0,b.jsx)(t,{...e,children:(0,b.jsx)(v,{...e})}):v(e)}var b;e((()=>{b=t(),f(),s(),g()}))();export{y as default};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import{a as e,c as t,i as n}from"./preload-helper-B45gAKPr.js";import{pn as r,t as i}from"./iframe-GmIo3IOR.js";import{n as a,t as o}from"./InputFiles-CPY6AJQJ.js";var s=e({Controlled:()=>f,LimitReached:()=>m,WithInitialFiles:()=>p,__namedExportsOrder:()=>h,default:()=>d}),c,l,u,d,f,p,m,h,g=n((()=>{c=t(r(),1),a(),l=i(),u=(e,t=`application/pdf`)=>{let n=new File([`demo-file`],e,{type:t,lastModified:17040672e5});return{mode:`data-url`,meta:{name:n.name,mime:n.type,size:n.size,lastModified:n.lastModified},dataUrl:`data:${t};base64,ZGVtby1maWxl`,file:n}},d={title:`Shared/UI/InputFiles`,component:o,args:{value:[],onChange:()=>{}},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{label:{description:`Заголовок поля множественной загрузки.`,control:`text`},description:{description:`Описание под заголовком.`,control:`text`},placeholder:{description:`Текст в поле, пока список файлов пуст.`,control:`text`},value:{description:`Массив результатов чтения выбранных файлов.`,control:!1},onChange:{description:`Вызывается с новым массивом файлов после добавления/удаления.`,control:!1},onReadError:{description:`Вызывается при ошибке чтения отдельного файла.`,control:!1},accept:{description:"HTML `accept` для диалога выбора файлов.",control:`text`},allowedMime:{description:`Список допустимых MIME-типов при валидации.`,control:!1},maxBytes:{description:`Максимальный размер одного файла в байтах.`,control:`number`},readMode:{description:`Режим чтения: data-url или array-buffer.`,control:`inline-radio`,options:[`data-url`,`array-buffer`]},maxFiles:{description:`Лимит количества файлов в списке.`,control:`number`},error:{description:`Текст ошибки под полем.`,control:`text`},onClearError:{description:`Вызывается при выборе новых файлов для сброса ошибки.`,control:!1},disabled:{description:`Полностью блокирует выбор файлов.`,control:`boolean`},size:{description:`Размер визуального контрола.`,control:`select`,options:[`xs`,`sm`,`md`,`lg`,`xl`]}}},f={render:e=>{let[t,n]=(0,c.useState)([]);return(0,l.jsx)(o,{...e,readMode:`data-url`,value:t,onChange:n})},args:{label:`Вложения`,description:`Можно выбрать несколько файлов.`,placeholder:`Выберите файлы`,accept:[`.pdf`,`.png`,`.jpg`],maxFiles:5,value:[]}},p={render:e=>{let[t,n]=(0,c.useState)([u(`contract.pdf`),u(`diagram.png`,`image/png`)]);return(0,l.jsx)(o,{...e,readMode:`data-url`,value:t,onChange:n})},args:{label:`Предзаполненный список`,description:`Иллюстрация удаления файлов из уже заполненного значения.`}},m={render:e=>{let[t,n]=(0,c.useState)([u(`first.pdf`),u(`second.pdf`)]);return(0,l.jsx)(o,{...e,readMode:`data-url`,value:t,onChange:n})},args:{label:`Лимит файлов`,description:`После достижения лимита поле выбора блокируется.`,maxFiles:2}},f.parameters={...f.parameters,docs:{...f.parameters?.docs,source:{originalSource:`{
|
|
2
|
+
render: args => {
|
|
3
|
+
const [value, setValue] = useState<ReadFileAsDataUrlResult[]>([]);
|
|
4
|
+
return <InputFiles {...args} readMode="data-url" value={value} onChange={setValue} />;
|
|
5
|
+
},
|
|
6
|
+
args: {
|
|
7
|
+
label: "Вложения",
|
|
8
|
+
description: "Можно выбрать несколько файлов.",
|
|
9
|
+
placeholder: "Выберите файлы",
|
|
10
|
+
accept: [".pdf", ".png", ".jpg"],
|
|
11
|
+
maxFiles: 5,
|
|
12
|
+
value: []
|
|
13
|
+
}
|
|
14
|
+
}`,...f.parameters?.docs?.source}}},p.parameters={...p.parameters,docs:{...p.parameters?.docs,source:{originalSource:`{
|
|
15
|
+
render: args => {
|
|
16
|
+
const [value, setValue] = useState<ReadFileAsDataUrlResult[]>([createMockReadFileResult("contract.pdf"), createMockReadFileResult("diagram.png", "image/png")]);
|
|
17
|
+
return <InputFiles {...args} readMode="data-url" value={value} onChange={setValue} />;
|
|
18
|
+
},
|
|
19
|
+
args: {
|
|
20
|
+
label: "Предзаполненный список",
|
|
21
|
+
description: "Иллюстрация удаления файлов из уже заполненного значения."
|
|
22
|
+
}
|
|
23
|
+
}`,...p.parameters?.docs?.source}}},m.parameters={...m.parameters,docs:{...m.parameters?.docs,source:{originalSource:`{
|
|
24
|
+
render: args => {
|
|
25
|
+
const [value, setValue] = useState<ReadFileAsDataUrlResult[]>([createMockReadFileResult("first.pdf"), createMockReadFileResult("second.pdf")]);
|
|
26
|
+
return <InputFiles {...args} readMode="data-url" value={value} onChange={setValue} />;
|
|
27
|
+
},
|
|
28
|
+
args: {
|
|
29
|
+
label: "Лимит файлов",
|
|
30
|
+
description: "После достижения лимита поле выбора блокируется.",
|
|
31
|
+
maxFiles: 2
|
|
32
|
+
}
|
|
33
|
+
}`,...m.parameters?.docs?.source}}},h=[`Controlled`,`WithInitialFiles`,`LimitReached`]}));g();export{f as Controlled,m as LimitReached,p as WithInitialFiles,h as __namedExportsOrder,d as default,g as n,s as t};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import{i as e}from"./preload-helper-B45gAKPr.js";import{E as
|
|
2
|
-
`,(0,b.jsx)(
|
|
3
|
-
`,(0,b.jsx)(
|
|
4
|
-
`,(0,b.jsx)(
|
|
1
|
+
import{i as e}from"./preload-helper-B45gAKPr.js";import{t}from"./iframe-GmIo3IOR.js";import{E as n,a as r,d as i,f as a,l as o,m as s,n as c,p as l,r as u,u as d}from"./blocks-0RiOsxIK.js";import{t as f}from"./mdx-react-shim-DQ40dZsI.js";import{ArrayBufferMode as p,Controlled as m,WithInitialImage as h,n as g,t as _}from"./InputImage.stories-CFHzEXGv.js";function v(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(o,{of:_,parameters:{docs:{toc:!0}}}),`
|
|
2
|
+
`,(0,b.jsx)(l,{children:`InputImage`}),`
|
|
3
|
+
`,(0,b.jsx)(a,{children:`Контрол загрузки и предварительного просмотра изображения в формах и карточках`}),`
|
|
4
|
+
`,(0,b.jsx)(t.p,{children:`InputImage уже имеет живые stories, а эта страница собирает их в структурированную документацию с краткими рекомендациями, примерами подключения и API.
|
|
5
5
|
Ниже можно быстро проверить базовый сценарий, а затем перейти к отдельным режимам использования и состояниям компонента. Отдельно разобраны контролируемые сценарии.`}),`
|
|
6
|
-
`,(0,b.jsx)(
|
|
7
|
-
`,(0,b.jsx)(
|
|
8
|
-
`,(0,b.jsx)(
|
|
9
|
-
`,(0,b.jsx)(
|
|
6
|
+
`,(0,b.jsx)(t.h2,{id:`основной-сценарий`,children:`Основной сценарий`}),`
|
|
7
|
+
`,(0,b.jsx)(d,{}),`
|
|
8
|
+
`,(0,b.jsx)(r,{of:m}),`
|
|
9
|
+
`,(0,b.jsx)(t.pre,{children:(0,b.jsx)(t.code,{className:`language-tsx`,children:`import { useState } from "react";
|
|
10
10
|
|
|
11
11
|
import { InputImage } from "@/shared/ui";
|
|
12
12
|
|
|
@@ -16,22 +16,22 @@ export function Example() {
|
|
|
16
16
|
return <InputImage label="Изображение" value={value} onChange={setValue} />;
|
|
17
17
|
}
|
|
18
18
|
`})}),`
|
|
19
|
-
`,(0,b.jsx)(
|
|
20
|
-
`,(0,b.jsxs)(
|
|
21
|
-
`,(0,b.jsx)(
|
|
22
|
-
`,(0,b.jsx)(
|
|
19
|
+
`,(0,b.jsx)(t.h2,{id:`практические-рекомендации`,children:`Практические рекомендации`}),`
|
|
20
|
+
`,(0,b.jsxs)(t.ul,{children:[`
|
|
21
|
+
`,(0,b.jsx)(t.li,{children:`Если состояние должно жить во внешней форме или модели, ориентируйтесь на контролируемый режим из документации.`}),`
|
|
22
|
+
`,(0,b.jsx)(t.li,{children:`При редактировании сущностей проверьте сценарий инициализации компонента уже существующими данными.`}),`
|
|
23
23
|
`]}),`
|
|
24
|
-
`,(0,b.jsx)(
|
|
25
|
-
`,(0,b.jsx)(
|
|
26
|
-
`,(0,b.jsx)(
|
|
27
|
-
`,(0,b.jsx)(
|
|
28
|
-
`,(0,b.jsx)(
|
|
29
|
-
`,(0,b.jsx)(
|
|
30
|
-
`,(0,b.jsx)(
|
|
31
|
-
`,(0,b.jsx)(
|
|
32
|
-
`,(0,b.jsx)(
|
|
33
|
-
`,(0,b.jsx)(
|
|
34
|
-
`,(0,b.jsx)(
|
|
35
|
-
`,(0,b.jsx)(
|
|
36
|
-
`,(0,b.jsx)(
|
|
37
|
-
`,(0,b.jsx)(
|
|
24
|
+
`,(0,b.jsx)(t.h2,{id:`сценарии-использования`,children:`Сценарии использования`}),`
|
|
25
|
+
`,(0,b.jsx)(t.h3,{id:`компонент-работает-в-контролируемом-режиме-когда-состояние-хранится-во-внешнем-компоненте`,children:`Компонент работает в контролируемом режиме, когда состояние хранится во внешнем компоненте`}),`
|
|
26
|
+
`,(0,b.jsx)(t.p,{children:`Компонент работает в контролируемом режиме, когда состояние хранится во внешнем компоненте.`}),`
|
|
27
|
+
`,(0,b.jsx)(u,{of:m}),`
|
|
28
|
+
`,(0,b.jsx)(t.h3,{id:`инициализация-заранее-загруженным-изображением`,children:`Инициализация заранее загруженным изображением`}),`
|
|
29
|
+
`,(0,b.jsx)(t.p,{children:`Инициализация заранее загруженным изображением.`}),`
|
|
30
|
+
`,(0,b.jsx)(u,{of:h}),`
|
|
31
|
+
`,(0,b.jsx)(t.h3,{id:`сценарий-работы-с-бинарными-данными`,children:`Сценарий работы с бинарными данными`}),`
|
|
32
|
+
`,(0,b.jsx)(t.p,{children:`Сценарий работы с бинарными данными.`}),`
|
|
33
|
+
`,(0,b.jsx)(u,{of:p}),`
|
|
34
|
+
`,(0,b.jsx)(t.h2,{id:`api`,children:`API`}),`
|
|
35
|
+
`,(0,b.jsx)(c,{of:_}),`
|
|
36
|
+
`,(0,b.jsx)(t.h2,{id:`все-сторисы`,children:`Все сторисы`}),`
|
|
37
|
+
`,(0,b.jsx)(i,{includePrimary:!1})]})}function y(e={}){let{wrapper:t}={...n(),...e.components};return t?(0,b.jsx)(t,{...e,children:(0,b.jsx)(v,{...e})}):v(e)}var b;e((()=>{b=t(),f(),s(),g()}))();export{y as default};
|
package/storybook-static/assets/{InputImage.stories-BD6OuYSL.js → InputImage.stories-CFHzEXGv.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as e,c as t,i as n}from"./preload-helper-B45gAKPr.js";import{
|
|
1
|
+
import{a as e,c as t,i as n}from"./preload-helper-B45gAKPr.js";import{pn as r,t as i}from"./iframe-GmIo3IOR.js";import{a,i as o,n as s}from"./utils-B73_kE2n.js";import{n as c,t as l}from"./ui.module-wFHXkJzp.js";import{n as u,o as d,r as f,u as p}from"./Input-CjJUuLEX.js";import{t as m}from"./input-BZoBzauA.js";import{i as h,n as g,t as _}from"./file-hArYcyES.js";var v,y,b,x,S=n((()=>{v=`EV-Vji`,y=`A5-T93`,b=`V1Rhiv`,x={control:v,fileName:y,hiddenInput:b}}));function C({value:e,onChange:t,onClear:n,onReadError:r,allowedMime:i,maxBytes:o,readMode:l,label:m,description:h,placeholder:v=`Выберите изображение`,disabled:y,size:b,error:S,onClearError:C,className:E}){let D=(0,w.useRef)(null),{controlId:O,labelId:k,descriptionId:A,errorId:j,describedBy:M}=p({hasLabel:m!=null,hasDescription:!!h,hasError:!!S}),N=(0,w.useCallback)(e=>l===`array-buffer`?_(e,{allowedMime:i,maxBytes:o,mode:`array-buffer`}):_(e,{allowedMime:i,maxBytes:o}),[i,o,l]),P=(0,w.useMemo)(()=>i&&i.length>0?i.join(`,`):`image/*`,[i]),F=(0,w.useCallback)(async e=>{let n=e.target.files?.[0];if(n){e.target.value=``,S&&C&&C();try{t(await N(n))}catch(e){e instanceof g&&r&&r(e)}}},[N,t,r,S,C]),I=(0,w.useCallback)(()=>{D.current?.click()},[]);return(0,T.jsxs)(d,{label:m,description:h,disabled:y,className:E,size:b,error:S,controlId:O,labelId:k,descriptionId:A,errorId:j,children:[(0,T.jsx)(`input`,{ref:D,id:O,type:`file`,accept:P,disabled:y,className:x.hiddenInput,onChange:F,tabIndex:-1}),(0,T.jsx)(f,{endAdornment:n?(0,T.jsx)(u,{onClick:n,disabled:y}):void 0,endAdornmentWidth:n?`var(--control-height)`:void 0,children:({controlClassName:t})=>(0,T.jsx)(`div`,{role:`button`,tabIndex:y?-1:0,onClick:I,onKeyDown:e=>s(e,I,{disabled:y}),className:a(c.uiInputControl,x.control,t,!!S&&`invalid`),"data-disabled":y||void 0,"aria-invalid":!!S||void 0,"aria-disabled":y,"aria-labelledby":k,"aria-describedby":M,children:e?(0,T.jsx)(`span`,{className:x.fileName,children:e.meta.name}):(0,T.jsx)(`span`,{className:c.uiPlaceholder,children:v})})})]})}var w,T,E=n((()=>{w=t(r(),1),h(),o(),m(),l(),S(),T=i(),C.__docgenInfo={description:`InputImage — компонент выбора одного изображения.
|
|
2
2
|
|
|
3
3
|
Визуально идентичен InputText. Под капотом использует readImageFile,
|
|
4
4
|
который валидирует что файл — изображение и извлекает его размеры.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import{i as e}from"./preload-helper-B45gAKPr.js";import{t}from"./iframe-GmIo3IOR.js";import{E as n,a as r,d as i,f as a,l as o,m as s,n as c,p as l,r as u,u as d}from"./blocks-0RiOsxIK.js";import{t as f}from"./mdx-react-shim-DQ40dZsI.js";import{Controlled as p,CustomPresets as m,Disabled as h,DisabledPresets as g,InToolbar as _,Placeholder as v,n as y,t as b}from"./LayoutPicker.stories-C9sMcU1k.js";function x(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(o,{of:b,parameters:{docs:{toc:!0}}}),`
|
|
2
|
+
`,(0,C.jsx)(l,{children:`LayoutPicker`}),`
|
|
3
|
+
`,(0,C.jsx)(a,{children:`Контролируемый выбор layout-пресета со схематичным превью`}),`
|
|
4
|
+
`,(0,C.jsxs)(t.p,{children:[(0,C.jsx)(t.code,{children:`LayoutPicker`}),` нужен для выбора схемы размещения независимых областей: графиков, панелей, секций дашборда или другого UI, где сама раскладка хранится во внешней модели.
|
|
5
|
+
Компонент не знает, что будет внутри ячеек: он показывает только превью, принимает текущий `,(0,C.jsx)(t.code,{children:`value`}),` как ID пресета и возвращает выбранный ID через `,(0,C.jsx)(t.code,{children:`onChange`}),`.
|
|
6
|
+
По умолчанию trigger отображает только иконку текущей раскладки. Чтобы добавить рядом поясняющий текст, передайте `,(0,C.jsx)(t.code,{children:`showPlaceholder`}),`: компонент покажет именно строку из `,(0,C.jsx)(t.code,{children:`placeholder`}),`, не заменяя её названием выбранного пресета.`]}),`
|
|
7
|
+
`,(0,C.jsx)(t.h2,{id:`основной-сценарий`,children:`Основной сценарий`}),`
|
|
8
|
+
`,(0,C.jsx)(d,{}),`
|
|
9
|
+
`,(0,C.jsx)(r,{of:p}),`
|
|
10
|
+
`,(0,C.jsx)(t.pre,{children:(0,C.jsx)(t.code,{className:`language-tsx`,children:`import { useState } from "react";
|
|
11
|
+
|
|
12
|
+
import { LayoutPicker } from "@/shared/ui";
|
|
13
|
+
|
|
14
|
+
export function Example() {
|
|
15
|
+
const [layoutId, setLayoutId] = useState("two-columns");
|
|
16
|
+
|
|
17
|
+
return <LayoutPicker label="Layout панели" value={layoutId} onChange={setLayoutId} />;
|
|
18
|
+
}
|
|
19
|
+
`})}),`
|
|
20
|
+
`,(0,C.jsx)(t.h2,{id:`контракт-пресета`,children:`Контракт пресета`}),`
|
|
21
|
+
`,(0,C.jsxs)(t.p,{children:[`Пресет описывает размер сетки и расположение ячеек внутри CSS Grid. `,(0,C.jsx)(t.code,{children:`LayoutPicker`}),` использует эти данные только для превью и не применяет раскладку к пользовательскому контенту. Публичный `,(0,C.jsx)(t.code,{children:`onChange`}),` остаётся совместимым с `,(0,C.jsx)(t.code,{children:`UiBaseProps<string>`}),` и отдаёт только `,(0,C.jsx)(t.code,{children:`preset.id`}),`.`]}),`
|
|
22
|
+
`,(0,C.jsx)(t.pre,{children:(0,C.jsx)(t.code,{className:`language-tsx`,children:`import { type LayoutPickerPreset } from "@/shared/ui";
|
|
23
|
+
|
|
24
|
+
const dashboardPreset: LayoutPickerPreset = {
|
|
25
|
+
id: "dashboard-main-aside",
|
|
26
|
+
label: "Основной блок + сайдбар",
|
|
27
|
+
description: "Большая рабочая область слева и вертикальная колонка справа.",
|
|
28
|
+
columns: 3,
|
|
29
|
+
rows: 2,
|
|
30
|
+
cells: [
|
|
31
|
+
{ id: "main", column: 1, columnSpan: 2, row: 1, rowSpan: 2 },
|
|
32
|
+
{ id: "aside-top", column: 3, columnSpan: 1, row: 1, rowSpan: 1 },
|
|
33
|
+
{ id: "aside-bottom", column: 3, columnSpan: 1, row: 2, rowSpan: 1 }
|
|
34
|
+
]
|
|
35
|
+
};
|
|
36
|
+
`})}),`
|
|
37
|
+
`,(0,C.jsx)(t.h2,{id:`практические-рекомендации`,children:`Практические рекомендации`}),`
|
|
38
|
+
`,(0,C.jsxs)(t.ul,{children:[`
|
|
39
|
+
`,(0,C.jsxs)(t.li,{children:[`Храните во внешней модели только `,(0,C.jsx)(t.code,{children:`preset.id`}),`, а полный пресет берите из стабильного списка `,(0,C.jsx)(t.code,{children:`presets`}),`.`]}),`
|
|
40
|
+
`,(0,C.jsxs)(t.li,{children:[`Передавайте `,(0,C.jsx)(t.code,{children:`ariaLabel`}),`, когда рядом нет видимой подписи поля.`]}),`
|
|
41
|
+
`,(0,C.jsxs)(t.li,{children:[`Используйте `,(0,C.jsx)(t.code,{children:`getPresetDisabled`}),`, если отдельные схемы временно недоступны из-за лимитов, прав или текущего режима.`]}),`
|
|
42
|
+
`,(0,C.jsxs)(t.li,{children:[`Не помещайте бизнес-данные ячеек в `,(0,C.jsx)(t.code,{children:`shared/ui`}),`: назначение содержимого должно оставаться в вызывающем слое.`]}),`
|
|
43
|
+
`]}),`
|
|
44
|
+
`,(0,C.jsx)(t.h2,{id:`сценарии-использования`,children:`Сценарии использования`}),`
|
|
45
|
+
`,(0,C.jsxs)(t.h3,{id:`контролируемый-выбор-синхронизирует-value-с-storybook-args`,children:[`Контролируемый выбор синхронизирует `,(0,C.jsx)(t.code,{children:`value`}),` с Storybook args`]}),`
|
|
46
|
+
`,(0,C.jsxs)(t.p,{children:[`Главный story обновляет `,(0,C.jsx)(t.code,{children:`value`}),` через `,(0,C.jsx)(t.code,{children:`useArgs`}),`, поэтому Controls отражают выбранный layout.`]}),`
|
|
47
|
+
`,(0,C.jsx)(u,{of:p}),`
|
|
48
|
+
`,(0,C.jsx)(t.h3,{id:`состояние-без-выбранного-значения`,children:`Состояние без выбранного значения`}),`
|
|
49
|
+
`,(0,C.jsxs)(t.p,{children:[`Story явно включает `,(0,C.jsx)(t.code,{children:`showPlaceholder`}),`, поэтому trigger показывает переданный текст `,(0,C.jsx)(t.code,{children:`placeholder`}),` рядом с иконкой. Без этого пропса trigger остаётся icon-only независимо от наличия выбранного пресета.`]}),`
|
|
50
|
+
`,(0,C.jsx)(u,{of:v}),`
|
|
51
|
+
`,(0,C.jsx)(t.h3,{id:`кастомный-набор-пресетов`,children:`Кастомный набор пресетов`}),`
|
|
52
|
+
`,(0,C.jsxs)(t.p,{children:[`Компонент принимает произвольный список `,(0,C.jsx)(t.code,{children:`LayoutPickerPreset`}),`, пока каждая ячейка описана координатами grid.`]}),`
|
|
53
|
+
`,(0,C.jsx)(u,{of:m}),`
|
|
54
|
+
`,(0,C.jsx)(t.h3,{id:`заблокированные-пресеты`,children:`Заблокированные пресеты`}),`
|
|
55
|
+
`,(0,C.jsxs)(t.p,{children:[(0,C.jsx)(t.code,{children:`getPresetDisabled`}),` блокирует отдельные варианты, не отключая весь контрол.`]}),`
|
|
56
|
+
`,(0,C.jsx)(u,{of:g}),`
|
|
57
|
+
`,(0,C.jsx)(t.h3,{id:`пример-в-панели-настройки`,children:`Пример в панели настройки`}),`
|
|
58
|
+
`,(0,C.jsx)(t.p,{children:`Сценарий показывает типичную связку: выбор layout, сводку текущего пресета и превью областей, которые уже рендерит вызывающий слой.`}),`
|
|
59
|
+
`,(0,C.jsx)(u,{of:_}),`
|
|
60
|
+
`,(0,C.jsx)(t.h3,{id:`заблокированный-контрол`,children:`Заблокированный контрол`}),`
|
|
61
|
+
`,(0,C.jsxs)(t.p,{children:[`Полное `,(0,C.jsx)(t.code,{children:`disabled`}),`-состояние блокирует trigger и открытие popup.`]}),`
|
|
62
|
+
`,(0,C.jsx)(u,{of:h}),`
|
|
63
|
+
`,(0,C.jsx)(t.h2,{id:`api`,children:`API`}),`
|
|
64
|
+
`,(0,C.jsx)(c,{of:b}),`
|
|
65
|
+
`,(0,C.jsx)(t.h2,{id:`все-сторисы`,children:`Все сторисы`}),`
|
|
66
|
+
`,(0,C.jsx)(i,{includePrimary:!1})]})}function S(e={}){let{wrapper:t}={...n(),...e.components};return t?(0,C.jsx)(t,{...e,children:(0,C.jsx)(x,{...e})}):x(e)}var C;e((()=>{C=t(),f(),s(),y()}))();export{S as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as e,c as t,i as n}from"./preload-helper-B45gAKPr.js";import{C as r}from"./iframe-B1Ua6ocI.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{a,i as o}from"./utils-DKOsD-4R.js";import{t as s,wt as ee}from"./lucide-react-DiTL2FZl.js";import{n as c,t as l}from"./ui.module-wFHXkJzp.js";import{D as te,S as ne,g as re,l as ie,m as ae,r as oe,t as u}from"./picker-DhufeWWq.js";function se(e,t){return{gridTemplateColumns:`repeat(${e.columns}, minmax(0, 1fr))`,gridTemplateRows:`repeat(${e.rows}, minmax(${t??0}em, 1fr))`}}function ce(e){return{gridColumn:`${e.column} / span ${e.columnSpan??1}`,gridRow:`${e.row} / span ${e.rowSpan??1}`}}var le=n((()=>{})),d,ue=n((()=>{d=[{id:`1x1`,label:`1x1`,columns:1,rows:1,cells:[{id:`c11`,row:1,column:1}]},{id:`1x2`,label:`1x2`,columns:2,rows:1,cells:[{id:`c11`,row:1,column:1},{id:`c12`,row:1,column:2}]},{id:`1x3`,label:`1x3`,columns:3,rows:1,cells:[{id:`c11`,row:1,column:1},{id:`c12`,row:1,column:2},{id:`c13`,row:1,column:3}]},{id:`2x1`,label:`2x1`,columns:1,rows:2,cells:[{id:`c11`,row:1,column:1},{id:`c21`,row:2,column:1}]},{id:`2x2`,label:`2x2`,columns:2,rows:2,cells:[{id:`c11`,row:1,column:1},{id:`c12`,row:1,column:2},{id:`c21`,row:2,column:1},{id:`c22`,row:2,column:2}]},{id:`2x3`,label:`2x3`,columns:3,rows:2,cells:[{id:`c11`,row:1,column:1},{id:`c12`,row:1,column:2},{id:`c13`,row:1,column:3},{id:`c21`,row:2,column:1},{id:`c22`,row:2,column:2},{id:`c23`,row:2,column:3}]},{id:`3x1`,label:`3x1`,columns:1,rows:3,cells:[{id:`c11`,row:1,column:1},{id:`c21`,row:2,column:1},{id:`c31`,row:3,column:1}]},{id:`3x2`,label:`3x2`,columns:2,rows:3,cells:[{id:`c11`,row:1,column:1},{id:`c12`,row:1,column:2},{id:`c21`,row:2,column:1},{id:`c22`,row:2,column:2},{id:`c31`,row:3,column:1},{id:`c32`,row:3,column:2}]},{id:`3x3`,label:`3x3`,columns:3,rows:3,cells:[{id:`c11`,row:1,column:1},{id:`c12`,row:1,column:2},{id:`c13`,row:1,column:3},{id:`c21`,row:2,column:1},{id:`c22`,row:2,column:2},{id:`c23`,row:2,column:3},{id:`c31`,row:3,column:1},{id:`c32`,row:3,column:2},{id:`c33`,row:3,column:3}]},{id:`4x1`,label:`4x1`,columns:1,rows:4,cells:[{id:`c11`,row:1,column:1},{id:`c21`,row:2,column:1},{id:`c31`,row:3,column:1},{id:`c41`,row:4,column:1}]},{id:`4x2`,label:`4x2`,columns:2,rows:4,cells:[{id:`c11`,row:1,column:1},{id:`c12`,row:1,column:2},{id:`c21`,row:2,column:1},{id:`c22`,row:2,column:2},{id:`c31`,row:3,column:1},{id:`c32`,row:3,column:2},{id:`c41`,row:4,column:1},{id:`c42`,row:4,column:2}]},{id:`4x3`,label:`4x3`,columns:3,rows:4,cells:[{id:`c11`,row:1,column:1},{id:`c12`,row:1,column:2},{id:`c13`,row:1,column:3},{id:`c21`,row:2,column:1},{id:`c22`,row:2,column:2},{id:`c23`,row:2,column:3},{id:`c31`,row:3,column:1},{id:`c32`,row:3,column:2},{id:`c33`,row:3,column:3},{id:`c41`,row:4,column:1},{id:`c42`,row:4,column:2},{id:`c43`,row:4,column:3}]},{id:`2x2-l`,label:`Большая слева + две справа`,columns:2,rows:2,cells:[{id:`left`,row:1,column:1,rowSpan:2},{id:`rt`,row:1,column:2},{id:`rb`,row:2,column:2}]},{id:`2x2-r`,label:`Две слева + большая справа`,columns:2,rows:2,cells:[{id:`lt`,row:1,column:1},{id:`lb`,row:2,column:1},{id:`right`,row:1,column:2,rowSpan:2}]},{id:`2x2-t`,label:`Широкая сверху + две снизу`,columns:2,rows:2,cells:[{id:`top`,row:1,column:1,columnSpan:2},{id:`bl`,row:2,column:1},{id:`br`,row:2,column:2}]},{id:`2x2-b`,label:`Две сверху + широкая снизу`,columns:2,rows:2,cells:[{id:`tl`,row:1,column:1},{id:`tr`,row:1,column:2},{id:`bottom`,row:2,column:1,columnSpan:2}]},{id:`3x2-t`,label:`Широкая сверху + 2x2`,columns:2,rows:3,cells:[{id:`top`,row:1,column:1,columnSpan:2},{id:`c21`,row:2,column:1},{id:`c22`,row:2,column:2},{id:`c31`,row:3,column:1},{id:`c32`,row:3,column:2}]},{id:`3x2-b`,label:`2x2 + широкая снизу`,columns:2,rows:3,cells:[{id:`c11`,row:1,column:1},{id:`c12`,row:1,column:2},{id:`c21`,row:2,column:1},{id:`c22`,row:2,column:2},{id:`bottom`,row:3,column:1,columnSpan:2}]},{id:`3x2-m`,label:`Широкая по центру`,columns:2,rows:3,cells:[{id:`tl`,row:1,column:1},{id:`tr`,row:1,column:2},{id:`middle`,row:2,column:1,columnSpan:2},{id:`bl`,row:3,column:1},{id:`br`,row:3,column:2}]},{id:`3x3-l`,label:`Большая слева + 2x3 справа`,columns:3,rows:3,cells:[{id:`left`,row:1,column:1,rowSpan:3},{id:`c12`,row:1,column:2},{id:`c13`,row:1,column:3},{id:`c22`,row:2,column:2},{id:`c23`,row:2,column:3},{id:`c32`,row:3,column:2},{id:`c33`,row:3,column:3}]},{id:`3x3-r`,label:`2x3 слева + большая справа`,columns:3,rows:3,cells:[{id:`c11`,row:1,column:1},{id:`c12`,row:1,column:2},{id:`right`,row:1,column:3,rowSpan:3},{id:`c21`,row:2,column:1},{id:`c22`,row:2,column:2},{id:`c31`,row:3,column:1},{id:`c32`,row:3,column:2}]},{id:`3x3-t`,label:`Широкая сверху + 2x3`,columns:3,rows:3,cells:[{id:`top`,row:1,column:1,columnSpan:3},{id:`c21`,row:2,column:1},{id:`c22`,row:2,column:2},{id:`c23`,row:2,column:3},{id:`c31`,row:3,column:1},{id:`c32`,row:3,column:2},{id:`c33`,row:3,column:3}]},{id:`3x3-b`,label:`2x3 + широкая снизу`,columns:3,rows:3,cells:[{id:`c11`,row:1,column:1},{id:`c12`,row:1,column:2},{id:`c13`,row:1,column:3},{id:`c21`,row:2,column:1},{id:`c22`,row:2,column:2},{id:`c23`,row:2,column:3},{id:`bottom`,row:3,column:1,columnSpan:3}]},{id:`4x2-t`,label:`Широкая сверху + 3x2`,columns:2,rows:4,cells:[{id:`top`,row:1,column:1,columnSpan:2},{id:`c21`,row:2,column:1},{id:`c22`,row:2,column:2},{id:`c31`,row:3,column:1},{id:`c32`,row:3,column:2},{id:`c41`,row:4,column:1},{id:`c42`,row:4,column:2}]},{id:`4x2-b`,label:`3x2 + широкая снизу`,columns:2,rows:4,cells:[{id:`c11`,row:1,column:1},{id:`c12`,row:1,column:2},{id:`c21`,row:2,column:1},{id:`c22`,row:2,column:2},{id:`c31`,row:3,column:1},{id:`c32`,row:3,column:2},{id:`bottom`,row:4,column:1,columnSpan:2}]},{id:`4x3-t`,label:`Широкая сверху + 3x3`,columns:3,rows:4,cells:[{id:`top`,row:1,column:1,columnSpan:3},{id:`c21`,row:2,column:1},{id:`c22`,row:2,column:2},{id:`c23`,row:2,column:3},{id:`c31`,row:3,column:1},{id:`c32`,row:3,column:2},{id:`c33`,row:3,column:3},{id:`c41`,row:4,column:1},{id:`c42`,row:4,column:2},{id:`c43`,row:4,column:3}]},{id:`4x3-b`,label:`3x3 + широкая снизу`,columns:3,rows:4,cells:[{id:`c11`,row:1,column:1},{id:`c12`,row:1,column:2},{id:`c13`,row:1,column:3},{id:`c21`,row:2,column:1},{id:`c22`,row:2,column:2},{id:`c23`,row:2,column:3},{id:`c31`,row:3,column:1},{id:`c32`,row:3,column:2},{id:`c33`,row:3,column:3},{id:`bottom`,row:4,column:1,columnSpan:3}]}]})),f=n((()=>{le(),ue()})),p,m,h,g,_,v,y,b,x,S,C,w,T,E,D,O,k,A=n((()=>{p=`_959ulH`,m=`Ch-SZL`,h=`SmdPit`,g=`giOtGs`,_=`_57Tr0T`,v=`Tkhulr`,y=`VQlniu`,b=`wb39Kf`,x=`HGvQdT`,S=`rZuYyb`,C=`vNV6Q2`,w=`_3ytPPa`,T=`koxYU-`,E=`k8xLa2`,D=`_5pd3Bb`,O=`VrHnjN`,k={valueOverlay:p,triggerInput:m,triggerText:h,popup:g,popupLayout:_,popupBody:v,options:y,option:b,optionActive:x,optionSelected:S,optionPreviewWrap:C,optionCheck:w,preview:T,previewPlaceholder:E,previewCompact:D,previewCell:O}}));function de({preset:e,compact:t=!1}){return(0,N.jsx)(`span`,{className:a(k.preview,t&&k.previewCompact),style:se(e),"aria-hidden":`true`,"data-ui":`layout-picker-preview`,children:e.cells.map(t=>(0,N.jsx)(`span`,{className:k.previewCell,style:ce(t)},`${e.id}:${t.id}`))})}function j({id:e,label:t,description:n,value:r,onChange:i,presets:o=d,disabled:s,getPresetDisabled:l,placeholder:u=fe,showPlaceholder:se=!1,size:ce,ariaLabel:le,className:ue,triggerClassName:f,popupClassName:p,placement:m=`bottom-start`}){let h=(0,M.useRef)(null),[g,_]=(0,M.useState)(!1),v=o.findIndex(e=>e.id===r),y=v>=0?o[v]:void 0,b=y??o[0],x=y?.label??u,{activeIndex:S,context:C,floatingStyles:w,getFloatingProps:T,setReference:E,setFloating:D,setOptionRef:O,close:A,openList:j,toggleOpen:pe,selectOption:me,selectActiveOption:he,handleReferenceKeyDown:P,handleFloatingKeyDown:F,getOptionId:I,getActiveOptionId:L}=ie({options:o,selectedIndex:v,open:g,onOpenChange:_,getOptionDisabled:l,onSelect:e=>i(e.id),disabled:s,placement:m,triggerMode:`display`}),R=oe({mode:`display`,open:g,currentQuery:``,hasDisplayValue:y!==void 0,inputRef:h,openList:j,close:A,toggleOpen:pe}),z=e=>{h.current=e};return(0,N.jsx)(te,{id:e,label:t,description:n,disabled:s,placeholder:u,size:ce,className:ue,children:({controlId:e,labelId:t,describedBy:n})=>{let r=`${e}-listbox`;return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(ae,{ref:z,rootRef:E,id:e,type:`button`,disabled:s,readOnly:!0,autoComplete:`off`,role:`combobox`,value:x,"aria-haspopup":`listbox`,"aria-expanded":g,"aria-controls":g?r:void 0,"aria-labelledby":t,"aria-describedby":n,"aria-autocomplete":`none`,"aria-activedescendant":g?L(r):void 0,"aria-label":t?void 0:le??`Выбрать layout. Текущее значение: ${x}`,"data-ui":`layout-picker-trigger`,rootClassName:f,inputClassName:k.triggerInput,overlay:(0,N.jsxs)(`div`,{className:k.valueOverlay,children:[b?(0,N.jsx)(de,{preset:b,compact:!0}):(0,N.jsx)(`span`,{className:k.previewPlaceholder}),se?(0,N.jsx)(`span`,{className:a(k.triggerText,c.uiPlaceholder),"data-ui":`layout-picker-placeholder`,children:u}):null]}),endAdornment:(0,N.jsx)(re,{open:g,disabled:s,onToggleMouseDown:R.handleToggleMouseDown,onToggleClick:R.handleToggleClick,openAriaLabel:`Открыть список layout`,closeAriaLabel:`Закрыть список layout`}),onClick:R.handleTriggerClick,onFocus:e=>{R.handleTriggerFocus(e.currentTarget)},onKeyDown:e=>{P(e),!e.defaultPrevented&&R.handleTriggerKeyDown({event:e,onActivateWhenOpen:he,enableSpaceActivation:!0})}}),(0,N.jsx)(ne,{open:g,context:C,floatingStyles:w,listId:r,labelId:t,descriptionId:n,activeOptionId:L(r),setFloating:D,getFloatingProps:T,onKeyDown:F,className:a(c.uiPopupOptions,k.popup,p),layoutClassName:k.popupLayout,bodyClassName:k.popupBody,children:(0,N.jsx)(`div`,{className:k.options,children:o.map((e,t)=>{let n=t===v,i=t===S,o=l?.(e)??!1;return(0,N.jsxs)(`button`,{id:I(r,t),ref:e=>O(t,e),type:`button`,role:`option`,tabIndex:-1,disabled:o,"aria-selected":n,"aria-disabled":o||void 0,"aria-label":e.description?`${e.label}. ${e.description}`:e.label,className:a(k.option,n&&k.optionSelected,i&&k.optionActive),"data-ui":`layout-picker-option`,"data-selected":n||void 0,onMouseDown:e=>e.preventDefault(),onClick:()=>me(e),children:[(0,N.jsx)(`span`,{className:k.optionPreviewWrap,children:(0,N.jsx)(de,{preset:e})}),(0,N.jsxs)(`span`,{className:`fontSizeSm`,children:[(0,N.jsx)(`span`,{children:e.label}),e.description?(0,N.jsx)(`span`,{children:e.description}):null]}),(0,N.jsx)(`span`,{className:k.optionCheck,"aria-hidden":`true`,children:n?(0,N.jsx)(ee,{}):null})]},e.id)})})})]})}})}var M,N,fe,pe=n((()=>{M=t(r(),1),o(),s(),u(),l(),f(),A(),N=i(),fe=`Выберите раскладку`,j.__docgenInfo={description:`Контрол выбора layout-пресета. Не хранит бизнес-логику содержимого ячеек.`,methods:[],displayName:`LayoutPicker`,props:{label:{required:!1,tsType:{name:`ReactNode`},description:``},description:{required:!1,tsType:{name:`string`},description:``},placeholder:{required:!1,tsType:{name:`string`},description:``,defaultValue:{value:`"Выберите раскладку"`,computed:!1}},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:``},id:{required:!1,tsType:{name:`string`},description:``},presets:{required:!1,tsType:{name:`unknown`},description:``,defaultValue:{value:`[
|
|
1
|
+
import{a as e,c as t,i as n}from"./preload-helper-B45gAKPr.js";import{Tt as r,n as i,pn as a,t as o}from"./iframe-GmIo3IOR.js";import{a as s,i as c}from"./utils-B73_kE2n.js";import{n as ee,t as l}from"./ui.module-wFHXkJzp.js";import{D as te,S as ne,g as re,l as ie,m as ae,r as oe,t as u}from"./picker-Ly9fNo5I.js";function se(e,t){return{gridTemplateColumns:`repeat(${e.columns}, minmax(0, 1fr))`,gridTemplateRows:`repeat(${e.rows}, minmax(${t??0}em, 1fr))`}}function ce(e){return{gridColumn:`${e.column} / span ${e.columnSpan??1}`,gridRow:`${e.row} / span ${e.rowSpan??1}`}}var le=n((()=>{})),d,ue=n((()=>{d=[{id:`1x1`,label:`1x1`,columns:1,rows:1,cells:[{id:`c11`,row:1,column:1}]},{id:`1x2`,label:`1x2`,columns:2,rows:1,cells:[{id:`c11`,row:1,column:1},{id:`c12`,row:1,column:2}]},{id:`1x3`,label:`1x3`,columns:3,rows:1,cells:[{id:`c11`,row:1,column:1},{id:`c12`,row:1,column:2},{id:`c13`,row:1,column:3}]},{id:`2x1`,label:`2x1`,columns:1,rows:2,cells:[{id:`c11`,row:1,column:1},{id:`c21`,row:2,column:1}]},{id:`2x2`,label:`2x2`,columns:2,rows:2,cells:[{id:`c11`,row:1,column:1},{id:`c12`,row:1,column:2},{id:`c21`,row:2,column:1},{id:`c22`,row:2,column:2}]},{id:`2x3`,label:`2x3`,columns:3,rows:2,cells:[{id:`c11`,row:1,column:1},{id:`c12`,row:1,column:2},{id:`c13`,row:1,column:3},{id:`c21`,row:2,column:1},{id:`c22`,row:2,column:2},{id:`c23`,row:2,column:3}]},{id:`3x1`,label:`3x1`,columns:1,rows:3,cells:[{id:`c11`,row:1,column:1},{id:`c21`,row:2,column:1},{id:`c31`,row:3,column:1}]},{id:`3x2`,label:`3x2`,columns:2,rows:3,cells:[{id:`c11`,row:1,column:1},{id:`c12`,row:1,column:2},{id:`c21`,row:2,column:1},{id:`c22`,row:2,column:2},{id:`c31`,row:3,column:1},{id:`c32`,row:3,column:2}]},{id:`3x3`,label:`3x3`,columns:3,rows:3,cells:[{id:`c11`,row:1,column:1},{id:`c12`,row:1,column:2},{id:`c13`,row:1,column:3},{id:`c21`,row:2,column:1},{id:`c22`,row:2,column:2},{id:`c23`,row:2,column:3},{id:`c31`,row:3,column:1},{id:`c32`,row:3,column:2},{id:`c33`,row:3,column:3}]},{id:`4x1`,label:`4x1`,columns:1,rows:4,cells:[{id:`c11`,row:1,column:1},{id:`c21`,row:2,column:1},{id:`c31`,row:3,column:1},{id:`c41`,row:4,column:1}]},{id:`4x2`,label:`4x2`,columns:2,rows:4,cells:[{id:`c11`,row:1,column:1},{id:`c12`,row:1,column:2},{id:`c21`,row:2,column:1},{id:`c22`,row:2,column:2},{id:`c31`,row:3,column:1},{id:`c32`,row:3,column:2},{id:`c41`,row:4,column:1},{id:`c42`,row:4,column:2}]},{id:`4x3`,label:`4x3`,columns:3,rows:4,cells:[{id:`c11`,row:1,column:1},{id:`c12`,row:1,column:2},{id:`c13`,row:1,column:3},{id:`c21`,row:2,column:1},{id:`c22`,row:2,column:2},{id:`c23`,row:2,column:3},{id:`c31`,row:3,column:1},{id:`c32`,row:3,column:2},{id:`c33`,row:3,column:3},{id:`c41`,row:4,column:1},{id:`c42`,row:4,column:2},{id:`c43`,row:4,column:3}]},{id:`2x2-l`,label:`Большая слева + две справа`,columns:2,rows:2,cells:[{id:`left`,row:1,column:1,rowSpan:2},{id:`rt`,row:1,column:2},{id:`rb`,row:2,column:2}]},{id:`2x2-r`,label:`Две слева + большая справа`,columns:2,rows:2,cells:[{id:`lt`,row:1,column:1},{id:`lb`,row:2,column:1},{id:`right`,row:1,column:2,rowSpan:2}]},{id:`2x2-t`,label:`Широкая сверху + две снизу`,columns:2,rows:2,cells:[{id:`top`,row:1,column:1,columnSpan:2},{id:`bl`,row:2,column:1},{id:`br`,row:2,column:2}]},{id:`2x2-b`,label:`Две сверху + широкая снизу`,columns:2,rows:2,cells:[{id:`tl`,row:1,column:1},{id:`tr`,row:1,column:2},{id:`bottom`,row:2,column:1,columnSpan:2}]},{id:`3x2-t`,label:`Широкая сверху + 2x2`,columns:2,rows:3,cells:[{id:`top`,row:1,column:1,columnSpan:2},{id:`c21`,row:2,column:1},{id:`c22`,row:2,column:2},{id:`c31`,row:3,column:1},{id:`c32`,row:3,column:2}]},{id:`3x2-b`,label:`2x2 + широкая снизу`,columns:2,rows:3,cells:[{id:`c11`,row:1,column:1},{id:`c12`,row:1,column:2},{id:`c21`,row:2,column:1},{id:`c22`,row:2,column:2},{id:`bottom`,row:3,column:1,columnSpan:2}]},{id:`3x2-m`,label:`Широкая по центру`,columns:2,rows:3,cells:[{id:`tl`,row:1,column:1},{id:`tr`,row:1,column:2},{id:`middle`,row:2,column:1,columnSpan:2},{id:`bl`,row:3,column:1},{id:`br`,row:3,column:2}]},{id:`3x3-l`,label:`Большая слева + 2x3 справа`,columns:3,rows:3,cells:[{id:`left`,row:1,column:1,rowSpan:3},{id:`c12`,row:1,column:2},{id:`c13`,row:1,column:3},{id:`c22`,row:2,column:2},{id:`c23`,row:2,column:3},{id:`c32`,row:3,column:2},{id:`c33`,row:3,column:3}]},{id:`3x3-r`,label:`2x3 слева + большая справа`,columns:3,rows:3,cells:[{id:`c11`,row:1,column:1},{id:`c12`,row:1,column:2},{id:`right`,row:1,column:3,rowSpan:3},{id:`c21`,row:2,column:1},{id:`c22`,row:2,column:2},{id:`c31`,row:3,column:1},{id:`c32`,row:3,column:2}]},{id:`3x3-t`,label:`Широкая сверху + 2x3`,columns:3,rows:3,cells:[{id:`top`,row:1,column:1,columnSpan:3},{id:`c21`,row:2,column:1},{id:`c22`,row:2,column:2},{id:`c23`,row:2,column:3},{id:`c31`,row:3,column:1},{id:`c32`,row:3,column:2},{id:`c33`,row:3,column:3}]},{id:`3x3-b`,label:`2x3 + широкая снизу`,columns:3,rows:3,cells:[{id:`c11`,row:1,column:1},{id:`c12`,row:1,column:2},{id:`c13`,row:1,column:3},{id:`c21`,row:2,column:1},{id:`c22`,row:2,column:2},{id:`c23`,row:2,column:3},{id:`bottom`,row:3,column:1,columnSpan:3}]},{id:`4x2-t`,label:`Широкая сверху + 3x2`,columns:2,rows:4,cells:[{id:`top`,row:1,column:1,columnSpan:2},{id:`c21`,row:2,column:1},{id:`c22`,row:2,column:2},{id:`c31`,row:3,column:1},{id:`c32`,row:3,column:2},{id:`c41`,row:4,column:1},{id:`c42`,row:4,column:2}]},{id:`4x2-b`,label:`3x2 + широкая снизу`,columns:2,rows:4,cells:[{id:`c11`,row:1,column:1},{id:`c12`,row:1,column:2},{id:`c21`,row:2,column:1},{id:`c22`,row:2,column:2},{id:`c31`,row:3,column:1},{id:`c32`,row:3,column:2},{id:`bottom`,row:4,column:1,columnSpan:2}]},{id:`4x3-t`,label:`Широкая сверху + 3x3`,columns:3,rows:4,cells:[{id:`top`,row:1,column:1,columnSpan:3},{id:`c21`,row:2,column:1},{id:`c22`,row:2,column:2},{id:`c23`,row:2,column:3},{id:`c31`,row:3,column:1},{id:`c32`,row:3,column:2},{id:`c33`,row:3,column:3},{id:`c41`,row:4,column:1},{id:`c42`,row:4,column:2},{id:`c43`,row:4,column:3}]},{id:`4x3-b`,label:`3x3 + широкая снизу`,columns:3,rows:4,cells:[{id:`c11`,row:1,column:1},{id:`c12`,row:1,column:2},{id:`c13`,row:1,column:3},{id:`c21`,row:2,column:1},{id:`c22`,row:2,column:2},{id:`c23`,row:2,column:3},{id:`c31`,row:3,column:1},{id:`c32`,row:3,column:2},{id:`c33`,row:3,column:3},{id:`bottom`,row:4,column:1,columnSpan:3}]}]})),f=n((()=>{le(),ue()})),p,m,h,g,_,v,y,b,x,S,C,w,T,E,D,O,k,A=n((()=>{p=`_959ulH`,m=`Ch-SZL`,h=`SmdPit`,g=`giOtGs`,_=`_57Tr0T`,v=`Tkhulr`,y=`VQlniu`,b=`wb39Kf`,x=`HGvQdT`,S=`rZuYyb`,C=`vNV6Q2`,w=`_3ytPPa`,T=`koxYU-`,E=`k8xLa2`,D=`_5pd3Bb`,O=`VrHnjN`,k={valueOverlay:p,triggerInput:m,triggerText:h,popup:g,popupLayout:_,popupBody:v,options:y,option:b,optionActive:x,optionSelected:S,optionPreviewWrap:C,optionCheck:w,preview:T,previewPlaceholder:E,previewCompact:D,previewCell:O}}));function de({preset:e,compact:t=!1}){return(0,N.jsx)(`span`,{className:s(k.preview,t&&k.previewCompact),style:se(e),"aria-hidden":`true`,"data-ui":`layout-picker-preview`,children:e.cells.map(t=>(0,N.jsx)(`span`,{className:k.previewCell,style:ce(t)},`${e.id}:${t.id}`))})}function j({id:e,label:t,description:n,value:i,onChange:a,presets:o=d,disabled:c,getPresetDisabled:l,placeholder:u=fe,showPlaceholder:se=!1,size:ce,ariaLabel:le,className:ue,triggerClassName:f,popupClassName:p,placement:m=`bottom-start`}){let h=(0,M.useRef)(null),[g,_]=(0,M.useState)(!1),v=o.findIndex(e=>e.id===i),y=v>=0?o[v]:void 0,b=y??o[0],x=y?.label??u,{activeIndex:S,context:C,floatingStyles:w,getFloatingProps:T,setReference:E,setFloating:D,setOptionRef:O,close:A,openList:j,toggleOpen:pe,selectOption:me,selectActiveOption:P,handleReferenceKeyDown:F,handleFloatingKeyDown:I,getOptionId:L,getActiveOptionId:R}=ie({options:o,selectedIndex:v,open:g,onOpenChange:_,getOptionDisabled:l,onSelect:e=>a(e.id),disabled:c,placement:m,triggerMode:`display`}),z=oe({mode:`display`,open:g,currentQuery:``,hasDisplayValue:y!==void 0,inputRef:h,openList:j,close:A,toggleOpen:pe}),B=e=>{h.current=e};return(0,N.jsx)(te,{id:e,label:t,description:n,disabled:c,placeholder:u,size:ce,className:ue,children:({controlId:e,labelId:t,describedBy:n})=>{let i=`${e}-listbox`;return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(ae,{ref:B,rootRef:E,id:e,type:`button`,disabled:c,readOnly:!0,autoComplete:`off`,role:`combobox`,value:x,"aria-haspopup":`listbox`,"aria-expanded":g,"aria-controls":g?i:void 0,"aria-labelledby":t,"aria-describedby":n,"aria-autocomplete":`none`,"aria-activedescendant":g?R(i):void 0,"aria-label":t?void 0:le??`Выбрать layout. Текущее значение: ${x}`,"data-ui":`layout-picker-trigger`,rootClassName:f,inputClassName:k.triggerInput,overlay:(0,N.jsxs)(`div`,{className:k.valueOverlay,children:[b?(0,N.jsx)(de,{preset:b,compact:!0}):(0,N.jsx)(`span`,{className:k.previewPlaceholder}),se?(0,N.jsx)(`span`,{className:s(k.triggerText,ee.uiPlaceholder),"data-ui":`layout-picker-placeholder`,children:u}):null]}),endAdornment:(0,N.jsx)(re,{open:g,disabled:c,onToggleMouseDown:z.handleToggleMouseDown,onToggleClick:z.handleToggleClick,openAriaLabel:`Открыть список layout`,closeAriaLabel:`Закрыть список layout`}),onClick:z.handleTriggerClick,onFocus:e=>{z.handleTriggerFocus(e.currentTarget)},onKeyDown:e=>{F(e),!e.defaultPrevented&&z.handleTriggerKeyDown({event:e,onActivateWhenOpen:P,enableSpaceActivation:!0})}}),(0,N.jsx)(ne,{open:g,context:C,floatingStyles:w,listId:i,labelId:t,descriptionId:n,activeOptionId:R(i),setFloating:D,getFloatingProps:T,onKeyDown:I,className:s(ee.uiPopupOptions,k.popup,p),layoutClassName:k.popupLayout,bodyClassName:k.popupBody,children:(0,N.jsx)(`div`,{className:k.options,children:o.map((e,t)=>{let n=t===v,a=t===S,o=l?.(e)??!1;return(0,N.jsxs)(`button`,{id:L(i,t),ref:e=>O(t,e),type:`button`,role:`option`,tabIndex:-1,disabled:o,"aria-selected":n,"aria-disabled":o||void 0,"aria-label":e.description?`${e.label}. ${e.description}`:e.label,className:s(k.option,n&&k.optionSelected,a&&k.optionActive),"data-ui":`layout-picker-option`,"data-selected":n||void 0,onMouseDown:e=>e.preventDefault(),onClick:()=>me(e),children:[(0,N.jsx)(`span`,{className:k.optionPreviewWrap,children:(0,N.jsx)(de,{preset:e})}),(0,N.jsxs)(`span`,{className:`fontSizeSm`,children:[(0,N.jsx)(`span`,{children:e.label}),e.description?(0,N.jsx)(`span`,{children:e.description}):null]}),(0,N.jsx)(`span`,{className:k.optionCheck,"aria-hidden":`true`,children:n?(0,N.jsx)(r,{}):null})]},e.id)})})})]})}})}var M,N,fe,pe=n((()=>{M=t(a(),1),c(),i(),u(),l(),f(),A(),N=o(),fe=`Выберите раскладку`,j.__docgenInfo={description:`Контрол выбора layout-пресета. Не хранит бизнес-логику содержимого ячеек.`,methods:[],displayName:`LayoutPicker`,props:{label:{required:!1,tsType:{name:`ReactNode`},description:``},description:{required:!1,tsType:{name:`string`},description:``},placeholder:{required:!1,tsType:{name:`string`},description:``,defaultValue:{value:`"Выберите раскладку"`,computed:!1}},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:``},id:{required:!1,tsType:{name:`string`},description:``},presets:{required:!1,tsType:{name:`unknown`},description:``,defaultValue:{value:`[
|
|
2
2
|
{
|
|
3
3
|
id: "1x1",
|
|
4
4
|
label: "1x1",
|
|
@@ -373,7 +373,7 @@ import{a as e,c as t,i as n}from"./preload-helper-B45gAKPr.js";import{C as r}fro
|
|
|
373
373
|
columns: number;
|
|
374
374
|
rows: number;
|
|
375
375
|
cells: readonly LayoutPickerPresetCell[];
|
|
376
|
-
}`,signature:{properties:[{key:`id`,value:{name:`string`,required:!0}},{key:`label`,value:{name:`string`,required:!0}},{key:`description`,value:{name:`string`,required:!1}},{key:`columns`,value:{name:`number`,required:!0}},{key:`rows`,value:{name:`number`,required:!0}},{key:`cells`,value:{name:`unknown`,required:!0}}]}},name:`preset`}],return:{name:`boolean`}}},description:``},showPlaceholder:{required:!1,tsType:{name:`boolean`},description:"Показывает рядом с превью переданный текст `placeholder`.\nПо умолчанию текст скрыт, поэтому trigger отображает только иконку раскладки.",defaultValue:{value:`false`,computed:!1}},ariaLabel:{required:!1,tsType:{name:`string`},description:``},className:{required:!1,tsType:{name:`string`},description:``},triggerClassName:{required:!1,tsType:{name:`string`},description:``},popupClassName:{required:!1,tsType:{name:`string`},description:``},placement:{required:!1,tsType:{name:`Placement`},description:``,defaultValue:{value:`"bottom-start"`,computed:!1}}}}})),me=n((()=>{pe()})),
|
|
376
|
+
}`,signature:{properties:[{key:`id`,value:{name:`string`,required:!0}},{key:`label`,value:{name:`string`,required:!0}},{key:`description`,value:{name:`string`,required:!1}},{key:`columns`,value:{name:`number`,required:!0}},{key:`rows`,value:{name:`number`,required:!0}},{key:`cells`,value:{name:`unknown`,required:!0}}]}},name:`preset`}],return:{name:`boolean`}}},description:``},showPlaceholder:{required:!1,tsType:{name:`boolean`},description:"Показывает рядом с превью переданный текст `placeholder`.\nПо умолчанию текст скрыт, поэтому trigger отображает только иконку раскладки.",defaultValue:{value:`false`,computed:!1}},ariaLabel:{required:!1,tsType:{name:`string`},description:``},className:{required:!1,tsType:{name:`string`},description:``},triggerClassName:{required:!1,tsType:{name:`string`},description:``},popupClassName:{required:!1,tsType:{name:`string`},description:``},placement:{required:!1,tsType:{name:`Placement`},description:``,defaultValue:{value:`"bottom-start"`,computed:!1}}}}})),me=n((()=>{pe()})),P=n((()=>{f(),me()})),F,I,L,R,z,B,he,ge,_e,V,ve=n((()=>{F=`buT8ds`,I=`vDpJVR`,L=`-GMI1h`,R=`Xgkzn9`,z=`X--lo-`,B=`W5rEjx`,he=`BgilL7`,ge=`ALGrVl`,_e=`IrqK1d`,V={canvas:F,toolbar:I,summary:L,summaryItem:R,summaryValue:z,muted:B,layoutPreview:he,layoutCell:ge,layoutCellTitle:_e}})),ye=e({Controlled:()=>q,CustomPresets:()=>Y,Disabled:()=>Q,DisabledPresets:()=>X,InToolbar:()=>Z,Placeholder:()=>J,__namedExportsOrder:()=>$,default:()=>K});function be(e,t){return t.find(t=>t.id===e)}function H({value:e,presets:t}){let n=be(e,t);return(0,W.jsxs)(`div`,{className:V.summary,"aria-live":`polite`,children:[(0,W.jsxs)(`div`,{className:V.summaryItem,children:[(0,W.jsx)(`span`,{children:`ID`}),(0,W.jsx)(`span`,{className:V.summaryValue,children:e||`не выбрано`})]}),(0,W.jsxs)(`div`,{className:V.summaryItem,children:[(0,W.jsx)(`span`,{children:`Название`}),(0,W.jsx)(`span`,{className:V.summaryValue,children:n?.label??`Layout не выбран`})]}),(0,W.jsxs)(`div`,{className:V.summaryItem,children:[(0,W.jsx)(`span`,{children:`Сетка`}),(0,W.jsx)(`span`,{className:V.summaryValue,children:n?`${n.columns} x ${n.rows}`:`нет данных`})]}),(0,W.jsxs)(`div`,{className:V.summaryItem,children:[(0,W.jsx)(`span`,{children:`Ячеек`}),(0,W.jsx)(`span`,{className:V.summaryValue,children:n?.cells.length??0})]})]})}function xe({value:e,presets:t}){let n=be(e,t);if(!n)return null;let r=n.columns,i=n.rows,a=n.cells;return(0,W.jsx)(`div`,{className:V.layoutPreview,style:{gridTemplateColumns:`repeat(${r}, minmax(0, 1fr))`,gridTemplateRows:`repeat(${i}, minmax(0, 1fr))`},children:a.map((e,t)=>(0,W.jsxs)(`div`,{className:V.layoutCell,style:{gridColumn:`${e.column} / span ${e.columnSpan}`,gridRow:`${e.row} / span ${e.rowSpan}`},children:[(0,W.jsxs)(`span`,{className:V.layoutCellTitle,children:[`Область `,t+1]}),(0,W.jsxs)(`span`,{className:V.muted,children:[`Колонка `,e.column,`, строка `,e.row,`; span `,e.columnSpan,` x `,e.rowSpan]})]},e.id))})}function Se(){let[e,t]=(0,U.useState)(`1x2`);return(0,W.jsxs)(`div`,{className:V.canvas,children:[(0,W.jsx)(`div`,{className:V.toolbar,children:(0,W.jsx)(j,{label:`Layout панели`,value:e,onChange:t,ariaLabel:`Выбрать layout панели`})}),(0,W.jsx)(H,{value:e,presets:d}),(0,W.jsx)(xe,{value:e,presets:d})]})}var U,W,Ce,we,G,K,q,J,Y,X,Z,Q,$,Te=n((()=>{U=t(a(),1),P(),ve(),W=o(),{useArgs:Ce}=__STORYBOOK_MODULE_PREVIEW_API__,{fn:we}=__STORYBOOK_MODULE_TEST__,G=[{id:`dashboard-summary`,label:`Сводка + детали`,description:`Один широкий блок сверху и две области детализации снизу.`,columns:2,rows:2,cells:[{id:`summary`,column:1,columnSpan:2,row:1,rowSpan:1},{id:`left-detail`,column:1,columnSpan:1,row:2,rowSpan:1},{id:`right-detail`,column:2,columnSpan:1,row:2,rowSpan:1}]},{id:`dashboard-main-aside`,label:`Основной блок + сайдбар`,description:`Большая рабочая область слева и вертикальная колонка справа.`,columns:3,rows:2,cells:[{id:`main`,column:1,columnSpan:2,row:1,rowSpan:2},{id:`aside-top`,column:3,columnSpan:1,row:1,rowSpan:1},{id:`aside-bottom`,column:3,columnSpan:1,row:2,rowSpan:1}]},{id:`dashboard-quad`,label:`Четыре равных блока`,description:`Плотная сетка для сравнения нескольких независимых виджетов.`,columns:2,rows:2,cells:[{id:`top-left`,column:1,columnSpan:1,row:1,rowSpan:1},{id:`top-right`,column:2,columnSpan:1,row:1,rowSpan:1},{id:`bottom-left`,column:1,columnSpan:1,row:2,rowSpan:1},{id:`bottom-right`,column:2,columnSpan:1,row:2,rowSpan:1}]}],K={title:`Shared/UI/LayoutPicker`,component:j,args:{label:`Layout панели`,description:`Выберите схему размещения областей.`,value:d[0].id,onChange:we(),presets:d,disabled:!1,placeholder:`Выберите layout`,showPlaceholder:!1,ariaLabel:`Выбрать layout`,placement:`bottom-start`},parameters:{atomicCanvas:!0,layout:`padded`,docs:{description:{component:`Контролируемый выбор layout-пресета со схематичным превью. Компонент хранит только UI-состояние popup и возвращает наружу ID выбранного пресета.`}}},argTypes:{id:{description:"ID кнопки выбора. Если не передан, компонент создаёт стабильный `useId`.",control:`text`},label:{description:`Заголовок поля.`,control:`text`},description:{description:`Описание под заголовком.`,control:`text`},value:{description:`ID текущего выбранного layout-пресета.`,control:`text`},onChange:{description:`Вызывается с ID выбранного layout-пресета.`,control:!1},presets:{description:"Список layout-пресетов. По умолчанию используется `DEFAULT_LAYOUT_PICKER_PRESETS`.",control:!1},disabled:{description:`Блокирует кнопку выбора и открытие popup.`,control:`boolean`},getPresetDisabled:{description:`Позволяет заблокировать отдельные пресеты внутри popup.`,control:!1},placeholder:{description:"Текст, который можно явно показать рядом с превью через `showPlaceholder`.",control:`text`},showPlaceholder:{description:"Показывает рядом с превью именно строку `placeholder`. По умолчанию trigger содержит только иконку.",control:`boolean`},ariaLabel:{description:`Доступное имя trigger-кнопки. Если не передано, строится из текущего значения.`,control:`text`},size:{description:"Размер поля из общего `UiBaseProps`.",control:`select`,options:[`xs`,`sm`,`md`,`lg`,`xl`]},className:{description:`Дополнительный CSS-класс корневого контейнера.`,control:`text`},triggerClassName:{description:`Дополнительный CSS-класс trigger-кнопки.`,control:`text`},popupClassName:{description:`Дополнительный CSS-класс popup.`,control:`text`},placement:{description:`Позиционирование popup относительно trigger.`,control:`select`,options:[`bottom-start`,`bottom-end`,`top-start`,`top-end`,`right-start`,`left-start`]}}},q={args:{value:`2x1`},name:`Контролируемый выбор`,render:function(e){let[,t]=Ce(),n=e.presets??d;return(0,W.jsxs)(`div`,{className:V.canvas,children:[(0,W.jsx)(j,{...e,presets:n,onChange:n=>{e.onChange(n),t({value:n})}}),(0,W.jsx)(H,{value:e.value??``,presets:n})]})}},J={name:`Без выбранного значения`,render:e=>{let[t,n]=(0,U.useState)(``),r=e.presets??d;return(0,W.jsxs)(`div`,{className:V.canvas,children:[(0,W.jsx)(j,{...e,value:t,presets:r,placeholder:`Layout ещё не выбран`,showPlaceholder:!0,onChange:t=>{n(t),e.onChange(t)}}),(0,W.jsx)(H,{value:t,presets:r})]})},args:{value:``}},Y={name:`Кастомные пресеты`,render:e=>{let[t,n]=(0,U.useState)(G[0].id);return(0,W.jsxs)(`div`,{className:V.canvas,children:[(0,W.jsx)(j,{...e,value:t,presets:G,ariaLabel:`Выбрать layout дашборда`,onChange:t=>{n(t),e.onChange(t)}}),(0,W.jsx)(H,{value:t,presets:G}),(0,W.jsx)(xe,{value:t,presets:G})]})},args:{value:G[0].id,presets:G}},X={name:`Заблокированные пресеты`,render:e=>{let[t,n]=(0,U.useState)(`1x1`);return(0,W.jsxs)(`div`,{className:V.canvas,children:[(0,W.jsx)(j,{...e,value:t,getPresetDisabled:e=>e.id===`1x2`||e.id===`2x2-l`,onChange:t=>{n(t),e.onChange(t)}}),(0,W.jsx)(`div`,{className:V.muted,children:`Пресеты с двумя колонками в этом сценарии недоступны.`}),(0,W.jsx)(H,{value:t,presets:d})]})}},Z={name:`В панели настройки`,render:()=>(0,W.jsx)(Se,{})},Q={name:`Заблокированный контрол`,args:{disabled:!0,value:`1x2`}},q.parameters={...q.parameters,docs:{...q.parameters?.docs,source:{originalSource:`{
|
|
377
377
|
args: {
|
|
378
378
|
value: "2x1"
|
|
379
379
|
},
|
|
@@ -446,4 +446,4 @@ import{a as e,c as t,i as n}from"./preload-helper-B45gAKPr.js";import{C as r}fro
|
|
|
446
446
|
disabled: true,
|
|
447
447
|
value: "1x2"
|
|
448
448
|
}
|
|
449
|
-
}`,...Q.parameters?.docs?.source}}},$=[`Controlled`,`Placeholder`,`CustomPresets`,`DisabledPresets`,`InToolbar`,`Disabled`]}));Te();export{q as Controlled,Y as CustomPresets,Q as Disabled,X as DisabledPresets,Z as InToolbar,J as Placeholder,$ as __namedExportsOrder,K as default,Te as n,
|
|
449
|
+
}`,...Q.parameters?.docs?.source}}},$=[`Controlled`,`Placeholder`,`CustomPresets`,`DisabledPresets`,`InToolbar`,`Disabled`]}));Te();export{q as Controlled,Y as CustomPresets,Q as Disabled,X as DisabledPresets,Z as InToolbar,J as Placeholder,$ as __namedExportsOrder,K as default,Te as n,ye as t};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import{i as e}from"./preload-helper-B45gAKPr.js";import{t}from"./iframe-GmIo3IOR.js";import{E as n,a as r,d as i,f as a,l as o,m as s,n as c,p as l,r as u,u as d}from"./blocks-0RiOsxIK.js";import{t as f}from"./mdx-react-shim-DQ40dZsI.js";import{CustomRender as p,MultiSelect as m,SingleSelect as h,n as g,t as _}from"./Listbox.stories-BnGRDEMg.js";function v(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(o,{of:_,parameters:{docs:{toc:!0}}}),`
|
|
2
|
+
`,(0,b.jsx)(l,{children:`Listbox`}),`
|
|
3
|
+
`,(0,b.jsx)(a,{children:`Список выбора для single- и multi-select сценариев с кастомным рендером элементов`}),`
|
|
4
|
+
`,(0,b.jsx)(t.p,{children:`Listbox уже имеет живые stories, а эта страница собирает их в структурированную документацию с краткими рекомендациями, примерами подключения и API.
|
|
5
|
+
Ниже можно быстро проверить базовый сценарий, а затем перейти к отдельным режимам использования и состояниям компонента.`}),`
|
|
6
|
+
`,(0,b.jsx)(t.h2,{id:`основной-сценарий`,children:`Основной сценарий`}),`
|
|
7
|
+
`,(0,b.jsx)(d,{}),`
|
|
8
|
+
`,(0,b.jsx)(r,{of:h}),`
|
|
9
|
+
`,(0,b.jsx)(t.pre,{children:(0,b.jsx)(t.code,{className:`language-tsx`,children:`import { useState } from "react";
|
|
10
|
+
|
|
11
|
+
import { Listbox } from "@/shared/ui";
|
|
12
|
+
|
|
13
|
+
const items = ["Черновик", "В работе", "Завершен"];
|
|
14
|
+
|
|
15
|
+
export function Example() {
|
|
16
|
+
const [value, setValue] = useState(undefined);
|
|
17
|
+
|
|
18
|
+
return <Listbox items={items} value={value} onChange={setValue} />;
|
|
19
|
+
}
|
|
20
|
+
`})}),`
|
|
21
|
+
`,(0,b.jsx)(t.h2,{id:`практические-рекомендации`,children:`Практические рекомендации`}),`
|
|
22
|
+
`,(0,b.jsxs)(t.ul,{children:[`
|
|
23
|
+
`,(0,b.jsx)(t.li,{children:`Начните с базового сценария ниже, а затем проверьте в stories те состояния, которые реально используются в вашем экране.`}),`
|
|
24
|
+
`]}),`
|
|
25
|
+
`,(0,b.jsx)(t.h2,{id:`сценарии-использования`,children:`Сценарии использования`}),`
|
|
26
|
+
`,(0,b.jsx)(t.h3,{id:`выбор-одного-значения`,children:`Выбор одного значения`}),`
|
|
27
|
+
`,(0,b.jsx)(t.p,{children:`Выбор одного значения.`}),`
|
|
28
|
+
`,(0,b.jsx)(u,{of:h}),`
|
|
29
|
+
`,(0,b.jsx)(t.h3,{id:`выбор-нескольких-значений`,children:`Выбор нескольких значений`}),`
|
|
30
|
+
`,(0,b.jsx)(t.p,{children:`Выбор нескольких значений.`}),`
|
|
31
|
+
`,(0,b.jsx)(u,{of:m}),`
|
|
32
|
+
`,(0,b.jsx)(t.h3,{id:`кастомный-рендер-элементов-списка`,children:`Кастомный рендер элементов списка`}),`
|
|
33
|
+
`,(0,b.jsx)(t.p,{children:`Кастомный рендер элементов списка.`}),`
|
|
34
|
+
`,(0,b.jsx)(u,{of:p}),`
|
|
35
|
+
`,(0,b.jsx)(t.h2,{id:`api`,children:`API`}),`
|
|
36
|
+
`,(0,b.jsx)(c,{of:_}),`
|
|
37
|
+
`,(0,b.jsx)(t.h2,{id:`все-сторисы`,children:`Все сторисы`}),`
|
|
38
|
+
`,(0,b.jsx)(i,{includePrimary:!1})]})}function y(e={}){let{wrapper:t}={...n(),...e.components};return t?(0,b.jsx)(t,{...e,children:(0,b.jsx)(v,{...e})}):v(e)}var b;e((()=>{b=t(),f(),s(),g()}))();export{y as default};
|