@ryuzaki13/react-foundation-ui 1.1.2 → 1.1.3

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.
Files changed (184) hide show
  1. package/dist/advanced-search/index.js +1 -1
  2. package/dist/chunks/{TextEditorLexicalClient-DDe1NezE.js → TextEditorLexicalClient-DYZ32dnX.js} +2 -2
  3. package/dist/chunks/{TextEditorLexicalClient-DDe1NezE.js.map → TextEditorLexicalClient-DYZ32dnX.js.map} +1 -1
  4. package/dist/chunks/{modal-DiQ-yR71.js → modal-DXHX_sA-.js} +49 -36
  5. package/dist/chunks/modal-DXHX_sA-.js.map +1 -0
  6. package/dist/image/index.js +1 -1
  7. package/dist/modal/Modal.d.ts.map +1 -1
  8. package/dist/modal/index.js +1 -1
  9. package/dist/text-editor/index.js +1 -1
  10. package/package.json +1 -1
  11. package/storybook-static/assets/{Badge-ySHe8vmn.js → Badge-BYv5SKWV.js} +1 -1
  12. package/storybook-static/assets/{Badge.stories-BYFVnpXD.js → Badge.stories-BoMBzXTm.js} +1 -1
  13. package/storybook-static/assets/{Button-BSfih1w7.js → Button-BfrNyYxG.js} +1 -1
  14. package/storybook-static/assets/{Button-rWpfFmWo.js → Button-Bxu26CXp.js} +1 -1
  15. package/storybook-static/assets/{Button.stories-BPUX-pUU.js → Button.stories-cKVXw3nW.js} +1 -1
  16. package/storybook-static/assets/{CheckBox-DJvchxuK.js → CheckBox-ClqfmAKV.js} +1 -1
  17. package/storybook-static/assets/{CheckBox-BRmxHv5c.js → CheckBox-DOWO2LSI.js} +1 -1
  18. package/storybook-static/assets/{CheckBox.stories-Zz7HW_Tt.js → CheckBox.stories-ossbVf_g.js} +1 -1
  19. package/storybook-static/assets/{Color-KMSTOMOX-Bvh-Futk.js → Color-KMSTOMOX-BWRl45uX.js} +1 -1
  20. package/storybook-static/assets/{ContextMenu-K5hnbQwB.js → ContextMenu-BQAcEVH-.js} +1 -1
  21. package/storybook-static/assets/{ContextMenu.stories-q25-a_KQ.js → ContextMenu.stories-BtGqDQU4.js} +1 -1
  22. package/storybook-static/assets/{DateInput-DgI18Wd3.js → DateInput-CFnq9xWY.js} +1 -1
  23. package/storybook-static/assets/{DateInput-ElFtdL37.js → DateInput-DgluvnFo.js} +1 -1
  24. package/storybook-static/assets/{DateInput.stories-BfN_pYwR.js → DateInput.stories-juWBXbYN.js} +1 -1
  25. package/storybook-static/assets/{DateRangePresetSelect-BvJ0OXbG.js → DateRangePresetSelect-C8fg_B_q.js} +1 -1
  26. package/storybook-static/assets/{DateRangePresetSelect-C6YNhNYJ.js → DateRangePresetSelect-DiR-gTpc.js} +1 -1
  27. package/storybook-static/assets/{DateRangePresetSelect.stories-DJIqYv8z.js → DateRangePresetSelect.stories-dmBgr2gm.js} +1 -1
  28. package/storybook-static/assets/{Detail-DyISI1K8.js → Detail-C5tzuAT-.js} +1 -1
  29. package/storybook-static/assets/{Detail.stories-DGbd09Cm.js → Detail.stories-CuzVk-To.js} +1 -1
  30. package/storybook-static/assets/{Dialog-BP5LMJer.js → Dialog-KXdmSWqr.js} +1 -1
  31. package/storybook-static/assets/{Dialog.stories-iAreH7Ft.js → Dialog.stories-C2Rf9bYc.js} +1 -1
  32. package/storybook-static/assets/{Disclosure-DbzW47oB.js → Disclosure-BScGZYwW.js} +1 -1
  33. package/storybook-static/assets/{Disclosure.stories-Iiobg__i.js → Disclosure.stories-DXaxDclA.js} +1 -1
  34. package/storybook-static/assets/{DocsRenderer-JROSPFPF-BoQ-Uqbl.js → DocsRenderer-JROSPFPF-DSVOC7Mb.js} +2 -2
  35. package/storybook-static/assets/{DropZone-BFChZBSC.js → DropZone-MIpX5RrG.js} +1 -1
  36. package/storybook-static/assets/{DropZone.stories-yf4h971Z.js → DropZone.stories-BBhFw6FG.js} +1 -1
  37. package/storybook-static/assets/{DropdownMenu-Dk5dGs-s.js → DropdownMenu-BVRm3nHD.js} +1 -1
  38. package/storybook-static/assets/{ExpandableActionPanel.stories-kdhJaIZg.js → ExpandableActionPanel.stories-Dr2oGjtF.js} +1 -1
  39. package/storybook-static/assets/{Flex-BHWaC8ei.js → Flex-CCRaiv1-.js} +1 -1
  40. package/storybook-static/assets/{Flex-D2dKtJQc.js → Flex-CMNyPBNH.js} +1 -1
  41. package/storybook-static/assets/{Flex.stories-BB5qAL1v.js → Flex.stories-qtMSqYfB.js} +1 -1
  42. package/storybook-static/assets/{Grid-sojkTYwf.js → Grid-CplnHZC8.js} +1 -1
  43. package/storybook-static/assets/{Grid-z6gyebzr.js → Grid-DcHosYHE.js} +1 -1
  44. package/storybook-static/assets/{Grid.stories-D4cAyXDs.js → Grid.stories-Cw2QOvIl.js} +1 -1
  45. package/storybook-static/assets/{ImageCropper.stories-FBR_3FWR.js → ImageCropper.stories-DXcBM4qp.js} +1 -1
  46. package/storybook-static/assets/{ImageRenderer-CRBJvRub.js → ImageRenderer-hqPDLk1p.js} +1 -1
  47. package/storybook-static/assets/{ImageRenderer.stories-Bm5yzrQm.js → ImageRenderer.stories-DNaZB5fd.js} +1 -1
  48. package/storybook-static/assets/{ImageView.stories-Dy6kw_ha.js → ImageView.stories-BWUSlo20.js} +1 -1
  49. package/storybook-static/assets/{ImageViewer.stories-CGTaIHxP.js → ImageViewer.stories-BsRr7Ovc.js} +2 -2
  50. package/storybook-static/assets/{ImageViewerRuntime-DZ2d3UnD.js → ImageViewerRuntime-xprc5K6o.js} +1 -1
  51. package/storybook-static/assets/{Input-c3EhAUVg.js → Input-CXHEGwmP.js} +1 -1
  52. package/storybook-static/assets/{Input-BClWQm32.js → Input-D1LZKEk9.js} +1 -1
  53. package/storybook-static/assets/{Input.stories-BhCP8U4r.js → Input.stories-DipzMCHw.js} +1 -1
  54. package/storybook-static/assets/{InputDateTime-B3e7QSbu.js → InputDateTime-BX9PBREv.js} +1 -1
  55. package/storybook-static/assets/{InputDateTime.stories-lSHRzKkd.js → InputDateTime.stories-CgqKsU4i.js} +1 -1
  56. package/storybook-static/assets/{InputFile-BaUvfw0y.js → InputFile-CiysxpTk.js} +1 -1
  57. package/storybook-static/assets/{InputFile.stories-xSZykMu5.js → InputFile.stories-CBJLO2NM.js} +1 -1
  58. package/storybook-static/assets/{InputFiles-BeIHcYkg.js → InputFiles-BaHkWvy8.js} +1 -1
  59. package/storybook-static/assets/{InputFiles-Bz96ef5G.js → InputFiles-CT_xi-bX.js} +1 -1
  60. package/storybook-static/assets/{InputFiles.stories-HYB4u-mB.js → InputFiles.stories-DlD-FQgP.js} +1 -1
  61. package/storybook-static/assets/{InputImage-CZTnJ4ul.js → InputImage--OCsoh-M.js} +1 -1
  62. package/storybook-static/assets/{InputImage.stories-DqjDYlZN.js → InputImage.stories-CTFjNbWn.js} +1 -1
  63. package/storybook-static/assets/{LayoutPicker-DvKs-0Fv.js → LayoutPicker-CRLoV92o.js} +1 -1
  64. package/storybook-static/assets/{LayoutPicker.stories-DmuTHfsc.js → LayoutPicker.stories-CUetjRqR.js} +1 -1
  65. package/storybook-static/assets/{Listbox-mcm1KqjJ.js → Listbox-zUKuLtKw.js} +1 -1
  66. package/storybook-static/assets/{Listbox.stories-CtS-e5pi.js → Listbox.stories-CMJs2uLq.js} +1 -1
  67. package/storybook-static/assets/{Modal-BqeKhT7H.js → Modal-BEM7p9vB.js} +1 -1
  68. package/storybook-static/assets/Modal.stories-DROInBOf.js +180 -0
  69. package/storybook-static/assets/{MultiSelect-CIMJ-GDy.js → MultiSelect-9Ncbysgp.js} +1 -1
  70. package/storybook-static/assets/{MultiSelect-Cl6rIRPU.js → MultiSelect-xw4qjsdx.js} +1 -1
  71. package/storybook-static/assets/{MultiSelect.stories-Dff66BK5.js → MultiSelect.stories-DIiDPTnR.js} +1 -1
  72. package/storybook-static/assets/{NotificationsHost-DowbxTw1.js → NotificationsHost-C7tw0IXh.js} +1 -1
  73. package/storybook-static/assets/{NotificationsHost.stories-nbb74ArB.js → NotificationsHost.stories-D-w6QFsa.js} +1 -1
  74. package/storybook-static/assets/{ODataMultiSelect-BwjM7TCI.js → ODataMultiSelect-BDXRDgKt.js} +1 -1
  75. package/storybook-static/assets/{ODataMultiSelect.stories-DqjbgljQ.js → ODataMultiSelect.stories-BMWAJevM.js} +1 -1
  76. package/storybook-static/assets/{ODataSelect-CUb853Wg.js → ODataSelect-0t0jwjA6.js} +1 -1
  77. package/storybook-static/assets/{ODataSelect-BfFCFPKT.js → ODataSelect-DSCJsxHE.js} +1 -1
  78. package/storybook-static/assets/{ODataSelect.stories-yivutwVc.js → ODataSelect.stories-CWY-NpOZ.js} +1 -1
  79. package/storybook-static/assets/{ODataTreeMultiSelect-Dd7RuuQJ.js → ODataTreeMultiSelect-CpOrO-uC.js} +1 -1
  80. package/storybook-static/assets/{ODataTreeMultiSelect.stories-fr3DsJrU.js → ODataTreeMultiSelect.stories-CbMdHu4j.js} +1 -1
  81. package/storybook-static/assets/{ODataTreeSelect-CPpbLgIt.js → ODataTreeSelect-D-X2akNz.js} +1 -1
  82. package/storybook-static/assets/{ODataTreeSelect.stories-DmEX0dcP.js → ODataTreeSelect.stories-BBzVpe10.js} +1 -1
  83. package/storybook-static/assets/{PeriodSelect-D5kBTYIo.js → PeriodSelect-CNlKMVs2.js} +1 -1
  84. package/storybook-static/assets/{PeriodSelect.stories-BQ8Fe5La.js → PeriodSelect.stories-CxLIzzmg.js} +1 -1
  85. package/storybook-static/assets/{Popover-BXriLIId.js → Popover-EQkX-mvl.js} +1 -1
  86. package/storybook-static/assets/{Popover.stories-CKXTLaPn.js → Popover.stories-B5DbNr1S.js} +1 -1
  87. package/storybook-static/assets/{PresetRangeDateInput-BAeztTbq.js → PresetRangeDateInput-DOchgymH.js} +1 -1
  88. package/storybook-static/assets/{PresetRangeDateInput.stories-DHErwmMR.js → PresetRangeDateInput.stories-CWdJYPyu.js} +1 -1
  89. package/storybook-static/assets/{RadioButton-CHmZgd5q.js → RadioButton-B_EHxdkD.js} +1 -1
  90. package/storybook-static/assets/{RadioButton.stories-aa0vDs3Q.js → RadioButton.stories-Bz4Kta8G.js} +1 -1
  91. package/storybook-static/assets/{RadioGroup-DPeAo49R.js → RadioGroup-BZYTfAzg.js} +1 -1
  92. package/storybook-static/assets/{RadioGroup-DvOxoOpU.js → RadioGroup-zdfjLuRO.js} +1 -1
  93. package/storybook-static/assets/{RadioGroup.stories-R2DhGaUo.js → RadioGroup.stories-BEKSPD_m.js} +1 -1
  94. package/storybook-static/assets/{Select-CMFiMGUD.js → Select-D2P_E-Wz.js} +1 -1
  95. package/storybook-static/assets/{Select-DAgVgEuM.js → Select-vv0TkxGU.js} +1 -1
  96. package/storybook-static/assets/{Select.stories-DnDwuoSb.js → Select.stories-D1ZpBrLI.js} +1 -1
  97. package/storybook-static/assets/{SelectOptionContent-DlUoa2zi.js → SelectOptionContent-BQskL7HV.js} +1 -1
  98. package/storybook-static/assets/{SerializableSelect-CHAD3r9t.js → SerializableSelect-BLBxvPW_.js} +1 -1
  99. package/storybook-static/assets/{SerializableSelect-BL6Sy3b_.js → SerializableSelect-DM316XKD.js} +1 -1
  100. package/storybook-static/assets/{SerializableSelect.stories-tcz7KvtM.js → SerializableSelect.stories-mRsmk83g.js} +1 -1
  101. package/storybook-static/assets/{SingleDateTimeInput-BTjmZ93p.js → SingleDateTimeInput-CJ5ZBEOf.js} +1 -1
  102. package/storybook-static/assets/{SingleDateTimeInput.stories-fAE8JkXx.js → SingleDateTimeInput.stories-CTKk50mF.js} +1 -1
  103. package/storybook-static/assets/{Slider-BT1LHZ79.js → Slider-BPyBLawb.js} +1 -1
  104. package/storybook-static/assets/{Slider.stories-D936g26I.js → Slider.stories-BSkVbbgf.js} +1 -1
  105. package/storybook-static/assets/{SliderInput-BhFLXhLl.js → SliderInput-B3ld-S1K.js} +1 -1
  106. package/storybook-static/assets/{SliderInput.stories-BVdD9tEX.js → SliderInput.stories-wjYqH1aS.js} +1 -1
  107. package/storybook-static/assets/{Sortable-SmbXEzK3.js → Sortable-DbSlLq6F.js} +1 -1
  108. package/storybook-static/assets/{Sortable.stories-CkCKnV-o.js → Sortable.stories-Ds-UoIOb.js} +1 -1
  109. package/storybook-static/assets/{Splitter-HnrBItZh.js → Splitter-FUjb8m18.js} +1 -1
  110. package/storybook-static/assets/{Splitter.stories-DW1Cs65Y.js → Splitter.stories-Dsp8daff.js} +1 -1
  111. package/storybook-static/assets/{StateSelect-j73SSm6j.js → StateSelect-DGI07Ido.js} +1 -1
  112. package/storybook-static/assets/{StateSelect.stories-DlYcFCZu.js → StateSelect.stories-BDiNLuiI.js} +1 -1
  113. package/storybook-static/assets/{Switch-Df9CUFzH.js → Switch-CN5kJNiL.js} +1 -1
  114. package/storybook-static/assets/{Switch.stories-CLj7D165.js → Switch.stories-CZKxEXpW.js} +1 -1
  115. package/storybook-static/assets/{Table-DQNIWsu6.js → Table-vl1C0jF-.js} +1 -1
  116. package/storybook-static/assets/{Table.stories-PauSY-JA.js → Table.stories-EUTDwgiD.js} +1 -1
  117. package/storybook-static/assets/{Tabs-Dk5gLtMV.js → Tabs-CpyyOlkt.js} +1 -1
  118. package/storybook-static/assets/{Tabs.stories-QbqForCs.js → Tabs.stories-B9ebilTS.js} +1 -1
  119. package/storybook-static/assets/{TagInput.stories-BKDMX-Xf.js → TagInput.stories-C_i3rtCw.js} +1 -1
  120. package/storybook-static/assets/{Textarea-DysJ81Q0.js → Textarea-DwVAv9US.js} +1 -1
  121. package/storybook-static/assets/{Textarea.stories-BjwiGsRE.js → Textarea.stories-Dh8Y5jkb.js} +1 -1
  122. package/storybook-static/assets/{TimePanel-B3ydmHaY.js → TimePanel-BFcTDBb1.js} +1 -1
  123. package/storybook-static/assets/{TimePanel.stories-BKywSX32.js → TimePanel.stories-CV_Eo_tl.js} +1 -1
  124. package/storybook-static/assets/{Toggle-KdmtodIb.js → Toggle-DXJSBU_d.js} +1 -1
  125. package/storybook-static/assets/{Toggle.stories-Bhb_z8Jz.js → Toggle.stories-9UICK0Q8.js} +1 -1
  126. package/storybook-static/assets/{TreeMultiSelect-DsmEfu72.js → TreeMultiSelect-D6fSqH8b.js} +1 -1
  127. package/storybook-static/assets/{TreeMultiSelect-CwW9N9Ig.js → TreeMultiSelect-DyhCzEkz.js} +1 -1
  128. package/storybook-static/assets/{TreeMultiSelect.stories-C6D2dAVV.js → TreeMultiSelect.stories-Cxd_CWCV.js} +1 -1
  129. package/storybook-static/assets/{TreePickerBase-KscLSAmI.js → TreePickerBase-BNowEr7z.js} +1 -1
  130. package/storybook-static/assets/{TreeSelect-Dyzfh0j1.js → TreeSelect-DckuatTu.js} +1 -1
  131. package/storybook-static/assets/{TreeSelect-CaZc5mMy.js → TreeSelect-Ds85mxa-.js} +1 -1
  132. package/storybook-static/assets/{TreeSelect.stories-DgPobNFf.js → TreeSelect.stories-cM0kK5l7.js} +1 -1
  133. package/storybook-static/assets/{TreeTable-Cp-3yiUl.js → TreeTable-B0KcBgT1.js} +1 -1
  134. package/storybook-static/assets/{TreeTable.stories-Ch5zCYJv.js → TreeTable.stories-Nt4Of-SO.js} +1 -1
  135. package/storybook-static/assets/{WithTooltip-7X4HQR7L-Bvci3679.js → WithTooltip-7X4HQR7L-BVdCbxjR.js} +1 -1
  136. package/storybook-static/assets/{base-table-4j0yzCkY.js → base-table-C8QiV2fX.js} +1 -1
  137. package/storybook-static/assets/{blocks-B-ZSUli0.js → blocks-BzLMo9f0.js} +6 -6
  138. package/storybook-static/assets/{button-PJeFaVDD.js → button-0hVXNko4.js} +1 -1
  139. package/storybook-static/assets/{check-box-B0-G8LQm.js → check-box-BN6lxKsc.js} +1 -1
  140. package/storybook-static/assets/{chunk-3LY4VQVK-D6w4YoJz.js → chunk-3LY4VQVK-DV7JxmYc.js} +1 -1
  141. package/storybook-static/assets/{chunk-LITCR56V-CO50GA85.js → chunk-LITCR56V-PCT2c1i3.js} +1 -1
  142. package/storybook-static/assets/{contextMenu-CnU3cBnI.js → contextMenu-CJTY8M0Z.js} +1 -1
  143. package/storybook-static/assets/{error-BSGcuIkS.js → error-B04urtCn.js} +1 -1
  144. package/storybook-static/assets/{flex-DH0uZKDL.js → flex-D_tOs6bG.js} +1 -1
  145. package/storybook-static/assets/{floating-ui.react-D1gWigwt.js → floating-ui.react-AAjj42x_.js} +1 -1
  146. package/storybook-static/assets/formatter-L2YTDE3Q-xGBmVtl1.js +1 -0
  147. package/storybook-static/assets/{formatters-q62UjZF6.js → formatters-B1HL4Hc3.js} +1 -1
  148. package/storybook-static/assets/grid-BGmgOt1u.js +1 -0
  149. package/storybook-static/assets/{hooks-C0kO8ifn.js → hooks-GnWGnWFb.js} +1 -1
  150. package/storybook-static/assets/{iframe-D1kbCBk7.js → iframe-DVy5ysVn.js} +3 -3
  151. package/storybook-static/assets/{input-D8SCvYlc.js → input-CHBSC7hw.js} +1 -1
  152. package/storybook-static/assets/{lucide-react-DItxRogI.js → lucide-react-BArVG5iC.js} +1 -1
  153. package/storybook-static/assets/{mdx-react-shim-B8QUPqDz.js → mdx-react-shim-BtEBm5C8.js} +1 -1
  154. package/storybook-static/assets/{media-DgzbAjsg.js → media-D8GIX7r7.js} +1 -1
  155. package/storybook-static/assets/{misc-CzV_PQE6.js → misc-c1mQx-JP.js} +1 -1
  156. package/storybook-static/assets/{notifications-CdohXJuf.js → notifications-BMKbNhFA.js} +1 -1
  157. package/storybook-static/assets/{odata-BCXcLElA.js → odata-T054U6Qq.js} +1 -1
  158. package/storybook-static/assets/odata-service-CUimpl_G.js +1 -0
  159. package/storybook-static/assets/{odataStoryFixtures-KJnMeJob.js → odataStoryFixtures-C8NE7Hni.js} +1 -1
  160. package/storybook-static/assets/{picker-BILXnlvH.js → picker-B7q2JZpH.js} +1 -1
  161. package/storybook-static/assets/{popover-Bmfe__Oe.js → popover-mfeTLVGA.js} +1 -1
  162. package/storybook-static/assets/{preset-select-C3eeRGrr.js → preset-select-BlDqUlEa.js} +1 -1
  163. package/storybook-static/assets/{react-18-C05GCNzp.js → react-18-DrUgYx1S.js} +1 -1
  164. package/storybook-static/assets/{react-C7-n-j-7.js → react-HmqNZDrt.js} +1 -1
  165. package/storybook-static/assets/{react-dom-BuBaXqtP.js → react-dom-WjbhetUB.js} +1 -1
  166. package/storybook-static/assets/select-QrW0wDcD.js +1 -0
  167. package/storybook-static/assets/{slider-mYXodgoS.js → slider-CSmXM01u.js} +1 -1
  168. package/storybook-static/assets/{sortable-DFt3FEPe.js → sortable-DcNE4igH.js} +1 -1
  169. package/storybook-static/assets/{syntaxhighlighter-RTCFPKCB-DpuAtHAL.js → syntaxhighlighter-RTCFPKCB-lGJPo3-t.js} +1 -1
  170. package/storybook-static/assets/{text-CxC7Ibdz.js → text-D_7-zTks.js} +1 -1
  171. package/storybook-static/assets/{theming-LaAgw3BX.js → theming-BWw5NNd7.js} +1 -1
  172. package/storybook-static/assets/ui-DM91jbnr.js +1 -0
  173. package/storybook-static/assets/{useODataSelectBase-D8W-kHaa.js → useODataSelectBase-Bvgz8m-p.js} +1 -1
  174. package/storybook-static/assets/{useODataTreeData-CdDBNi-n.js → useODataTreeData-9-fLKbsS.js} +1 -1
  175. package/storybook-static/assets/{utils-Bgk51jNr.js → utils-DBorka30.js} +1 -1
  176. package/storybook-static/iframe.html +1 -1
  177. package/storybook-static/project.json +1 -1
  178. package/dist/chunks/modal-DiQ-yR71.js.map +0 -1
  179. package/storybook-static/assets/Modal.stories-Gli7XX36.js +0 -180
  180. package/storybook-static/assets/formatter-L2YTDE3Q-CTky3r2k.js +0 -1
  181. package/storybook-static/assets/grid-rDCrr9Aa.js +0 -1
  182. package/storybook-static/assets/odata-service-tcECnUvF.js +0 -1
  183. package/storybook-static/assets/select-DOX3d-Dq.js +0 -1
  184. package/storybook-static/assets/ui-CidvNniM.js +0 -1
