@ryuzaki13/react-foundation-ui 1.0.22 → 1.0.23

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/styles.css +1 -1
  2. package/dist/tag-input/TagInput.d.ts +40 -0
  3. package/dist/tag-input/TagInput.d.ts.map +1 -0
  4. package/dist/tag-input/index.d.ts +2 -0
  5. package/dist/tag-input/index.d.ts.map +1 -0
  6. package/dist/tag-input/index.js +180 -0
  7. package/dist/tag-input/index.js.map +1 -0
  8. package/dist/tag-input/lib/joinTagInputAriaIds.d.ts +3 -0
  9. package/dist/tag-input/lib/joinTagInputAriaIds.d.ts.map +1 -0
  10. package/dist/tag-input/lib/tagInputDefaults.d.ts +7 -0
  11. package/dist/tag-input/lib/tagInputDefaults.d.ts.map +1 -0
  12. package/package.json +5 -1
  13. package/storybook-static/assets/{Badge-CYlSA6Vw.js → Badge-Dk1ppt6h.js} +1 -1
  14. package/storybook-static/assets/{Badge.stories-D6UyHEn4.js → Badge.stories-DGed-OBQ.js} +1 -1
  15. package/storybook-static/assets/{Button-aNoMm3xs.js → Button-BrdeQlDt.js} +1 -1
  16. package/storybook-static/assets/{Button-D5iLUeQv.js → Button-c4nDxtrg.js} +1 -1
  17. package/storybook-static/assets/{Button.stories-CNsB_F01.js → Button.stories-CYjvIvUW.js} +1 -1
  18. package/storybook-static/assets/{CheckBox-BCgKBJVJ.js → CheckBox-6Qr3jWMy.js} +1 -1
  19. package/storybook-static/assets/{CheckBox-KNAnK8-n.js → CheckBox-rqQjSYV-.js} +1 -1
  20. package/storybook-static/assets/{CheckBox.stories-Dd7SzJDz.js → CheckBox.stories-Q78_xCB-.js} +1 -1
  21. package/storybook-static/assets/{Color-KMSTOMOX-CNiU2Elq.js → Color-KMSTOMOX-BMBFTpCU.js} +1 -1
  22. package/storybook-static/assets/{ContextMenu-D3k_Tu0Z.js → ContextMenu-Dy6qjxlr.js} +1 -1
  23. package/storybook-static/assets/{ContextMenu.stories-C_i_uyc4.js → ContextMenu.stories-ArVPg2Iz.js} +1 -1
  24. package/storybook-static/assets/{DateInput-DGG89ygc.js → DateInput-Dk1l_hxJ.js} +1 -1
  25. package/storybook-static/assets/{DateInput-BywQIAiH.js → DateInput-eu7DXgSU.js} +1 -1
  26. package/storybook-static/assets/{DateInput.stories-BaDGhCMe.js → DateInput.stories-GCltuReT.js} +1 -1
  27. package/storybook-static/assets/{DateRangePresetSelect-BPyhIY3S.js → DateRangePresetSelect-2dHNAnUX.js} +1 -1
  28. package/storybook-static/assets/{DateRangePresetSelect-s_2StqMd.js → DateRangePresetSelect-aiAJs_u-.js} +1 -1
  29. package/storybook-static/assets/{DateRangePresetSelect.stories-DF17STL9.js → DateRangePresetSelect.stories-BXPIK_Co.js} +1 -1
  30. package/storybook-static/assets/{Detail-BugMUTtW.js → Detail-C-0qKqgn.js} +1 -1
  31. package/storybook-static/assets/{Detail.stories-DHkuMfR7.js → Detail.stories-BpD2YoZq.js} +1 -1
  32. package/storybook-static/assets/{Dialog-DshCmYwr.js → Dialog-BHOqDS4r.js} +1 -1
  33. package/storybook-static/assets/{Dialog.stories-BSi7akeW.js → Dialog.stories-DbY2IVcJ.js} +1 -1
  34. package/storybook-static/assets/{Disclosure-CU-pegOS.js → Disclosure-BIS573Xf.js} +1 -1
  35. package/storybook-static/assets/{Disclosure.stories-B4AVnYzF.js → Disclosure.stories-BEXgpOqT.js} +1 -1
  36. package/storybook-static/assets/{DocsRenderer-JROSPFPF-UspHN6Nr.js → DocsRenderer-JROSPFPF-DBLxlIku.js} +2 -2
  37. package/storybook-static/assets/{DropZone-CHT2yTPB.js → DropZone-DCOH76_B.js} +1 -1
  38. package/storybook-static/assets/{DropZone.stories-CNO0o4Zg.js → DropZone.stories-D1SI6gcY.js} +1 -1
  39. package/storybook-static/assets/{DropdownMenu-BiC8osPQ.js → DropdownMenu-mb1Hg5Gl.js} +1 -1
  40. package/storybook-static/assets/{ExpandableActionPanel.stories-B7WYSnwP.js → ExpandableActionPanel.stories-CXJMi0D0.js} +1 -1
  41. package/storybook-static/assets/{Flex-BZTb6Ls6.js → Flex-D1ZBJLmP.js} +1 -1
  42. package/storybook-static/assets/{Flex-BcPeLHNU.js → Flex-aMhUlmFA.js} +1 -1
  43. package/storybook-static/assets/{Flex.stories-uM7r49Jq.js → Flex.stories-Cq9hTA2s.js} +1 -1
  44. package/storybook-static/assets/{Grid-fJQh5Vul.js → Grid-D4xblGva.js} +1 -1
  45. package/storybook-static/assets/{Grid-EHSb1euM.js → Grid-DrwSe074.js} +1 -1
  46. package/storybook-static/assets/{Grid.stories-CqeiX_AH.js → Grid.stories-CsQlxLGT.js} +1 -1
  47. package/storybook-static/assets/{ImageCropper.stories-BZC2r8xr.js → ImageCropper.stories-Da0fJQ1n.js} +1 -1
  48. package/storybook-static/assets/{ImageRenderer-Cnnx30sU.js → ImageRenderer-dXWklz9J.js} +1 -1
  49. package/storybook-static/assets/{ImageRenderer.stories-BgBvkbZ-.js → ImageRenderer.stories-C2l796Hd.js} +1 -1
  50. package/storybook-static/assets/{ImageView.stories-Bg85Aayj.js → ImageView.stories-Cee_V0zr.js} +1 -1
  51. package/storybook-static/assets/{Input-DrlKVI51.js → Input-B6UklXwb.js} +1 -1
  52. package/storybook-static/assets/{Input-Cq_1mpmx.js → Input-DoTXagjB.js} +1 -1
  53. package/storybook-static/assets/{Input.stories-BHTzCeNd.js → Input.stories-mPAKrIP1.js} +1 -1
  54. package/storybook-static/assets/{InputDateTime-Bwdn4dwr.js → InputDateTime-BgIJNCpv.js} +1 -1
  55. package/storybook-static/assets/{InputDateTime.stories-DWZLY6-q.js → InputDateTime.stories-Ck0MCRBJ.js} +1 -1
  56. package/storybook-static/assets/{InputFile-kjPD2D6b.js → InputFile-BZqKG2Zr.js} +1 -1
  57. package/storybook-static/assets/{InputFile.stories-C9fMevjs.js → InputFile.stories-QbTuArh1.js} +1 -1
  58. package/storybook-static/assets/{InputFiles-1i_xo439.js → InputFiles-BUoDhUef.js} +1 -1
  59. package/storybook-static/assets/{InputFiles-BPW2NUcJ.js → InputFiles-ChhwyB9P.js} +1 -1
  60. package/storybook-static/assets/{InputFiles.stories-DxdLOKbl.js → InputFiles.stories-PD0pr8y6.js} +1 -1
  61. package/storybook-static/assets/{InputImage-ClXtDHy9.js → InputImage-YxBujSop.js} +1 -1
  62. package/storybook-static/assets/{InputImage.stories-D3hw0C1x.js → InputImage.stories-CHjyI709.js} +1 -1
  63. package/storybook-static/assets/{LayoutPicker-DmTnYW62.js → LayoutPicker-DJT0cL8d.js} +1 -1
  64. package/storybook-static/assets/{LayoutPicker.stories-CZPA3-Ci.js → LayoutPicker.stories-DvTvYmfw.js} +1 -1
  65. package/storybook-static/assets/{Listbox-DV98iUDZ.js → Listbox-D7w7HJNg.js} +1 -1
  66. package/storybook-static/assets/{Listbox.stories-BFHG7-fh.js → Listbox.stories-D4EMWR6l.js} +1 -1
  67. package/storybook-static/assets/{Modal-hL7CzAFH.js → Modal-BCn0aKBf.js} +1 -1
  68. package/storybook-static/assets/{Modal.stories-DKyOv2Vj.js → Modal.stories-BgnMPuDy.js} +1 -1
  69. package/storybook-static/assets/{MultiSelect-D23pcECY.js → MultiSelect-CZW1VSbD.js} +1 -1
  70. package/storybook-static/assets/{MultiSelect-hT_fw4sf.js → MultiSelect-D7N8euwu.js} +1 -1
  71. package/storybook-static/assets/{MultiSelect.stories-B0gUdW3k.js → MultiSelect.stories-DV9nyDoE.js} +1 -1
  72. package/storybook-static/assets/{NotificationsHost-ClQwHzJ_.js → NotificationsHost-DJILaEyi.js} +1 -1
  73. package/storybook-static/assets/{NotificationsHost.stories-BzPPbNiK.js → NotificationsHost.stories-DlO0kPbm.js} +1 -1
  74. package/storybook-static/assets/{ODataMultiSelect-CCP1tbCi.js → ODataMultiSelect-C-DKYFLx.js} +1 -1
  75. package/storybook-static/assets/{ODataMultiSelect.stories-CnlXtZKW.js → ODataMultiSelect.stories-DypA5OPM.js} +1 -1
  76. package/storybook-static/assets/{ODataSelect-BJstdz9E.js → ODataSelect-ANgknc8h.js} +1 -1
  77. package/storybook-static/assets/{ODataSelect-Du2-88av.js → ODataSelect-CMrLfCwp.js} +1 -1
  78. package/storybook-static/assets/{ODataSelect.stories-BvAeuhiH.js → ODataSelect.stories-icXU3Kk-.js} +1 -1
  79. package/storybook-static/assets/{ODataTreeMultiSelect-BCm7XhFB.js → ODataTreeMultiSelect-C6yg6DFE.js} +1 -1
  80. package/storybook-static/assets/{ODataTreeMultiSelect.stories-DKT1FMOy.js → ODataTreeMultiSelect.stories-CT_tBJph.js} +1 -1
  81. package/storybook-static/assets/{ODataTreeSelect-Bibf7s2z.js → ODataTreeSelect-hiY9TK6F.js} +1 -1
  82. package/storybook-static/assets/{ODataTreeSelect.stories-CCeNqvIR.js → ODataTreeSelect.stories-DPNG2-gB.js} +1 -1
  83. package/storybook-static/assets/{PeriodSelect-DLs8Hg0X.js → PeriodSelect-5CQZq007.js} +1 -1
  84. package/storybook-static/assets/{PeriodSelect.stories-C_XS3c7e.js → PeriodSelect.stories-DuwM__eX.js} +1 -1
  85. package/storybook-static/assets/{Popover-SXa3jBxm.js → Popover-BuB6NaNL.js} +1 -1
  86. package/storybook-static/assets/{Popover.stories-rR7JkQfu.js → Popover.stories-DNHTB9O2.js} +1 -1
  87. package/storybook-static/assets/{PresetRangeDateInput-dfDuKD_z.js → PresetRangeDateInput-C6ke1QJN.js} +1 -1
  88. package/storybook-static/assets/{PresetRangeDateInput.stories-CmRecC0S.js → PresetRangeDateInput.stories-BiFR6FF_.js} +1 -1
  89. package/storybook-static/assets/{RadioButton-BivcuQIh.js → RadioButton-bmKQ4B96.js} +1 -1
  90. package/storybook-static/assets/{RadioButton.stories-Cio250wJ.js → RadioButton.stories-CZatWIEO.js} +1 -1
  91. package/storybook-static/assets/{RadioGroup-D8LzcclQ.js → RadioGroup-Vnr3qZKk.js} +1 -1
  92. package/storybook-static/assets/{RadioGroup-C0Wirtog.js → RadioGroup-diPPm8OV.js} +1 -1
  93. package/storybook-static/assets/{RadioGroup.stories-gYFTEm7L.js → RadioGroup.stories-BY_ORcvQ.js} +1 -1
  94. package/storybook-static/assets/{Select-C5ObFms-.js → Select-BxK9yj6_.js} +1 -1
  95. package/storybook-static/assets/{Select-B737vUeI.js → Select-Cq66yRYB.js} +1 -1
  96. package/storybook-static/assets/{Select.stories-1-tb5-TQ.js → Select.stories-CevvmTWz.js} +1 -1
  97. package/storybook-static/assets/{SelectOptionContent-RA3YQEN1.js → SelectOptionContent-C1-duJ6s.js} +1 -1
  98. package/storybook-static/assets/{SerializableSelect-CKOPEv90.js → SerializableSelect-C6jj7wLf.js} +1 -1
  99. package/storybook-static/assets/{SerializableSelect-D6p7Qkk_.js → SerializableSelect-CnwfEnur.js} +1 -1
  100. package/storybook-static/assets/{SerializableSelect.stories-C3l_ojuW.js → SerializableSelect.stories-DOTdXeIP.js} +1 -1
  101. package/storybook-static/assets/{SingleDateTimeInput-C-EH5-4w.js → SingleDateTimeInput-BtSG1SZF.js} +1 -1
  102. package/storybook-static/assets/{SingleDateTimeInput.stories-WcN90RJQ.js → SingleDateTimeInput.stories-CSFUpLfK.js} +1 -1
  103. package/storybook-static/assets/{Slider-DgZ9jGV_.js → Slider-pb7TgPmP.js} +1 -1
  104. package/storybook-static/assets/{Slider.stories-BN6M0546.js → Slider.stories-Cj9sU7k1.js} +1 -1
  105. package/storybook-static/assets/{SliderInput-BDDf5ljP.js → SliderInput-Dp4r4RqZ.js} +1 -1
  106. package/storybook-static/assets/{SliderInput.stories-COR3rS29.js → SliderInput.stories-DKV9C_mb.js} +1 -1
  107. package/storybook-static/assets/{Sortable-DN7Kb-Q_.js → Sortable-BbVzA3mH.js} +1 -1
  108. package/storybook-static/assets/{Sortable.stories-zRM1Phps.js → Sortable.stories-nttQ0wQV.js} +1 -1
  109. package/storybook-static/assets/{Splitter-Bk98rR7j.js → Splitter-DQip0vEb.js} +1 -1
  110. package/storybook-static/assets/{Splitter.stories-B9CZFmcK.js → Splitter.stories-B7IdmITM.js} +1 -1
  111. package/storybook-static/assets/{StateSelect-DFhsyVBP.js → StateSelect-BZeQfOZk.js} +1 -1
  112. package/storybook-static/assets/{StateSelect.stories-BcUz8RNT.js → StateSelect.stories-Cia0oYUX.js} +1 -1
  113. package/storybook-static/assets/{Switch-Cenm3lp0.js → Switch-DzxseHUx.js} +1 -1
  114. package/storybook-static/assets/{Switch.stories-Deck0xn9.js → Switch.stories-BVAIn4yd.js} +1 -1
  115. package/storybook-static/assets/{Table-D0mqxsmk.js → Table-lzcaRxDg.js} +1 -1
  116. package/storybook-static/assets/{Table.stories-DJdDS-vt.js → Table.stories-sckp-lho.js} +1 -1
  117. package/storybook-static/assets/{Tabs-C_UydsUc.js → Tabs-DyBBFEsD.js} +1 -1
  118. package/storybook-static/assets/{Tabs.stories-DPN4f4ia.js → Tabs.stories-C6-sZs4H.js} +1 -1
  119. package/storybook-static/assets/TagInput-LeQAhDgs.css +1 -0
  120. package/storybook-static/assets/TagInput.stories-iI1hZ8CY.js +18 -0
  121. package/storybook-static/assets/{Textarea-DR_6_kXC.js → Textarea-D1fEct22.js} +1 -1
  122. package/storybook-static/assets/{Textarea.stories-BY6wMIfV.js → Textarea.stories-ByJH2uhT.js} +1 -1
  123. package/storybook-static/assets/{TimePanel-D30NeTN1.js → TimePanel-B5c9MfmC.js} +1 -1
  124. package/storybook-static/assets/{TimePanel.stories-DQebBAT1.js → TimePanel.stories-DBgXVhz1.js} +1 -1
  125. package/storybook-static/assets/{Toggle-CiKKBdwN.js → Toggle-CHx3ZZfu.js} +1 -1
  126. package/storybook-static/assets/{Toggle.stories-DhcLhXi0.js → Toggle.stories-g3Eq8oVl.js} +1 -1
  127. package/storybook-static/assets/{TreeMultiSelect-BKhWTTud.js → TreeMultiSelect-CrKusouJ.js} +1 -1
  128. package/storybook-static/assets/{TreeMultiSelect-W7KfPR_Z.js → TreeMultiSelect-T05Sk9sh.js} +1 -1
  129. package/storybook-static/assets/{TreeMultiSelect.stories-nXP3P2Os.js → TreeMultiSelect.stories-C85O7gDN.js} +1 -1
  130. package/storybook-static/assets/{TreePickerBase-BKBGeL6X.js → TreePickerBase-VJSaTBqo.js} +1 -1
  131. package/storybook-static/assets/{TreeSelect-CwcGtVsA.js → TreeSelect-DQmAaKsJ.js} +1 -1
  132. package/storybook-static/assets/{TreeSelect-CkDg1wJA.js → TreeSelect-Dw-svVvg.js} +1 -1
  133. package/storybook-static/assets/{TreeSelect.stories-vOWRtovd.js → TreeSelect.stories-Bqv2L08v.js} +1 -1
  134. package/storybook-static/assets/{TreeTable-BiVd6vET.js → TreeTable-JJK6sE1o.js} +1 -1
  135. package/storybook-static/assets/{TreeTable.stories-CmH5jmwM.js → TreeTable.stories-yOu-SM17.js} +1 -1
  136. package/storybook-static/assets/{WithTooltip-7X4HQR7L-aLpVnFpb.js → WithTooltip-7X4HQR7L-Cib98jGG.js} +1 -1
  137. package/storybook-static/assets/{base-table-BpVO9KT9.js → base-table-BbenC81q.js} +1 -1
  138. package/storybook-static/assets/{blocks-DoPnTsyg.js → blocks-DsN3hykK.js} +6 -6
  139. package/storybook-static/assets/{button-GO_OT5aH.js → button-C8nkqC6f.js} +1 -1
  140. package/storybook-static/assets/{check-box-DAQgEdFF.js → check-box-BRod99sY.js} +1 -1
  141. package/storybook-static/assets/{chunk-3LY4VQVK-BONHkyBf.js → chunk-3LY4VQVK-DSSlp6en.js} +1 -1
  142. package/storybook-static/assets/{chunk-LITCR56V-BVF-KYVd.js → chunk-LITCR56V-CB95AMSh.js} +1 -1
  143. package/storybook-static/assets/{contextMenu-BN_nodeg.js → contextMenu-iKy1R_pJ.js} +1 -1
  144. package/storybook-static/assets/{error-B6AQmhXG.js → error-ChmbU9Ma.js} +1 -1
  145. package/storybook-static/assets/{flex-DVKfO80p.js → flex-CMA-ZjxB.js} +1 -1
  146. package/storybook-static/assets/{floating-ui.react-DGTgiAdH.js → floating-ui.react-BpBaLM_G.js} +1 -1
  147. package/storybook-static/assets/formatter-L2YTDE3Q-tZc7M3Ad.js +1 -0
  148. package/storybook-static/assets/{formatters-Dzo8Pnex.js → formatters-C0d3JoZj.js} +1 -1
  149. package/storybook-static/assets/grid-Ck5-5Szv.js +1 -0
  150. package/storybook-static/assets/{hooks-CpDSHDMN.js → hooks-BpEcTBvi.js} +1 -1
  151. package/storybook-static/assets/{iframe-CTboIfoI.js → iframe-D90hKkIJ.js} +4 -4
  152. package/storybook-static/assets/{input-DD2xaJKI.js → input-D77vjPVL.js} +1 -1
  153. package/storybook-static/assets/{lucide-react-gtfXEQZ7.js → lucide-react-ClGevkpS.js} +1 -1
  154. package/storybook-static/assets/{mdx-react-shim-DOISS71W.js → mdx-react-shim-CdXPOrRW.js} +1 -1
  155. package/storybook-static/assets/{media-xUSqwRJF.js → media-C4dafSHo.js} +1 -1
  156. package/storybook-static/assets/{misc-D1Z0nw9S.js → misc-yRJvnOkX.js} +1 -1
  157. package/storybook-static/assets/{notifications-CWxiJcV-.js → notifications-Dt8NSgnT.js} +1 -1
  158. package/storybook-static/assets/{odata-PGHrDwPA.js → odata-DQSm2H7O.js} +1 -1
  159. package/storybook-static/assets/odata-service-CMTV9-cO.js +1 -0
  160. package/storybook-static/assets/{odataStoryFixtures-B0ggeKvL.js → odataStoryFixtures-D0p0XtmS.js} +1 -1
  161. package/storybook-static/assets/{picker-DR1p3GaI.js → picker-9SOfvJPJ.js} +1 -1
  162. package/storybook-static/assets/{popover-D0spGyn8.js → popover-Dph7wJ1_.js} +1 -1
  163. package/storybook-static/assets/{preset-select-DIVtd6Ma.js → preset-select-mubmWRO9.js} +1 -1
  164. package/storybook-static/assets/{react-18-BW39uoSY.js → react-18-CSg0VXTL.js} +1 -1
  165. package/storybook-static/assets/{react-D66xb1cV.js → react-Cr3aZrbF.js} +1 -1
  166. package/storybook-static/assets/{react-dom-B8H6ZjRK.js → react-dom-Iu9X9_7I.js} +1 -1
  167. package/storybook-static/assets/select-DYXb71nn.js +1 -0
  168. package/storybook-static/assets/{slider-DBMU3Zyk.js → slider-C8Udy6I7.js} +1 -1
  169. package/storybook-static/assets/{sortable-aygBVsVu.js → sortable-xt2HCdf-.js} +1 -1
  170. package/storybook-static/assets/{syntaxhighlighter-RTCFPKCB-BmTfzeWy.js → syntaxhighlighter-RTCFPKCB-4Ttp-ccw.js} +1 -1
  171. package/storybook-static/assets/{text-BE5Uqo4p.js → text-CwWM1WCX.js} +1 -1
  172. package/storybook-static/assets/{theming-A6fWw02F.js → theming--foXdFDq.js} +1 -1
  173. package/storybook-static/assets/ui-BJnukgBU.js +1 -0
  174. package/storybook-static/assets/{useODataSelectBase-BivsfJ24.js → useODataSelectBase-C7f1zxWc.js} +1 -1
  175. package/storybook-static/assets/{useODataTreeData-DAop_xYb.js → useODataTreeData-7hwK6Byp.js} +1 -1
  176. package/storybook-static/assets/{utils-BAfp5vsY.js → utils-Bg8QclQy.js} +1 -1
  177. package/storybook-static/iframe.html +1 -1
  178. package/storybook-static/index.json +1 -1
  179. package/storybook-static/project.json +1 -1
  180. package/storybook-static/assets/formatter-L2YTDE3Q-DT96-80k.js +0 -1
  181. package/storybook-static/assets/grid-BhEsHhF8.js +0 -1
  182. package/storybook-static/assets/odata-service-XyWC7XJb.js +0 -1
  183. package/storybook-static/assets/select-Dr2NjwXE.js +0 -1
  184. package/storybook-static/assets/ui-DW-Seccl.js +0 -1