@@ -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-D1kbCBk7.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{a,i as o,n as s}from"./utils-Bgk51jNr.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-c3EhAUVg.js";import{t as m}from"./input-D8SCvYlc.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:`{
1
+ import{a as e,c as t,i as n}from"./preload-helper-B45gAKPr.js";import{C as r}from"./iframe-DVy5ysVn.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{a,i as o,n as s}from"./utils-DBorka30.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-CXHEGwmP.js";import{t as m}from"./input-CHBSC7hw.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
2
  render: args => {
3
3
  const [value, setValue] = useState<ReadFileResult | undefined>(args.value);
4
4
  const [error, setError] = useState(args.error ?? "");
@@ -1,4 +1,4 @@
1
- import{i as e}from"./preload-helper-B45gAKPr.js";import{E as t,a as n,d as r,f as i,l as a,m as o,n as s,p as c,r as l,u}from"./blocks-B-ZSUli0.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-B8QUPqDz.js";import{Controlled as p,LimitReached as m,WithInitialFiles as h,n as g,t as _}from"./InputFiles.stories-HYB4u-mB.js";function v(e){let o={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...t(),...e.components};return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(a,{of:_,parameters:{docs:{toc:!0}}}),`
1
+ import{i as e}from"./preload-helper-B45gAKPr.js";import{E as t,a as n,d as r,f as i,l as a,m as o,n as s,p as c,r as l,u}from"./blocks-BzLMo9f0.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-BtEBm5C8.js";import{Controlled as p,LimitReached as m,WithInitialFiles as h,n as g,t as _}from"./InputFiles.stories-DlD-FQgP.js";function v(e){let o={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...t(),...e.components};return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(a,{of:_,parameters:{docs:{toc:!0}}}),`
2
2
  `,(0,b.jsx)(c,{children:`InputFiles`}),`
3
3
  `,(0,b.jsx)(i,{children:`Выбор и хранение нескольких файлов в контролируемом режиме`}),`
4
4
  `,(0,b.jsx)(o.p,{children:`InputFiles уже имеет живые stories, а эта страница собирает их в структурированную документацию с краткими рекомендациями, примерами подключения и API.
@@ -1 +1 @@
1
- import{c as e,i as t}from"./preload-helper-B45gAKPr.js";import{C as n}from"./iframe-D1kbCBk7.js";import{t as r}from"./jsx-runtime-BBQGix-2.js";import{a as i,i as a,n as o}from"./utils-Bgk51jNr.js";import{o as s,t as c}from"./lucide-react-DItxRogI.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-c3EhAUVg.js";import{t as m}from"./input-D8SCvYlc.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:i(E.removeButton,`flexCenter`),onClick:()=>n(t),"aria-label":`Удалить ${e.meta.name}`,children:(0,A.jsx)(s,{})})]},`${e.meta.name}-${e.meta.lastModified}`))})}var k,A,j=t((()=>{k=e(n(),1),a(),c(),D(),A=r(),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:a,maxBytes:s,maxFiles:c,label:u,description:m,placeholder:g=`Выберите файлы`,disabled:b,size:x,error:S,onClearError:C,className:w}=e;h(a),_(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 c==`number`&&t.length>=c,I=(0,N.useCallback)(async r=>{let i=r.target.files;if(!i||i.length===0)return;let o=Array.from(i);r.target.value=``,S&&C&&C();let l=typeof c==`number`?c-t.length:o.length,u=o.slice(0,l);if(e.readMode===`array-buffer`){let t=[];for(let e of u)try{let n=await y(e,{allowedMime:a,maxBytes:s,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:a,maxBytes:s});d.push(t)}catch(e){e instanceof v&&n&&n(e)}d.length>0&&e.onChange([...e.value,...d])},[e,c,t.length,a,s,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??a)?.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=>o(e,L,{disabled:b||F}),className:i(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?`Максимум ${c} файлов`:g})})}),R]})}var N,P,F=t((()=>{N=e(n(),1),g(),a(),m(),u(),D(),j(),P=r(),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
+ import{c as e,i as t}from"./preload-helper-B45gAKPr.js";import{C as n}from"./iframe-DVy5ysVn.js";import{t as r}from"./jsx-runtime-BBQGix-2.js";import{a as i,i as a,n as o}from"./utils-DBorka30.js";import{o as s,t as c}from"./lucide-react-BArVG5iC.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-CXHEGwmP.js";import{t as m}from"./input-CHBSC7hw.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:i(E.removeButton,`flexCenter`),onClick:()=>n(t),"aria-label":`Удалить ${e.meta.name}`,children:(0,A.jsx)(s,{})})]},`${e.meta.name}-${e.meta.lastModified}`))})}var k,A,j=t((()=>{k=e(n(),1),a(),c(),D(),A=r(),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:a,maxBytes:s,maxFiles:c,label:u,description:m,placeholder:g=`Выберите файлы`,disabled:b,size:x,error:S,onClearError:C,className:w}=e;h(a),_(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 c==`number`&&t.length>=c,I=(0,N.useCallback)(async r=>{let i=r.target.files;if(!i||i.length===0)return;let o=Array.from(i);r.target.value=``,S&&C&&C();let l=typeof c==`number`?c-t.length:o.length,u=o.slice(0,l);if(e.readMode===`array-buffer`){let t=[];for(let e of u)try{let n=await y(e,{allowedMime:a,maxBytes:s,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:a,maxBytes:s});d.push(t)}catch(e){e instanceof v&&n&&n(e)}d.length>0&&e.onChange([...e.value,...d])},[e,c,t.length,a,s,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??a)?.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=>o(e,L,{disabled:b||F}),className:i(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?`Максимум ${c} файлов`:g})})}),R]})}var N,P,F=t((()=>{N=e(n(),1),g(),a(),m(),u(),D(),j(),P=r(),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,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-D1kbCBk7.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{n as a,t as o}from"./InputFiles-Bz96ef5G.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:`{
1
+ import{a as e,c as t,i as n}from"./preload-helper-B45gAKPr.js";import{C as r}from"./iframe-DVy5ysVn.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{n as a,t as o}from"./InputFiles-CT_xi-bX.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
2
  render: args => {
3
3
  const [value, setValue] = useState<ReadFileAsDataUrlResult[]>([]);
4
4
  return <InputFiles {...args} readMode="data-url" value={value} onChange={setValue} />;
@@ -1,4 +1,4 @@
1
- import{i as e}from"./preload-helper-B45gAKPr.js";import{E as t,a as n,d as r,f as i,l as a,m as o,n as s,p as c,r as l,u}from"./blocks-B-ZSUli0.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-B8QUPqDz.js";import{ArrayBufferMode as p,Controlled as m,WithInitialImage as h,n as g,t as _}from"./InputImage.stories-DqjDYlZN.js";function v(e){let o={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...t(),...e.components};return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(a,{of:_,parameters:{docs:{toc:!0}}}),`
1
+ import{i as e}from"./preload-helper-B45gAKPr.js";import{E as t,a as n,d as r,f as i,l as a,m as o,n as s,p as c,r as l,u}from"./blocks-BzLMo9f0.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-BtEBm5C8.js";import{ArrayBufferMode as p,Controlled as m,WithInitialImage as h,n as g,t as _}from"./InputImage.stories-CTFjNbWn.js";function v(e){let o={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...t(),...e.components};return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(a,{of:_,parameters:{docs:{toc:!0}}}),`
2
2
  `,(0,b.jsx)(c,{children:`InputImage`}),`
3
3
  `,(0,b.jsx)(i,{children:`Контрол загрузки и предварительного просмотра изображения в формах и карточках`}),`
4
4
  `,(0,b.jsx)(o.p,{children:`InputImage уже имеет живые stories, а эта страница собирает их в структурированную документацию с краткими рекомендациями, примерами подключения и API.
@@ -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-D1kbCBk7.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{a,i as o,n as s}from"./utils-Bgk51jNr.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-c3EhAUVg.js";import{t as m}from"./input-D8SCvYlc.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 — компонент выбора одного изображения.
1
+ import{a as e,c as t,i as n}from"./preload-helper-B45gAKPr.js";import{C as r}from"./iframe-DVy5ysVn.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{a,i as o,n as s}from"./utils-DBorka30.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-CXHEGwmP.js";import{t as m}from"./input-CHBSC7hw.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
  который валидирует что файл — изображение и извлекает его размеры.
@@ -1,4 +1,4 @@
1
- import{i as e}from"./preload-helper-B45gAKPr.js";import{E as t,a as n,d as r,f as i,l as a,m as o,n as s,p as c,r as l,u}from"./blocks-B-ZSUli0.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-B8QUPqDz.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-DmuTHfsc.js";function x(e){let o={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...t(),...e.components};return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(a,{of:b,parameters:{docs:{toc:!0}}}),`
1
+ import{i as e}from"./preload-helper-B45gAKPr.js";import{E as t,a as n,d as r,f as i,l as a,m as o,n as s,p as c,r as l,u}from"./blocks-BzLMo9f0.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-BtEBm5C8.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-CUetjRqR.js";function x(e){let o={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...t(),...e.components};return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(a,{of:b,parameters:{docs:{toc:!0}}}),`
2
2
  `,(0,C.jsx)(c,{children:`LayoutPicker`}),`
3
3
  `,(0,C.jsx)(i,{children:`Контролируемый выбор layout-пресета со схематичным превью`}),`
4
4
  `,(0,C.jsxs)(o.p,{children:[(0,C.jsx)(o.code,{children:`LayoutPicker`}),` нужен для выбора схемы размещения независимых областей: графиков, панелей, секций дашборда или другого UI, где сама раскладка хранится во внешней модели.
@@ -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-D1kbCBk7.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{a,i as o}from"./utils-Bgk51jNr.js";import{t as s,wt as ee}from"./lucide-react-DItxRogI.js";import{n as c,t as l}from"./ui.module-wFHXkJzp.js";import{T as te,b as ne,g as re,l as ie,m as ae,r as oe,t as u}from"./picker-BILXnlvH.js";function se(e,t){return{gridTemplateColumns:`repeat(${e.columns}, minmax(0, 1fr))`,gridTemplateRows:`repeat(${e.rows}, minmax(${t??0}em, 1fr))`}}function d(e){return{gridColumn:`${e.column} / span ${e.columnSpan??1}`,gridRow:`${e.row} / span ${e.rowSpan??1}`}}var ce=n((()=>{})),f,le=n((()=>{f=[{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}]}]})),p=n((()=>{ce(),le()})),m,h,g,_,v,y,b,x,S,C,w,T,E,D,O,k,A,j=n((()=>{m=`_959ulH`,h=`Ch-SZL`,g=`SmdPit`,_=`giOtGs`,v=`_57Tr0T`,y=`Tkhulr`,b=`VQlniu`,x=`wb39Kf`,S=`HGvQdT`,C=`rZuYyb`,w=`vNV6Q2`,T=`_3ytPPa`,E=`koxYU-`,D=`k8xLa2`,O=`_5pd3Bb`,k=`VrHnjN`,A={valueOverlay:m,triggerInput:h,triggerText:g,popup:_,popupLayout:v,popupBody:y,options:b,option:x,optionActive:S,optionSelected:C,optionPreviewWrap:w,optionCheck:T,preview:E,previewPlaceholder:D,previewCompact:O,previewCell:k}}));function ue({preset:e,compact:t=!1}){return(0,P.jsx)(`span`,{className:a(A.preview,t&&A.previewCompact),style:se(e),"aria-hidden":`true`,children:e.cells.map(t=>(0,P.jsx)(`span`,{className:A.previewCell,style:d(t)},`${e.id}:${t.id}`))})}function M({id:e,label:t,description:n,value:r,onChange:i,presets:o=f,disabled:s,getPresetDisabled:l,placeholder:u=de,size:se,ariaLabel:d,className:ce,triggerClassName:le,popupClassName:p,placement:m=`bottom-start`}){let h=(0,N.useRef)(null),[g,_]=(0,N.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:k,openList:j,toggleOpen:M,selectOption:fe,selectActiveOption:pe,handleReferenceKeyDown:me,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:k,toggleOpen:M}),z=e=>{h.current=e};return(0,P.jsx)(te,{id:e,label:t,description:n,disabled:s,placeholder:u,size:se,className:ce,children:({controlId:e,labelId:t,describedBy:n})=>{let r=`${e}-listbox`;return(0,P.jsxs)(P.Fragment,{children:[(0,P.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:d??`Выбрать layout. Текущее значение: ${x}`,"data-ui":`layout-picker-trigger`,rootClassName:le,inputClassName:A.triggerInput,overlay:(0,P.jsxs)(`div`,{className:A.valueOverlay,children:[b?(0,P.jsx)(ue,{preset:b,compact:!0}):(0,P.jsx)(`span`,{className:A.previewPlaceholder}),(0,P.jsx)(`span`,{className:a(A.triggerText,!y&&c.uiPlaceholder),children:x})]}),endAdornment:(0,P.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=>{me(e),!e.defaultPrevented&&R.handleTriggerKeyDown({event:e,onActivateWhenOpen:pe,enableSpaceActivation:!0})}}),(0,P.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,A.popup,p),layoutClassName:A.popupLayout,bodyClassName:A.popupBody,children:(0,P.jsx)(`div`,{className:A.options,children:o.map((e,t)=>{let n=t===v,i=t===S,o=l?.(e)??!1;return(0,P.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(A.option,n&&A.optionSelected,i&&A.optionActive),"data-ui":`layout-picker-option`,"data-selected":n||void 0,onMouseDown:e=>e.preventDefault(),onClick:()=>fe(e),children:[(0,P.jsx)(`span`,{className:A.optionPreviewWrap,children:(0,P.jsx)(ue,{preset:e})}),(0,P.jsxs)(`span`,{className:`fontSizeSm`,children:[(0,P.jsx)(`span`,{children:e.label}),e.description?(0,P.jsx)(`span`,{children:e.description}):null]}),(0,P.jsx)(`span`,{className:A.optionCheck,"aria-hidden":`true`,children:n?(0,P.jsx)(ee,{}):null})]},e.id)})})})]})}})}var N,P,de,fe=n((()=>{N=t(r(),1),o(),s(),u(),l(),p(),j(),P=i(),de=`Выберите раскладку`,M.__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{C as r}from"./iframe-DVy5ysVn.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{a,i as o}from"./utils-DBorka30.js";import{t as s,wt as ee}from"./lucide-react-BArVG5iC.js";import{n as c,t as l}from"./ui.module-wFHXkJzp.js";import{T as te,b as ne,g as re,l as ie,m as ae,r as oe,t as u}from"./picker-B7q2JZpH.js";function se(e,t){return{gridTemplateColumns:`repeat(${e.columns}, minmax(0, 1fr))`,gridTemplateRows:`repeat(${e.rows}, minmax(${t??0}em, 1fr))`}}function d(e){return{gridColumn:`${e.column} / span ${e.columnSpan??1}`,gridRow:`${e.row} / span ${e.rowSpan??1}`}}var ce=n((()=>{})),f,le=n((()=>{f=[{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}]}]})),p=n((()=>{ce(),le()})),m,h,g,_,v,y,b,x,S,C,w,T,E,D,O,k,A,j=n((()=>{m=`_959ulH`,h=`Ch-SZL`,g=`SmdPit`,_=`giOtGs`,v=`_57Tr0T`,y=`Tkhulr`,b=`VQlniu`,x=`wb39Kf`,S=`HGvQdT`,C=`rZuYyb`,w=`vNV6Q2`,T=`_3ytPPa`,E=`koxYU-`,D=`k8xLa2`,O=`_5pd3Bb`,k=`VrHnjN`,A={valueOverlay:m,triggerInput:h,triggerText:g,popup:_,popupLayout:v,popupBody:y,options:b,option:x,optionActive:S,optionSelected:C,optionPreviewWrap:w,optionCheck:T,preview:E,previewPlaceholder:D,previewCompact:O,previewCell:k}}));function ue({preset:e,compact:t=!1}){return(0,P.jsx)(`span`,{className:a(A.preview,t&&A.previewCompact),style:se(e),"aria-hidden":`true`,children:e.cells.map(t=>(0,P.jsx)(`span`,{className:A.previewCell,style:d(t)},`${e.id}:${t.id}`))})}function M({id:e,label:t,description:n,value:r,onChange:i,presets:o=f,disabled:s,getPresetDisabled:l,placeholder:u=de,size:se,ariaLabel:d,className:ce,triggerClassName:le,popupClassName:p,placement:m=`bottom-start`}){let h=(0,N.useRef)(null),[g,_]=(0,N.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:k,openList:j,toggleOpen:M,selectOption:fe,selectActiveOption:pe,handleReferenceKeyDown:me,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:k,toggleOpen:M}),z=e=>{h.current=e};return(0,P.jsx)(te,{id:e,label:t,description:n,disabled:s,placeholder:u,size:se,className:ce,children:({controlId:e,labelId:t,describedBy:n})=>{let r=`${e}-listbox`;return(0,P.jsxs)(P.Fragment,{children:[(0,P.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:d??`Выбрать layout. Текущее значение: ${x}`,"data-ui":`layout-picker-trigger`,rootClassName:le,inputClassName:A.triggerInput,overlay:(0,P.jsxs)(`div`,{className:A.valueOverlay,children:[b?(0,P.jsx)(ue,{preset:b,compact:!0}):(0,P.jsx)(`span`,{className:A.previewPlaceholder}),(0,P.jsx)(`span`,{className:a(A.triggerText,!y&&c.uiPlaceholder),children:x})]}),endAdornment:(0,P.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=>{me(e),!e.defaultPrevented&&R.handleTriggerKeyDown({event:e,onActivateWhenOpen:pe,enableSpaceActivation:!0})}}),(0,P.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,A.popup,p),layoutClassName:A.popupLayout,bodyClassName:A.popupBody,children:(0,P.jsx)(`div`,{className:A.options,children:o.map((e,t)=>{let n=t===v,i=t===S,o=l?.(e)??!1;return(0,P.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(A.option,n&&A.optionSelected,i&&A.optionActive),"data-ui":`layout-picker-option`,"data-selected":n||void 0,onMouseDown:e=>e.preventDefault(),onClick:()=>fe(e),children:[(0,P.jsx)(`span`,{className:A.optionPreviewWrap,children:(0,P.jsx)(ue,{preset:e})}),(0,P.jsxs)(`span`,{className:`fontSizeSm`,children:[(0,P.jsx)(`span`,{children:e.label}),e.description?(0,P.jsx)(`span`,{children:e.description}):null]}),(0,P.jsx)(`span`,{className:A.optionCheck,"aria-hidden":`true`,children:n?(0,P.jsx)(ee,{}):null})]},e.id)})})})]})}})}var N,P,de,fe=n((()=>{N=t(r(),1),o(),s(),u(),l(),p(),j(),P=i(),de=`Выберите раскладку`,M.__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",
@@ -1,4 +1,4 @@
1
- import{i as e}from"./preload-helper-B45gAKPr.js";import{E as t,a as n,d as r,f as i,l as a,m as o,n as s,p as c,r as l,u}from"./blocks-B-ZSUli0.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-B8QUPqDz.js";import{CustomRender as p,MultiSelect as m,SingleSelect as h,n as g,t as _}from"./Listbox.stories-CtS-e5pi.js";function v(e){let o={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...t(),...e.components};return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(a,{of:_,parameters:{docs:{toc:!0}}}),`
1
+ import{i as e}from"./preload-helper-B45gAKPr.js";import{E as t,a as n,d as r,f as i,l as a,m as o,n as s,p as c,r as l,u}from"./blocks-BzLMo9f0.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-BtEBm5C8.js";import{CustomRender as p,MultiSelect as m,SingleSelect as h,n as g,t as _}from"./Listbox.stories-CMJs2uLq.js";function v(e){let o={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...t(),...e.components};return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(a,{of:_,parameters:{docs:{toc:!0}}}),`
2
2
  `,(0,b.jsx)(c,{children:`Listbox`}),`
3
3
  `,(0,b.jsx)(i,{children:`Список выбора для single- и multi-select сценариев с кастомным рендером элементов`}),`
4
4
  `,(0,b.jsx)(o.p,{children:`Listbox уже имеет живые stories, а эта страница собирает их в структурированную документацию с краткими рекомендациями, примерами подключения и API.
@@ -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-D1kbCBk7.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{a,i as o,n as s,r as c,s as l,t as u}from"./utils-Bgk51jNr.js";import{t as d,wt as f}from"./lucide-react-DItxRogI.js";import{n as p,t as m}from"./ui.module-wFHXkJzp.js";function h(e,t,n){if(n){if(Array.isArray(t)&&t.length>0){let n=e.findIndex(e=>t.includes(e.value)&&!e.disabled);if(n>=0)return n}return c(e,y)}if(t!==void 0){let n=e.findIndex(e=>e.value===t&&!e.disabled);if(n>=0)return n}return c(e,y)}function g(e){let{value:t,defaultValue:n,multiple:r,focusOnMount:i,renderItem:o,getKey:d,options:m,onChange:g,id:b,...x}=e,S=t!==void 0,C=(0,_.useId)(),w=b??`${C}-listbox`,[T,E]=(0,_.useState)(n),D=(0,_.useRef)(null),[O,k]=(0,_.useState)(()=>h(m,t??n,r)),A=(0,_.useMemo)(()=>(S?t:T)??(r?[]:null),[T,S,r,t]),j=O,M=t=>{if(t.disabled)return;let n;if(e.multiple){let r=Array.isArray(A)?A:[];n=r.includes(t.value)?r.filter(e=>e!==t.value):[...r,t.value],e.onChange?.(n,t)}else n=t.value,e.onChange?.(n,t);S||E(n)};return(0,_.useEffect)(()=>{let e=D.current?.querySelectorAll(`[role="option"]`)[j];e&&e.scrollIntoView({block:`nearest`})},[j]),(0,_.useLayoutEffect)(()=>{i&&D.current?.focus()},[i]),(0,v.jsx)(`ul`,{ref:D,id:w,role:`listbox`,"aria-multiselectable":r||void 0,"aria-activedescendant":j>=0?`${w}-option-${j}`:void 0,tabIndex:0,onKeyDown:e=>{if(e.key===`ArrowDown`)e.preventDefault(),k(e=>u(m,e,1,y));else if(e.key===`ArrowUp`)e.preventDefault(),k(e=>u(m,e,-1,y));else if(e.key===`Home`)e.preventDefault(),k(c(m,y));else if(e.key===`End`)e.preventDefault(),k(l(m,y));else if(s(e,()=>{let e=m[j];e&&M(e)}))return},...x,className:a(p.uiPanel,`scrollable`),children:m.map((e,t)=>{let n=r?Array.isArray(A)&&A.includes(e.value):A===e.value,i=t===j;return(0,v.jsxs)(`li`,{id:`${w}-option-${t}`,role:`option`,"aria-selected":n,"aria-disabled":e.disabled||void 0,onMouseDown:n=>{n.preventDefault(),!e.disabled&&(k(t),M(e))},tabIndex:-1,className:a(p.uiPopupOption,e.disabled&&p.disabled,i&&p.uiPopupOptionActive,n&&p.selected),children:[n?(0,v.jsx)(f,{className:p.uiPopupOptionIcon}):(0,v.jsx)(`span`,{className:p.uiPopupOptionIcon}),(0,v.jsx)(`div`,{children:o?o(e,n,i):e.label??String(e.value)})]},d?d(e,t):t)})})}var _,v,y,b=n((()=>{_=t(r(),1),o(),d(),m(),v=i(),y=e=>e.disabled===!0,g.__docgenInfo={description:``,methods:[],displayName:`Listbox`}})),x=e({CustomRender:()=>O,MultiSelect:()=>D,SingleSelect:()=>E,__namedExportsOrder:()=>k,default:()=>T});function S(e){return e.multiple?(0,w.jsx)(g,{...e,multiple:!0}):(0,w.jsx)(g,{...e})}var C,w,T,E,D,O,k,A=n((()=>{C=t(r(),1),b(),w=i(),T={title:`Shared/UI/Listbox`,component:S,args:{options:[{id:`low`,label:`Низкий`},{id:`medium`,label:`Средний`},{id:`high`,label:`Высокий`},{id:`critical`,label:`Критический`,disabled:!0}],multiple:!1,value:`medium`,onChange:()=>{}},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{options:{description:`Массив доступных опций списка.`,control:!1},multiple:{description:`Режим множественного выбора.`,control:`boolean`},value:{description:`Текущее выбранное значение (или массив значений).`,control:!1},defaultValue:{description:`Начальное значение для uncontrolled-режима.`,control:!1},onChange:{description:`Вызывается при выборе опции.`,control:!1},focusOnMount:{description:`Автофокус списка при монтировании.`,control:`boolean`},renderItem:{description:`Кастомный рендер строки списка.`,control:!1},getKey:{description:`Функция генерации ключа для опции.`,control:!1},className:{description:`Дополнительный CSS-класс.`,control:`text`}}},E={render:e=>{let[t,n]=(0,C.useState)(`medium`);return(0,w.jsxs)(`div`,{style:{display:`grid`,gap:12,maxWidth:280},children:[(0,w.jsx)(S,{...e,multiple:!1,value:t,onChange:e=>{typeof e==`string`&&n(e)}}),(0,w.jsxs)(`div`,{children:[`Выбрано: `,t]})]})}},D={render:e=>{let[t,n]=(0,C.useState)([`low`,`high`]);return(0,w.jsxs)(`div`,{style:{display:`grid`,gap:12,maxWidth:320},children:[(0,w.jsx)(S,{...e,multiple:!0,value:t,onChange:e=>{Array.isArray(e)&&n(e)}}),(0,w.jsxs)(`div`,{children:[`Выбрано: `,t.join(`, `)||`пусто`]})]})},args:{multiple:!0}},O={render:e=>{let[t,n]=(0,C.useState)(`low`);return(0,w.jsx)(S,{...e,value:t,onChange:e=>{typeof e==`string`&&n(e)},renderItem:(e,t,n)=>(0,w.jsxs)(`div`,{style:{display:`flex`,justifyContent:`space-between`,width:`100%`,opacity:e.disabled?.5:1},children:[(0,w.jsx)(`span`,{children:e.label}),(0,w.jsx)(`span`,{children:t?`Выбрано`:n?`Фокус`:``})]})})}},E.parameters={...E.parameters,docs:{...E.parameters?.docs,source:{originalSource:`{
1
+ import{a as e,c as t,i as n}from"./preload-helper-B45gAKPr.js";import{C as r}from"./iframe-DVy5ysVn.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{a,i as o,n as s,r as c,s as l,t as u}from"./utils-DBorka30.js";import{t as d,wt as f}from"./lucide-react-BArVG5iC.js";import{n as p,t as m}from"./ui.module-wFHXkJzp.js";function h(e,t,n){if(n){if(Array.isArray(t)&&t.length>0){let n=e.findIndex(e=>t.includes(e.value)&&!e.disabled);if(n>=0)return n}return c(e,y)}if(t!==void 0){let n=e.findIndex(e=>e.value===t&&!e.disabled);if(n>=0)return n}return c(e,y)}function g(e){let{value:t,defaultValue:n,multiple:r,focusOnMount:i,renderItem:o,getKey:d,options:m,onChange:g,id:b,...x}=e,S=t!==void 0,C=(0,_.useId)(),w=b??`${C}-listbox`,[T,E]=(0,_.useState)(n),D=(0,_.useRef)(null),[O,k]=(0,_.useState)(()=>h(m,t??n,r)),A=(0,_.useMemo)(()=>(S?t:T)??(r?[]:null),[T,S,r,t]),j=O,M=t=>{if(t.disabled)return;let n;if(e.multiple){let r=Array.isArray(A)?A:[];n=r.includes(t.value)?r.filter(e=>e!==t.value):[...r,t.value],e.onChange?.(n,t)}else n=t.value,e.onChange?.(n,t);S||E(n)};return(0,_.useEffect)(()=>{let e=D.current?.querySelectorAll(`[role="option"]`)[j];e&&e.scrollIntoView({block:`nearest`})},[j]),(0,_.useLayoutEffect)(()=>{i&&D.current?.focus()},[i]),(0,v.jsx)(`ul`,{ref:D,id:w,role:`listbox`,"aria-multiselectable":r||void 0,"aria-activedescendant":j>=0?`${w}-option-${j}`:void 0,tabIndex:0,onKeyDown:e=>{if(e.key===`ArrowDown`)e.preventDefault(),k(e=>u(m,e,1,y));else if(e.key===`ArrowUp`)e.preventDefault(),k(e=>u(m,e,-1,y));else if(e.key===`Home`)e.preventDefault(),k(c(m,y));else if(e.key===`End`)e.preventDefault(),k(l(m,y));else if(s(e,()=>{let e=m[j];e&&M(e)}))return},...x,className:a(p.uiPanel,`scrollable`),children:m.map((e,t)=>{let n=r?Array.isArray(A)&&A.includes(e.value):A===e.value,i=t===j;return(0,v.jsxs)(`li`,{id:`${w}-option-${t}`,role:`option`,"aria-selected":n,"aria-disabled":e.disabled||void 0,onMouseDown:n=>{n.preventDefault(),!e.disabled&&(k(t),M(e))},tabIndex:-1,className:a(p.uiPopupOption,e.disabled&&p.disabled,i&&p.uiPopupOptionActive,n&&p.selected),children:[n?(0,v.jsx)(f,{className:p.uiPopupOptionIcon}):(0,v.jsx)(`span`,{className:p.uiPopupOptionIcon}),(0,v.jsx)(`div`,{children:o?o(e,n,i):e.label??String(e.value)})]},d?d(e,t):t)})})}var _,v,y,b=n((()=>{_=t(r(),1),o(),d(),m(),v=i(),y=e=>e.disabled===!0,g.__docgenInfo={description:``,methods:[],displayName:`Listbox`}})),x=e({CustomRender:()=>O,MultiSelect:()=>D,SingleSelect:()=>E,__namedExportsOrder:()=>k,default:()=>T});function S(e){return e.multiple?(0,w.jsx)(g,{...e,multiple:!0}):(0,w.jsx)(g,{...e})}var C,w,T,E,D,O,k,A=n((()=>{C=t(r(),1),b(),w=i(),T={title:`Shared/UI/Listbox`,component:S,args:{options:[{id:`low`,label:`Низкий`},{id:`medium`,label:`Средний`},{id:`high`,label:`Высокий`},{id:`critical`,label:`Критический`,disabled:!0}],multiple:!1,value:`medium`,onChange:()=>{}},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{options:{description:`Массив доступных опций списка.`,control:!1},multiple:{description:`Режим множественного выбора.`,control:`boolean`},value:{description:`Текущее выбранное значение (или массив значений).`,control:!1},defaultValue:{description:`Начальное значение для uncontrolled-режима.`,control:!1},onChange:{description:`Вызывается при выборе опции.`,control:!1},focusOnMount:{description:`Автофокус списка при монтировании.`,control:`boolean`},renderItem:{description:`Кастомный рендер строки списка.`,control:!1},getKey:{description:`Функция генерации ключа для опции.`,control:!1},className:{description:`Дополнительный CSS-класс.`,control:`text`}}},E={render:e=>{let[t,n]=(0,C.useState)(`medium`);return(0,w.jsxs)(`div`,{style:{display:`grid`,gap:12,maxWidth:280},children:[(0,w.jsx)(S,{...e,multiple:!1,value:t,onChange:e=>{typeof e==`string`&&n(e)}}),(0,w.jsxs)(`div`,{children:[`Выбрано: `,t]})]})}},D={render:e=>{let[t,n]=(0,C.useState)([`low`,`high`]);return(0,w.jsxs)(`div`,{style:{display:`grid`,gap:12,maxWidth:320},children:[(0,w.jsx)(S,{...e,multiple:!0,value:t,onChange:e=>{Array.isArray(e)&&n(e)}}),(0,w.jsxs)(`div`,{children:[`Выбрано: `,t.join(`, `)||`пусто`]})]})},args:{multiple:!0}},O={render:e=>{let[t,n]=(0,C.useState)(`low`);return(0,w.jsx)(S,{...e,value:t,onChange:e=>{typeof e==`string`&&n(e)},renderItem:(e,t,n)=>(0,w.jsxs)(`div`,{style:{display:`flex`,justifyContent:`space-between`,width:`100%`,opacity:e.disabled?.5:1},children:[(0,w.jsx)(`span`,{children:e.label}),(0,w.jsx)(`span`,{children:t?`Выбрано`:n?`Фокус`:``})]})})}},E.parameters={...E.parameters,docs:{...E.parameters?.docs,source:{originalSource:`{
2
2
  render: args => {
3
3
  const [value, setValue] = useState<string>("medium");
4
4
  return <div style={{
@@ -1,4 +1,4 @@
1
- import{i as e}from"./preload-helper-B45gAKPr.js";import{E as t,a as n,d as r,f as i,l as a,m as o,n as s,p as c,r as l,u}from"./blocks-B-ZSUli0.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-B8QUPqDz.js";import{Controlled as p,ScrollableContent as m,Sizes as h,StackedModals as g,WithToolbarAndFooter as _,n as v,t as y}from"./Modal.stories-Gli7XX36.js";function b(e){let o={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...t(),...e.components};return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(a,{of:y,parameters:{docs:{toc:!0}}}),`
1
+ import{i as e}from"./preload-helper-B45gAKPr.js";import{E as t,a as n,d as r,f as i,l as a,m as o,n as s,p as c,r as l,u}from"./blocks-BzLMo9f0.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-BtEBm5C8.js";import{Controlled as p,ScrollableContent as m,Sizes as h,StackedModals as g,WithToolbarAndFooter as _,n as v,t as y}from"./Modal.stories-DROInBOf.js";function b(e){let o={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...t(),...e.components};return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(a,{of:y,parameters:{docs:{toc:!0}}}),`
2
2
  `,(0,S.jsx)(c,{children:`Modal`}),`
3
3
  `,(0,S.jsx)(i,{children:`Составная модалка с контентом, toolbar и footer для пользовательских диалоговых сценариев`}),`
4
4
  `,(0,S.jsx)(o.p,{children:`Modal уже имеет живые stories, а эта страница собирает их в структурированную документацию с краткими рекомендациями, примерами подключения и API.
@@ -0,0 +1,180 @@
1
+ import{a as e,c as t,i as n}from"./preload-helper-B45gAKPr.js";import{C as r}from"./iframe-DVy5ysVn.js";import{t as i}from"./react-dom-WjbhetUB.js";import{t as a}from"./jsx-runtime-BBQGix-2.js";import{a as o,i as s}from"./utils-DBorka30.js";import{o as ee,t as c}from"./lucide-react-BArVG5iC.js";import{a as l,i as te,r as ne,s as re}from"./error-B04urtCn.js";import{o as u}from"./Flex-CMNyPBNH.js";import{t as d}from"./flex-D_tOs6bG.js";import{t as f}from"./Button-Bxu26CXp.js";import{a as ie,i as ae,n as oe,t as p}from"./react-HmqNZDrt.js";import{t as m}from"./button-0hVXNko4.js";import{t as h}from"./Input-CXHEGwmP.js";import{t as g}from"./input-CHBSC7hw.js";import{i as se}from"./Grid-CplnHZC8.js";import{t as ce}from"./grid-BGmgOt1u.js";import{i as _,t as le}from"./misc-c1mQx-JP.js";var v,y,b,x,S,C,w,T,E,D,O,k,ue=n((()=>{v=`vGPUKV`,y=`O7gb7P`,b=`RVq8v3`,x=`PCSUAL`,S=`XDCHzq`,C=`t1kl8L`,w=`o3PEEB`,T=`WhUkxm`,E=`NDgdMi`,D=`JDlse5`,O=`FaDKSt`,k={modal:v,sm:y,md:b,lg:x,xl:S,xxl:C,inside:w,header:T,body:E,headerText:D,headerButton:O}})),de,fe,pe,me=n((()=>{de={hidden:{opacity:0,scale:.96,y:12},visible:{opacity:1,scale:1,y:0}},fe={duration:.18,ease:[.22,1,.36,1]},pe={duration:0}})),A,j,M,N=n((()=>{A=t(r(),1),j=(0,A.createContext)({modals:[],openModal:()=>{},closeModal:()=>{},isTopModal:()=>!1}),M=()=>(0,A.useContext)(j)})),P,F,I,L,R,z,B,he=n((()=>{P=t(r(),1),l(),s(),c(),p(),F=t(i(),1),m(),d(),ce(),le(),ue(),me(),N(),I=a(),L=({children:e,className:t})=>(0,I.jsx)(`div`,{className:o(`surface2 paddingMd borderBottom`,t),children:e}),L.displayName=`Modal.Toolbar`,R=({children:e,className:t,scrollable:n})=>(0,I.jsx)(`div`,{className:o(`paddingMd h100 overflowHidden`,t),children:n?(0,I.jsx)(_,{className:`h100`,children:e}):e}),R.displayName=`Modal.Content`,z=({children:e,className:t})=>(0,I.jsx)(`div`,{className:o(`surface2 borderTop paddingMd`,t),children:(0,I.jsx)(u,{gap:`sm`,align:`center`,justify:`end`,children:e})}),z.displayName=`Modal.Footer`,B=({isOpen:e,title:t,size:n=`sm`,height:r,onClose:i,children:a})=>{let s=(0,P.useId)(),c=(0,P.useId)(),{modals:l,openModal:u,closeModal:d,isTopModal:p}=M(),m=ae(),h=(0,P.useRef)(null),g=(0,P.useRef)(0),ce=e&&(l.length===0||p(s));(0,P.useEffect)(()=>{e&&(h.current=document.activeElement instanceof HTMLElement?document.activeElement:null)},[e]);let _=re({active:e||!1,trapFocus:!0,restoreFocus:!1});te({active:ce||!1,onDismiss:i,containerRef:_}),(0,P.useEffect)(()=>{e&&u(s)},[e,s,u]),(0,P.useEffect)(()=>()=>{window.cancelAnimationFrame(g.current),d(s)},[d,s]);function le(){d(s);let e=h.current;g.current=window.requestAnimationFrame(()=>{e?.isConnected&&e.focus(),h.current=null})}let v=ne(`modal-root`);if(!v)return null;let y=null,b=null,x=null,S=P.Children.toArray(a);for(let e of S)switch(e.type.displayName){case L.displayName:if(y)throw Error(`Modal: duplicate <Toolbar> found`);y=e;break;case z.displayName:if(x)throw Error(`Modal: duplicate <Footer> found`);x=e;break;case R.displayName:if(b)throw Error(`Modal: duplicate <Content> found`);b=e;break}return(0,F.createPortal)((0,I.jsx)(ie,{onExitComplete:le,children:e?(0,I.jsxs)(oe.div,{ref:_,className:o(k.modal,k[n]),style:{height:r},role:`dialog`,"aria-modal":`true`,"aria-labelledby":c,"aria-describedby":`${c}-content`,initial:`hidden`,animate:`visible`,exit:`hidden`,variants:de,transition:m?pe:fe,children:[(0,I.jsxs)(`div`,{className:o(k.header,y?``:`borderBottom`),children:[(0,I.jsx)(`h3`,{className:k.headerText,id:c,children:t}),(0,I.jsx)(f,{icon:(0,I.jsx)(ee,{}),className:k.headerButton,variant:`ghost`,"aria-label":`Закрыть модальное окно`,onClick:i})]}),(0,I.jsxs)(se,{id:`${c}-content`,templateRows:`${y?`auto`:``} 1fr ${x?`auto`:``}`.trim(),className:k.body,children:[y,b,x]})]}):null}),v)},L.__docgenInfo={description:``,methods:[],displayName:`Modal.Toolbar`,props:{children:{required:!0,tsType:{name:`ReactReactNode`,raw:`React.ReactNode`},description:``},className:{required:!1,tsType:{name:`string`},description:``}}},R.__docgenInfo={description:``,methods:[],displayName:`Modal.Content`,props:{children:{required:!0,tsType:{name:`ReactReactNode`,raw:`React.ReactNode`},description:``},className:{required:!1,tsType:{name:`string`},description:``},scrollable:{required:!1,tsType:{name:`boolean`},description:``}}},z.__docgenInfo={description:``,methods:[],displayName:`Modal.Footer`,props:{children:{required:!0,tsType:{name:`ReactReactNode`,raw:`React.ReactNode`},description:``},className:{required:!1,tsType:{name:`string`},description:``}}}}));function V({children:e,compensateScrollbar:t=!1}){let[n,r]=(0,H.useState)([]),i=(0,H.useRef)(0),a=(0,H.useRef)(0),o=(0,H.useRef)(``),s=(0,H.useRef)(!1),ee=(0,H.useCallback)(e=>{r(t=>[...t,e])},[]),c=(0,H.useCallback)(e=>{r(t=>t.filter(t=>t!==e))},[]),l=(0,H.useCallback)(e=>n[n.length-1]===e,[n]);return(0,H.useEffect)(()=>{let e=i.current===0;if(e&&n.length>0){let e=window.scrollY,r=document.querySelector(`#app-root`);a.current=Math.max(0,window.innerWidth-document.documentElement.clientWidth),o.current=document.body.style.paddingRight,document.body.style.position=`fixed`,document.body.style.top=`-${e}px`,document.body.style.width=`100%`,t&&(document.body.style.paddingRight=`${a.current}px`,s.current=!0),r?.setAttribute(`inert`,`true`),i.current=n.length;return}if(!e&&n.length>0&&t!==s.current&&(document.body.style.paddingRight=t?`${a.current}px`:o.current,s.current=t),!e&&n.length===0){let e=document.querySelector(`#app-root`),t=parseInt(document.body.style.top||`0`)*-1;document.body.style.position=``,document.body.style.top=``,document.body.style.width=``,s.current&&=(document.body.style.paddingRight=o.current,!1),e?.removeAttribute(`inert`),window.scrollTo({top:t,left:0,behavior:`instant`})}i.current=n.length},[t,n.length]),(0,U.jsx)(j.Provider,{value:{modals:n,openModal:ee,closeModal:c,isTopModal:l},children:e})}var H,U,ge=n((()=>{H=t(r(),1),N(),U=a(),V.__docgenInfo={description:`Провайдер для централизованного управления стеком модальных окон. Дает вложенным компонентам доступ к открытию и закрытию модалок через контекст.`,methods:[],displayName:`ModalManagerProvider`,props:{children:{required:!0,tsType:{name:`ReactReactNode`,raw:`React.ReactNode`},description:``},compensateScrollbar:{required:!1,tsType:{name:`boolean`},description:`Компенсирует исчезновение скроллбара правым padding у body.`,defaultValue:{value:`false`,computed:!1}}}}})),_e=n((()=>{he(),ge(),N()})),ve=e({Controlled:()=>J,ScrollableContent:()=>X,Sizes:()=>Z,StackedModals:()=>Q,WithToolbarAndFooter:()=>Y,__namedExportsOrder:()=>$,default:()=>q});function ye({children:e}){return(0,K.jsx)(`div`,{style:{minHeight:`60dvh`,padding:24,display:`flex`,alignItems:`center`,justifyContent:`center`},children:e})}function W(){let[e,t]=(0,G.useState)(`Алексей`),[n,r]=(0,G.useState)(`Департамент автоматизации бизнеса`);return(0,K.jsxs)(`div`,{style:{display:`grid`,gap:16},children:[(0,K.jsx)(h,{label:`Имя`,value:e,onChange:t,placeholder:`Введите имя`}),(0,K.jsx)(h,{label:`Подразделение`,value:n,onChange:r,placeholder:`Введите подразделение`}),(0,K.jsxs)(`div`,{style:{padding:12,borderRadius:8,background:`var(--surface-1)`,border:`1px solid var(--border-1)`},children:[`Текущие значения: `,e||`не указано`,`, `,n||`не указано`]})]})}var G,K,q,J,Y,X,Z,Q,$,be=n((()=>{G=t(r(),1),m(),g(),_e(),K=a(),q={title:`Shared/UI/Modal`,component:B,parameters:{atomicCanvas:!0,layout:`fullscreen`,docs:{description:{component:"Композиционная модалка с `Toolbar`, `Content` и `Footer`, поддержкой focus trap, возврата фокуса, закрытия по `Escape` и менеджером стека через `ModalManagerProvider`."}}},decorators:[e=>(0,K.jsx)(V,{children:(0,K.jsx)(ye,{children:e()})})],args:{isOpen:!1,title:`Редактирование профиля`,size:`md`,height:void 0,onClose:()=>{},children:(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(R,{children:(0,K.jsx)(W,{})}),(0,K.jsxs)(z,{children:[(0,K.jsx)(f,{variant:`transparent`,children:`Отмена`}),(0,K.jsx)(f,{children:`Сохранить`})]})]})},argTypes:{isOpen:{description:`Управляет видимостью модального окна.`,control:`boolean`},title:{description:`Заголовок модального окна.`,control:`text`},size:{description:`Предустановленный размер модального окна.`,control:`inline-radio`,options:[`sm`,`md`,`lg`,`xl`,`inside`]},height:{description:`Явная высота body-области модалки.`,control:`text`},onClose:{description:"Вызывается при закрытии по кнопке, `Escape` или пользовательскому действию.",control:!1},children:{description:"Композиция из `ModalToolbar`, `ModalContent`, `ModalFooter`.",control:!1}}},J={name:`Управляемая модалка`,render:e=>{let[t,n]=(0,G.useState)(!1);return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(f,{onClick:()=>n(!0),children:`Открыть модалку`}),(0,K.jsxs)(B,{...e,isOpen:t,onClose:()=>n(!1),children:[(0,K.jsx)(R,{children:(0,K.jsx)(W,{})}),(0,K.jsxs)(z,{children:[(0,K.jsx)(f,{variant:`transparent`,onClick:()=>n(!1),children:`Отмена`}),(0,K.jsx)(f,{onClick:()=>n(!1),children:`Сохранить`})]})]})]})}},Y={name:`Полная композиция`,render:e=>{let[t,n]=(0,G.useState)(!1);return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(f,{onClick:()=>n(!0),children:`Открыть сценарий редактирования`}),(0,K.jsxs)(B,{...e,isOpen:t,onClose:()=>n(!1),height:`min(34rem, 70dvh)`,children:[(0,K.jsx)(L,{children:(0,K.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,justifyContent:`space-between`,gap:12,padding:12,borderRadius:8,background:`var(--surface-1)`,border:`1px solid var(--border-1)`},children:[(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`div`,{style:{fontWeight:600},children:`Черновик обновлён автоматически`}),(0,K.jsx)(`div`,{style:{opacity:.72},children:`Последнее сохранение: 2 минуты назад`})]}),(0,K.jsx)(f,{variant:`transparent`,children:`Сбросить`})]})}),(0,K.jsx)(R,{children:(0,K.jsx)(W,{})}),(0,K.jsxs)(z,{children:[(0,K.jsx)(f,{variant:`transparent`,onClick:()=>n(!1),children:`Отмена`}),(0,K.jsx)(f,{variant:`success`,onClick:()=>n(!1),children:`Применить`})]})]})]})}},X={name:`Длинный контент`,render:e=>{let[t,n]=(0,G.useState)(!1);return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(f,{onClick:()=>n(!0),children:`Открыть длинный контент`}),(0,K.jsxs)(B,{...e,isOpen:t,onClose:()=>n(!1),size:`lg`,height:`min(38rem, 75dvh)`,title:`Журнал изменений`,children:[(0,K.jsx)(R,{children:(0,K.jsx)(`div`,{style:{display:`grid`,gap:12},children:Array.from({length:18},(e,t)=>(0,K.jsxs)(`div`,{style:{padding:12,borderRadius:8,border:`1px solid var(--border-1)`,background:`var(--surface-1)`},children:[(0,K.jsxs)(`div`,{style:{fontWeight:600},children:[`Событие #`,t+1]}),(0,K.jsx)(`div`,{style:{opacity:.72},children:`Пользователь обновил настройки карточки, изменил состав полей и подтвердил сохранение конфигурации.`})]},t))})}),(0,K.jsx)(z,{children:(0,K.jsx)(f,{onClick:()=>n(!1),children:`Закрыть`})})]})]})}},Z={name:`Размеры`,render:()=>{let[e,t]=(0,G.useState)(null);return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`div`,{style:{display:`flex`,flexWrap:`wrap`,gap:12,justifyContent:`center`},children:[`sm`,`md`,`lg`,`xl`,`inside`].map(e=>(0,K.jsx)(f,{variant:`transparent`,onClick:()=>t(e),children:e.toUpperCase()},e))}),e&&(0,K.jsxs)(B,{isOpen:!0,onClose:()=>t(null),size:e,title:`Размер ${e.toUpperCase()}`,children:[(0,K.jsx)(R,{children:(0,K.jsxs)(`div`,{style:{display:`grid`,gap:12},children:[(0,K.jsx)(`div`,{children:`Этот сценарий помогает быстро сравнить ширину и поведение модалки для разных размеров.`}),(0,K.jsx)(`div`,{style:{opacity:.72},children:"Проверьте отступы, читабельность и поведение при `Escape`."})]})}),(0,K.jsx)(z,{children:(0,K.jsx)(f,{onClick:()=>t(null),children:`Понятно`})})]})]})}},Q={name:`Стек модалок`,render:e=>{let[t,n]=(0,G.useState)(!1),[r,i]=(0,G.useState)(!1);return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(f,{onClick:()=>n(!0),children:`Открыть первую модалку`}),(0,K.jsxs)(B,{...e,isOpen:t,onClose:()=>{i(!1),n(!1)},size:`lg`,title:`Первая модалка`,children:[(0,K.jsx)(R,{children:(0,K.jsxs)(`div`,{style:{display:`grid`,gap:16},children:[(0,K.jsx)(`div`,{children:"Откройте вторую модалку и проверьте, что `Escape` закрывает только верхний слой."}),(0,K.jsx)(f,{variant:`transparent`,onClick:()=>i(!0),children:`Открыть вторую модалку`})]})}),(0,K.jsx)(z,{children:(0,K.jsx)(f,{variant:`transparent`,onClick:()=>n(!1),children:`Закрыть первую`})})]}),(0,K.jsxs)(B,{isOpen:r,onClose:()=>i(!1),size:`sm`,title:`Вторая модалка`,children:[(0,K.jsx)(R,{children:(0,K.jsxs)(`div`,{style:{display:`grid`,gap:12},children:[(0,K.jsx)(`div`,{children:`Эта модалка должна считаться верхней в стеке.`}),(0,K.jsx)(h,{label:`Короткое поле`,value:`Фокус внутри`,onChange:()=>{}})]})}),(0,K.jsx)(z,{children:(0,K.jsx)(f,{onClick:()=>i(!1),children:`Закрыть вторую`})})]})]})}},J.parameters={...J.parameters,docs:{...J.parameters?.docs,source:{originalSource:`{
2
+ name: "Управляемая модалка",
3
+ render: args => {
4
+ const [open, setOpen] = useState(false);
5
+ return <>
6
+ <Button onClick={() => setOpen(true)}>Открыть модалку</Button>
7
+ <Modal {...args} isOpen={open} onClose={() => setOpen(false)}>
8
+ <ModalContent>
9
+ <DemoFormContent />
10
+ </ModalContent>
11
+ <ModalFooter>
12
+ <Button variant="transparent" onClick={() => setOpen(false)}>
13
+ Отмена
14
+ </Button>
15
+ <Button onClick={() => setOpen(false)}>Сохранить</Button>
16
+ </ModalFooter>
17
+ </Modal>
18
+ </>;
19
+ }
20
+ }`,...J.parameters?.docs?.source}}},Y.parameters={...Y.parameters,docs:{...Y.parameters?.docs,source:{originalSource:`{
21
+ name: "Полная композиция",
22
+ render: args => {
23
+ const [open, setOpen] = useState(false);
24
+ return <>
25
+ <Button onClick={() => setOpen(true)}>Открыть сценарий редактирования</Button>
26
+ <Modal {...args} isOpen={open} onClose={() => setOpen(false)} height="min(34rem, 70dvh)">
27
+ <ModalToolbar>
28
+ <div style={{
29
+ display: "flex",
30
+ alignItems: "center",
31
+ justifyContent: "space-between",
32
+ gap: 12,
33
+ padding: 12,
34
+ borderRadius: 8,
35
+ background: "var(--surface-1)",
36
+ border: "1px solid var(--border-1)"
37
+ }}>
38
+ <div>
39
+ <div style={{
40
+ fontWeight: 600
41
+ }}>Черновик обновлён автоматически</div>
42
+ <div style={{
43
+ opacity: 0.72
44
+ }}>Последнее сохранение: 2 минуты назад</div>
45
+ </div>
46
+ <Button variant="transparent">Сбросить</Button>
47
+ </div>
48
+ </ModalToolbar>
49
+ <ModalContent>
50
+ <DemoFormContent />
51
+ </ModalContent>
52
+ <ModalFooter>
53
+ <Button variant="transparent" onClick={() => setOpen(false)}>
54
+ Отмена
55
+ </Button>
56
+ <Button variant="success" onClick={() => setOpen(false)}>
57
+ Применить
58
+ </Button>
59
+ </ModalFooter>
60
+ </Modal>
61
+ </>;
62
+ }
63
+ }`,...Y.parameters?.docs?.source}}},X.parameters={...X.parameters,docs:{...X.parameters?.docs,source:{originalSource:`{
64
+ name: "Длинный контент",
65
+ render: args => {
66
+ const [open, setOpen] = useState(false);
67
+ return <>
68
+ <Button onClick={() => setOpen(true)}>Открыть длинный контент</Button>
69
+ <Modal {...args} isOpen={open} onClose={() => setOpen(false)} size="lg" height="min(38rem, 75dvh)" title="Журнал изменений">
70
+ <ModalContent>
71
+ <div style={{
72
+ display: "grid",
73
+ gap: 12
74
+ }}>
75
+ {Array.from({
76
+ length: 18
77
+ }, (_, index) => <div key={index} style={{
78
+ padding: 12,
79
+ borderRadius: 8,
80
+ border: "1px solid var(--border-1)",
81
+ background: "var(--surface-1)"
82
+ }}>
83
+ <div style={{
84
+ fontWeight: 600
85
+ }}>Событие #{index + 1}</div>
86
+ <div style={{
87
+ opacity: 0.72
88
+ }}>
89
+ Пользователь обновил настройки карточки, изменил состав полей и подтвердил сохранение конфигурации.
90
+ </div>
91
+ </div>)}
92
+ </div>
93
+ </ModalContent>
94
+ <ModalFooter>
95
+ <Button onClick={() => setOpen(false)}>Закрыть</Button>
96
+ </ModalFooter>
97
+ </Modal>
98
+ </>;
99
+ }
100
+ }`,...X.parameters?.docs?.source}}},Z.parameters={...Z.parameters,docs:{...Z.parameters?.docs,source:{originalSource:`{
101
+ name: "Размеры",
102
+ render: () => {
103
+ const [openSize, setOpenSize] = useState<"sm" | "md" | "lg" | "xl" | "inside" | null>(null);
104
+ return <>
105
+ <div style={{
106
+ display: "flex",
107
+ flexWrap: "wrap",
108
+ gap: 12,
109
+ justifyContent: "center"
110
+ }}>
111
+ {(["sm", "md", "lg", "xl", "inside"] as const).map(size => <Button key={size} variant="transparent" onClick={() => setOpenSize(size)}>
112
+ {size.toUpperCase()}
113
+ </Button>)}
114
+ </div>
115
+
116
+ {openSize && <Modal isOpen onClose={() => setOpenSize(null)} size={openSize} title={\`Размер \${openSize.toUpperCase()}\`}>
117
+ <ModalContent>
118
+ <div style={{
119
+ display: "grid",
120
+ gap: 12
121
+ }}>
122
+ <div>Этот сценарий помогает быстро сравнить ширину и поведение модалки для разных размеров.</div>
123
+ <div style={{
124
+ opacity: 0.72
125
+ }}>Проверьте отступы, читабельность и поведение при \`Escape\`.</div>
126
+ </div>
127
+ </ModalContent>
128
+ <ModalFooter>
129
+ <Button onClick={() => setOpenSize(null)}>Понятно</Button>
130
+ </ModalFooter>
131
+ </Modal>}
132
+ </>;
133
+ }
134
+ }`,...Z.parameters?.docs?.source}}},Q.parameters={...Q.parameters,docs:{...Q.parameters?.docs,source:{originalSource:`{
135
+ name: "Стек модалок",
136
+ render: args => {
137
+ const [outerOpen, setOuterOpen] = useState(false);
138
+ const [innerOpen, setInnerOpen] = useState(false);
139
+ return <>
140
+ <Button onClick={() => setOuterOpen(true)}>Открыть первую модалку</Button>
141
+
142
+ <Modal {...args} isOpen={outerOpen} onClose={() => {
143
+ setInnerOpen(false);
144
+ setOuterOpen(false);
145
+ }} size="lg" title="Первая модалка">
146
+ <ModalContent>
147
+ <div style={{
148
+ display: "grid",
149
+ gap: 16
150
+ }}>
151
+ <div>Откройте вторую модалку и проверьте, что \`Escape\` закрывает только верхний слой.</div>
152
+ <Button variant="transparent" onClick={() => setInnerOpen(true)}>
153
+ Открыть вторую модалку
154
+ </Button>
155
+ </div>
156
+ </ModalContent>
157
+ <ModalFooter>
158
+ <Button variant="transparent" onClick={() => setOuterOpen(false)}>
159
+ Закрыть первую
160
+ </Button>
161
+ </ModalFooter>
162
+ </Modal>
163
+
164
+ <Modal isOpen={innerOpen} onClose={() => setInnerOpen(false)} size="sm" title="Вторая модалка">
165
+ <ModalContent>
166
+ <div style={{
167
+ display: "grid",
168
+ gap: 12
169
+ }}>
170
+ <div>Эта модалка должна считаться верхней в стеке.</div>
171
+ <Input label="Короткое поле" value={"Фокус внутри"} onChange={() => {}} />
172
+ </div>
173
+ </ModalContent>
174
+ <ModalFooter>
175
+ <Button onClick={() => setInnerOpen(false)}>Закрыть вторую</Button>
176
+ </ModalFooter>
177
+ </Modal>
178
+ </>;
179
+ }
180
+ }`,...Q.parameters?.docs?.source}}},$=[`Controlled`,`WithToolbarAndFooter`,`ScrollableContent`,`Sizes`,`StackedModals`]}));be();export{J as Controlled,X as ScrollableContent,Z as Sizes,Q as StackedModals,Y as WithToolbarAndFooter,$ as __namedExportsOrder,q as default,be as n,ve as t};
@@ -1,2 +1,2 @@
1
- import{c as e,i as t}from"./preload-helper-B45gAKPr.js";import{C as n}from"./iframe-D1kbCBk7.js";import{t as r}from"./jsx-runtime-BBQGix-2.js";import{a as i,i as a}from"./utils-Bgk51jNr.js";import{o as ee,t as o}from"./lucide-react-DItxRogI.js";import{i as s,t as c}from"./text-CxC7Ibdz.js";import{n as l,t as u}from"./ui.module-wFHXkJzp.js";import{t as te}from"./CheckBox-BRmxHv5c.js";import{t as d}from"./Grid-sojkTYwf.js";import{t as f}from"./grid-rDCrr9Aa.js";import{C as ne,S as p,T as m,a as h,b as g,d as re,g as ie,l as ae,m as oe,r as se,s as ce,t as _,v}from"./picker-BILXnlvH.js";import{n as le,t as y}from"./SelectOptionContent-DlUoa2zi.js";import{t as b}from"./check-box-B0-G8LQm.js";function x({item:e,textKey:t,codeKey:n,highlight:r}){return(0,S.jsx)(y,{label:e[t],code:n&&e[n],highlight:r})}var S,C=t((()=>{le(),S=r(),x.__docgenInfo={description:"Отдельная опция внутри `MultiSelect`. Отрисовывает состояние выбора и подсветку текста для найденных совпадений.",methods:[],displayName:`MultiSelectOption`,props:{item:{required:!0,tsType:{name:`CollectionItem`},description:``},textKey:{required:!0,tsType:{name:`string`},description:``},codeKey:{required:!1,tsType:{name:`string`},description:``},highlight:{required:!1,tsType:{name:`string`},description:``},selected:{required:!0,tsType:{name:`boolean`},description:``}}}})),w,T,E,D,O,k=t((()=>{w=`_9oSdQi`,T=`iobHig`,E=`yatXso`,D=`h2aA6E`,O={multiSelect:w,multiSelectTokens:T,multiSelectToken:E,selectAllButton:D}}));function A({onSelectAll:e,onDeselectAll:t}){return(0,j.jsxs)(d.Container,{gap:`xs`,templateColumns:`1fr 1fr`,children:[(0,j.jsx)(`button`,{type:`button`,className:O.selectAllButton,onClick:e,"data-ui":`multi-select-select-all`,"data-action":`select-all`,children:`Выбрать все`}),(0,j.jsx)(`button`,{type:`button`,className:O.selectAllButton,onClick:t,"data-ui":`multi-select-deselect-all`,"data-action":`deselect-all`,children:`Снять выбор`})]})}var j,M=t((()=>{f(),k(),j=r(),A.__docgenInfo={description:"Панель массовых действий для `MultiSelect`. Позволяет быстро выбрать все доступные элементы или снять выбор.",methods:[],displayName:`MultiSelectOptionsToolbar`,props:{onSelectAll:{required:!0,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},onDeselectAll:{required:!0,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``}}}}));function N({value:e}){return e?(0,P.jsx)(`div`,{className:O.multiSelectTokens,children:(0,P.jsx)(`div`,{className:O.multiSelectToken,children:e})}):null}var P,F=t((()=>{k(),P=r(),N.__docgenInfo={description:"Токен выбранного значения в `MultiSelect`. Показывает выбранный элемент и кнопку его удаления из текущего набора.",methods:[],displayName:`MultiSelectToken`,props:{value:{required:!0,tsType:{name:`union`,raw:`string | undefined`,elements:[{name:`string`},{name:`undefined`}]},description:``}}}}));function I(e,t,n){if(n)return n;let r=e[0];return r?Object.keys(r).find(e=>e!==t)??t:t}function L(e,t,n){if(e.length===0)return;if(e.length>1)return`${e.length} элемент${e.length>5?`ов`:`а`})`;let r=I(e,t,n);return e[0]?.[r]??e[0]?.[t]}function ue(e){return function(t){return(0,R.jsx)(N,{value:L(t.selectedItems,e.codeKey,e.textKey)})}}function de(e){return(0,R.jsx)(A,{onSelectAll:e.selectAll,onDeselectAll:e.deselectAll})}function fe(e){return function(t,n){return(0,R.jsx)(x,{item:t,selected:n.selected,highlight:n.highlightQuery,textKey:I([t],e.codeKey,e.textKey),codeKey:e.hideCode?void 0:e.codeKey})}}var R,z=t((()=>{C(),M(),F(),R=r(),de.__docgenInfo={description:``,methods:[],displayName:`renderDefaultMultiSelectToolbar`,props:{selectedItems:{required:!0,tsType:{name:`Array`,elements:[{name:`CollectionItem`}],raw:`CollectionItem[]`},description:``},committedSelectedItems:{required:!0,tsType:{name:`Array`,elements:[{name:`CollectionItem`}],raw:`CollectionItem[]`},description:``},availableItems:{required:!0,tsType:{name:`Array`,elements:[{name:`CollectionItem`}],raw:`CollectionItem[]`},description:``},query:{required:!0,tsType:{name:`string`},description:``},open:{required:!0,tsType:{name:`boolean`},description:``},clearSelection:{required:!0,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},selectAll:{required:!0,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},deselectAll:{required:!0,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``}}}}));function B({text:e,isError:t}){return(0,V.jsxs)(`div`,{className:l.uiPopupOption,children:[(0,V.jsx)(`span`,{className:l.uiPopupOptionIcon}),(0,V.jsx)(s,{color:t?`error`:`primary`,children:e})]})}var V,pe=t((()=>{c(),u(),V=r(),B.__docgenInfo={description:"Скелетон строки опции для `MultiSelect`. Используется во время загрузки или при отображении ошибок получения списка.",methods:[],displayName:`MultiSelectOptionSkeleton`,props:{text:{required:!0,tsType:{name:`string`},description:``},isError:{required:!1,tsType:{name:`boolean`},description:``}}}}));function me({isNoData:e,isLoading:t,error:n,children:r}){return e?(0,W.jsx)(v,{emptyState:(0,W.jsx)(B,{text:`Нет данных`})}):t?(0,W.jsx)(v,{loadingState:(0,W.jsx)(B,{text:`Загрузка...`})}):n?(0,W.jsx)(v,{errorState:(0,W.jsx)(B,{isError:!0,text:`Ошибка загрузки`})}):(0,W.jsx)(W.Fragment,{children:r})}function H(e,t){return e[t]}function he(e,t,n){return Array.from(new Set([e[n],e[t],...Object.values(e)]))}function ge(e,t,n){if(e.length!==t.length)return!1;let r=new Set(t.map(e=>H(e,n)));return e.every(e=>r.has(H(e,n)))}function _e({entries:e,listId:t,activeIndex:n,selectedKeys:r,codeKey:a,query:ee,highlightQuery:o,getOptionDisabled:s,getOptionId:c,setOptionRef:u,toggleOption:d,selectOnlyOption:f,renderItem:ne}){return e.map(({item:e,index:p})=>{let m=p===n,h=r.has(H(e,a)),g=s?.(e)??!1;return(0,W.jsxs)(`div`,{id:c(t,p),ref:e=>u(p,e),role:`option`,"aria-selected":h,"aria-disabled":g||void 0,className:i(l.uiSelectOption,g&&l.disabled,h&&l.selected,m&&l.uiPopupOptionActive),onMouseDown:e=>{e.preventDefault()},children:[(0,W.jsx)(`div`,{onClick:e=>{e.stopPropagation()},children:(0,W.jsx)(te,{value:h,disabled:g,onChange:()=>{g||d(e)},onClick:e=>{e.stopPropagation()},onMouseDown:e=>{e.stopPropagation()}})}),(0,W.jsx)(`div`,{className:`overflowHidden`,onClick:()=>{g||f(e)},children:ne(e,{selected:h,active:m,disabled:g,query:ee,highlightQuery:o})})]},`${H(e,a)}-${p}`)})}var U,W,ve,G,K=t((()=>{U=e(n(),1),a(),o(),b(),_(),p(),u(),z(),k(),pe(),W=r(),ve=[],G=(0,U.forwardRef)(({codeKey:e,textKey:t,hideCode:n,items:r,value:i,onChange:a,label:o,description:s,placeholder:c,size:u,query:te,defaultQuery:d,highlightQuery:f,onQuery:p,defaultFilter:_=!0,onOpen:v,onClose:le,getOptionDisabled:y,disabled:b,error:x,isLoading:S,renderToken:C,renderToolbar:w,renderItem:T},E)=>{let D=(0,U.useRef)(null),[k,A]=(0,U.useState)(!1),j=`search-multi`,M=i??ve,N=(0,U.useMemo)(()=>new Set(M.map(t=>H(t,e))),[e,M]),P=(0,U.useMemo)(()=>r.filter(t=>!N.has(H(t,e))),[e,N,r]),F=(0,U.useMemo)(()=>I([...M,...r],e,t),[e,M,r,t]),{query:L,setQuery:R}=ce({open:k,query:te,defaultQuery:d,onQuery:p,triggerMode:j}),z=re({options:M,query:L,enabled:_,getSearchText:t=>he(t,e,F)}),B=re({options:P,query:L,enabled:_,getSearchText:t=>he(t,e,F)}),V=(0,U.useMemo)(()=>[...z,...B],[B,z]),pe=z.length>0?0:-1,{draftValue:G,setDraftValue:K,prepareOpen:ye}=h({value:M,open:k,onCommit:a,onOpen:v,onClose:le,isEqual:(t,n)=>ge(t,n,e)}),q=(0,U.useMemo)(()=>new Set(G.map(t=>H(t,e))),[e,G]),be=(0,U.useMemo)(()=>({selectedItems:G,committedSelectedItems:M,selectedKeys:q,open:k}),[M,G,k,q]),J=(0,U.useCallback)(e=>y?.(e,be)??!1,[y,be]),{activeIndex:Y,context:xe,floatingStyles:Se,getFloatingProps:Ce,setReference:we,setFloating:Te,setOptionRef:Ee,close:De,openList:Oe,toggleOpen:ke,selectActiveOption:Ae,handleReferenceKeyDown:je,handleFloatingKeyDown:Me,getOptionId:Ne,getActiveOptionId:Pe}=ae({options:V,selectedIndex:pe,open:k,onOpenChange:A,onSelect:void 0,disabled:b,getOptionDisabled:J,closeOnSelect:!1,allowOpenWithoutOptions:!0,triggerMode:j}),Fe=f??L,X=t=>{let n=H(t,e);K(r=>r.some(t=>H(t,e)===n)?r.filter(t=>H(t,e)!==n):J(t)?r:[...r,t])},Ie=e=>{if(D.current=e,typeof E==`function`){E(e);return}E&&(E.current=e)},Le=()=>{K([]),k||a([])},Re=()=>{K(t=>{let n=[...t],r=new Set(t.map(t=>H(t,e)));for(let t of V){let i=H(t,e);!r.has(i)&&!J(t)&&(r.add(i),n.push(t))}return n})},ze=()=>{K([])},Z=e=>{J(e)||(K([e]),De())},Be=k?G:M,Ve=Be.length>0,He={selectedItems:Be,committedSelectedItems:M,availableItems:B,query:L,open:k,clearSelection:Le,selectAll:Re,deselectAll:ze},Ue=C===void 0?ue({codeKey:e,textKey:F}):C,We=w===void 0?de:w,Ge=T??fe({codeKey:e,textKey:F,hideCode:n}),Ke=typeof Ue==`function`?Ue(He):null,qe=typeof We==`function`?We(He):null,Q=z.map((e,t)=>({item:e,index:t})),Je=B.map((e,t)=>({item:e,index:t+Q.length})),Ye=!S&&!x&&V.length===0,$=se({mode:j,open:k,currentQuery:L,hasDisplayValue:!1,inputRef:D,setQuery:R,openList:Oe,close:De,toggleOpen:ke,onBeforeOpen:()=>{k||ye()}});return(0,W.jsx)(m,{label:o,description:s,disabled:b,placeholder:c,size:u,className:O.multiSelect,children:({controlId:t,labelId:n,describedBy:r})=>{let i=`${t}-listbox`;return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(oe,{ref:Ie,rootRef:we,id:t,type:`text`,role:`combobox`,autoComplete:`off`,disabled:b,value:L,placeholder:Ve?void 0:c,"aria-labelledby":n,"aria-describedby":r,"aria-haspopup":`listbox`,"aria-expanded":k,"aria-controls":k?i:void 0,"aria-autocomplete":`list`,"aria-activedescendant":k?Pe(i):void 0,rootClassName:`flex alignItemsCenter`,endAdornment:(0,W.jsxs)(ie,{open:k,disabled:b,onToggleMouseDown:$.handleToggleMouseDown,onToggleClick:$.handleToggleClick,children:[Ke,(0,W.jsx)(`button`,{type:`button`,disabled:!Ve,className:l.uiClearButton,"data-ui":`multi-select-clear-button`,"data-action":`clear-multi-select`,onClick:Le,"aria-label":`Очистить все`,children:(0,W.jsx)(ee,{})})]}),onChange:e=>{$.handleTriggerInputChange(e.target.value)},onClick:$.handleTriggerClick,onFocus:e=>{$.handleTriggerFocus(e.currentTarget)},onKeyDown:e=>{je(e),!e.defaultPrevented&&$.handleTriggerKeyDown({event:e,onActivateWhenOpen:()=>{if(Y>=0){let e=V[Y];if(e){X(e);return}}Ae()},enableClosedArrowDownOpen:!0,suppressClosedArrowUp:!0})}}),(0,W.jsx)(g,{open:k,context:xe,floatingStyles:Se,listId:i,labelId:n,descriptionId:r,activeOptionId:k?Pe(i):void 0,setFloating:Te,getFloatingProps:Ce,onKeyDown:Me,initialFocus:-1,returnFocus:!1,tabIndex:-1,className:l.uiPopupOptions,header:qe,children:(0,W.jsx)(me,{isNoData:Ye,isLoading:S,error:x,children:(0,W.jsxs)(`div`,{className:`scrollable h100`,children:[(0,W.jsx)(_e,{entries:Q,listId:i,activeIndex:Y,selectedKeys:q,codeKey:e,query:L,highlightQuery:Fe,getOptionDisabled:J,getOptionId:Ne,setOptionRef:Ee,toggleOption:X,selectOnlyOption:Z,renderItem:Ge}),Q.length>0&&P.length>0&&(0,W.jsx)(ne,{className:`marginBlockSm`}),(0,W.jsx)(_e,{entries:Je,listId:i,activeIndex:Y,selectedKeys:q,codeKey:e,query:L,highlightQuery:Fe,getOptionDisabled:J,getOptionId:Ne,setOptionRef:Ee,toggleOption:X,selectOnlyOption:Z,renderItem:Ge})]})})})]})}})}),G.displayName=`MultiSelect`,G.__docgenInfo={description:`Поле множественного выбора с внутренним черновиком значений и подтверждением выбора при закрытии списка.
1
+ import{c as e,i as t}from"./preload-helper-B45gAKPr.js";import{C as n}from"./iframe-DVy5ysVn.js";import{t as r}from"./jsx-runtime-BBQGix-2.js";import{a as i,i as a}from"./utils-DBorka30.js";import{o as ee,t as o}from"./lucide-react-BArVG5iC.js";import{i as s,t as c}from"./text-D_7-zTks.js";import{n as l,t as u}from"./ui.module-wFHXkJzp.js";import{t as te}from"./CheckBox-DOWO2LSI.js";import{t as d}from"./Grid-CplnHZC8.js";import{t as f}from"./grid-BGmgOt1u.js";import{C as ne,S as p,T as m,a as h,b as g,d as re,g as ie,l as ae,m as oe,r as se,s as ce,t as _,v}from"./picker-B7q2JZpH.js";import{n as le,t as y}from"./SelectOptionContent-BQskL7HV.js";import{t as b}from"./check-box-BN6lxKsc.js";function x({item:e,textKey:t,codeKey:n,highlight:r}){return(0,S.jsx)(y,{label:e[t],code:n&&e[n],highlight:r})}var S,C=t((()=>{le(),S=r(),x.__docgenInfo={description:"Отдельная опция внутри `MultiSelect`. Отрисовывает состояние выбора и подсветку текста для найденных совпадений.",methods:[],displayName:`MultiSelectOption`,props:{item:{required:!0,tsType:{name:`CollectionItem`},description:``},textKey:{required:!0,tsType:{name:`string`},description:``},codeKey:{required:!1,tsType:{name:`string`},description:``},highlight:{required:!1,tsType:{name:`string`},description:``},selected:{required:!0,tsType:{name:`boolean`},description:``}}}})),w,T,E,D,O,k=t((()=>{w=`_9oSdQi`,T=`iobHig`,E=`yatXso`,D=`h2aA6E`,O={multiSelect:w,multiSelectTokens:T,multiSelectToken:E,selectAllButton:D}}));function A({onSelectAll:e,onDeselectAll:t}){return(0,j.jsxs)(d.Container,{gap:`xs`,templateColumns:`1fr 1fr`,children:[(0,j.jsx)(`button`,{type:`button`,className:O.selectAllButton,onClick:e,"data-ui":`multi-select-select-all`,"data-action":`select-all`,children:`Выбрать все`}),(0,j.jsx)(`button`,{type:`button`,className:O.selectAllButton,onClick:t,"data-ui":`multi-select-deselect-all`,"data-action":`deselect-all`,children:`Снять выбор`})]})}var j,M=t((()=>{f(),k(),j=r(),A.__docgenInfo={description:"Панель массовых действий для `MultiSelect`. Позволяет быстро выбрать все доступные элементы или снять выбор.",methods:[],displayName:`MultiSelectOptionsToolbar`,props:{onSelectAll:{required:!0,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},onDeselectAll:{required:!0,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``}}}}));function N({value:e}){return e?(0,P.jsx)(`div`,{className:O.multiSelectTokens,children:(0,P.jsx)(`div`,{className:O.multiSelectToken,children:e})}):null}var P,F=t((()=>{k(),P=r(),N.__docgenInfo={description:"Токен выбранного значения в `MultiSelect`. Показывает выбранный элемент и кнопку его удаления из текущего набора.",methods:[],displayName:`MultiSelectToken`,props:{value:{required:!0,tsType:{name:`union`,raw:`string | undefined`,elements:[{name:`string`},{name:`undefined`}]},description:``}}}}));function I(e,t,n){if(n)return n;let r=e[0];return r?Object.keys(r).find(e=>e!==t)??t:t}function L(e,t,n){if(e.length===0)return;if(e.length>1)return`${e.length} элемент${e.length>5?`ов`:`а`})`;let r=I(e,t,n);return e[0]?.[r]??e[0]?.[t]}function ue(e){return function(t){return(0,R.jsx)(N,{value:L(t.selectedItems,e.codeKey,e.textKey)})}}function de(e){return(0,R.jsx)(A,{onSelectAll:e.selectAll,onDeselectAll:e.deselectAll})}function fe(e){return function(t,n){return(0,R.jsx)(x,{item:t,selected:n.selected,highlight:n.highlightQuery,textKey:I([t],e.codeKey,e.textKey),codeKey:e.hideCode?void 0:e.codeKey})}}var R,z=t((()=>{C(),M(),F(),R=r(),de.__docgenInfo={description:``,methods:[],displayName:`renderDefaultMultiSelectToolbar`,props:{selectedItems:{required:!0,tsType:{name:`Array`,elements:[{name:`CollectionItem`}],raw:`CollectionItem[]`},description:``},committedSelectedItems:{required:!0,tsType:{name:`Array`,elements:[{name:`CollectionItem`}],raw:`CollectionItem[]`},description:``},availableItems:{required:!0,tsType:{name:`Array`,elements:[{name:`CollectionItem`}],raw:`CollectionItem[]`},description:``},query:{required:!0,tsType:{name:`string`},description:``},open:{required:!0,tsType:{name:`boolean`},description:``},clearSelection:{required:!0,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},selectAll:{required:!0,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},deselectAll:{required:!0,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``}}}}));function B({text:e,isError:t}){return(0,V.jsxs)(`div`,{className:l.uiPopupOption,children:[(0,V.jsx)(`span`,{className:l.uiPopupOptionIcon}),(0,V.jsx)(s,{color:t?`error`:`primary`,children:e})]})}var V,pe=t((()=>{c(),u(),V=r(),B.__docgenInfo={description:"Скелетон строки опции для `MultiSelect`. Используется во время загрузки или при отображении ошибок получения списка.",methods:[],displayName:`MultiSelectOptionSkeleton`,props:{text:{required:!0,tsType:{name:`string`},description:``},isError:{required:!1,tsType:{name:`boolean`},description:``}}}}));function me({isNoData:e,isLoading:t,error:n,children:r}){return e?(0,W.jsx)(v,{emptyState:(0,W.jsx)(B,{text:`Нет данных`})}):t?(0,W.jsx)(v,{loadingState:(0,W.jsx)(B,{text:`Загрузка...`})}):n?(0,W.jsx)(v,{errorState:(0,W.jsx)(B,{isError:!0,text:`Ошибка загрузки`})}):(0,W.jsx)(W.Fragment,{children:r})}function H(e,t){return e[t]}function he(e,t,n){return Array.from(new Set([e[n],e[t],...Object.values(e)]))}function ge(e,t,n){if(e.length!==t.length)return!1;let r=new Set(t.map(e=>H(e,n)));return e.every(e=>r.has(H(e,n)))}function _e({entries:e,listId:t,activeIndex:n,selectedKeys:r,codeKey:a,query:ee,highlightQuery:o,getOptionDisabled:s,getOptionId:c,setOptionRef:u,toggleOption:d,selectOnlyOption:f,renderItem:ne}){return e.map(({item:e,index:p})=>{let m=p===n,h=r.has(H(e,a)),g=s?.(e)??!1;return(0,W.jsxs)(`div`,{id:c(t,p),ref:e=>u(p,e),role:`option`,"aria-selected":h,"aria-disabled":g||void 0,className:i(l.uiSelectOption,g&&l.disabled,h&&l.selected,m&&l.uiPopupOptionActive),onMouseDown:e=>{e.preventDefault()},children:[(0,W.jsx)(`div`,{onClick:e=>{e.stopPropagation()},children:(0,W.jsx)(te,{value:h,disabled:g,onChange:()=>{g||d(e)},onClick:e=>{e.stopPropagation()},onMouseDown:e=>{e.stopPropagation()}})}),(0,W.jsx)(`div`,{className:`overflowHidden`,onClick:()=>{g||f(e)},children:ne(e,{selected:h,active:m,disabled:g,query:ee,highlightQuery:o})})]},`${H(e,a)}-${p}`)})}var U,W,ve,G,K=t((()=>{U=e(n(),1),a(),o(),b(),_(),p(),u(),z(),k(),pe(),W=r(),ve=[],G=(0,U.forwardRef)(({codeKey:e,textKey:t,hideCode:n,items:r,value:i,onChange:a,label:o,description:s,placeholder:c,size:u,query:te,defaultQuery:d,highlightQuery:f,onQuery:p,defaultFilter:_=!0,onOpen:v,onClose:le,getOptionDisabled:y,disabled:b,error:x,isLoading:S,renderToken:C,renderToolbar:w,renderItem:T},E)=>{let D=(0,U.useRef)(null),[k,A]=(0,U.useState)(!1),j=`search-multi`,M=i??ve,N=(0,U.useMemo)(()=>new Set(M.map(t=>H(t,e))),[e,M]),P=(0,U.useMemo)(()=>r.filter(t=>!N.has(H(t,e))),[e,N,r]),F=(0,U.useMemo)(()=>I([...M,...r],e,t),[e,M,r,t]),{query:L,setQuery:R}=ce({open:k,query:te,defaultQuery:d,onQuery:p,triggerMode:j}),z=re({options:M,query:L,enabled:_,getSearchText:t=>he(t,e,F)}),B=re({options:P,query:L,enabled:_,getSearchText:t=>he(t,e,F)}),V=(0,U.useMemo)(()=>[...z,...B],[B,z]),pe=z.length>0?0:-1,{draftValue:G,setDraftValue:K,prepareOpen:ye}=h({value:M,open:k,onCommit:a,onOpen:v,onClose:le,isEqual:(t,n)=>ge(t,n,e)}),q=(0,U.useMemo)(()=>new Set(G.map(t=>H(t,e))),[e,G]),be=(0,U.useMemo)(()=>({selectedItems:G,committedSelectedItems:M,selectedKeys:q,open:k}),[M,G,k,q]),J=(0,U.useCallback)(e=>y?.(e,be)??!1,[y,be]),{activeIndex:Y,context:xe,floatingStyles:Se,getFloatingProps:Ce,setReference:we,setFloating:Te,setOptionRef:Ee,close:De,openList:Oe,toggleOpen:ke,selectActiveOption:Ae,handleReferenceKeyDown:je,handleFloatingKeyDown:Me,getOptionId:Ne,getActiveOptionId:Pe}=ae({options:V,selectedIndex:pe,open:k,onOpenChange:A,onSelect:void 0,disabled:b,getOptionDisabled:J,closeOnSelect:!1,allowOpenWithoutOptions:!0,triggerMode:j}),Fe=f??L,X=t=>{let n=H(t,e);K(r=>r.some(t=>H(t,e)===n)?r.filter(t=>H(t,e)!==n):J(t)?r:[...r,t])},Ie=e=>{if(D.current=e,typeof E==`function`){E(e);return}E&&(E.current=e)},Le=()=>{K([]),k||a([])},Re=()=>{K(t=>{let n=[...t],r=new Set(t.map(t=>H(t,e)));for(let t of V){let i=H(t,e);!r.has(i)&&!J(t)&&(r.add(i),n.push(t))}return n})},ze=()=>{K([])},Z=e=>{J(e)||(K([e]),De())},Be=k?G:M,Ve=Be.length>0,He={selectedItems:Be,committedSelectedItems:M,availableItems:B,query:L,open:k,clearSelection:Le,selectAll:Re,deselectAll:ze},Ue=C===void 0?ue({codeKey:e,textKey:F}):C,We=w===void 0?de:w,Ge=T??fe({codeKey:e,textKey:F,hideCode:n}),Ke=typeof Ue==`function`?Ue(He):null,qe=typeof We==`function`?We(He):null,Q=z.map((e,t)=>({item:e,index:t})),Je=B.map((e,t)=>({item:e,index:t+Q.length})),Ye=!S&&!x&&V.length===0,$=se({mode:j,open:k,currentQuery:L,hasDisplayValue:!1,inputRef:D,setQuery:R,openList:Oe,close:De,toggleOpen:ke,onBeforeOpen:()=>{k||ye()}});return(0,W.jsx)(m,{label:o,description:s,disabled:b,placeholder:c,size:u,className:O.multiSelect,children:({controlId:t,labelId:n,describedBy:r})=>{let i=`${t}-listbox`;return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(oe,{ref:Ie,rootRef:we,id:t,type:`text`,role:`combobox`,autoComplete:`off`,disabled:b,value:L,placeholder:Ve?void 0:c,"aria-labelledby":n,"aria-describedby":r,"aria-haspopup":`listbox`,"aria-expanded":k,"aria-controls":k?i:void 0,"aria-autocomplete":`list`,"aria-activedescendant":k?Pe(i):void 0,rootClassName:`flex alignItemsCenter`,endAdornment:(0,W.jsxs)(ie,{open:k,disabled:b,onToggleMouseDown:$.handleToggleMouseDown,onToggleClick:$.handleToggleClick,children:[Ke,(0,W.jsx)(`button`,{type:`button`,disabled:!Ve,className:l.uiClearButton,"data-ui":`multi-select-clear-button`,"data-action":`clear-multi-select`,onClick:Le,"aria-label":`Очистить все`,children:(0,W.jsx)(ee,{})})]}),onChange:e=>{$.handleTriggerInputChange(e.target.value)},onClick:$.handleTriggerClick,onFocus:e=>{$.handleTriggerFocus(e.currentTarget)},onKeyDown:e=>{je(e),!e.defaultPrevented&&$.handleTriggerKeyDown({event:e,onActivateWhenOpen:()=>{if(Y>=0){let e=V[Y];if(e){X(e);return}}Ae()},enableClosedArrowDownOpen:!0,suppressClosedArrowUp:!0})}}),(0,W.jsx)(g,{open:k,context:xe,floatingStyles:Se,listId:i,labelId:n,descriptionId:r,activeOptionId:k?Pe(i):void 0,setFloating:Te,getFloatingProps:Ce,onKeyDown:Me,initialFocus:-1,returnFocus:!1,tabIndex:-1,className:l.uiPopupOptions,header:qe,children:(0,W.jsx)(me,{isNoData:Ye,isLoading:S,error:x,children:(0,W.jsxs)(`div`,{className:`scrollable h100`,children:[(0,W.jsx)(_e,{entries:Q,listId:i,activeIndex:Y,selectedKeys:q,codeKey:e,query:L,highlightQuery:Fe,getOptionDisabled:J,getOptionId:Ne,setOptionRef:Ee,toggleOption:X,selectOnlyOption:Z,renderItem:Ge}),Q.length>0&&P.length>0&&(0,W.jsx)(ne,{className:`marginBlockSm`}),(0,W.jsx)(_e,{entries:Je,listId:i,activeIndex:Y,selectedKeys:q,codeKey:e,query:L,highlightQuery:Fe,getOptionDisabled:J,getOptionId:Ne,setOptionRef:Ee,toggleOption:X,selectOnlyOption:Z,renderItem:Ge})]})})})]})}})}),G.displayName=`MultiSelect`,G.__docgenInfo={description:`Поле множественного выбора с внутренним черновиком значений и подтверждением выбора при закрытии списка.
2
2
  Подходит как для самостоятельного использования, так и как базовый слой для OData-оберток.`,methods:[],displayName:`MultiSelect`,props:{renderToken:{required:!1,tsType:{name:`union`,raw:`((context: TContext) => React.ReactNode) | null | false`,elements:[{name:`unknown`},{name:`null`},{name:`literal`,value:`false`}]},description:``},renderToolbar:{required:!1,tsType:{name:`union`,raw:`((context: TContext) => React.ReactNode) | null | false`,elements:[{name:`unknown`},{name:`null`},{name:`literal`,value:`false`}]},description:``},renderItem:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(item: CollectionItem, state: MultiSelectItemState) => React.ReactNode`,signature:{arguments:[{type:{name:`CollectionItem`},name:`item`},{type:{name:`MultiSelectItemState`},name:`state`}],return:{name:`ReactReactNode`,raw:`React.ReactNode`}}},description:``},label:{required:!1,tsType:{name:`ReactNode`},description:``},description:{required:!1,tsType:{name:`string`},description:``},placeholder:{required:!1,tsType:{name:`string`},description:``},disabled:{required:!1,tsType:{name:`boolean`},description:``},size:{required:!1,tsType:{name:`union`,raw:`"xs" | "sm" | "md" | "lg" | "xl"`,elements:[{name:`literal`,value:`"xs"`},{name:`literal`,value:`"sm"`},{name:`literal`,value:`"md"`},{name:`literal`,value:`"lg"`},{name:`literal`,value:`"xl"`}]},description:``},value:{required:!0,tsType:{name:`V`},description:"Если начальное состояние может быть `null | undefined`\nзначит `onChange` тоже должен ументь сбрасывать.\nПоэтому такой контрол явно должен передавать `UiBaseProps<AnyType | undefined>`"},onChange:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(value: T) => void`,signature:{arguments:[{type:{name:`C`},name:`value`}],return:{name:`void`}}},description:``},codeKey:{required:!0,tsType:{name:`string`},description:``},textKey:{required:!1,tsType:{name:`string`},description:``},hideCode:{required:!1,tsType:{name:`boolean`},description:``},query:{required:!1,tsType:{name:`string`},description:``},defaultQuery:{required:!1,tsType:{name:`string`},description:``},highlightQuery:{required:!1,tsType:{name:`string`},description:``},onQuery:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(value: string) => void`,signature:{arguments:[{type:{name:`string`},name:`value`}],return:{name:`void`}}},description:``},defaultFilter:{required:!1,tsType:{name:`boolean`},description:``,defaultValue:{value:`true`,computed:!1}},items:{required:!0,tsType:{name:`Array`,elements:[{name:`TOption`}],raw:`TOption[]`},description:``},getOptionDisabled:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(item: TOption, context: MultiSelectOptionDisableContext) => boolean`,signature:{arguments:[{type:{name:`TOption`},name:`item`},{type:{name:`MultiSelectOptionDisableContext`},name:`context`}],return:{name:`boolean`}}},description:``},onOpen:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},onClose:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(value: TOption[]) => void`,signature:{arguments:[{type:{name:`Array`,elements:[{name:`TOption`}],raw:`TOption[]`},name:`value`}],return:{name:`void`}}},description:``},error:{required:!1,tsType:{name:`string`},description:``},isLoading:{required:!1,tsType:{name:`boolean`},description:``}}}}));export{K as n,G as t};
@@ -1,4 +1,4 @@
1
- import{i as e}from"./preload-helper-B45gAKPr.js";import{E as t,a as n,d as r,f as i,l as a,m as o,n as s,p as c,r as l,u}from"./blocks-B-ZSUli0.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-B8QUPqDz.js";import{Basic as p,Empty as m,ErrorState as h,Loading as g,n as _,t as v}from"./MultiSelect.stories-Dff66BK5.js";function y(e){let o={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...t(),...e.components};return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(a,{of:v,parameters:{docs:{toc:!0}}}),`
1
+ import{i as e}from"./preload-helper-B45gAKPr.js";import{E as t,a as n,d as r,f as i,l as a,m as o,n as s,p as c,r as l,u}from"./blocks-BzLMo9f0.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-BtEBm5C8.js";import{Basic as p,Empty as m,ErrorState as h,Loading as g,n as _,t as v}from"./MultiSelect.stories-DIiDPTnR.js";function y(e){let o={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...t(),...e.components};return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(a,{of:v,parameters:{docs:{toc:!0}}}),`
2
2
  `,(0,x.jsx)(c,{children:`MultiSelect`}),`
3
3
  `,(0,x.jsx)(i,{children:`Мультиселект для локальных коллекций с токенами, поиском и состояниями загрузки`}),`
4
4
  `,(0,x.jsx)(o.p,{children:`MultiSelect уже имеет живые stories, а эта страница собирает их в структурированную документацию с краткими рекомендациями, примерами подключения и API.
@@ -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-D1kbCBk7.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{n as a,t as o}from"./MultiSelect-CIMJ-GDy.js";var s=e({Basic:()=>f,Empty:()=>h,ErrorState:()=>m,Loading:()=>p,__namedExportsOrder:()=>g,default:()=>d}),c,l,u,d,f,p,m,h,g,_=n((()=>{c=t(r(),1),a(),l=i(),u=[{code:`MOW`,label:`Москва`},{code:`SPB`,label:`Санкт-Петербург`},{code:`EKB`,label:`Екатеринбург`},{code:`KZN`,label:`Казань`},{code:`NSK`,label:`Новосибирск`}],d={title:`Shared/UI/MultiSelect`,component:o,args:{label:`Города`,description:`Выберите несколько значений.`,placeholder:`Начните вводить`,value:[],onChange:()=>{},codeKey:`code`,textKey:`label`,items:u,query:``,onQuery:()=>{},onOpen:()=>{},onClose:()=>{},size:`md`,disabled:!1},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{value:{control:!1},onChange:{control:!1},items:{control:!1},onQuery:{control:!1},onOpen:{control:!1},onClose:{control:!1},renderToken:{control:!1},renderToolbar:{control:!1},renderItem:{control:!1},size:{control:`select`,options:[`xs`,`sm`,`md`,`lg`,`xl`]}}},f={render:e=>{let[t,n]=(0,c.useState)([u[1]]),[r,i]=(0,c.useState)(``),a=(0,c.useMemo)(()=>{let e=r.trim().toLowerCase();return e?u.filter(t=>t.label.toLowerCase().includes(e)||t.code.toLowerCase().includes(e)):u},[r]);return(0,l.jsx)(o,{...e,value:t,items:a,query:r,onQuery:i,onChange:n})}},p={render:e=>{let[t,n]=(0,c.useState)([]);return(0,l.jsx)(o,{...e,value:t,items:[],isLoading:!0,onChange:n})}},m={render:e=>{let[t,n]=(0,c.useState)([]);return(0,l.jsx)(o,{...e,value:t,items:[],error:`Ошибка загрузки`,onChange:n})}},h={render:e=>{let[t,n]=(0,c.useState)([]);return(0,l.jsx)(o,{...e,value:t,items:[],onChange:n})}},f.parameters={...f.parameters,docs:{...f.parameters?.docs,source:{originalSource:`{
1
+ import{a as e,c as t,i as n}from"./preload-helper-B45gAKPr.js";import{C as r}from"./iframe-DVy5ysVn.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{n as a,t as o}from"./MultiSelect-9Ncbysgp.js";var s=e({Basic:()=>f,Empty:()=>h,ErrorState:()=>m,Loading:()=>p,__namedExportsOrder:()=>g,default:()=>d}),c,l,u,d,f,p,m,h,g,_=n((()=>{c=t(r(),1),a(),l=i(),u=[{code:`MOW`,label:`Москва`},{code:`SPB`,label:`Санкт-Петербург`},{code:`EKB`,label:`Екатеринбург`},{code:`KZN`,label:`Казань`},{code:`NSK`,label:`Новосибирск`}],d={title:`Shared/UI/MultiSelect`,component:o,args:{label:`Города`,description:`Выберите несколько значений.`,placeholder:`Начните вводить`,value:[],onChange:()=>{},codeKey:`code`,textKey:`label`,items:u,query:``,onQuery:()=>{},onOpen:()=>{},onClose:()=>{},size:`md`,disabled:!1},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{value:{control:!1},onChange:{control:!1},items:{control:!1},onQuery:{control:!1},onOpen:{control:!1},onClose:{control:!1},renderToken:{control:!1},renderToolbar:{control:!1},renderItem:{control:!1},size:{control:`select`,options:[`xs`,`sm`,`md`,`lg`,`xl`]}}},f={render:e=>{let[t,n]=(0,c.useState)([u[1]]),[r,i]=(0,c.useState)(``),a=(0,c.useMemo)(()=>{let e=r.trim().toLowerCase();return e?u.filter(t=>t.label.toLowerCase().includes(e)||t.code.toLowerCase().includes(e)):u},[r]);return(0,l.jsx)(o,{...e,value:t,items:a,query:r,onQuery:i,onChange:n})}},p={render:e=>{let[t,n]=(0,c.useState)([]);return(0,l.jsx)(o,{...e,value:t,items:[],isLoading:!0,onChange:n})}},m={render:e=>{let[t,n]=(0,c.useState)([]);return(0,l.jsx)(o,{...e,value:t,items:[],error:`Ошибка загрузки`,onChange:n})}},h={render:e=>{let[t,n]=(0,c.useState)([]);return(0,l.jsx)(o,{...e,value:t,items:[],onChange:n})}},f.parameters={...f.parameters,docs:{...f.parameters?.docs,source:{originalSource:`{
2
2
  render: args => {
3
3
  const [value, setValue] = useState<CollectionItem[]>([catalog[1]]);
4
4
  const [query, setQuery] = useState("");
@@ -1,4 +1,4 @@
1
- import{i as e}from"./preload-helper-B45gAKPr.js";import{E as t,a as n,d as r,f as i,l as a,m as o,n as s,p as c,r as l,u}from"./blocks-B-ZSUli0.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-B8QUPqDz.js";import{InteractivePlayground as p,Showcase as m,n as h,t as g}from"./NotificationsHost.stories-nbb74ArB.js";function _(e){let o={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...t(),...e.components};return(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(a,{of:g,parameters:{docs:{toc:!0}}}),`
1
+ import{i as e}from"./preload-helper-B45gAKPr.js";import{E as t,a as n,d as r,f as i,l as a,m as o,n as s,p as c,r as l,u}from"./blocks-BzLMo9f0.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-BtEBm5C8.js";import{InteractivePlayground as p,Showcase as m,n as h,t as g}from"./NotificationsHost.stories-D-w6QFsa.js";function _(e){let o={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...t(),...e.components};return(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(a,{of:g,parameters:{docs:{toc:!0}}}),`
2
2
  `,(0,y.jsx)(c,{children:`NotificationsHost`}),`
3
3
  `,(0,y.jsx)(i,{children:`Хост глобальных уведомлений для очереди toast-сообщений и длинных пользовательских операций`}),`
4
4
  `,(0,y.jsx)(o.p,{children:`NotificationsHost уже имеет живые stories, а эта страница собирает их в структурированную документацию с краткими рекомендациями, примерами подключения и API.