@@ -1,3 +1,3 @@
1
- import{c as e,i as t}from"./preload-helper-B45gAKPr.js";import{C as n}from"./iframe-CTboIfoI.js";import{t as r}from"./jsx-runtime-BBQGix-2.js";import{a as i,i as a}from"./utils-BAfp5vsY.js";import{n as o,t as s}from"./lucide-react-gtfXEQZ7.js";import{M as c,t as l}from"./formatters-Dzo8Pnex.js";import{n as u,t as d}from"./ui.module-wFHXkJzp.js";var f,p,m,h,g,_,v,y,b,x=t((()=>{f=`lRn5ye`,p=`ce5HAY`,m=`_8TObqB`,h=`Gx3Wbd`,g=`cpwaYo`,_=`itlmix`,v=`aITEGl`,y=`ekyJIt`,b={controlLayout:f,input:p,inputNumber:m,controlWithEndAdornment:h,controlEndAdornment:g,endAdornmentGroup:_,clearButton:v,error:y}}));function S({id:e,hasLabel:t,hasDescription:n,hasError:r}){let i=(0,C.useId)(),a=e??i,o=t?`${a}-label`:void 0,s=n?`${a}-description`:void 0,c=r?`${a}-error`:void 0;return{controlId:a,labelId:o,descriptionId:s,errorId:c,describedBy:[s,c].filter(Boolean).join(` `)||void 0}}var C,w=t((()=>{C=e(n(),1)}));function T({label:e,controlId:t,labelId:n}){return(0,F.jsx)(`label`,{id:n,htmlFor:t,className:u.uiLabel,children:e})}function E({label:e,description:t,size:n,disabled:r,className:a}){let{controlId:o,labelId:s,descriptionId:c}=S({hasLabel:e!=null,hasDescription:!!t});return(0,F.jsxs)(`div`,{className:i(u.uiElement,u.uiSizable,n&&u[n],u.disabled,a),"aria-disabled":r||void 0,children:[e&&(0,F.jsx)(T,{label:e,controlId:o,labelId:s}),t&&(0,F.jsx)(`p`,{id:c,className:u.uiDescription,children:t}),(0,F.jsx)(`div`,{className:i(u.uiInputControlFake,`skeletonLine`)})]})}function D({label:e,description:t,disabled:n,className:r,error:a,size:o,controlId:s,labelId:c,descriptionId:l,errorId:d,children:f}){return(0,F.jsxs)(`div`,{className:i(u.uiElement,u.uiSizable,o&&u[o],n&&u.disabled,r),"aria-disabled":n||void 0,children:[e&&(0,F.jsx)(T,{label:e,controlId:s,labelId:c}),t&&(0,F.jsx)(`p`,{id:l,className:u.uiDescription,children:t}),(0,F.jsxs)(`div`,{className:b.controlLayout,children:[f,a&&(0,F.jsx)(`p`,{id:d,className:b.error,role:`alert`,children:a})]})]})}function O({className:e,endAdornment:t,endAdornmentClassName:n,endAdornmentWidth:r,children:a}){let o=t!=null,s=o&&r?{"--input-end-adornment-width":r}:void 0;return(0,F.jsxs)(`div`,{className:i(b.controlLayout,e),style:s,children:[a({controlClassName:o?b.controlWithEndAdornment:void 0}),o&&(0,F.jsx)(`div`,{className:i(b.controlEndAdornment,n),children:t})]})}function k({onClick:e,disabled:t,className:n,ariaLabel:r=`Очистить значение`}){return(0,F.jsx)(`button`,{type:`button`,disabled:t||!e,className:i(b.clearButton,`flexCenter radiusSm`,n),onClick:e,"aria-label":r,children:(0,F.jsx)(o,{})})}function A(e,t,n){if(n)return n;if(e&&t)return`calc((var(--control-height) * 2) + var(--space-xs))`;if(e||t)return`var(--control-height)`}function j({endAdornment:e,onClear:t,disabled:n}){if(!(e==null&&!t))return(0,F.jsxs)(`div`,{className:b.endAdornmentGroup,children:[e,t&&(0,F.jsx)(k,{onClick:t,disabled:n})]})}function M({label:e,description:t,disabled:n,className:r,onClear:a,error:o,onClearError:s,onChange:c,value:l,size:d,allowedPattern:f,endAdornment:p,endAdornmentClassName:m,endAdornmentWidth:h,type:g=`text`,..._}){let[v,y]=(0,P.useState)(!1),x=e=>{let t=e.target.value;f!==void 0&&y(t!==``&&!f.test(t)),c(t),o&&s&&s()},C=!!(l&&l.length>0),w=C?o:void 0,{controlId:T,labelId:E,descriptionId:k,errorId:M,describedBy:N}=S({id:_.id,hasLabel:e!=null,hasDescription:!!t,hasError:!!w}),I=C&&(!!o||v);return(0,F.jsx)(D,{label:e,description:t,disabled:n,className:r,size:d,error:w,controlId:T,labelId:E,descriptionId:k,errorId:M,children:(0,F.jsx)(O,{endAdornment:j({endAdornment:p,onClear:a,disabled:n}),endAdornmentClassName:m,endAdornmentWidth:A(p!=null,!!a,h),children:({controlClassName:e})=>(0,F.jsx)(`input`,{..._,id:T,type:g,disabled:n,value:l,"aria-invalid":I||void 0,"aria-labelledby":E,"aria-describedby":N,"data-invalid":I?``:void 0,className:i(u.uiInputControl,b.input,e),onChange:x})})})}function N({label:e,description:t,disabled:n,className:r,onClear:a,error:o,onClearError:s,onChange:l,value:d,size:f,endAdornment:p,endAdornmentClassName:m,endAdornmentWidth:h,...g}){let _=g,{controlId:v,labelId:y,descriptionId:x,errorId:C,describedBy:w}=S({id:g.id,hasLabel:e!=null,hasDescription:!!t,hasError:!!o}),[T,E]=(0,P.useState)(()=>String(d)),k=(0,P.useEffectEvent)(e=>{E(e)});(0,P.useEffect)(()=>{k(d!==void 0&&typeof d==`number`&&!isNaN(d)?String(d):``)},[d]);let M=a?()=>{E(``),a()}:void 0,N=e=>{let t=e.target.value;E(t),l(c(t)),o&&s&&s()};return(0,F.jsx)(D,{label:e,description:t,disabled:n,className:r,size:f,error:o,controlId:v,labelId:y,descriptionId:x,errorId:C,children:(0,F.jsx)(O,{endAdornment:j({endAdornment:p,onClear:M,disabled:n}),endAdornmentClassName:m,endAdornmentWidth:A(p!=null,!!M,h),children:({controlClassName:e})=>(0,F.jsx)(`input`,{..._,id:v,type:`number`,inputMode:`decimal`,disabled:n,value:T,"aria-labelledby":y,"aria-describedby":w,className:i(u.uiInputControl,b.input,b.inputNumber,e),onChange:N})})})}var P,F,I,L=t((()=>{P=e(n(),1),l(),a(),s(),d(),x(),w(),F=r(),I=M,E.__docgenInfo={description:``,methods:[],displayName:`InputUILoading`},D.__docgenInfo={description:`Низкоуровневая оболочка поля ввода с общими элементами оформления.`,methods:[],displayName:`InputUI`,props:{className:{required:!1,tsType:{name:`string`},description:``},error:{required:!1,tsType:{name:`string`},description:``},controlId:{required:!1,tsType:{name:`string`},description:``},labelId:{required:!1,tsType:{name:`string`},description:``},descriptionId:{required:!1,tsType:{name:`string`},description:``},errorId:{required:!1,tsType:{name:`string`},description:``},children:{required:!0,tsType:{name:`ReactReactNode`,raw:`React.ReactNode`},description:``}},composes:[`Omit`]},O.__docgenInfo={description:``,methods:[],displayName:`InputControl`,props:{className:{required:!1,tsType:{name:`string`},description:``},endAdornment:{required:!1,tsType:{name:`ReactNode`},description:``},endAdornmentClassName:{required:!1,tsType:{name:`string`},description:``},endAdornmentWidth:{required:!1,tsType:{name:`string`},description:``},children:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(props: InputControlRenderProps) => ReactNode`,signature:{arguments:[{type:{name:`InputControlRenderProps`},name:`props`}],return:{name:`ReactNode`}}},description:``}}},k.__docgenInfo={description:``,methods:[],displayName:`InputClearButton`,props:{onClick:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},disabled:{required:!1,tsType:{name:`boolean`},description:``},className:{required:!1,tsType:{name:`string`},description:``},ariaLabel:{required:!1,tsType:{name:`string`},description:``,defaultValue:{value:`"Очистить значение"`,computed:!1}}}},M.__docgenInfo={description:`Базовое текстовое поле ввода для строковых значений.`,methods:[],displayName:`InputText`,props:{label:{required:!1,tsType:{name:`ReactNode`},description:``},description:{required:!1,tsType:{name:`string`},description:``},placeholder:{required:!1,tsType:{name:`string`},description:``},disabled:{required:!1,tsType:{name:`boolean`},description:``},size:{required:!1,tsType:{name:`union`,raw:`"xs" | "sm" | "md" | "lg" | "xl"`,elements:[{name:`literal`,value:`"xs"`},{name:`literal`,value:`"sm"`},{name:`literal`,value:`"md"`},{name:`literal`,value:`"lg"`},{name:`literal`,value:`"xl"`}]},description:``},value:{required:!0,tsType:{name:`T`},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:``},onClear:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},error:{required:!1,tsType:{name:`string`},description:``},onClearError:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},defaultValue:{required:!1,tsType:{name:`string`},description:``},endAdornment:{required:!1,tsType:{name:`ReactNode`},description:``},endAdornmentClassName:{required:!1,tsType:{name:`string`},description:``},endAdornmentWidth:{required:!1,tsType:{name:`string`},description:``},type:{required:!1,tsType:{name:`union`,raw:`"email" | "password" | "search" | "tel" | "text" | "url"`,elements:[{name:`literal`,value:`"email"`},{name:`literal`,value:`"password"`},{name:`literal`,value:`"search"`},{name:`literal`,value:`"tel"`},{name:`literal`,value:`"text"`},{name:`literal`,value:`"url"`}]},description:``,defaultValue:{value:`"text"`,computed:!1}},allowedPattern:{required:!1,tsType:{name:`RegExp`},description:`Регулярное выражение для валидации всего введённого значения.
1
+ import{c as e,i as t}from"./preload-helper-B45gAKPr.js";import{C as n}from"./iframe-D90hKkIJ.js";import{t as r}from"./jsx-runtime-BBQGix-2.js";import{a as i,i as a}from"./utils-Bg8QclQy.js";import{n as o,t as s}from"./lucide-react-ClGevkpS.js";import{M as c,t as l}from"./formatters-C0d3JoZj.js";import{n as u,t as d}from"./ui.module-wFHXkJzp.js";var f,p,m,h,g,_,v,y,b,x=t((()=>{f=`lRn5ye`,p=`ce5HAY`,m=`_8TObqB`,h=`Gx3Wbd`,g=`cpwaYo`,_=`itlmix`,v=`aITEGl`,y=`ekyJIt`,b={controlLayout:f,input:p,inputNumber:m,controlWithEndAdornment:h,controlEndAdornment:g,endAdornmentGroup:_,clearButton:v,error:y}}));function S({id:e,hasLabel:t,hasDescription:n,hasError:r}){let i=(0,C.useId)(),a=e??i,o=t?`${a}-label`:void 0,s=n?`${a}-description`:void 0,c=r?`${a}-error`:void 0;return{controlId:a,labelId:o,descriptionId:s,errorId:c,describedBy:[s,c].filter(Boolean).join(` `)||void 0}}var C,w=t((()=>{C=e(n(),1)}));function T({label:e,controlId:t,labelId:n}){return(0,F.jsx)(`label`,{id:n,htmlFor:t,className:u.uiLabel,children:e})}function E({label:e,description:t,size:n,disabled:r,className:a}){let{controlId:o,labelId:s,descriptionId:c}=S({hasLabel:e!=null,hasDescription:!!t});return(0,F.jsxs)(`div`,{className:i(u.uiElement,u.uiSizable,n&&u[n],u.disabled,a),"aria-disabled":r||void 0,children:[e&&(0,F.jsx)(T,{label:e,controlId:o,labelId:s}),t&&(0,F.jsx)(`p`,{id:c,className:u.uiDescription,children:t}),(0,F.jsx)(`div`,{className:i(u.uiInputControlFake,`skeletonLine`)})]})}function D({label:e,description:t,disabled:n,className:r,error:a,size:o,controlId:s,labelId:c,descriptionId:l,errorId:d,children:f}){return(0,F.jsxs)(`div`,{className:i(u.uiElement,u.uiSizable,o&&u[o],n&&u.disabled,r),"aria-disabled":n||void 0,children:[e&&(0,F.jsx)(T,{label:e,controlId:s,labelId:c}),t&&(0,F.jsx)(`p`,{id:l,className:u.uiDescription,children:t}),(0,F.jsxs)(`div`,{className:b.controlLayout,children:[f,a&&(0,F.jsx)(`p`,{id:d,className:b.error,role:`alert`,children:a})]})]})}function O({className:e,endAdornment:t,endAdornmentClassName:n,endAdornmentWidth:r,children:a}){let o=t!=null,s=o&&r?{"--input-end-adornment-width":r}:void 0;return(0,F.jsxs)(`div`,{className:i(b.controlLayout,e),style:s,children:[a({controlClassName:o?b.controlWithEndAdornment:void 0}),o&&(0,F.jsx)(`div`,{className:i(b.controlEndAdornment,n),children:t})]})}function k({onClick:e,disabled:t,className:n,ariaLabel:r=`Очистить значение`}){return(0,F.jsx)(`button`,{type:`button`,disabled:t||!e,className:i(b.clearButton,`flexCenter radiusSm`,n),onClick:e,"aria-label":r,children:(0,F.jsx)(o,{})})}function A(e,t,n){if(n)return n;if(e&&t)return`calc((var(--control-height) * 2) + var(--space-xs))`;if(e||t)return`var(--control-height)`}function j({endAdornment:e,onClear:t,disabled:n}){if(!(e==null&&!t))return(0,F.jsxs)(`div`,{className:b.endAdornmentGroup,children:[e,t&&(0,F.jsx)(k,{onClick:t,disabled:n})]})}function M({label:e,description:t,disabled:n,className:r,onClear:a,error:o,onClearError:s,onChange:c,value:l,size:d,allowedPattern:f,endAdornment:p,endAdornmentClassName:m,endAdornmentWidth:h,type:g=`text`,..._}){let[v,y]=(0,P.useState)(!1),x=e=>{let t=e.target.value;f!==void 0&&y(t!==``&&!f.test(t)),c(t),o&&s&&s()},C=!!(l&&l.length>0),w=C?o:void 0,{controlId:T,labelId:E,descriptionId:k,errorId:M,describedBy:N}=S({id:_.id,hasLabel:e!=null,hasDescription:!!t,hasError:!!w}),I=C&&(!!o||v);return(0,F.jsx)(D,{label:e,description:t,disabled:n,className:r,size:d,error:w,controlId:T,labelId:E,descriptionId:k,errorId:M,children:(0,F.jsx)(O,{endAdornment:j({endAdornment:p,onClear:a,disabled:n}),endAdornmentClassName:m,endAdornmentWidth:A(p!=null,!!a,h),children:({controlClassName:e})=>(0,F.jsx)(`input`,{..._,id:T,type:g,disabled:n,value:l,"aria-invalid":I||void 0,"aria-labelledby":E,"aria-describedby":N,"data-invalid":I?``:void 0,className:i(u.uiInputControl,b.input,e),onChange:x})})})}function N({label:e,description:t,disabled:n,className:r,onClear:a,error:o,onClearError:s,onChange:l,value:d,size:f,endAdornment:p,endAdornmentClassName:m,endAdornmentWidth:h,...g}){let _=g,{controlId:v,labelId:y,descriptionId:x,errorId:C,describedBy:w}=S({id:g.id,hasLabel:e!=null,hasDescription:!!t,hasError:!!o}),[T,E]=(0,P.useState)(()=>String(d)),k=(0,P.useEffectEvent)(e=>{E(e)});(0,P.useEffect)(()=>{k(d!==void 0&&typeof d==`number`&&!isNaN(d)?String(d):``)},[d]);let M=a?()=>{E(``),a()}:void 0,N=e=>{let t=e.target.value;E(t),l(c(t)),o&&s&&s()};return(0,F.jsx)(D,{label:e,description:t,disabled:n,className:r,size:f,error:o,controlId:v,labelId:y,descriptionId:x,errorId:C,children:(0,F.jsx)(O,{endAdornment:j({endAdornment:p,onClear:M,disabled:n}),endAdornmentClassName:m,endAdornmentWidth:A(p!=null,!!M,h),children:({controlClassName:e})=>(0,F.jsx)(`input`,{..._,id:v,type:`number`,inputMode:`decimal`,disabled:n,value:T,"aria-labelledby":y,"aria-describedby":w,className:i(u.uiInputControl,b.input,b.inputNumber,e),onChange:N})})})}var P,F,I,L=t((()=>{P=e(n(),1),l(),a(),s(),d(),x(),w(),F=r(),I=M,E.__docgenInfo={description:``,methods:[],displayName:`InputUILoading`},D.__docgenInfo={description:`Низкоуровневая оболочка поля ввода с общими элементами оформления.`,methods:[],displayName:`InputUI`,props:{className:{required:!1,tsType:{name:`string`},description:``},error:{required:!1,tsType:{name:`string`},description:``},controlId:{required:!1,tsType:{name:`string`},description:``},labelId:{required:!1,tsType:{name:`string`},description:``},descriptionId:{required:!1,tsType:{name:`string`},description:``},errorId:{required:!1,tsType:{name:`string`},description:``},children:{required:!0,tsType:{name:`ReactReactNode`,raw:`React.ReactNode`},description:``}},composes:[`Omit`]},O.__docgenInfo={description:``,methods:[],displayName:`InputControl`,props:{className:{required:!1,tsType:{name:`string`},description:``},endAdornment:{required:!1,tsType:{name:`ReactNode`},description:``},endAdornmentClassName:{required:!1,tsType:{name:`string`},description:``},endAdornmentWidth:{required:!1,tsType:{name:`string`},description:``},children:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(props: InputControlRenderProps) => ReactNode`,signature:{arguments:[{type:{name:`InputControlRenderProps`},name:`props`}],return:{name:`ReactNode`}}},description:``}}},k.__docgenInfo={description:``,methods:[],displayName:`InputClearButton`,props:{onClick:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},disabled:{required:!1,tsType:{name:`boolean`},description:``},className:{required:!1,tsType:{name:`string`},description:``},ariaLabel:{required:!1,tsType:{name:`string`},description:``,defaultValue:{value:`"Очистить значение"`,computed:!1}}}},M.__docgenInfo={description:`Базовое текстовое поле ввода для строковых значений.`,methods:[],displayName:`InputText`,props:{label:{required:!1,tsType:{name:`ReactNode`},description:``},description:{required:!1,tsType:{name:`string`},description:``},placeholder:{required:!1,tsType:{name:`string`},description:``},disabled:{required:!1,tsType:{name:`boolean`},description:``},size:{required:!1,tsType:{name:`union`,raw:`"xs" | "sm" | "md" | "lg" | "xl"`,elements:[{name:`literal`,value:`"xs"`},{name:`literal`,value:`"sm"`},{name:`literal`,value:`"md"`},{name:`literal`,value:`"lg"`},{name:`literal`,value:`"xl"`}]},description:``},value:{required:!0,tsType:{name:`T`},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:``},onClear:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},error:{required:!1,tsType:{name:`string`},description:``},onClearError:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},defaultValue:{required:!1,tsType:{name:`string`},description:``},endAdornment:{required:!1,tsType:{name:`ReactNode`},description:``},endAdornmentClassName:{required:!1,tsType:{name:`string`},description:``},endAdornmentWidth:{required:!1,tsType:{name:`string`},description:``},type:{required:!1,tsType:{name:`union`,raw:`"email" | "password" | "search" | "tel" | "text" | "url"`,elements:[{name:`literal`,value:`"email"`},{name:`literal`,value:`"password"`},{name:`literal`,value:`"search"`},{name:`literal`,value:`"tel"`},{name:`literal`,value:`"text"`},{name:`literal`,value:`"url"`}]},description:``,defaultValue:{value:`"text"`,computed:!1}},allowedPattern:{required:!1,tsType:{name:`RegExp`},description:`Регулярное выражение для валидации всего введённого значения.
2
2
  При несоответствии поле подсвечивается как невалидное, но текст не удаляется.
3
3
  Пример: \`/^\\d*$/\``}},composes:[`Omit`]},N.__docgenInfo={description:`Числовое поле ввода с нормализацией значения и защитой от промежуточного невалидного ввода.`,methods:[],displayName:`InputNumber`,props:{label:{required:!1,tsType:{name:`ReactNode`},description:``},description:{required:!1,tsType:{name:`string`},description:``},placeholder:{required:!1,tsType:{name:`string`},description:``},disabled:{required:!1,tsType:{name:`boolean`},description:``},size:{required:!1,tsType:{name:`union`,raw:`"xs" | "sm" | "md" | "lg" | "xl"`,elements:[{name:`literal`,value:`"xs"`},{name:`literal`,value:`"sm"`},{name:`literal`,value:`"md"`},{name:`literal`,value:`"lg"`},{name:`literal`,value:`"xl"`}]},description:``},value:{required:!0,tsType:{name:`V`},description:"Если начальное состояние может быть `null | undefined`\nзначит `onChange` тоже должен ументь сбрасывать.\nПоэтому такой контрол явно должен передавать `UiBaseProps<AnyType | undefined>`"},onChange:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(value: T) => void`,signature:{arguments:[{type:{name:`C`},name:`value`}],return:{name:`void`}}},description:``},onClear:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},error:{required:!1,tsType:{name:`string`},description:``},onClearError:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},defaultValue:{required:!1,tsType:{name:`T`},description:``},endAdornment:{required:!1,tsType:{name:`ReactNode`},description:``},endAdornmentClassName:{required:!1,tsType:{name:`string`},description:``},endAdornmentWidth:{required:!1,tsType:{name:`string`},description:``}},composes:[`Omit`]}}));export{M as a,L as c,N as i,w as l,k as n,D as o,O as r,E as s,I as t,S as u};
@@ -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-DoPnTsyg.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-DOISS71W.js";import{NumberControlled as p,PatternValidation as m,TextControlled as h,WithError as g,n as _,t as v}from"./Input.stories-BHTzCeNd.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-DsN3hykK.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-CdXPOrRW.js";import{NumberControlled as p,PatternValidation as m,TextControlled as h,WithError as g,n as _,t as v}from"./Input.stories-mPAKrIP1.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:`Input`}),`
3
3
  `,(0,x.jsx)(i,{children:`Базовое текстовое и числовое поле для форм, фильтров и служебных панелей`}),`
4
4
  `,(0,x.jsx)(o.p,{children:`Input уже имеет живые 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-CTboIfoI.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{a,c as o,i as s}from"./Input-DrlKVI51.js";var c=e({NumberControlled:()=>p,PatternValidation:()=>m,TextControlled:()=>f,WithError:()=>h,__namedExportsOrder:()=>g,default:()=>d}),l,u,d,f,p,m,h,g,_=n((()=>{l=t(r(),1),o(),u=i(),d={title:`Shared/UI/Input`,component:a,args:{value:``,onChange:()=>{}},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{label:{description:`Заголовок поля.`,control:`text`},description:{description:`Описание под заголовком.`,control:`text`},placeholder:{description:`Плейсхолдер нативного поля ввода.`,control:`text`},value:{description:`Текущее значение поля.`,control:`text`},onChange:{description:`Вызывается при изменении значения.`,control:!1},onClear:{description:`Callback кнопки очистки справа.`,control:!1},error:{description:`Текст ошибки под полем.`,control:`text`},onClearError:{description:`Вызывается при вводе для сброса внешней ошибки.`,control:!1},disabled:{description:`Блокирует редактирование.`,control:`boolean`},size:{description:`Размер поля и подписи.`,control:`select`,options:[`xs`,`sm`,`md`,`lg`,`xl`]},allowedPattern:{description:`Регулярное выражение для валидации введенной строки.`,control:!1}}},f={render:e=>{let[t,n]=(0,l.useState)(e.value??``);return(0,u.jsx)(a,{...e,value:t,onChange:n,onClear:()=>n(``)})},args:{label:`Наименование`,description:`Пример обычного текстового поля.`,placeholder:`Введите значение`,value:``,size:`md`}},p={render:()=>{let[e,t]=(0,l.useState)(25);return(0,u.jsx)(s,{label:`Количество`,description:`Числовой ввод с min/max.`,placeholder:`0`,value:e,min:0,max:100,onChange:t,onClear:()=>t(0)})},args:{value:void 0}},m={render:()=>{let[e,t]=(0,l.useState)(``);return(0,u.jsx)(a,{label:`Только цифры`,description:"`allowedPattern` подсвечивает невалидный ввод.",placeholder:`12345`,value:e,onChange:t,allowedPattern:/^\d*$/})},args:{value:void 0}},h={render:()=>{let[e,t]=(0,l.useState)(`admin`),[n,r]=(0,l.useState)(`Логин уже занят`);return(0,u.jsx)(a,{label:`Логин`,value:e,error:n,onChange:t,onClear:()=>t(``),onClearError:()=>r(``)})},args:{value:void 0}},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-D90hKkIJ.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{a,c as o,i as s}from"./Input-B6UklXwb.js";var c=e({NumberControlled:()=>p,PatternValidation:()=>m,TextControlled:()=>f,WithError:()=>h,__namedExportsOrder:()=>g,default:()=>d}),l,u,d,f,p,m,h,g,_=n((()=>{l=t(r(),1),o(),u=i(),d={title:`Shared/UI/Input`,component:a,args:{value:``,onChange:()=>{}},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{label:{description:`Заголовок поля.`,control:`text`},description:{description:`Описание под заголовком.`,control:`text`},placeholder:{description:`Плейсхолдер нативного поля ввода.`,control:`text`},value:{description:`Текущее значение поля.`,control:`text`},onChange:{description:`Вызывается при изменении значения.`,control:!1},onClear:{description:`Callback кнопки очистки справа.`,control:!1},error:{description:`Текст ошибки под полем.`,control:`text`},onClearError:{description:`Вызывается при вводе для сброса внешней ошибки.`,control:!1},disabled:{description:`Блокирует редактирование.`,control:`boolean`},size:{description:`Размер поля и подписи.`,control:`select`,options:[`xs`,`sm`,`md`,`lg`,`xl`]},allowedPattern:{description:`Регулярное выражение для валидации введенной строки.`,control:!1}}},f={render:e=>{let[t,n]=(0,l.useState)(e.value??``);return(0,u.jsx)(a,{...e,value:t,onChange:n,onClear:()=>n(``)})},args:{label:`Наименование`,description:`Пример обычного текстового поля.`,placeholder:`Введите значение`,value:``,size:`md`}},p={render:()=>{let[e,t]=(0,l.useState)(25);return(0,u.jsx)(s,{label:`Количество`,description:`Числовой ввод с min/max.`,placeholder:`0`,value:e,min:0,max:100,onChange:t,onClear:()=>t(0)})},args:{value:void 0}},m={render:()=>{let[e,t]=(0,l.useState)(``);return(0,u.jsx)(a,{label:`Только цифры`,description:"`allowedPattern` подсвечивает невалидный ввод.",placeholder:`12345`,value:e,onChange:t,allowedPattern:/^\d*$/})},args:{value:void 0}},h={render:()=>{let[e,t]=(0,l.useState)(`admin`),[n,r]=(0,l.useState)(`Логин уже занят`);return(0,u.jsx)(a,{label:`Логин`,value:e,error:n,onChange:t,onClear:()=>t(``),onClearError:()=>r(``)})},args:{value:void 0}},f.parameters={...f.parameters,docs:{...f.parameters?.docs,source:{originalSource:`{
2
2
  render: args => {
3
3
  const [value, setValue] = useState(args.value ?? "");
4
4
  return <InputText {...args} value={value} onChange={setValue} onClear={() => 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-DoPnTsyg.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-DOISS71W.js";import{CustomMask as p,DateAndTime as m,DateOnly as h,TimeOnly as g,n as _,t as v}from"./InputDateTime.stories-DWZLY6-q.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-DsN3hykK.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-CdXPOrRW.js";import{CustomMask as p,DateAndTime as m,DateOnly as h,TimeOnly as g,n as _,t as v}from"./InputDateTime.stories-Ck0MCRBJ.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:`InputDateTime`}),`
3
3
  `,(0,x.jsx)(i,{children:`Маскированный ввод даты, времени и объединенного значения дата-время`}),`
4
4
  `,(0,x.jsx)(o.p,{children:`InputDateTime уже имеет живые 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-CTboIfoI.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{a,i as o}from"./utils-BAfp5vsY.js";import{n as s,t as c}from"./ui.module-wFHXkJzp.js";import{n as l,o as u,r as d,u as f}from"./Input-DrlKVI51.js";import{t as p}from"./input-DD2xaJKI.js";import{a as m,i as h,n as g,r as _}from"./date-segments-CzU9k5bl.js";var v,y,b,x=n((()=>{v=`t1iysX`,y=`_-4oX-p`,b={segmentInput:v,separator:y}}));function S(e){return h(e).map(e=>e.kind===`editable`?{...e,type:e.id}:e)}function C(e,t){let n=g(e,t),r=new Map;return t.forEach((e,t)=>{e.kind===`editable`&&r.set(e.type,n.get(t)??``)}),r}function w(e,t){let n=new Map;return e.forEach((e,r)=>{e.kind===`editable`&&n.set(r,t.get(e.type)??``)}),m(e,n)}var T=n((()=>{_()}));function E(e,t){let n=C(e,t),r=new Map;return t.forEach((e,t)=>{e.kind===`editable`&&r.set(t,n.get(e.type)??``)}),r}function D(e){let t=[];return e.forEach((e,n)=>{e.kind===`editable`&&t.push(n)}),t}function O({mask:e,value:t,onChange:n,onClearError:r,disabled:i}){let a=(0,k.useMemo)(()=>S(e),[e]),o=(0,k.useMemo)(()=>D(a),[a]),s=(0,k.useMemo)(()=>E(t,a),[t,a]),[c,l]=(0,k.useState)(null),[u,d]=(0,k.useState)(()=>t?.getTime()),f=t?.getTime();f!==u&&(d(f),l(null));let p=c??s,m=(0,k.useRef)(new Map),h=(0,k.useRef)(0),[g,_]=(0,k.useState)(!1),v=(0,k.useCallback)(e=>{let t=new Map;a.forEach((n,r)=>{n.kind===`editable`&&t.set(n.type,e.get(r)??``)});let r=w(a,t);r!==null&&n(r)},[a,n]),y=(0,k.useCallback)((e,t=!0)=>{let n=m.current.get(e);n&&(n.focus(),t&&requestAnimationFrame(()=>n.select()))},[]),b=(0,k.useCallback)(e=>{let t=o.indexOf(e);return t<o.length-1?o[t+1]:null},[o]),x=(0,k.useCallback)(e=>{let t=o.indexOf(e);return t>0?o[t-1]:null},[o]),C=(0,k.useCallback)((e,t)=>e.padStart(t.length,`0`),[]);return{segments:a,segmentValues:p,isFocused:g,registerRef:(0,k.useCallback)(e=>t=>{t?m.current.set(e,t):m.current.delete(e)},[]),handleInput:(0,k.useCallback)(e=>t=>{if(i)return;let n=a[e],o=t.target.value.replace(/\D/g,``).slice(0,n.length),s=new Map(p);if(s.set(e,o),l(s),r?.(),o.length===n.length){let t=b(e);t!==null&&requestAnimationFrame(()=>y(t))}v(s)},[i,a,p,r,b,y,v]),handleKeyDown:(0,k.useCallback)(e=>t=>{if(i)return;let n=a[e],r=p.get(e)??``,o=t.currentTarget;switch(t.key){case`ArrowRight`:if(o.selectionStart===r.length||r===``){t.preventDefault();let n=b(e);n!==null&&y(n)}break;case`ArrowLeft`:if(o.selectionStart===0||r===``){t.preventDefault();let n=x(e);n!==null&&y(n)}break;case`ArrowUp`:{t.preventDefault();let i=r===``?n.min:parseInt(r,10)+1;i>n.max&&(i=n.min);let a=C(i.toString(),n),s=new Map(p);s.set(e,a),l(s),v(s),requestAnimationFrame(()=>o.select());break}case`ArrowDown`:{t.preventDefault();let i=r===``?n.max:parseInt(r,10)-1;i<n.min&&(i=n.max);let a=C(i.toString(),n),s=new Map(p);s.set(e,a),l(s),v(s),requestAnimationFrame(()=>o.select());break}case`Backspace`:if(r===``){t.preventDefault();let n=x(e);n!==null&&y(n)}break;case`Delete`:{t.preventDefault();let n=new Map(p);n.set(e,``),l(n),v(n);break}}},[i,a,p,b,x,y,C,v]),handleFocus:(0,k.useCallback)(()=>e=>{e.target.select()},[]),handleContainerFocus:(0,k.useCallback)(()=>{clearTimeout(h.current),_(!0)},[]),handleContainerBlur:(0,k.useCallback)(()=>{h.current=window.setTimeout(()=>{_(!1),l(null)},0)},[]),focusFirstEmpty:(0,k.useCallback)(()=>{let e=o.find(e=>!(p.get(e)??``))??o[o.length-1];e!==void 0&&y(e)},[o,p,y])}}var k,A=n((()=>{k=t(r(),1),T()}));function j({mask:e,value:t,onChange:n,label:r,description:i,disabled:o,size:c,className:p,error:m,onClearError:h,onClear:g,"aria-label":_}){let{segments:v,segmentValues:y,registerRef:x,handleInput:S,handleKeyDown:C,handleFocus:w,handleContainerFocus:T,handleContainerBlur:E,focusFirstEmpty:D}=O({mask:e,value:t,onChange:n,onClearError:h,disabled:o}),{controlId:k,labelId:A,descriptionId:j,errorId:M,describedBy:N}=f({hasLabel:r!=null,hasDescription:!!i,hasError:!!m});return(0,F.jsx)(u,{label:r,description:i,disabled:o,className:p,size:c,error:m,labelId:A,descriptionId:j,errorId:M,children:(0,F.jsx)(d,{endAdornment:g?(0,F.jsx)(l,{onClick:g,disabled:o}):void 0,endAdornmentWidth:g?`var(--control-height)`:void 0,children:({controlClassName:e})=>(0,F.jsx)(`div`,{id:k,className:a(s.uiInputControlFake,e),"data-invalid":m?``:void 0,"data-disabled":o||void 0,role:`group`,"aria-invalid":!!m||void 0,"aria-label":_||(typeof r==`string`?r:void 0),"aria-labelledby":_?void 0:A,"aria-describedby":N,onFocus:T,onBlur:E,onClick:e=>{e.target===e.currentTarget&&D()},children:v.map((e,t)=>e.kind===`literal`?(0,F.jsx)(`span`,{className:b.separator,"data-disabled":o||void 0,children:e.text},t):(0,F.jsx)(`input`,{ref:x(t),type:`text`,inputMode:`numeric`,className:b.segmentInput,style:{width:`${e.length+.5}ch`},value:y.get(t)??``,placeholder:e.placeholder,maxLength:e.length,disabled:o,"aria-label":e.type,autoComplete:`off`,onChange:S(t),onKeyDown:C(t),onFocus:w()},t))})})})}function M({mask:e=`YYYY.MM.DD`,...t}){return(0,F.jsx)(j,{mask:e,...t})}function N({mask:e=`hh:mm`,...t}){return(0,F.jsx)(j,{mask:e,...t})}function P({mask:e=`YYYY.MM.DD hh:mm`,...t}){return(0,F.jsx)(j,{mask:e,...t})}var F,I=n((()=>{o(),p(),c(),x(),A(),F=i(),M.__docgenInfo={description:``,methods:[],displayName:`InputDate`,props:{mask:{required:!1,tsType:{name:`string`},description:``,defaultValue:{value:`"YYYY.MM.DD"`,computed:!1}}}},N.__docgenInfo={description:``,methods:[],displayName:`InputTime`,props:{mask:{required:!1,tsType:{name:`string`},description:``,defaultValue:{value:`"hh:mm"`,computed:!1}}}},P.__docgenInfo={description:``,methods:[],displayName:`InputDateTime`,props:{mask:{required:!1,tsType:{name:`string`},description:``,defaultValue:{value:`"YYYY.MM.DD hh:mm"`,computed:!1}}}}})),L=e({CustomMask:()=>W,DateAndTime:()=>U,DateOnly:()=>V,TimeOnly:()=>H,__namedExportsOrder:()=>G,default:()=>B}),R,z,B,V,H,U,W,G,K=n((()=>{R=t(r(),1),I(),z=i(),B={title:`Shared/UI/InputDateTime`,component:M,args:{value:void 0,onChange:()=>{}},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{label:{description:`Заголовок поля.`,control:`text`},description:{description:`Описание под заголовком.`,control:`text`},value:{description:"Текущее значение в виде `Date`.",control:!1},onChange:{description:`Вызывается при формировании валидной даты/времени.`,control:!1},mask:{description:"Маска сегментов (`YYYY`, `MM`, `DD`, `hh`, `mm`, `ss`).",control:`text`},error:{description:`Текст ошибки под полем.`,control:`text`},onClearError:{description:`Сброс внешней ошибки при вводе.`,control:!1},onClear:{description:`Очищает значение и активирует кнопку очистки.`,control:!1},disabled:{description:`Блокирует редактирование сегментов.`,control:`boolean`},size:{description:`Размер поля и подписи.`,control:`select`,options:[`xs`,`sm`,`md`,`lg`,`xl`]},"aria-label":{description:`ARIA-метка для контейнера сегментного ввода.`,control:`text`}}},V={render:e=>{let[t,n]=(0,R.useState)(e.value);return(0,z.jsx)(M,{...e,value:t,onChange:n,onClear:()=>n(void 0)})},args:{label:`Дата`,description:`Формат по умолчанию: YYYY.MM.DD`,value:new Date(2026,2,5)}},H={render:()=>{let[e,t]=(0,R.useState)(new Date(2026,2,5,14,30,0));return(0,z.jsx)(N,{label:`Время`,description:`Формат по умолчанию: hh:mm`,value:e,onChange:t,onClear:()=>t(void 0)})},args:{value:void 0}},U={render:()=>{let[e,t]=(0,R.useState)(new Date(2026,2,5,9,15,0));return(0,z.jsx)(P,{label:`Дата и время`,description:`Комбинированный ввод даты и времени.`,value:e,onChange:t,onClear:()=>t(void 0)})},args:{value:void 0}},W={render:()=>{let[e,t]=(0,R.useState)(new Date(2026,2,5,9,15,42));return(0,z.jsx)(P,{label:`Кастомная маска`,description:`Добавлены секунды: YYYY.MM.DD hh:mm:ss`,mask:`YYYY.MM.DD hh:mm:ss`,value:e,onChange:t})},args:{value:void 0}},V.parameters={...V.parameters,docs:{...V.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-D90hKkIJ.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{a,i as o}from"./utils-Bg8QclQy.js";import{n as s,t as c}from"./ui.module-wFHXkJzp.js";import{n as l,o as u,r as d,u as f}from"./Input-B6UklXwb.js";import{t as p}from"./input-D77vjPVL.js";import{a as m,i as h,n as g,r as _}from"./date-segments-CzU9k5bl.js";var v,y,b,x=n((()=>{v=`t1iysX`,y=`_-4oX-p`,b={segmentInput:v,separator:y}}));function S(e){return h(e).map(e=>e.kind===`editable`?{...e,type:e.id}:e)}function C(e,t){let n=g(e,t),r=new Map;return t.forEach((e,t)=>{e.kind===`editable`&&r.set(e.type,n.get(t)??``)}),r}function w(e,t){let n=new Map;return e.forEach((e,r)=>{e.kind===`editable`&&n.set(r,t.get(e.type)??``)}),m(e,n)}var T=n((()=>{_()}));function E(e,t){let n=C(e,t),r=new Map;return t.forEach((e,t)=>{e.kind===`editable`&&r.set(t,n.get(e.type)??``)}),r}function D(e){let t=[];return e.forEach((e,n)=>{e.kind===`editable`&&t.push(n)}),t}function O({mask:e,value:t,onChange:n,onClearError:r,disabled:i}){let a=(0,k.useMemo)(()=>S(e),[e]),o=(0,k.useMemo)(()=>D(a),[a]),s=(0,k.useMemo)(()=>E(t,a),[t,a]),[c,l]=(0,k.useState)(null),[u,d]=(0,k.useState)(()=>t?.getTime()),f=t?.getTime();f!==u&&(d(f),l(null));let p=c??s,m=(0,k.useRef)(new Map),h=(0,k.useRef)(0),[g,_]=(0,k.useState)(!1),v=(0,k.useCallback)(e=>{let t=new Map;a.forEach((n,r)=>{n.kind===`editable`&&t.set(n.type,e.get(r)??``)});let r=w(a,t);r!==null&&n(r)},[a,n]),y=(0,k.useCallback)((e,t=!0)=>{let n=m.current.get(e);n&&(n.focus(),t&&requestAnimationFrame(()=>n.select()))},[]),b=(0,k.useCallback)(e=>{let t=o.indexOf(e);return t<o.length-1?o[t+1]:null},[o]),x=(0,k.useCallback)(e=>{let t=o.indexOf(e);return t>0?o[t-1]:null},[o]),C=(0,k.useCallback)((e,t)=>e.padStart(t.length,`0`),[]);return{segments:a,segmentValues:p,isFocused:g,registerRef:(0,k.useCallback)(e=>t=>{t?m.current.set(e,t):m.current.delete(e)},[]),handleInput:(0,k.useCallback)(e=>t=>{if(i)return;let n=a[e],o=t.target.value.replace(/\D/g,``).slice(0,n.length),s=new Map(p);if(s.set(e,o),l(s),r?.(),o.length===n.length){let t=b(e);t!==null&&requestAnimationFrame(()=>y(t))}v(s)},[i,a,p,r,b,y,v]),handleKeyDown:(0,k.useCallback)(e=>t=>{if(i)return;let n=a[e],r=p.get(e)??``,o=t.currentTarget;switch(t.key){case`ArrowRight`:if(o.selectionStart===r.length||r===``){t.preventDefault();let n=b(e);n!==null&&y(n)}break;case`ArrowLeft`:if(o.selectionStart===0||r===``){t.preventDefault();let n=x(e);n!==null&&y(n)}break;case`ArrowUp`:{t.preventDefault();let i=r===``?n.min:parseInt(r,10)+1;i>n.max&&(i=n.min);let a=C(i.toString(),n),s=new Map(p);s.set(e,a),l(s),v(s),requestAnimationFrame(()=>o.select());break}case`ArrowDown`:{t.preventDefault();let i=r===``?n.max:parseInt(r,10)-1;i<n.min&&(i=n.max);let a=C(i.toString(),n),s=new Map(p);s.set(e,a),l(s),v(s),requestAnimationFrame(()=>o.select());break}case`Backspace`:if(r===``){t.preventDefault();let n=x(e);n!==null&&y(n)}break;case`Delete`:{t.preventDefault();let n=new Map(p);n.set(e,``),l(n),v(n);break}}},[i,a,p,b,x,y,C,v]),handleFocus:(0,k.useCallback)(()=>e=>{e.target.select()},[]),handleContainerFocus:(0,k.useCallback)(()=>{clearTimeout(h.current),_(!0)},[]),handleContainerBlur:(0,k.useCallback)(()=>{h.current=window.setTimeout(()=>{_(!1),l(null)},0)},[]),focusFirstEmpty:(0,k.useCallback)(()=>{let e=o.find(e=>!(p.get(e)??``))??o[o.length-1];e!==void 0&&y(e)},[o,p,y])}}var k,A=n((()=>{k=t(r(),1),T()}));function j({mask:e,value:t,onChange:n,label:r,description:i,disabled:o,size:c,className:p,error:m,onClearError:h,onClear:g,"aria-label":_}){let{segments:v,segmentValues:y,registerRef:x,handleInput:S,handleKeyDown:C,handleFocus:w,handleContainerFocus:T,handleContainerBlur:E,focusFirstEmpty:D}=O({mask:e,value:t,onChange:n,onClearError:h,disabled:o}),{controlId:k,labelId:A,descriptionId:j,errorId:M,describedBy:N}=f({hasLabel:r!=null,hasDescription:!!i,hasError:!!m});return(0,F.jsx)(u,{label:r,description:i,disabled:o,className:p,size:c,error:m,labelId:A,descriptionId:j,errorId:M,children:(0,F.jsx)(d,{endAdornment:g?(0,F.jsx)(l,{onClick:g,disabled:o}):void 0,endAdornmentWidth:g?`var(--control-height)`:void 0,children:({controlClassName:e})=>(0,F.jsx)(`div`,{id:k,className:a(s.uiInputControlFake,e),"data-invalid":m?``:void 0,"data-disabled":o||void 0,role:`group`,"aria-invalid":!!m||void 0,"aria-label":_||(typeof r==`string`?r:void 0),"aria-labelledby":_?void 0:A,"aria-describedby":N,onFocus:T,onBlur:E,onClick:e=>{e.target===e.currentTarget&&D()},children:v.map((e,t)=>e.kind===`literal`?(0,F.jsx)(`span`,{className:b.separator,"data-disabled":o||void 0,children:e.text},t):(0,F.jsx)(`input`,{ref:x(t),type:`text`,inputMode:`numeric`,className:b.segmentInput,style:{width:`${e.length+.5}ch`},value:y.get(t)??``,placeholder:e.placeholder,maxLength:e.length,disabled:o,"aria-label":e.type,autoComplete:`off`,onChange:S(t),onKeyDown:C(t),onFocus:w()},t))})})})}function M({mask:e=`YYYY.MM.DD`,...t}){return(0,F.jsx)(j,{mask:e,...t})}function N({mask:e=`hh:mm`,...t}){return(0,F.jsx)(j,{mask:e,...t})}function P({mask:e=`YYYY.MM.DD hh:mm`,...t}){return(0,F.jsx)(j,{mask:e,...t})}var F,I=n((()=>{o(),p(),c(),x(),A(),F=i(),M.__docgenInfo={description:``,methods:[],displayName:`InputDate`,props:{mask:{required:!1,tsType:{name:`string`},description:``,defaultValue:{value:`"YYYY.MM.DD"`,computed:!1}}}},N.__docgenInfo={description:``,methods:[],displayName:`InputTime`,props:{mask:{required:!1,tsType:{name:`string`},description:``,defaultValue:{value:`"hh:mm"`,computed:!1}}}},P.__docgenInfo={description:``,methods:[],displayName:`InputDateTime`,props:{mask:{required:!1,tsType:{name:`string`},description:``,defaultValue:{value:`"YYYY.MM.DD hh:mm"`,computed:!1}}}}})),L=e({CustomMask:()=>W,DateAndTime:()=>U,DateOnly:()=>V,TimeOnly:()=>H,__namedExportsOrder:()=>G,default:()=>B}),R,z,B,V,H,U,W,G,K=n((()=>{R=t(r(),1),I(),z=i(),B={title:`Shared/UI/InputDateTime`,component:M,args:{value:void 0,onChange:()=>{}},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{label:{description:`Заголовок поля.`,control:`text`},description:{description:`Описание под заголовком.`,control:`text`},value:{description:"Текущее значение в виде `Date`.",control:!1},onChange:{description:`Вызывается при формировании валидной даты/времени.`,control:!1},mask:{description:"Маска сегментов (`YYYY`, `MM`, `DD`, `hh`, `mm`, `ss`).",control:`text`},error:{description:`Текст ошибки под полем.`,control:`text`},onClearError:{description:`Сброс внешней ошибки при вводе.`,control:!1},onClear:{description:`Очищает значение и активирует кнопку очистки.`,control:!1},disabled:{description:`Блокирует редактирование сегментов.`,control:`boolean`},size:{description:`Размер поля и подписи.`,control:`select`,options:[`xs`,`sm`,`md`,`lg`,`xl`]},"aria-label":{description:`ARIA-метка для контейнера сегментного ввода.`,control:`text`}}},V={render:e=>{let[t,n]=(0,R.useState)(e.value);return(0,z.jsx)(M,{...e,value:t,onChange:n,onClear:()=>n(void 0)})},args:{label:`Дата`,description:`Формат по умолчанию: YYYY.MM.DD`,value:new Date(2026,2,5)}},H={render:()=>{let[e,t]=(0,R.useState)(new Date(2026,2,5,14,30,0));return(0,z.jsx)(N,{label:`Время`,description:`Формат по умолчанию: hh:mm`,value:e,onChange:t,onClear:()=>t(void 0)})},args:{value:void 0}},U={render:()=>{let[e,t]=(0,R.useState)(new Date(2026,2,5,9,15,0));return(0,z.jsx)(P,{label:`Дата и время`,description:`Комбинированный ввод даты и времени.`,value:e,onChange:t,onClear:()=>t(void 0)})},args:{value:void 0}},W={render:()=>{let[e,t]=(0,R.useState)(new Date(2026,2,5,9,15,42));return(0,z.jsx)(P,{label:`Кастомная маска`,description:`Добавлены секунды: YYYY.MM.DD hh:mm:ss`,mask:`YYYY.MM.DD hh:mm:ss`,value:e,onChange:t})},args:{value:void 0}},V.parameters={...V.parameters,docs:{...V.parameters?.docs,source:{originalSource:`{
2
2
  render: args => {
3
3
  const [value, setValue] = useState<Date | undefined>(args.value);
4
4
  return <InputDate {...args} value={value} onChange={setValue} onClear={() => setValue(undefined)} />;
@@ -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-DoPnTsyg.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-DOISS71W.js";import{ArrayBufferMode as p,Controlled as m,WithInitialValue as h,n as g,t as _}from"./InputFile.stories-C9fMevjs.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-DsN3hykK.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-CdXPOrRW.js";import{ArrayBufferMode as p,Controlled as m,WithInitialValue as h,n as g,t as _}from"./InputFile.stories-QbTuArh1.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:`InputFile`}),`
3
3
  `,(0,b.jsx)(i,{children:`Контрол для выбора одного файла с поддержкой предварительного значения и бинарного режима`}),`
4
4
  `,(0,b.jsx)(o.p,{children:`InputFile уже имеет живые 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-CTboIfoI.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{a,i as o,n as s}from"./utils-BAfp5vsY.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-DrlKVI51.js";import{t as m}from"./input-DD2xaJKI.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-D90hKkIJ.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{a,i as o,n as s}from"./utils-Bg8QclQy.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-B6UklXwb.js";import{t as m}from"./input-D77vjPVL.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-DoPnTsyg.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-DOISS71W.js";import{Controlled as p,LimitReached as m,WithInitialFiles as h,n as g,t as _}from"./InputFiles.stories-DxdLOKbl.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-DsN3hykK.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-CdXPOrRW.js";import{Controlled as p,LimitReached as m,WithInitialFiles as h,n as g,t as _}from"./InputFiles.stories-PD0pr8y6.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-CTboIfoI.js";import{t as r}from"./jsx-runtime-BBQGix-2.js";import{a as i,i as a,n as o}from"./utils-BAfp5vsY.js";import{n as s,t as c}from"./lucide-react-gtfXEQZ7.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-DrlKVI51.js";import{t as m}from"./input-DD2xaJKI.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-D90hKkIJ.js";import{t as r}from"./jsx-runtime-BBQGix-2.js";import{a as i,i as a,n as o}from"./utils-Bg8QclQy.js";import{n as s,t as c}from"./lucide-react-ClGevkpS.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-B6UklXwb.js";import{t as m}from"./input-D77vjPVL.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-CTboIfoI.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{n as a,t as o}from"./InputFiles-BPW2NUcJ.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-D90hKkIJ.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{n as a,t as o}from"./InputFiles-ChhwyB9P.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-DoPnTsyg.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-DOISS71W.js";import{ArrayBufferMode as p,Controlled as m,WithInitialImage as h,n as g,t as _}from"./InputImage.stories-D3hw0C1x.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-DsN3hykK.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-CdXPOrRW.js";import{ArrayBufferMode as p,Controlled as m,WithInitialImage as h,n as g,t as _}from"./InputImage.stories-CHjyI709.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-CTboIfoI.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{a,i as o,n as s}from"./utils-BAfp5vsY.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-DrlKVI51.js";import{t as m}from"./input-DD2xaJKI.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-D90hKkIJ.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{a,i as o,n as s}from"./utils-Bg8QclQy.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-B6UklXwb.js";import{t as m}from"./input-D77vjPVL.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-DoPnTsyg.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-DOISS71W.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-CZPA3-Ci.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-DsN3hykK.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-CdXPOrRW.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-DvTvYmfw.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-CTboIfoI.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{a,i as o}from"./utils-BAfp5vsY.js";import{t as s,ut as ee}from"./lucide-react-gtfXEQZ7.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-DR1p3GaI.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-D90hKkIJ.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{a,i as o}from"./utils-Bg8QclQy.js";import{t as s,ut as ee}from"./lucide-react-ClGevkpS.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-9SOfvJPJ.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-DoPnTsyg.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-DOISS71W.js";import{CustomRender as p,MultiSelect as m,SingleSelect as h,n as g,t as _}from"./Listbox.stories-BFHG7-fh.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-DsN3hykK.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-CdXPOrRW.js";import{CustomRender as p,MultiSelect as m,SingleSelect as h,n as g,t as _}from"./Listbox.stories-D4EMWR6l.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-CTboIfoI.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-BAfp5vsY.js";import{t as d,ut as f}from"./lucide-react-gtfXEQZ7.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-D90hKkIJ.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-Bg8QclQy.js";import{t as d,ut as f}from"./lucide-react-ClGevkpS.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-DoPnTsyg.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-DOISS71W.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-DKyOv2Vj.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-DsN3hykK.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-CdXPOrRW.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-BgnMPuDy.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.
@@ -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-CTboIfoI.js";import{t as i}from"./react-dom-B8H6ZjRK.js";import{t as a}from"./jsx-runtime-BBQGix-2.js";import{a as o,i as s}from"./utils-BAfp5vsY.js";import{n as c,t as l}from"./lucide-react-gtfXEQZ7.js";import{a as u,i as ee,r as te,s as ne}from"./error-B6AQmhXG.js";import{o as d}from"./Flex-BZTb6Ls6.js";import{t as f}from"./flex-DVKfO80p.js";import{t as p}from"./Button-D5iLUeQv.js";import{t as m}from"./button-GO_OT5aH.js";import{t as h}from"./Input-DrlKVI51.js";import{t as g}from"./input-DD2xaJKI.js";import{i as re}from"./Grid-fJQh5Vul.js";import{t as ie}from"./grid-BhEsHhF8.js";import{i as _,t as v}from"./misc-D1Z0nw9S.js";var y,b,x,S,C,w,T,ae,E,D,O,k,oe=n((()=>{y=`vGPUKV`,b=`O7gb7P`,x=`RVq8v3`,S=`PCSUAL`,C=`XDCHzq`,w=`t1kl8L`,T=`o3PEEB`,ae=`WhUkxm`,E=`NDgdMi`,D=`JDlse5`,O=`FaDKSt`,k={modal:y,sm:b,md:x,lg:S,xl:C,xxl:w,inside:T,header:ae,body:E,headerText:D,headerButton:O}})),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,se=n((()=>{P=t(r(),1),u(),s(),l(),F=t(i(),1),m(),f(),ie(),v(),oe(),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)(d,{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)(),l=(0,P.useId)(),{modals:u,openModal:d,closeModal:f,isTopModal:m}=M(),[h,g]=(0,P.useState)(!1),ie=(0,P.useEffectEvent)(()=>g(!0)),_=(0,P.useEffectEvent)(()=>g(!1)),v=e&&(u.length===0||m(s)),y=ne(e||!1);if(ee({active:v||!1,onDismiss:i,containerRef:y}),(0,P.useEffect)(()=>(e&&(d(s),ie()),()=>{f(s),_()}),[f,e,s,d]),!h)return null;let b=te(`modal-root`);if(!b)return null;let x=null,S=null,C=null,w=P.Children.toArray(a);for(let e of w)switch(e.type.displayName){case L.displayName:if(x)throw Error(`Modal: duplicate <Toolbar> found`);x=e;break;case z.displayName:if(C)throw Error(`Modal: duplicate <Footer> found`);C=e;break;case R.displayName:if(S)throw Error(`Modal: duplicate <Content> found`);S=e;break}return(0,F.createPortal)((0,I.jsx)(I.Fragment,{children:(0,I.jsxs)(`div`,{ref:y,className:o(k.modal,k[n]),style:{height:r},role:`dialog`,"aria-modal":`true`,"aria-labelledby":l,"aria-describedby":`${l}-content`,children:[(0,I.jsxs)(`div`,{className:o(k.header,x?``:`borderBottom`),children:[(0,I.jsx)(`h3`,{className:k.headerText,id:l,children:t}),(0,I.jsx)(p,{icon:(0,I.jsx)(c,{}),className:k.headerButton,variant:`ghost`,autoFocus:!0,"aria-label":`Закрыть модальное окно`,onClick:i})]}),(0,I.jsxs)(re,{id:`${l}-content`,templateRows:`${x?`auto`:``} 1fr ${C?`auto`:``}`.trim(),className:k.body,children:[x,S,C]})]})}),b)},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),c=(0,H.useCallback)(e=>{r(t=>[...t,e])},[]),l=(0,H.useCallback)(e=>{r(t=>t.filter(t=>t!==e))},[]),u=(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:c,closeModal:l,isTopModal:u},children:e})}var H,U,ce=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}}}}})),le=n((()=>{se(),ce(),N()})),ue=e({Controlled:()=>J,ScrollableContent:()=>X,Sizes:()=>Z,StackedModals:()=>Q,WithToolbarAndFooter:()=>Y,__namedExportsOrder:()=>$,default:()=>q});function de({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,$,fe=n((()=>{G=t(r(),1),m(),g(),le(),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)(de,{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)(p,{variant:`transparent`,children:`Отмена`}),(0,K.jsx)(p,{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)(p,{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)(p,{variant:`transparent`,onClick:()=>n(!1),children:`Отмена`}),(0,K.jsx)(p,{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)(p,{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)(p,{variant:`transparent`,children:`Сбросить`})]})}),(0,K.jsx)(R,{children:(0,K.jsx)(W,{})}),(0,K.jsxs)(z,{children:[(0,K.jsx)(p,{variant:`transparent`,onClick:()=>n(!1),children:`Отмена`}),(0,K.jsx)(p,{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)(p,{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)(p,{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)(p,{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)(p,{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)(p,{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)(p,{variant:`transparent`,onClick:()=>i(!0),children:`Открыть вторую модалку`})]})}),(0,K.jsx)(z,{children:(0,K.jsx)(p,{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)(p,{onClick:()=>i(!1),children:`Закрыть вторую`})})]})]})}},J.parameters={...J.parameters,docs:{...J.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-D90hKkIJ.js";import{t as i}from"./react-dom-Iu9X9_7I.js";import{t as a}from"./jsx-runtime-BBQGix-2.js";import{a as o,i as s}from"./utils-Bg8QclQy.js";import{n as c,t as l}from"./lucide-react-ClGevkpS.js";import{a as u,i as ee,r as te,s as ne}from"./error-ChmbU9Ma.js";import{o as d}from"./Flex-D1ZBJLmP.js";import{t as f}from"./flex-CMA-ZjxB.js";import{t as p}from"./Button-c4nDxtrg.js";import{t as m}from"./button-C8nkqC6f.js";import{t as h}from"./Input-B6UklXwb.js";import{t as g}from"./input-D77vjPVL.js";import{i as re}from"./Grid-D4xblGva.js";import{t as ie}from"./grid-Ck5-5Szv.js";import{i as _,t as v}from"./misc-yRJvnOkX.js";var y,b,x,S,C,w,T,ae,E,D,O,k,oe=n((()=>{y=`vGPUKV`,b=`O7gb7P`,x=`RVq8v3`,S=`PCSUAL`,C=`XDCHzq`,w=`t1kl8L`,T=`o3PEEB`,ae=`WhUkxm`,E=`NDgdMi`,D=`JDlse5`,O=`FaDKSt`,k={modal:y,sm:b,md:x,lg:S,xl:C,xxl:w,inside:T,header:ae,body:E,headerText:D,headerButton:O}})),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,se=n((()=>{P=t(r(),1),u(),s(),l(),F=t(i(),1),m(),f(),ie(),v(),oe(),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)(d,{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)(),l=(0,P.useId)(),{modals:u,openModal:d,closeModal:f,isTopModal:m}=M(),[h,g]=(0,P.useState)(!1),ie=(0,P.useEffectEvent)(()=>g(!0)),_=(0,P.useEffectEvent)(()=>g(!1)),v=e&&(u.length===0||m(s)),y=ne(e||!1);if(ee({active:v||!1,onDismiss:i,containerRef:y}),(0,P.useEffect)(()=>(e&&(d(s),ie()),()=>{f(s),_()}),[f,e,s,d]),!h)return null;let b=te(`modal-root`);if(!b)return null;let x=null,S=null,C=null,w=P.Children.toArray(a);for(let e of w)switch(e.type.displayName){case L.displayName:if(x)throw Error(`Modal: duplicate <Toolbar> found`);x=e;break;case z.displayName:if(C)throw Error(`Modal: duplicate <Footer> found`);C=e;break;case R.displayName:if(S)throw Error(`Modal: duplicate <Content> found`);S=e;break}return(0,F.createPortal)((0,I.jsx)(I.Fragment,{children:(0,I.jsxs)(`div`,{ref:y,className:o(k.modal,k[n]),style:{height:r},role:`dialog`,"aria-modal":`true`,"aria-labelledby":l,"aria-describedby":`${l}-content`,children:[(0,I.jsxs)(`div`,{className:o(k.header,x?``:`borderBottom`),children:[(0,I.jsx)(`h3`,{className:k.headerText,id:l,children:t}),(0,I.jsx)(p,{icon:(0,I.jsx)(c,{}),className:k.headerButton,variant:`ghost`,autoFocus:!0,"aria-label":`Закрыть модальное окно`,onClick:i})]}),(0,I.jsxs)(re,{id:`${l}-content`,templateRows:`${x?`auto`:``} 1fr ${C?`auto`:``}`.trim(),className:k.body,children:[x,S,C]})]})}),b)},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),c=(0,H.useCallback)(e=>{r(t=>[...t,e])},[]),l=(0,H.useCallback)(e=>{r(t=>t.filter(t=>t!==e))},[]),u=(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:c,closeModal:l,isTopModal:u},children:e})}var H,U,ce=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}}}}})),le=n((()=>{se(),ce(),N()})),ue=e({Controlled:()=>J,ScrollableContent:()=>X,Sizes:()=>Z,StackedModals:()=>Q,WithToolbarAndFooter:()=>Y,__namedExportsOrder:()=>$,default:()=>q});function de({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,$,fe=n((()=>{G=t(r(),1),m(),g(),le(),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)(de,{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)(p,{variant:`transparent`,children:`Отмена`}),(0,K.jsx)(p,{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)(p,{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)(p,{variant:`transparent`,onClick:()=>n(!1),children:`Отмена`}),(0,K.jsx)(p,{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)(p,{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)(p,{variant:`transparent`,children:`Сбросить`})]})}),(0,K.jsx)(R,{children:(0,K.jsx)(W,{})}),(0,K.jsxs)(z,{children:[(0,K.jsx)(p,{variant:`transparent`,onClick:()=>n(!1),children:`Отмена`}),(0,K.jsx)(p,{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)(p,{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)(p,{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)(p,{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)(p,{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)(p,{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)(p,{variant:`transparent`,onClick:()=>i(!0),children:`Открыть вторую модалку`})]})}),(0,K.jsx)(z,{children:(0,K.jsx)(p,{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)(p,{onClick:()=>i(!1),children:`Закрыть вторую`})})]})]})}},J.parameters={...J.parameters,docs:{...J.parameters?.docs,source:{originalSource:`{
2
2
  name: "Управляемая модалка",
3
3
  render: args => {
4
4
  const [open, setOpen] = useState(false);
@@ -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-DoPnTsyg.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-DOISS71W.js";import{Basic as p,Empty as m,ErrorState as h,Loading as g,n as _,t as v}from"./MultiSelect.stories-B0gUdW3k.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-DsN3hykK.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-CdXPOrRW.js";import{Basic as p,Empty as m,ErrorState as h,Loading as g,n as _,t as v}from"./MultiSelect.stories-DV9nyDoE.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,2 +1,2 @@
1
- import{c as e,i as t}from"./preload-helper-B45gAKPr.js";import{C as n}from"./iframe-CTboIfoI.js";import{t as r}from"./jsx-runtime-BBQGix-2.js";import{a as i,i as a}from"./utils-BAfp5vsY.js";import{n as ee,t as o}from"./lucide-react-gtfXEQZ7.js";import{i as s,t as c}from"./text-BE5Uqo4p.js";import{n as l,t as u}from"./ui.module-wFHXkJzp.js";import{t as te}from"./CheckBox-BCgKBJVJ.js";import{t as d}from"./Grid-fJQh5Vul.js";import{t as f}from"./grid-BhEsHhF8.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-DR1p3GaI.js";import{n as le,t as y}from"./SelectOptionContent-RA3YQEN1.js";import{t as b}from"./check-box-DAQgEdFF.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-D90hKkIJ.js";import{t as r}from"./jsx-runtime-BBQGix-2.js";import{a as i,i as a}from"./utils-Bg8QclQy.js";import{n as ee,t as o}from"./lucide-react-ClGevkpS.js";import{i as s,t as c}from"./text-CwWM1WCX.js";import{n as l,t as u}from"./ui.module-wFHXkJzp.js";import{t as te}from"./CheckBox-6Qr3jWMy.js";import{t as d}from"./Grid-D4xblGva.js";import{t as f}from"./grid-Ck5-5Szv.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-9SOfvJPJ.js";import{n as le,t as y}from"./SelectOptionContent-C1-duJ6s.js";import{t as b}from"./check-box-BRod99sY.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{a as e,c as t,i as n}from"./preload-helper-B45gAKPr.js";import{C as r}from"./iframe-CTboIfoI.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{n as a,t as o}from"./MultiSelect-hT_fw4sf.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-D90hKkIJ.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{n as a,t as o}from"./MultiSelect-D7N8euwu.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-DoPnTsyg.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-DOISS71W.js";import{InteractivePlayground as p,Showcase as m,n as h,t as g}from"./NotificationsHost.stories-BzPPbNiK.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-DsN3hykK.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-CdXPOrRW.js";import{InteractivePlayground as p,Showcase as m,n as h,t as g}from"./NotificationsHost.stories-DlO0kPbm.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.