@ryuzaki13/react-foundation-ui 1.0.21 → 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 (219) hide show
  1. package/dist/advanced-search/index.js +3 -3
  2. package/dist/base-table/index.js +1 -1
  3. package/dist/chunks/{TextEditorLexicalClient-B1kQnKrU.js → TextEditorLexicalClient-bDEyimUa.js} +2 -2
  4. package/dist/chunks/{TextEditorLexicalClient-B1kQnKrU.js.map → TextEditorLexicalClient-bDEyimUa.js.map} +1 -1
  5. package/dist/chunks/{base-table-DghNJ6ss.js → base-table-BXKFSgIk.js} +2 -2
  6. package/dist/chunks/{base-table-DghNJ6ss.js.map → base-table-BXKFSgIk.js.map} +1 -1
  7. package/dist/chunks/{misc-ClXJygTj.js → misc-DIF5h9ba.js} +71 -76
  8. package/dist/chunks/misc-DIF5h9ba.js.map +1 -0
  9. package/dist/chunks/{modal-QGp5CjB9.js → modal-Cll8YZ7b.js} +2 -2
  10. package/dist/chunks/{modal-QGp5CjB9.js.map → modal-Cll8YZ7b.js.map} +1 -1
  11. package/dist/chunks/{table-tBQ_FOs3.js → table-BdpMzhLH.js} +2 -2
  12. package/dist/chunks/{table-tBQ_FOs3.js.map → table-BdpMzhLH.js.map} +1 -1
  13. package/dist/expandable-action-panel/index.js +1 -1
  14. package/dist/image/index.js +1 -1
  15. package/dist/list/index.js +1 -1
  16. package/dist/misc/AnimatedLogo.d.ts +10 -1
  17. package/dist/misc/AnimatedLogo.d.ts.map +1 -1
  18. package/dist/misc/AnimatedLogoSegment.d.ts +12 -0
  19. package/dist/misc/AnimatedLogoSegment.d.ts.map +1 -0
  20. package/dist/misc/LoadingMessage.d.ts +6 -4
  21. package/dist/misc/LoadingMessage.d.ts.map +1 -1
  22. package/dist/misc/index.d.ts +1 -0
  23. package/dist/misc/index.d.ts.map +1 -1
  24. package/dist/misc/index.js +2 -2
  25. package/dist/modal/index.js +1 -1
  26. package/dist/simple-table/index.js +1 -1
  27. package/dist/styles.css +1 -1
  28. package/dist/table/index.js +1 -1
  29. package/dist/tabs/index.js +1 -1
  30. package/dist/tag-input/TagInput.d.ts +40 -0
  31. package/dist/tag-input/TagInput.d.ts.map +1 -0
  32. package/dist/tag-input/index.d.ts +2 -0
  33. package/dist/tag-input/index.d.ts.map +1 -0
  34. package/dist/tag-input/index.js +180 -0
  35. package/dist/tag-input/index.js.map +1 -0
  36. package/dist/tag-input/lib/joinTagInputAriaIds.d.ts +3 -0
  37. package/dist/tag-input/lib/joinTagInputAriaIds.d.ts.map +1 -0
  38. package/dist/tag-input/lib/tagInputDefaults.d.ts +7 -0
  39. package/dist/tag-input/lib/tagInputDefaults.d.ts.map +1 -0
  40. package/dist/text-editor/index.js +2 -2
  41. package/dist/tree-table/index.js +1 -1
  42. package/package.json +5 -1
  43. package/src/styles/_base.scss +0 -62
  44. package/storybook-static/assets/{Badge-Cg2dYSwP.js → Badge-Dk1ppt6h.js} +1 -1
  45. package/storybook-static/assets/{Badge.stories-BYlun-i3.js → Badge.stories-DGed-OBQ.js} +1 -1
  46. package/storybook-static/assets/{Button-D4_1YUId.js → Button-BrdeQlDt.js} +1 -1
  47. package/storybook-static/assets/{Button-DHUm4dn9.js → Button-c4nDxtrg.js} +1 -1
  48. package/storybook-static/assets/{Button.stories-DJVvYNle.js → Button.stories-CYjvIvUW.js} +1 -1
  49. package/storybook-static/assets/{CheckBox-Cn0oEy-0.js → CheckBox-6Qr3jWMy.js} +1 -1
  50. package/storybook-static/assets/{CheckBox-BMCI3jcJ.js → CheckBox-rqQjSYV-.js} +1 -1
  51. package/storybook-static/assets/{CheckBox.stories-DNVyyKgk.js → CheckBox.stories-Q78_xCB-.js} +1 -1
  52. package/storybook-static/assets/{Color-KMSTOMOX-CogEIqTq.js → Color-KMSTOMOX-BMBFTpCU.js} +1 -1
  53. package/storybook-static/assets/{ContextMenu-GtVpIKrx.js → ContextMenu-Dy6qjxlr.js} +1 -1
  54. package/storybook-static/assets/{ContextMenu.stories-BxiJt6xb.js → ContextMenu.stories-ArVPg2Iz.js} +1 -1
  55. package/storybook-static/assets/{DateInput-JyFcSSzH.js → DateInput-Dk1l_hxJ.js} +1 -1
  56. package/storybook-static/assets/{DateInput-D_BjVnON.js → DateInput-eu7DXgSU.js} +1 -1
  57. package/storybook-static/assets/{DateInput.stories-BXamFqSK.js → DateInput.stories-GCltuReT.js} +1 -1
  58. package/storybook-static/assets/{DateRangePresetSelect-CnBjzwP0.js → DateRangePresetSelect-2dHNAnUX.js} +1 -1
  59. package/storybook-static/assets/{DateRangePresetSelect-5HW0LlXM.js → DateRangePresetSelect-aiAJs_u-.js} +1 -1
  60. package/storybook-static/assets/{DateRangePresetSelect.stories-BzM9q06v.js → DateRangePresetSelect.stories-BXPIK_Co.js} +1 -1
  61. package/storybook-static/assets/{Detail-CVs0NkTq.js → Detail-C-0qKqgn.js} +1 -1
  62. package/storybook-static/assets/{Detail.stories-BDUK-3CV.js → Detail.stories-BpD2YoZq.js} +1 -1
  63. package/storybook-static/assets/{Dialog-D05c6OL5.js → Dialog-BHOqDS4r.js} +1 -1
  64. package/storybook-static/assets/{Dialog.stories-CK0kiLGo.js → Dialog.stories-DbY2IVcJ.js} +1 -1
  65. package/storybook-static/assets/{Disclosure-A8bS_6y5.js → Disclosure-BIS573Xf.js} +1 -1
  66. package/storybook-static/assets/{Disclosure.stories-mol8jRhI.js → Disclosure.stories-BEXgpOqT.js} +1 -1
  67. package/storybook-static/assets/{DocsRenderer-JROSPFPF-Dxrzjrhe.js → DocsRenderer-JROSPFPF-DBLxlIku.js} +2 -2
  68. package/storybook-static/assets/{DropZone-CkNtivw_.js → DropZone-DCOH76_B.js} +1 -1
  69. package/storybook-static/assets/{DropZone.stories-BCj0fFjw.js → DropZone.stories-D1SI6gcY.js} +1 -1
  70. package/storybook-static/assets/{DropdownMenu-CG8U1WuI.js → DropdownMenu-mb1Hg5Gl.js} +1 -1
  71. package/storybook-static/assets/{ExpandableActionPanel.stories-CRind3Wl.js → ExpandableActionPanel.stories-CXJMi0D0.js} +1 -1
  72. package/storybook-static/assets/{Flex-D1vaZnA1.js → Flex-D1ZBJLmP.js} +1 -1
  73. package/storybook-static/assets/{Flex-DSMWhdL8.js → Flex-aMhUlmFA.js} +1 -1
  74. package/storybook-static/assets/{Flex.stories-EJ-TT3O-.js → Flex.stories-Cq9hTA2s.js} +1 -1
  75. package/storybook-static/assets/{Grid-BVrIwkQn.js → Grid-D4xblGva.js} +1 -1
  76. package/storybook-static/assets/{Grid-DkHUHR2b.js → Grid-DrwSe074.js} +1 -1
  77. package/storybook-static/assets/{Grid.stories-Cb1KWhSo.js → Grid.stories-CsQlxLGT.js} +1 -1
  78. package/storybook-static/assets/{ImageCropper.stories-B_Ff5EhO.js → ImageCropper.stories-Da0fJQ1n.js} +1 -1
  79. package/storybook-static/assets/{ImageRenderer-BeYmvtFu.js → ImageRenderer-dXWklz9J.js} +1 -1
  80. package/storybook-static/assets/{ImageRenderer.stories-_U6PQ5s0.js → ImageRenderer.stories-C2l796Hd.js} +1 -1
  81. package/storybook-static/assets/{ImageView.stories-Bh17T4cZ.js → ImageView.stories-Cee_V0zr.js} +1 -1
  82. package/storybook-static/assets/{Input-DqkpneO3.js → Input-B6UklXwb.js} +1 -1
  83. package/storybook-static/assets/{Input-UE0kbOUc.js → Input-DoTXagjB.js} +1 -1
  84. package/storybook-static/assets/{Input.stories-CFEO0SLd.js → Input.stories-mPAKrIP1.js} +1 -1
  85. package/storybook-static/assets/{InputDateTime-RvoVvU9H.js → InputDateTime-BgIJNCpv.js} +1 -1
  86. package/storybook-static/assets/{InputDateTime.stories-UCTcJOk4.js → InputDateTime.stories-Ck0MCRBJ.js} +1 -1
  87. package/storybook-static/assets/{InputFile-Cwb5Aung.js → InputFile-BZqKG2Zr.js} +1 -1
  88. package/storybook-static/assets/{InputFile.stories-Ckuxi-zr.js → InputFile.stories-QbTuArh1.js} +1 -1
  89. package/storybook-static/assets/{InputFiles-C89x8KHV.js → InputFiles-BUoDhUef.js} +1 -1
  90. package/storybook-static/assets/{InputFiles-C9B1dD_R.js → InputFiles-ChhwyB9P.js} +1 -1
  91. package/storybook-static/assets/{InputFiles.stories-7gqx5B4Y.js → InputFiles.stories-PD0pr8y6.js} +1 -1
  92. package/storybook-static/assets/{InputImage-BXBIgcz5.js → InputImage-YxBujSop.js} +1 -1
  93. package/storybook-static/assets/{InputImage.stories-CcJ3kjDY.js → InputImage.stories-CHjyI709.js} +1 -1
  94. package/storybook-static/assets/{LayoutPicker-hTNxtlTj.js → LayoutPicker-DJT0cL8d.js} +1 -1
  95. package/storybook-static/assets/{LayoutPicker.stories-c8zR5DnT.js → LayoutPicker.stories-DvTvYmfw.js} +1 -1
  96. package/storybook-static/assets/{Listbox-DUIb79f5.js → Listbox-D7w7HJNg.js} +1 -1
  97. package/storybook-static/assets/{Listbox.stories-CY3MwnZ5.js → Listbox.stories-D4EMWR6l.js} +1 -1
  98. package/storybook-static/assets/{Modal-CPseWXNJ.js → Modal-BCn0aKBf.js} +1 -1
  99. package/storybook-static/assets/{Modal.stories-Cxw2ZRgQ.js → Modal.stories-BgnMPuDy.js} +1 -1
  100. package/storybook-static/assets/{MultiSelect-Bt3N0rgp.js → MultiSelect-CZW1VSbD.js} +1 -1
  101. package/storybook-static/assets/{MultiSelect-Bf5YxYfN.js → MultiSelect-D7N8euwu.js} +1 -1
  102. package/storybook-static/assets/{MultiSelect.stories-ajKJ1wl2.js → MultiSelect.stories-DV9nyDoE.js} +1 -1
  103. package/storybook-static/assets/{NotificationsHost-DmAk6K6A.js → NotificationsHost-DJILaEyi.js} +1 -1
  104. package/storybook-static/assets/{NotificationsHost.stories-C3EicsDL.js → NotificationsHost.stories-DlO0kPbm.js} +1 -1
  105. package/storybook-static/assets/{ODataMultiSelect-BpSU_AG9.js → ODataMultiSelect-C-DKYFLx.js} +1 -1
  106. package/storybook-static/assets/{ODataMultiSelect.stories-CLEKhMDU.js → ODataMultiSelect.stories-DypA5OPM.js} +1 -1
  107. package/storybook-static/assets/{ODataSelect-W-T83U4u.js → ODataSelect-ANgknc8h.js} +1 -1
  108. package/storybook-static/assets/{ODataSelect-naz-8rqO.js → ODataSelect-CMrLfCwp.js} +1 -1
  109. package/storybook-static/assets/{ODataSelect.stories-BlwRaCjm.js → ODataSelect.stories-icXU3Kk-.js} +1 -1
  110. package/storybook-static/assets/{ODataTreeMultiSelect-BF3VGPGC.js → ODataTreeMultiSelect-C6yg6DFE.js} +1 -1
  111. package/storybook-static/assets/{ODataTreeMultiSelect.stories-DXFNpGVh.js → ODataTreeMultiSelect.stories-CT_tBJph.js} +1 -1
  112. package/storybook-static/assets/{ODataTreeSelect-KkeyBQOB.js → ODataTreeSelect-hiY9TK6F.js} +1 -1
  113. package/storybook-static/assets/{ODataTreeSelect.stories-B3LS8B-K.js → ODataTreeSelect.stories-DPNG2-gB.js} +1 -1
  114. package/storybook-static/assets/{PeriodSelect-sqbTEh2-.js → PeriodSelect-5CQZq007.js} +1 -1
  115. package/storybook-static/assets/{PeriodSelect.stories-D0o5c-aW.js → PeriodSelect.stories-DuwM__eX.js} +1 -1
  116. package/storybook-static/assets/{Popover-BeVnS58h.js → Popover-BuB6NaNL.js} +1 -1
  117. package/storybook-static/assets/{Popover.stories-Bx7wB6zP.js → Popover.stories-DNHTB9O2.js} +1 -1
  118. package/storybook-static/assets/{PresetRangeDateInput-DMJx6huf.js → PresetRangeDateInput-C6ke1QJN.js} +1 -1
  119. package/storybook-static/assets/{PresetRangeDateInput.stories-CGHogk29.js → PresetRangeDateInput.stories-BiFR6FF_.js} +1 -1
  120. package/storybook-static/assets/{RadioButton-DuYV7oLX.js → RadioButton-bmKQ4B96.js} +1 -1
  121. package/storybook-static/assets/{RadioButton.stories-BzEefd1p.js → RadioButton.stories-CZatWIEO.js} +1 -1
  122. package/storybook-static/assets/{RadioGroup-DIymc9Lq.js → RadioGroup-Vnr3qZKk.js} +1 -1
  123. package/storybook-static/assets/{RadioGroup-C0ZMTtyS.js → RadioGroup-diPPm8OV.js} +1 -1
  124. package/storybook-static/assets/{RadioGroup.stories-DJhjmjZ3.js → RadioGroup.stories-BY_ORcvQ.js} +1 -1
  125. package/storybook-static/assets/{Select-B_oN8tGy.js → Select-BxK9yj6_.js} +1 -1
  126. package/storybook-static/assets/{Select-DTrqfSb7.js → Select-Cq66yRYB.js} +1 -1
  127. package/storybook-static/assets/{Select.stories-CPQaxErx.js → Select.stories-CevvmTWz.js} +1 -1
  128. package/storybook-static/assets/{SelectOptionContent-CBu-Z8q9.js → SelectOptionContent-C1-duJ6s.js} +1 -1
  129. package/storybook-static/assets/{SerializableSelect-B8vNCKe6.js → SerializableSelect-C6jj7wLf.js} +1 -1
  130. package/storybook-static/assets/{SerializableSelect-Cn6FnANb.js → SerializableSelect-CnwfEnur.js} +1 -1
  131. package/storybook-static/assets/{SerializableSelect.stories-B0gNlX9R.js → SerializableSelect.stories-DOTdXeIP.js} +1 -1
  132. package/storybook-static/assets/{SingleDateTimeInput-HdoxMDg5.js → SingleDateTimeInput-BtSG1SZF.js} +1 -1
  133. package/storybook-static/assets/{SingleDateTimeInput.stories-BWTJvkfh.js → SingleDateTimeInput.stories-CSFUpLfK.js} +1 -1
  134. package/storybook-static/assets/{Slider-B9zsG5_o.js → Slider-pb7TgPmP.js} +1 -1
  135. package/storybook-static/assets/{Slider.stories-B4R-Ojy6.js → Slider.stories-Cj9sU7k1.js} +1 -1
  136. package/storybook-static/assets/{SliderInput-ecY-t6ii.js → SliderInput-Dp4r4RqZ.js} +1 -1
  137. package/storybook-static/assets/{SliderInput.stories-Bq1WNiBu.js → SliderInput.stories-DKV9C_mb.js} +1 -1
  138. package/storybook-static/assets/{Sortable-BrcZpWjl.js → Sortable-BbVzA3mH.js} +1 -1
  139. package/storybook-static/assets/{Sortable.stories-C9APYJGM.js → Sortable.stories-nttQ0wQV.js} +1 -1
  140. package/storybook-static/assets/{Splitter-zcD_78Cs.js → Splitter-DQip0vEb.js} +1 -1
  141. package/storybook-static/assets/{Splitter.stories-Bh3dux3i.js → Splitter.stories-B7IdmITM.js} +1 -1
  142. package/storybook-static/assets/{StateSelect--2hZlmsM.js → StateSelect-BZeQfOZk.js} +1 -1
  143. package/storybook-static/assets/{StateSelect.stories-Cel6i2fC.js → StateSelect.stories-Cia0oYUX.js} +1 -1
  144. package/storybook-static/assets/{Switch-QlyZfEqf.js → Switch-DzxseHUx.js} +1 -1
  145. package/storybook-static/assets/{Switch.stories-BB3h3c5K.js → Switch.stories-BVAIn4yd.js} +1 -1
  146. package/storybook-static/assets/{Table-qUmGsDT8.js → Table-lzcaRxDg.js} +1 -1
  147. package/storybook-static/assets/{Table.stories-CYPyFV0A.js → Table.stories-sckp-lho.js} +1 -1
  148. package/storybook-static/assets/{Tabs-CyloJDHY.js → Tabs-DyBBFEsD.js} +1 -1
  149. package/storybook-static/assets/{Tabs.stories-DSl3G7Ze.js → Tabs.stories-C6-sZs4H.js} +1 -1
  150. package/storybook-static/assets/TagInput-LeQAhDgs.css +1 -0
  151. package/storybook-static/assets/TagInput.stories-iI1hZ8CY.js +18 -0
  152. package/storybook-static/assets/{Textarea-BwY6pr1A.js → Textarea-D1fEct22.js} +1 -1
  153. package/storybook-static/assets/{Textarea.stories-DNFuMzL8.js → Textarea.stories-ByJH2uhT.js} +1 -1
  154. package/storybook-static/assets/{TimePanel-DfD2qCKU.js → TimePanel-B5c9MfmC.js} +1 -1
  155. package/storybook-static/assets/{TimePanel.stories-CtKmIrYQ.js → TimePanel.stories-DBgXVhz1.js} +1 -1
  156. package/storybook-static/assets/{Toggle-9OU_0OxQ.js → Toggle-CHx3ZZfu.js} +1 -1
  157. package/storybook-static/assets/{Toggle.stories-gX7GAhf5.js → Toggle.stories-g3Eq8oVl.js} +1 -1
  158. package/storybook-static/assets/{TreeMultiSelect-xleloE3L.js → TreeMultiSelect-CrKusouJ.js} +1 -1
  159. package/storybook-static/assets/{TreeMultiSelect-D6FZp3ol.js → TreeMultiSelect-T05Sk9sh.js} +1 -1
  160. package/storybook-static/assets/{TreeMultiSelect.stories-TNrQi3tC.js → TreeMultiSelect.stories-C85O7gDN.js} +1 -1
  161. package/storybook-static/assets/{TreePickerBase-CKrFw1xA.js → TreePickerBase-VJSaTBqo.js} +1 -1
  162. package/storybook-static/assets/{TreeSelect-DK87hY70.js → TreeSelect-DQmAaKsJ.js} +1 -1
  163. package/storybook-static/assets/{TreeSelect-KbC_b2h7.js → TreeSelect-Dw-svVvg.js} +1 -1
  164. package/storybook-static/assets/{TreeSelect.stories-Dv24g8uv.js → TreeSelect.stories-Bqv2L08v.js} +1 -1
  165. package/storybook-static/assets/{TreeTable-DNyOKFIY.js → TreeTable-JJK6sE1o.js} +1 -1
  166. package/storybook-static/assets/{TreeTable.stories-g84YOpcn.js → TreeTable.stories-yOu-SM17.js} +1 -1
  167. package/storybook-static/assets/{WithTooltip-7X4HQR7L-DTYeAnYl.js → WithTooltip-7X4HQR7L-Cib98jGG.js} +1 -1
  168. package/storybook-static/assets/{base-table-ChlvVz_l.js → base-table-BbenC81q.js} +1 -1
  169. package/storybook-static/assets/{blocks-nvFBZnmF.js → blocks-DsN3hykK.js} +6 -6
  170. package/storybook-static/assets/{button-DxVxb_AQ.js → button-C8nkqC6f.js} +1 -1
  171. package/storybook-static/assets/{check-box-b5_2dw6S.js → check-box-BRod99sY.js} +1 -1
  172. package/storybook-static/assets/{chunk-3LY4VQVK-HxSHgfWj.js → chunk-3LY4VQVK-DSSlp6en.js} +1 -1
  173. package/storybook-static/assets/{chunk-LITCR56V-ojcamuDf.js → chunk-LITCR56V-CB95AMSh.js} +1 -1
  174. package/storybook-static/assets/{contextMenu-BOr3FdXR.js → contextMenu-iKy1R_pJ.js} +1 -1
  175. package/storybook-static/assets/{error-gSnleOdo.js → error-ChmbU9Ma.js} +1 -1
  176. package/storybook-static/assets/{flex-nhxot7pG.js → flex-CMA-ZjxB.js} +1 -1
  177. package/storybook-static/assets/{floating-ui.react-DBHno7PC.js → floating-ui.react-BpBaLM_G.js} +1 -1
  178. package/storybook-static/assets/formatter-L2YTDE3Q-tZc7M3Ad.js +1 -0
  179. package/storybook-static/assets/{formatters-Cnj-VWHB.js → formatters-C0d3JoZj.js} +1 -1
  180. package/storybook-static/assets/grid-Ck5-5Szv.js +1 -0
  181. package/storybook-static/assets/{hooks-DOtYpswn.js → hooks-BpEcTBvi.js} +1 -1
  182. package/storybook-static/assets/{iframe-CELq1yHK.js → iframe-D90hKkIJ.js} +4 -4
  183. package/storybook-static/assets/{input-Bq20EuR5.js → input-D77vjPVL.js} +1 -1
  184. package/storybook-static/assets/{lucide-react-DaLrYAcN.js → lucide-react-ClGevkpS.js} +1 -1
  185. package/storybook-static/assets/{mdx-react-shim-BUeZ3JmE.js → mdx-react-shim-CdXPOrRW.js} +1 -1
  186. package/storybook-static/assets/{media-7gU-mKPx.js → media-C4dafSHo.js} +1 -1
  187. package/storybook-static/assets/misc-D9dXokhF.css +1 -0
  188. package/storybook-static/assets/misc-yRJvnOkX.js +5 -0
  189. package/storybook-static/assets/{notifications-GJTI8j3c.js → notifications-Dt8NSgnT.js} +1 -1
  190. package/storybook-static/assets/{odata-gGnv74mq.js → odata-DQSm2H7O.js} +1 -1
  191. package/storybook-static/assets/odata-service-CMTV9-cO.js +1 -0
  192. package/storybook-static/assets/{odataStoryFixtures-D6PpTODP.js → odataStoryFixtures-D0p0XtmS.js} +1 -1
  193. package/storybook-static/assets/{picker-xfAX_wju.js → picker-9SOfvJPJ.js} +1 -1
  194. package/storybook-static/assets/{popover-CIF-ZVaN.js → popover-Dph7wJ1_.js} +1 -1
  195. package/storybook-static/assets/{preset-select-CiuJ-Yp0.js → preset-select-mubmWRO9.js} +1 -1
  196. package/storybook-static/assets/{react-18-BRX9FbGe.js → react-18-CSg0VXTL.js} +1 -1
  197. package/storybook-static/assets/{react-A5qSDxGl.js → react-Cr3aZrbF.js} +1 -1
  198. package/storybook-static/assets/{react-dom-BRUL6UMQ.js → react-dom-Iu9X9_7I.js} +1 -1
  199. package/storybook-static/assets/select-DYXb71nn.js +1 -0
  200. package/storybook-static/assets/{slider-PVNNrxhZ.js → slider-C8Udy6I7.js} +1 -1
  201. package/storybook-static/assets/{sortable-DlbQfnOR.js → sortable-xt2HCdf-.js} +1 -1
  202. package/storybook-static/assets/{syntaxhighlighter-RTCFPKCB-AHhtM7MH.js → syntaxhighlighter-RTCFPKCB-4Ttp-ccw.js} +1 -1
  203. package/storybook-static/assets/{text-DyVJvCm8.js → text-CwWM1WCX.js} +1 -1
  204. package/storybook-static/assets/{theming-ClhUCD3-.js → theming--foXdFDq.js} +1 -1
  205. package/storybook-static/assets/ui-BJnukgBU.js +1 -0
  206. package/storybook-static/assets/{useODataSelectBase-BonuBTfa.js → useODataSelectBase-C7f1zxWc.js} +1 -1
  207. package/storybook-static/assets/{useODataTreeData-DwO49vDk.js → useODataTreeData-7hwK6Byp.js} +1 -1
  208. package/storybook-static/assets/{utils-V012ES4W.js → utils-Bg8QclQy.js} +1 -1
  209. package/storybook-static/iframe.html +1 -1
  210. package/storybook-static/index.json +1 -1
  211. package/storybook-static/project.json +1 -1
  212. package/dist/chunks/misc-ClXJygTj.js.map +0 -1
  213. package/storybook-static/assets/formatter-L2YTDE3Q-B5zfJybp.js +0 -1
  214. package/storybook-static/assets/grid-B-H7CtbE.js +0 -1
  215. package/storybook-static/assets/misc-BsWm_Gl7.js +0 -5
  216. package/storybook-static/assets/misc-CerLA5Xh.css +0 -1
  217. package/storybook-static/assets/odata-service-Bz6VElCd.js +0 -1
  218. package/storybook-static/assets/select-CbSahuRN.js +0 -1
  219. package/storybook-static/assets/ui-DvOsIS0A.js +0 -1
@@ -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-nvFBZnmF.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-BUeZ3JmE.js";import{Basic as p,DecimalManualInput as m,Disabled as h,MarksSnap as g,RangeInputMonthToDaysOutput as _,RangeInputOpenMonthToDaysOutput as v,RangeInputOpenWithoutExplicitMiddleOutput as y,RangeInputPlain as b,RangeInputReadonlyText as x,n as S,t as C}from"./SliderInput.stories-Bq1WNiBu.js";function w(e){let o={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...t(),...e.components};return(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(a,{of:C,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,DecimalManualInput as m,Disabled as h,MarksSnap as g,RangeInputMonthToDaysOutput as _,RangeInputOpenMonthToDaysOutput as v,RangeInputOpenWithoutExplicitMiddleOutput as y,RangeInputPlain as b,RangeInputReadonlyText as x,n as S,t as C}from"./SliderInput.stories-DKV9C_mb.js";function w(e){let o={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...t(),...e.components};return(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(a,{of:C,parameters:{docs:{toc:!0}}}),`
2
2
  `,(0,E.jsx)(c,{children:`SliderInput`}),`
3
3
  `,(0,E.jsx)(i,{children:`Поля ввода для single и range с popover slider`}),`
4
4
  `,(0,E.jsxs)(o.p,{children:[(0,E.jsx)(o.code,{children:`SliderInput`}),` работает с одним числом, а `,(0,E.jsx)(o.code,{children:`SliderRangeInput`}),` — с диапазоном `,(0,E.jsx)(o.code,{children:`[number | null, number | null]`}),`.`]}),`
@@ -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-CELq1yHK.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{j as a}from"./formatters-Cnj-VWHB.js";import{t as o}from"./odata-service-Bz6VElCd.js";import{n as s,r as c,t as l}from"./slider-PVNNrxhZ.js";var u=e({Basic:()=>y,DecimalManualInput:()=>x,Disabled:()=>D,MarksSnap:()=>b,RangeInputMonthToDaysOutput:()=>w,RangeInputOpenMonthToDaysOutput:()=>T,RangeInputOpenWithoutExplicitMiddleOutput:()=>C,RangeInputPlain:()=>S,RangeInputReadonlyText:()=>E,__namedExportsOrder:()=>O,default:()=>v});function d({value:e,field:t,children:n}){let[r,i]=e??[null,null];return(0,p.jsxs)(`div`,{className:`marginTopMd`,children:[(0,p.jsx)(`div`,{className:`textSm сontent2`,children:`Preview фильтра`}),(0,p.jsx)(`pre`,{children:JSON.stringify({value:[r,i],filter:a(t,e)},null,2)}),n]})}var f,p,m,h,g,_,v,y,b,x,S,C,w,T,E,D,O,k=n((()=>{f=t(r(),1),o(),l(),p=i(),m=[{value:0,label:`0`},{value:20,label:`20`},{value:40,label:`40`},{value:60,label:`60`},{value:80,label:`80`},{value:100,label:`100`}],h=[{value:0,label:`Без нижней границы`,outputValue:null},{value:1,label:`1 мес.`},{value:3,label:`3 мес.`},{value:6,label:`6 мес.`},{value:12,label:`12 мес.`},{value:24,label:`24 мес.`},{value:25,label:`Без верхней границы`,outputValue:null}],g=[{value:1,label:`1 мес.`,outputValue:30},{value:3,label:`3 мес.`,outputValue:90},{value:6,label:`6 мес.`,outputValue:180},{value:12,label:`12 мес.`,outputValue:360},{value:24,label:`24 мес.`,outputValue:720}],_=[{value:0,label:`-`,outputValue:null},{value:1,label:`1м.`,outputValue:30},{value:3,label:`3м.`,outputValue:90},{value:6,label:`6м.`,outputValue:180},{value:12,label:`1г.`,outputValue:360},{value:18,label:`1.5г.`,outputValue:540},{value:24,label:`2г.`,outputValue:720},{value:25,label:`-`,outputValue:null}],v={title:`Shared/UI/SliderInput`,component:s,args:{value:12,onChange:()=>{},min:0,max:100,step:.5},parameters:{atomicCanvas:!0,layout:`padded`}},y={render:e=>{let[t,n]=(0,f.useState)(e.value);return(0,p.jsx)(s,{...e,label:`Порог`,description:`Ручной ввод и popover slider работают с одним значением.`,value:t,onChange:n})}},b={render:e=>{let[t,n]=(0,f.useState)(40);return(0,p.jsx)(s,{...e,label:`Готовый пресет`,marks:m,value:t,onChange:n})}},x={render:e=>{let[t,n]=(0,f.useState)(17.5);return(0,p.jsx)(s,{...e,label:`Десятичное значение`,value:t,onChange:n})},args:{step:.5}},S={render:()=>{let[e,t]=(0,f.useState)([20,80]);return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(c,{label:`Процент выполнения`,description:"RangeInput без outputValue: наружу отдаётся координата `value`.",min:0,max:100,marks:m,value:e,onChange:t}),(0,p.jsx)(d,{value:e,field:`progress`,unit:`%`})]})}},C={render:()=>{let[e,t]=(0,f.useState)([null,12]);return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(c,{label:`Срок в месяцах`,description:"У крайних marks `outputValue:null`; у обычных marks outputValue не указан и берётся `value`.",min:0,max:25,marks:h,marksPosition:`index`,value:e,onChange:t}),(0,p.jsx)(d,{value:e,field:`months`,unit:` мес.`})]})}},w={render:()=>{let[e,t]=(0,f.useState)([90,360]);return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(c,{label:`Срок: месяцы на шкале, дни в фильтре`,description:`В поле и фильтре видны дни, а popover показывает месячные marks.`,min:1,max:24,marks:g,marksPosition:`index`,value:e,onChange:t}),(0,p.jsx)(d,{value:e,field:`days`,unit:` дн.`})]})}},T={render:()=>{let[e,t]=(0,f.useState)([null,720]);return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(c,{label:`Срок: открытые границы и дни в фильтре`,description:"Крайние marks отдают null, обычные marks отдают дни через `outputValue`.",min:0,max:25,marks:_,marksPosition:`index`,value:e,onChange:t}),(0,p.jsx)(d,{value:e,field:`days`,unit:` дн.`})]})}},E={render:()=>{let[e,t]=(0,f.useState)([90,180]);return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(c,{label:`Срок текстом`,description:`В поле выводится готовый текст по marks, а изменение через popover коммитится при закрытии.`,min:0,max:25,marks:_,marksPosition:`index`,value:e,onChange:t,readonlyValueText:!0,placeholder:`Любой срок`}),(0,p.jsx)(d,{value:e,field:`days`,unit:` дн.`})]})}},D={args:{label:`Недоступно`,description:`Поле и popover отключены.`,value:20,disabled:!0,marks:m}},y.parameters={...y.parameters,docs:{...y.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{j as a}from"./formatters-C0d3JoZj.js";import{t as o}from"./odata-service-CMTV9-cO.js";import{n as s,r as c,t as l}from"./slider-C8Udy6I7.js";var u=e({Basic:()=>y,DecimalManualInput:()=>x,Disabled:()=>D,MarksSnap:()=>b,RangeInputMonthToDaysOutput:()=>w,RangeInputOpenMonthToDaysOutput:()=>T,RangeInputOpenWithoutExplicitMiddleOutput:()=>C,RangeInputPlain:()=>S,RangeInputReadonlyText:()=>E,__namedExportsOrder:()=>O,default:()=>v});function d({value:e,field:t,children:n}){let[r,i]=e??[null,null];return(0,p.jsxs)(`div`,{className:`marginTopMd`,children:[(0,p.jsx)(`div`,{className:`textSm сontent2`,children:`Preview фильтра`}),(0,p.jsx)(`pre`,{children:JSON.stringify({value:[r,i],filter:a(t,e)},null,2)}),n]})}var f,p,m,h,g,_,v,y,b,x,S,C,w,T,E,D,O,k=n((()=>{f=t(r(),1),o(),l(),p=i(),m=[{value:0,label:`0`},{value:20,label:`20`},{value:40,label:`40`},{value:60,label:`60`},{value:80,label:`80`},{value:100,label:`100`}],h=[{value:0,label:`Без нижней границы`,outputValue:null},{value:1,label:`1 мес.`},{value:3,label:`3 мес.`},{value:6,label:`6 мес.`},{value:12,label:`12 мес.`},{value:24,label:`24 мес.`},{value:25,label:`Без верхней границы`,outputValue:null}],g=[{value:1,label:`1 мес.`,outputValue:30},{value:3,label:`3 мес.`,outputValue:90},{value:6,label:`6 мес.`,outputValue:180},{value:12,label:`12 мес.`,outputValue:360},{value:24,label:`24 мес.`,outputValue:720}],_=[{value:0,label:`-`,outputValue:null},{value:1,label:`1м.`,outputValue:30},{value:3,label:`3м.`,outputValue:90},{value:6,label:`6м.`,outputValue:180},{value:12,label:`1г.`,outputValue:360},{value:18,label:`1.5г.`,outputValue:540},{value:24,label:`2г.`,outputValue:720},{value:25,label:`-`,outputValue:null}],v={title:`Shared/UI/SliderInput`,component:s,args:{value:12,onChange:()=>{},min:0,max:100,step:.5},parameters:{atomicCanvas:!0,layout:`padded`}},y={render:e=>{let[t,n]=(0,f.useState)(e.value);return(0,p.jsx)(s,{...e,label:`Порог`,description:`Ручной ввод и popover slider работают с одним значением.`,value:t,onChange:n})}},b={render:e=>{let[t,n]=(0,f.useState)(40);return(0,p.jsx)(s,{...e,label:`Готовый пресет`,marks:m,value:t,onChange:n})}},x={render:e=>{let[t,n]=(0,f.useState)(17.5);return(0,p.jsx)(s,{...e,label:`Десятичное значение`,value:t,onChange:n})},args:{step:.5}},S={render:()=>{let[e,t]=(0,f.useState)([20,80]);return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(c,{label:`Процент выполнения`,description:"RangeInput без outputValue: наружу отдаётся координата `value`.",min:0,max:100,marks:m,value:e,onChange:t}),(0,p.jsx)(d,{value:e,field:`progress`,unit:`%`})]})}},C={render:()=>{let[e,t]=(0,f.useState)([null,12]);return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(c,{label:`Срок в месяцах`,description:"У крайних marks `outputValue:null`; у обычных marks outputValue не указан и берётся `value`.",min:0,max:25,marks:h,marksPosition:`index`,value:e,onChange:t}),(0,p.jsx)(d,{value:e,field:`months`,unit:` мес.`})]})}},w={render:()=>{let[e,t]=(0,f.useState)([90,360]);return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(c,{label:`Срок: месяцы на шкале, дни в фильтре`,description:`В поле и фильтре видны дни, а popover показывает месячные marks.`,min:1,max:24,marks:g,marksPosition:`index`,value:e,onChange:t}),(0,p.jsx)(d,{value:e,field:`days`,unit:` дн.`})]})}},T={render:()=>{let[e,t]=(0,f.useState)([null,720]);return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(c,{label:`Срок: открытые границы и дни в фильтре`,description:"Крайние marks отдают null, обычные marks отдают дни через `outputValue`.",min:0,max:25,marks:_,marksPosition:`index`,value:e,onChange:t}),(0,p.jsx)(d,{value:e,field:`days`,unit:` дн.`})]})}},E={render:()=>{let[e,t]=(0,f.useState)([90,180]);return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(c,{label:`Срок текстом`,description:`В поле выводится готовый текст по marks, а изменение через popover коммитится при закрытии.`,min:0,max:25,marks:_,marksPosition:`index`,value:e,onChange:t,readonlyValueText:!0,placeholder:`Любой срок`}),(0,p.jsx)(d,{value:e,field:`days`,unit:` дн.`})]})}},D={args:{label:`Недоступно`,description:`Поле и popover отключены.`,value:20,disabled:!0,marks:m}},y.parameters={...y.parameters,docs:{...y.parameters?.docs,source:{originalSource:`{
2
2
  render: args => {
3
3
  const [value, setValue] = useState<number>(args.value);
4
4
  return <SliderInput {...args} label="Порог" description="Ручной ввод и popover slider работают с одним значением." 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-nvFBZnmF.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-BUeZ3JmE.js";import{Basic as p,DisabledItems as m,GridCards as h,HandleOnly as g,HorizontalList as _,NestedContainers as v,n as y,t as b}from"./Sortable.stories-C9APYJGM.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{Basic as p,DisabledItems as m,GridCards as h,HandleOnly as g,HorizontalList as _,NestedContainers as v,n as y,t as b}from"./Sortable.stories-nttQ0wQV.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:`Sortable`}),`
3
3
  `,(0,C.jsxs)(i,{children:[`Headless-набор для сортируемых коллекций на базе `,(0,C.jsx)(o.code,{children:`dnd-kit`}),` с поддержкой list, horizontal и grid-layout`]}),`
4
4
  `,(0,C.jsxs)(o.p,{children:[(0,C.jsx)(o.code,{children:`Sortable`}),` не навязывает визуальный вид элементов и используется как композиционный слой поверх `,(0,C.jsx)(o.code,{children:`dnd-kit`}),`.
@@ -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-CELq1yHK.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{i as a,n as o,r as s,t as c}from"./sortable-DlbQfnOR.js";var l=e({Basic:()=>b,DisabledItems:()=>C,GridCards:()=>S,HandleOnly:()=>w,HorizontalList:()=>x,NestedContainers:()=>T,SortablePreview:()=>f,__namedExportsOrder:()=>E,default:()=>y});function u(e,t,n){let r=[...e],[i]=r.splice(t,1);return r.splice(n,0,i),r}function d(e){switch(e){case`horizontal`:return{display:`flex`,gap:`var(--space-sm)`,overflowX:`auto`};case`grid`:return{display:`grid`,gap:`var(--space-sm)`,gridTemplateColumns:`repeat(auto-fill, minmax(12rem, 1fr))`};default:return{display:`grid`,gap:`var(--space-sm)`}}}function f(e){let[t,n]=(0,p.useState)(e.initialItems),r=new Set(e.disabledIds??[]);return(0,m.jsxs)(`div`,{style:{display:`grid`,gap:12},children:[(0,m.jsx)(c.Root,{onDragEnd:r=>{let i=s({event:r,items:{[e.containerId]:t}});i&&n(e=>u(e,i.fromIndex,i.toIndex))},children:(0,m.jsx)(c.Container,{containerId:e.containerId,items:t,layout:e.layout,children:(0,m.jsx)(`div`,{style:d(e.layout),children:t.map(t=>(0,m.jsxs)(c.Item,{id:t,disabled:r.has(t),style:{...h,minWidth:e.itemWidth},children:[(0,m.jsx)(c.DragHandle,{title:`Перетащить ${t}`}),(0,m.jsx)(`div`,{children:t})]},t))})})}),(0,m.jsx)(`div`,{style:{fontSize:14,opacity:.8},children:`Порядок элементов изменяется локально в рамках story.`})]})}var p,m,h,g,_,v,y,b,x,S,C,w,T,E,D=n((()=>{p=t(r(),1),o(),a(),m=i(),h={display:`grid`,gridTemplateColumns:`var(--control-height) 1fr`,alignItems:`center`,gap:`var(--space-sm)`,padding:`var(--space-sm)`,border:`var(--border)`,borderRadius:`var(--radius-sm)`,background:`var(--surface-0)`},g=[`Alpha`,`Bravo`,`Charlie`,`Delta`],_=[`Фильтры`,`Графики`,`Сводка`,`История`],v=[`Карточка 1`,`Карточка 2`,`Карточка 3`,`Карточка 4`,`Карточка 5`,`Карточка 6`],y={title:`Shared/UI/Sortable`,component:f,args:{containerId:`sortable-demo`,layout:`vertical`,initialItems:g,itemWidth:void 0,disabledIds:[]},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{containerId:{description:"Идентификатор `SortableContext`, который используется для вычисления reorder внутри контейнера.",control:`text`},layout:{description:`Режим раскладки и стратегия сортировки: вертикальный список, горизонтальный список или grid.`,control:`inline-radio`,options:[`vertical`,`horizontal`,`grid`]},initialItems:{description:`Начальный набор элементов. Внутри story состояние управляется локально.`,control:!1},itemWidth:{description:`Минимальная ширина карточки; полезна для горизонтального режима.`,control:`text`},disabledIds:{description:`Список id, для которых drag-handle отключен.`,control:!1}}},b={},x={args:{containerId:`sortable-horizontal`,layout:`horizontal`,initialItems:_,itemWidth:`12rem`}},S={args:{containerId:`sortable-grid`,layout:`grid`,initialItems:v}},C={args:{containerId:`sortable-disabled`,layout:`vertical`,initialItems:g,disabledIds:[`Bravo`,`Delta`]}},w={args:{containerId:`sortable-handle-only`,layout:`vertical`,initialItems:[`Пункт 1`,`Пункт 2`,`Пункт 3`,`Пункт 4`]}},T={args:{containerId:`top`,layout:`vertical`,initialItems:[`Группа A`,`Группа B`]},render:()=>{let[e,t]=(0,p.useState)([`Группа A`,`Группа B`]),[n,r]=(0,p.useState)({"Группа A":[`A.1`,`A.2`,`A.3`],"Группа B":[`B.1`,`B.2`]});return(0,m.jsxs)(`div`,{style:{display:`grid`,gap:12},children:[(0,m.jsx)(c.Root,{onDragEnd:i=>{let a=s({event:i,items:{top:e,...Object.fromEntries(e.map(e=>[`parent:${e}`,n[e]??[]]))}});if(!a)return;if(a.containerId===`top`){t(e=>u(e,a.fromIndex,a.toIndex));return}let o=String(a.containerId).slice(7);r(e=>({...e,[o]:u(e[o]??[],a.fromIndex,a.toIndex)}))},children:(0,m.jsx)(c.Container,{containerId:`top`,items:e,children:(0,m.jsx)(`div`,{style:{display:`grid`,gap:`var(--space-md)`},children:e.map(e=>(0,m.jsxs)(c.Item,{id:e,style:{...h,gridTemplateColumns:`var(--control-height) 1fr`,alignItems:`start`},children:[(0,m.jsx)(c.DragHandle,{title:`Перетащить ${e}`}),(0,m.jsxs)(`div`,{style:{display:`grid`,gap:`var(--space-sm)`},children:[(0,m.jsx)(`strong`,{children:e}),(0,m.jsx)(c.Container,{containerId:`parent:${e}`,items:n[e]??[],children:(0,m.jsx)(`div`,{style:{display:`grid`,gap:`var(--space-xs)`},children:(n[e]??[]).map(e=>(0,m.jsxs)(c.Item,{id:e,style:{...h,background:`var(--surface-1)`},children:[(0,m.jsx)(c.DragHandle,{title:`Перетащить ${e}`}),(0,m.jsx)(`div`,{children:e})]},e))})})]})]},e))})})}),(0,m.jsx)(`div`,{style:{fontSize:14,opacity:.8},children:"Вложенные контейнеры сортируются независимо и используют общий `Sortable.Root`."})]})}},f.__docgenInfo={description:``,methods:[],displayName:`SortablePreview`,props:{containerId:{required:!0,tsType:{name:`string`},description:``},layout:{required:!0,tsType:{name:`union`,raw:`"vertical" | "horizontal" | "grid"`,elements:[{name:`literal`,value:`"vertical"`},{name:`literal`,value:`"horizontal"`},{name:`literal`,value:`"grid"`}]},description:``},initialItems:{required:!0,tsType:{name:`Array`,elements:[{name:`string`}],raw:`string[]`},description:``},itemWidth:{required:!1,tsType:{name:`string`},description:``},disabledIds:{required:!1,tsType:{name:`Array`,elements:[{name:`string`}],raw:`string[]`},description:``}}},f.parameters={...f.parameters,docs:{...f.parameters?.docs,source:{originalSource:`function SortablePreview(props: SortablePreviewProps) {
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{i as a,n as o,r as s,t as c}from"./sortable-xt2HCdf-.js";var l=e({Basic:()=>b,DisabledItems:()=>C,GridCards:()=>S,HandleOnly:()=>w,HorizontalList:()=>x,NestedContainers:()=>T,SortablePreview:()=>f,__namedExportsOrder:()=>E,default:()=>y});function u(e,t,n){let r=[...e],[i]=r.splice(t,1);return r.splice(n,0,i),r}function d(e){switch(e){case`horizontal`:return{display:`flex`,gap:`var(--space-sm)`,overflowX:`auto`};case`grid`:return{display:`grid`,gap:`var(--space-sm)`,gridTemplateColumns:`repeat(auto-fill, minmax(12rem, 1fr))`};default:return{display:`grid`,gap:`var(--space-sm)`}}}function f(e){let[t,n]=(0,p.useState)(e.initialItems),r=new Set(e.disabledIds??[]);return(0,m.jsxs)(`div`,{style:{display:`grid`,gap:12},children:[(0,m.jsx)(c.Root,{onDragEnd:r=>{let i=s({event:r,items:{[e.containerId]:t}});i&&n(e=>u(e,i.fromIndex,i.toIndex))},children:(0,m.jsx)(c.Container,{containerId:e.containerId,items:t,layout:e.layout,children:(0,m.jsx)(`div`,{style:d(e.layout),children:t.map(t=>(0,m.jsxs)(c.Item,{id:t,disabled:r.has(t),style:{...h,minWidth:e.itemWidth},children:[(0,m.jsx)(c.DragHandle,{title:`Перетащить ${t}`}),(0,m.jsx)(`div`,{children:t})]},t))})})}),(0,m.jsx)(`div`,{style:{fontSize:14,opacity:.8},children:`Порядок элементов изменяется локально в рамках story.`})]})}var p,m,h,g,_,v,y,b,x,S,C,w,T,E,D=n((()=>{p=t(r(),1),o(),a(),m=i(),h={display:`grid`,gridTemplateColumns:`var(--control-height) 1fr`,alignItems:`center`,gap:`var(--space-sm)`,padding:`var(--space-sm)`,border:`var(--border)`,borderRadius:`var(--radius-sm)`,background:`var(--surface-0)`},g=[`Alpha`,`Bravo`,`Charlie`,`Delta`],_=[`Фильтры`,`Графики`,`Сводка`,`История`],v=[`Карточка 1`,`Карточка 2`,`Карточка 3`,`Карточка 4`,`Карточка 5`,`Карточка 6`],y={title:`Shared/UI/Sortable`,component:f,args:{containerId:`sortable-demo`,layout:`vertical`,initialItems:g,itemWidth:void 0,disabledIds:[]},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{containerId:{description:"Идентификатор `SortableContext`, который используется для вычисления reorder внутри контейнера.",control:`text`},layout:{description:`Режим раскладки и стратегия сортировки: вертикальный список, горизонтальный список или grid.`,control:`inline-radio`,options:[`vertical`,`horizontal`,`grid`]},initialItems:{description:`Начальный набор элементов. Внутри story состояние управляется локально.`,control:!1},itemWidth:{description:`Минимальная ширина карточки; полезна для горизонтального режима.`,control:`text`},disabledIds:{description:`Список id, для которых drag-handle отключен.`,control:!1}}},b={},x={args:{containerId:`sortable-horizontal`,layout:`horizontal`,initialItems:_,itemWidth:`12rem`}},S={args:{containerId:`sortable-grid`,layout:`grid`,initialItems:v}},C={args:{containerId:`sortable-disabled`,layout:`vertical`,initialItems:g,disabledIds:[`Bravo`,`Delta`]}},w={args:{containerId:`sortable-handle-only`,layout:`vertical`,initialItems:[`Пункт 1`,`Пункт 2`,`Пункт 3`,`Пункт 4`]}},T={args:{containerId:`top`,layout:`vertical`,initialItems:[`Группа A`,`Группа B`]},render:()=>{let[e,t]=(0,p.useState)([`Группа A`,`Группа B`]),[n,r]=(0,p.useState)({"Группа A":[`A.1`,`A.2`,`A.3`],"Группа B":[`B.1`,`B.2`]});return(0,m.jsxs)(`div`,{style:{display:`grid`,gap:12},children:[(0,m.jsx)(c.Root,{onDragEnd:i=>{let a=s({event:i,items:{top:e,...Object.fromEntries(e.map(e=>[`parent:${e}`,n[e]??[]]))}});if(!a)return;if(a.containerId===`top`){t(e=>u(e,a.fromIndex,a.toIndex));return}let o=String(a.containerId).slice(7);r(e=>({...e,[o]:u(e[o]??[],a.fromIndex,a.toIndex)}))},children:(0,m.jsx)(c.Container,{containerId:`top`,items:e,children:(0,m.jsx)(`div`,{style:{display:`grid`,gap:`var(--space-md)`},children:e.map(e=>(0,m.jsxs)(c.Item,{id:e,style:{...h,gridTemplateColumns:`var(--control-height) 1fr`,alignItems:`start`},children:[(0,m.jsx)(c.DragHandle,{title:`Перетащить ${e}`}),(0,m.jsxs)(`div`,{style:{display:`grid`,gap:`var(--space-sm)`},children:[(0,m.jsx)(`strong`,{children:e}),(0,m.jsx)(c.Container,{containerId:`parent:${e}`,items:n[e]??[],children:(0,m.jsx)(`div`,{style:{display:`grid`,gap:`var(--space-xs)`},children:(n[e]??[]).map(e=>(0,m.jsxs)(c.Item,{id:e,style:{...h,background:`var(--surface-1)`},children:[(0,m.jsx)(c.DragHandle,{title:`Перетащить ${e}`}),(0,m.jsx)(`div`,{children:e})]},e))})})]})]},e))})})}),(0,m.jsx)(`div`,{style:{fontSize:14,opacity:.8},children:"Вложенные контейнеры сортируются независимо и используют общий `Sortable.Root`."})]})}},f.__docgenInfo={description:``,methods:[],displayName:`SortablePreview`,props:{containerId:{required:!0,tsType:{name:`string`},description:``},layout:{required:!0,tsType:{name:`union`,raw:`"vertical" | "horizontal" | "grid"`,elements:[{name:`literal`,value:`"vertical"`},{name:`literal`,value:`"horizontal"`},{name:`literal`,value:`"grid"`}]},description:``},initialItems:{required:!0,tsType:{name:`Array`,elements:[{name:`string`}],raw:`string[]`},description:``},itemWidth:{required:!1,tsType:{name:`string`},description:``},disabledIds:{required:!1,tsType:{name:`Array`,elements:[{name:`string`}],raw:`string[]`},description:``}}},f.parameters={...f.parameters,docs:{...f.parameters?.docs,source:{originalSource:`function SortablePreview(props: SortablePreviewProps) {
2
2
  const [items, setItems] = useState(props.initialItems);
3
3
  const disabledIdSet = new Set(props.disabledIds ?? []);
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-nvFBZnmF.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-BUeZ3JmE.js";import{Basic as p,Constrained as m,Horizontal as h,NestedFourPanels as g,n as _,t as v}from"./Splitter.stories-Bh3dux3i.js";function y(e){let o={code:`code`,h2:`h2`,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,Constrained as m,Horizontal as h,NestedFourPanels as g,n as _,t as v}from"./Splitter.stories-B7IdmITM.js";function y(e){let o={code:`code`,h2:`h2`,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:`Splitter`}),`
3
3
  `,(0,x.jsx)(i,{children:(0,x.jsx)(o.p,{children:`Компонент для интерактивного разделения рабочей области на две панели с поддержкой вложенности, клавиатуры и ограничений по размеру`})}),`
4
4
  `,(0,x.jsxs)(o.p,{children:[(0,x.jsx)(o.code,{children:`Splitter`}),` подходит для интерфейсов, где пользователь должен самостоятельно перераспределять пространство между соседними областями: навигацией и контентом, таблицей и деталями, превью и журналом событий.`]}),`
@@ -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-CELq1yHK.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{a,i as o}from"./utils-V012ES4W.js";var s,c,l,u,d,f,p,m=n((()=>{s=`wAovST`,c=`QVVMwe`,l=`H43AJ8`,u=`pgo8sW`,d=`_8fCvqA`,f=`t6RFcI`,p={splitter:s,vertical:c,separator:l,horizontal:u,topLeft:d,bottomRight:f}}));function h(e,t,n){return Math.min(n,Math.max(t,e))}function g(e,t){return Number.isFinite(e)?h(e,0,1):t}function _(e,t){let n=g(e,D),r=g(t,O);return n<=r?[n,r]:[r,n]}function v(e,t){return e===`vertical`?t.clientX:t.clientY}function y(e,t){return e===`vertical`?t.width:t.height}function b(e,t){if(e===`vertical`){if(t===`ArrowLeft`)return-.02;if(t===`ArrowRight`)return A}if(e===`horizontal`){if(t===`ArrowUp`)return-.02;if(t===`ArrowDown`)return A}return null}function x(e,t){return t===`start`?0:t===`end`?1:e}function S({direction:e,initial:t,min:n,max:r,collapsedPane:i}){let[a,o]=_(n,r),s=(0,T.useRef)(null),c=(0,T.useRef)(null),l=(0,T.useRef)(null),u=(0,T.useRef)(null),d=(0,T.useRef)(null),f=(0,T.useRef)(null),p=(0,T.useRef)(0),m=(0,T.useRef)(h(g(t,k),a,o)),S=(0,T.useRef)(t),[C,w]=(0,T.useState)(()=>h(g(t,k),a,o)),E=(0,T.useRef)(C),D=(0,T.useCallback)(e=>{E.current=e,c.current?.style.setProperty(`flex-basis`,`${x(e,i)*100}%`),l.current?.setAttribute(`aria-valuenow`,`${Math.round(e*100)}`)},[i]),O=()=>{if(f.current!==null&&(cancelAnimationFrame(f.current),f.current=null),d.current===null)return E.current;let e=d.current;return d.current=null,D(e),e},A=e=>{d.current=e,f.current===null&&(f.current=requestAnimationFrame(()=>{f.current=null,d.current!==null&&D(d.current)}))},j=()=>{u.current?.(),u.current=null},M=e=>{O(),w(h(e,a,o))};return(0,T.useLayoutEffect)(()=>{D(C)},[D,C]),(0,T.useEffect)(()=>{w(e=>{let n=S.current!==t;return S.current=t,h(n?g(t,k):e,a,o)})},[t,a,o]),(0,T.useEffect)(()=>()=>{j(),f.current!==null&&cancelAnimationFrame(f.current)},[]),{containerRef:s,topLeftRef:c,separatorRef:l,ratio:C,minRatio:a,maxRatio:o,handleSeparatorPointerDown:t=>{if(t.button!==0)return;t.preventDefault();let n=s.current;if(!n)return;j();try{t.currentTarget.setPointerCapture?.(t.pointerId)}catch{}p.current=v(e,t),m.current=E.current;let r=t=>{let r=y(e,n.getBoundingClientRect());if(r<=0)return;let i=v(e,t)-p.current,s=h(m.current+i/r,a,o);A(s)},i=()=>{j(),w(O())};u.current=()=>{document.removeEventListener(`pointermove`,r),document.removeEventListener(`pointerup`,i),document.removeEventListener(`pointercancel`,i)},document.addEventListener(`pointermove`,r),document.addEventListener(`pointerup`,i),document.addEventListener(`pointercancel`,i)},handleSeparatorKeyDown:t=>{let n=b(e,t.key);if(n!==null){t.preventDefault(),M(E.current+n);return}if(t.key===`Home`){t.preventDefault(),M(a);return}t.key===`End`&&(t.preventDefault(),M(o))}}}function C({className:e,direction:t,left:n,right:r,collapsedPane:i,logic:o}){let{containerRef:s,topLeftRef:c,separatorRef:l,ratio:u,minRatio:d,maxRatio:f,handleSeparatorPointerDown:m,handleSeparatorKeyDown:h}=o,g=x(u,i),_=i===`start`,v=i===`end`,y=i===null;return(0,E.jsxs)(`div`,{ref:s,className:a(p.splitter,p[t],e),children:[(0,E.jsx)(`div`,{ref:c,className:p.topLeft,style:{flexBasis:`${g*100}%`},hidden:_,children:n}),(0,E.jsx)(`div`,{ref:l,hidden:!y,role:`separator`,"aria-orientation":t===`vertical`?`vertical`:`horizontal`,"aria-valuemin":Math.round(d*100),"aria-valuemax":Math.round(f*100),"aria-valuenow":Math.round(u*100),tabIndex:y?0:-1,onPointerDown:m,onKeyDown:h,className:p.separator}),(0,E.jsx)(`div`,{className:p.bottomRight,hidden:v,children:r})]})}function w({direction:e=`vertical`,initial:t=k,min:n=D,max:r=O,className:i,collapsedPane:a=null,children:o}){let[s,c]=T.Children.toArray(o),l=S({direction:e,initial:t,min:n,max:r,collapsedPane:a});return c?(0,E.jsx)(C,{className:i,direction:e,left:s,right:c,collapsedPane:a,logic:l}):s}var T,E,D,O,k,A,j=n((()=>{T=t(r(),1),o(),m(),E=i(),D=.1,O=.9,k=.7,A=.02,w.__docgenInfo={description:``,methods:[],displayName:`Splitter`,props:{direction:{defaultValue:{value:`"vertical"`,computed:!1},required:!1},initial:{defaultValue:{value:`0.7`,computed:!1},required:!1},min:{defaultValue:{value:`0.1`,computed:!1},required:!1},max:{defaultValue:{value:`0.9`,computed:!1},required:!1},collapsedPane:{defaultValue:{value:`null`,computed:!1},required:!1}}}})),M=e({Basic:()=>B,Constrained:()=>U,Horizontal:()=>V,NestedFourPanels:()=>H,__namedExportsOrder:()=>W,default:()=>z});function N({children:e}){return(0,R.jsx)(`div`,{style:{height:490},children:e})}function P({title:e,description:t,items:n=[]}){return(0,R.jsxs)(`div`,{style:{height:`100%`,padding:`var(--space-md)`,borderRadius:`var(--radius-md)`,border:`var(--border)`,display:`grid`,alignContent:`start`,gap:`var(--space-md)`},className:`scrollable`,children:[(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`h2`,{children:e}),(0,R.jsx)(`p`,{children:t})]}),n.length>0&&(0,R.jsx)(`div`,{style:{display:`grid`,gap:`var(--space-sm)`},children:n.map(e=>(0,R.jsx)(`div`,{style:{padding:`var(--space-sm) var(--space-md)`,borderRadius:`var(--radius-sm)`,background:`var(--surface-1)`},children:e},e))})]})}function F(e){return(0,R.jsx)(N,{children:(0,R.jsxs)(w,{...e,children:[(0,R.jsx)(P,{title:`Навигация`,description:`Левая панель подходит для фильтров, дерева разделов, списка сущностей или структуры документа.`,items:[`Раздел 1`,`Раздел 2`,`Раздел 3`,`Раздел 4`]}),(0,R.jsx)(P,{title:`Рабочая область`,description:`Правая панель обычно содержит детальный контент: таблицу, карточку объекта, форму или вкладки.`,items:[`Текущий документ`,`История изменений`,`Комментарии`,`Связанные объекты`,`Параметры отображения`]})]})})}function I(){return(0,R.jsx)(N,{children:(0,R.jsxs)(w,{initial:.48,min:.25,max:.75,children:[(0,R.jsxs)(w,{direction:`horizontal`,initial:.58,min:.25,max:.75,children:[(0,R.jsx)(P,{title:`Список`,description:`Верхняя левая панель может держать навигацию или результат поиска.`,items:[`Поиск`,`Фильтр по статусу`,`Группы`,`Быстрые действия`]}),(0,R.jsx)(P,{title:`Подробности`,description:`Нижняя левая панель подходит для связанного контента по выбранному элементу.`,items:[`Свойства`,`Ответственный`,`Теги`,`Контекст`]})]}),(0,R.jsxs)(w,{direction:`horizontal`,initial:.36,min:.2,max:.8,children:[(0,R.jsx)(P,{title:`Превью`,description:`Верхняя правая панель может содержать документ, схему, карту или live-просмотр.`,items:[`Предпросмотр файла`,`Масштаб 100%`,`Слой подсветки`]}),(0,R.jsx)(P,{title:`Журнал`,description:`Нижняя правая панель часто используется для событий, логов или вспомогательных данных.`,items:[`10:31 Импорт завершён`,`10:34 Индексация`,`10:36 Синхронизация`,`10:38 Проверка целостности`]})]})]})})}function L(e){return(0,R.jsx)(N,{children:(0,R.jsxs)(w,{...e,children:[(0,R.jsx)(P,{title:`Фиксированные ограничения`,description:"У этой панели ужаты границы `min` и `max`, поэтому splitter нельзя увести слишком далеко.",items:[`Нажмите на разделитель`,`Используйте стрелки`,`Home = минимум`,`End = максимум`]}),(0,R.jsx)(P,{title:`Проверка доступности`,description:`Сценарий помогает проверить клавиатурное управление, устойчивость границ и отсутствие рывков при drag.`,items:[`ArrowLeft / ArrowRight`,`ArrowUp / ArrowDown`,`Перетаскивание мышью`,`Перетаскивание на тач-устройстве`]})]})})}var R,z,B,V,H,U,W,G=n((()=>{j(),R=i(),z={title:`Shared/UI/Splitter`,component:w,parameters:{atomicCanvas:!0,layout:`padded`},args:{direction:`vertical`,initial:.45,min:.15,max:.85},argTypes:{direction:{description:`Направление разделения: вертикальное по ширине или горизонтальное по высоте.`,control:`inline-radio`,options:[`vertical`,`horizontal`]},initial:{description:`Начальная доля первой панели в диапазоне от 0 до 1.`,control:{type:`range`,min:0,max:1,step:.01}},min:{description:`Минимальная доля первой панели. Значение автоматически нормализуется в диапазон 0..1.`,control:{type:`range`,min:0,max:1,step:.01}},max:{description:"Максимальная доля первой панели. Если `min` и `max` перепутаны местами, компонент сам исправит диапазон.",control:{type:`range`,min:0,max:1,step:.01}},className:{description:`Дополнительный CSS-класс корневого контейнера.`,control:`text`},children:{description:`Splitter ожидает ровно два прямых дочерних элемента. Для большего количества областей используйте вложенные Splitter.`,control:!1}}},B={name:`Две панели`,render:e=>(0,R.jsx)(F,{...e})},V={name:`Горизонтальное разделение`,render:e=>(0,R.jsx)(F,{...e}),args:{direction:`horizontal`,initial:.55}},H={name:`Четыре панели через вложенность`,render:()=>(0,R.jsx)(I,{})},U={name:`Ограничения и клавиатура`,render:e=>(0,R.jsx)(L,{...e}),args:{initial:.35,min:.25,max:.55}},B.parameters={...B.parameters,docs:{...B.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";var s,c,l,u,d,f,p,m=n((()=>{s=`wAovST`,c=`QVVMwe`,l=`H43AJ8`,u=`pgo8sW`,d=`_8fCvqA`,f=`t6RFcI`,p={splitter:s,vertical:c,separator:l,horizontal:u,topLeft:d,bottomRight:f}}));function h(e,t,n){return Math.min(n,Math.max(t,e))}function g(e,t){return Number.isFinite(e)?h(e,0,1):t}function _(e,t){let n=g(e,D),r=g(t,O);return n<=r?[n,r]:[r,n]}function v(e,t){return e===`vertical`?t.clientX:t.clientY}function y(e,t){return e===`vertical`?t.width:t.height}function b(e,t){if(e===`vertical`){if(t===`ArrowLeft`)return-.02;if(t===`ArrowRight`)return A}if(e===`horizontal`){if(t===`ArrowUp`)return-.02;if(t===`ArrowDown`)return A}return null}function x(e,t){return t===`start`?0:t===`end`?1:e}function S({direction:e,initial:t,min:n,max:r,collapsedPane:i}){let[a,o]=_(n,r),s=(0,T.useRef)(null),c=(0,T.useRef)(null),l=(0,T.useRef)(null),u=(0,T.useRef)(null),d=(0,T.useRef)(null),f=(0,T.useRef)(null),p=(0,T.useRef)(0),m=(0,T.useRef)(h(g(t,k),a,o)),S=(0,T.useRef)(t),[C,w]=(0,T.useState)(()=>h(g(t,k),a,o)),E=(0,T.useRef)(C),D=(0,T.useCallback)(e=>{E.current=e,c.current?.style.setProperty(`flex-basis`,`${x(e,i)*100}%`),l.current?.setAttribute(`aria-valuenow`,`${Math.round(e*100)}`)},[i]),O=()=>{if(f.current!==null&&(cancelAnimationFrame(f.current),f.current=null),d.current===null)return E.current;let e=d.current;return d.current=null,D(e),e},A=e=>{d.current=e,f.current===null&&(f.current=requestAnimationFrame(()=>{f.current=null,d.current!==null&&D(d.current)}))},j=()=>{u.current?.(),u.current=null},M=e=>{O(),w(h(e,a,o))};return(0,T.useLayoutEffect)(()=>{D(C)},[D,C]),(0,T.useEffect)(()=>{w(e=>{let n=S.current!==t;return S.current=t,h(n?g(t,k):e,a,o)})},[t,a,o]),(0,T.useEffect)(()=>()=>{j(),f.current!==null&&cancelAnimationFrame(f.current)},[]),{containerRef:s,topLeftRef:c,separatorRef:l,ratio:C,minRatio:a,maxRatio:o,handleSeparatorPointerDown:t=>{if(t.button!==0)return;t.preventDefault();let n=s.current;if(!n)return;j();try{t.currentTarget.setPointerCapture?.(t.pointerId)}catch{}p.current=v(e,t),m.current=E.current;let r=t=>{let r=y(e,n.getBoundingClientRect());if(r<=0)return;let i=v(e,t)-p.current,s=h(m.current+i/r,a,o);A(s)},i=()=>{j(),w(O())};u.current=()=>{document.removeEventListener(`pointermove`,r),document.removeEventListener(`pointerup`,i),document.removeEventListener(`pointercancel`,i)},document.addEventListener(`pointermove`,r),document.addEventListener(`pointerup`,i),document.addEventListener(`pointercancel`,i)},handleSeparatorKeyDown:t=>{let n=b(e,t.key);if(n!==null){t.preventDefault(),M(E.current+n);return}if(t.key===`Home`){t.preventDefault(),M(a);return}t.key===`End`&&(t.preventDefault(),M(o))}}}function C({className:e,direction:t,left:n,right:r,collapsedPane:i,logic:o}){let{containerRef:s,topLeftRef:c,separatorRef:l,ratio:u,minRatio:d,maxRatio:f,handleSeparatorPointerDown:m,handleSeparatorKeyDown:h}=o,g=x(u,i),_=i===`start`,v=i===`end`,y=i===null;return(0,E.jsxs)(`div`,{ref:s,className:a(p.splitter,p[t],e),children:[(0,E.jsx)(`div`,{ref:c,className:p.topLeft,style:{flexBasis:`${g*100}%`},hidden:_,children:n}),(0,E.jsx)(`div`,{ref:l,hidden:!y,role:`separator`,"aria-orientation":t===`vertical`?`vertical`:`horizontal`,"aria-valuemin":Math.round(d*100),"aria-valuemax":Math.round(f*100),"aria-valuenow":Math.round(u*100),tabIndex:y?0:-1,onPointerDown:m,onKeyDown:h,className:p.separator}),(0,E.jsx)(`div`,{className:p.bottomRight,hidden:v,children:r})]})}function w({direction:e=`vertical`,initial:t=k,min:n=D,max:r=O,className:i,collapsedPane:a=null,children:o}){let[s,c]=T.Children.toArray(o),l=S({direction:e,initial:t,min:n,max:r,collapsedPane:a});return c?(0,E.jsx)(C,{className:i,direction:e,left:s,right:c,collapsedPane:a,logic:l}):s}var T,E,D,O,k,A,j=n((()=>{T=t(r(),1),o(),m(),E=i(),D=.1,O=.9,k=.7,A=.02,w.__docgenInfo={description:``,methods:[],displayName:`Splitter`,props:{direction:{defaultValue:{value:`"vertical"`,computed:!1},required:!1},initial:{defaultValue:{value:`0.7`,computed:!1},required:!1},min:{defaultValue:{value:`0.1`,computed:!1},required:!1},max:{defaultValue:{value:`0.9`,computed:!1},required:!1},collapsedPane:{defaultValue:{value:`null`,computed:!1},required:!1}}}})),M=e({Basic:()=>B,Constrained:()=>U,Horizontal:()=>V,NestedFourPanels:()=>H,__namedExportsOrder:()=>W,default:()=>z});function N({children:e}){return(0,R.jsx)(`div`,{style:{height:490},children:e})}function P({title:e,description:t,items:n=[]}){return(0,R.jsxs)(`div`,{style:{height:`100%`,padding:`var(--space-md)`,borderRadius:`var(--radius-md)`,border:`var(--border)`,display:`grid`,alignContent:`start`,gap:`var(--space-md)`},className:`scrollable`,children:[(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`h2`,{children:e}),(0,R.jsx)(`p`,{children:t})]}),n.length>0&&(0,R.jsx)(`div`,{style:{display:`grid`,gap:`var(--space-sm)`},children:n.map(e=>(0,R.jsx)(`div`,{style:{padding:`var(--space-sm) var(--space-md)`,borderRadius:`var(--radius-sm)`,background:`var(--surface-1)`},children:e},e))})]})}function F(e){return(0,R.jsx)(N,{children:(0,R.jsxs)(w,{...e,children:[(0,R.jsx)(P,{title:`Навигация`,description:`Левая панель подходит для фильтров, дерева разделов, списка сущностей или структуры документа.`,items:[`Раздел 1`,`Раздел 2`,`Раздел 3`,`Раздел 4`]}),(0,R.jsx)(P,{title:`Рабочая область`,description:`Правая панель обычно содержит детальный контент: таблицу, карточку объекта, форму или вкладки.`,items:[`Текущий документ`,`История изменений`,`Комментарии`,`Связанные объекты`,`Параметры отображения`]})]})})}function I(){return(0,R.jsx)(N,{children:(0,R.jsxs)(w,{initial:.48,min:.25,max:.75,children:[(0,R.jsxs)(w,{direction:`horizontal`,initial:.58,min:.25,max:.75,children:[(0,R.jsx)(P,{title:`Список`,description:`Верхняя левая панель может держать навигацию или результат поиска.`,items:[`Поиск`,`Фильтр по статусу`,`Группы`,`Быстрые действия`]}),(0,R.jsx)(P,{title:`Подробности`,description:`Нижняя левая панель подходит для связанного контента по выбранному элементу.`,items:[`Свойства`,`Ответственный`,`Теги`,`Контекст`]})]}),(0,R.jsxs)(w,{direction:`horizontal`,initial:.36,min:.2,max:.8,children:[(0,R.jsx)(P,{title:`Превью`,description:`Верхняя правая панель может содержать документ, схему, карту или live-просмотр.`,items:[`Предпросмотр файла`,`Масштаб 100%`,`Слой подсветки`]}),(0,R.jsx)(P,{title:`Журнал`,description:`Нижняя правая панель часто используется для событий, логов или вспомогательных данных.`,items:[`10:31 Импорт завершён`,`10:34 Индексация`,`10:36 Синхронизация`,`10:38 Проверка целостности`]})]})]})})}function L(e){return(0,R.jsx)(N,{children:(0,R.jsxs)(w,{...e,children:[(0,R.jsx)(P,{title:`Фиксированные ограничения`,description:"У этой панели ужаты границы `min` и `max`, поэтому splitter нельзя увести слишком далеко.",items:[`Нажмите на разделитель`,`Используйте стрелки`,`Home = минимум`,`End = максимум`]}),(0,R.jsx)(P,{title:`Проверка доступности`,description:`Сценарий помогает проверить клавиатурное управление, устойчивость границ и отсутствие рывков при drag.`,items:[`ArrowLeft / ArrowRight`,`ArrowUp / ArrowDown`,`Перетаскивание мышью`,`Перетаскивание на тач-устройстве`]})]})})}var R,z,B,V,H,U,W,G=n((()=>{j(),R=i(),z={title:`Shared/UI/Splitter`,component:w,parameters:{atomicCanvas:!0,layout:`padded`},args:{direction:`vertical`,initial:.45,min:.15,max:.85},argTypes:{direction:{description:`Направление разделения: вертикальное по ширине или горизонтальное по высоте.`,control:`inline-radio`,options:[`vertical`,`horizontal`]},initial:{description:`Начальная доля первой панели в диапазоне от 0 до 1.`,control:{type:`range`,min:0,max:1,step:.01}},min:{description:`Минимальная доля первой панели. Значение автоматически нормализуется в диапазон 0..1.`,control:{type:`range`,min:0,max:1,step:.01}},max:{description:"Максимальная доля первой панели. Если `min` и `max` перепутаны местами, компонент сам исправит диапазон.",control:{type:`range`,min:0,max:1,step:.01}},className:{description:`Дополнительный CSS-класс корневого контейнера.`,control:`text`},children:{description:`Splitter ожидает ровно два прямых дочерних элемента. Для большего количества областей используйте вложенные Splitter.`,control:!1}}},B={name:`Две панели`,render:e=>(0,R.jsx)(F,{...e})},V={name:`Горизонтальное разделение`,render:e=>(0,R.jsx)(F,{...e}),args:{direction:`horizontal`,initial:.55}},H={name:`Четыре панели через вложенность`,render:()=>(0,R.jsx)(I,{})},U={name:`Ограничения и клавиатура`,render:e=>(0,R.jsx)(L,{...e}),args:{initial:.35,min:.25,max:.55}},B.parameters={...B.parameters,docs:{...B.parameters?.docs,source:{originalSource:`{
2
2
  name: "Две панели",
3
3
  render: args => <TwoPaneLayout {...args} />
4
4
  }`,...B.parameters?.docs?.source}}},V.parameters={...V.parameters,docs:{...V.parameters?.docs,source:{originalSource:`{
@@ -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-nvFBZnmF.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-BUeZ3JmE.js";import{Controlled as p,PaletteOnly as m,WithMeta as h,n as g,t as _}from"./StateSelect.stories-Cel6i2fC.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,PaletteOnly as m,WithMeta as h,n as g,t as _}from"./StateSelect.stories-Cia0oYUX.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:`StateSelect`}),`
3
3
  `,(0,b.jsx)(i,{children:`Специализированный select для выбора визуального статуса или семантического состояния`}),`
4
4
  `,(0,b.jsx)(o.p,{children:`StateSelect уже имеет живые 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-CELq1yHK.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{a,i as o}from"./utils-V012ES4W.js";import{J as s,K as c,O as l,W as u,o as d,t as f}from"./lucide-react-DaLrYAcN.js";import{d as p,n as m,t as h}from"./formatters-Cnj-VWHB.js";import{t as g}from"./Select-B_oN8tGy.js";import{t as _}from"./select-CbSahuRN.js";var v,y,b,x,S,C,w,T,E,D,O,k,A=n((()=>{v=`p4nQdZ`,y=`_94tg5v`,b=`HyK7Zs`,x=`Mm4hrB`,S=`clxxBQ`,C=`_5pJ7o-`,w=`VV6hKN`,T=`cuQNP0`,E=`w7nIOT`,D=`ed-Afj`,O=`Lbxloe`,k={button:v,valueContainer:y,swatch:b,optionsPalette:x,optionsDetailed:S,option:C,optionPalette:w,optionDetailed:T,optionMeta:E,optionMetaIcon:D,optionMetaLabel:O}}));function j({state:e,className:t}){return(0,R.jsx)(`span`,{className:a(k.swatch,t),"data-empty":e===`none`?``:void 0,style:{"--state-color":p[e]}})}function M(e){return!!(e?.icon||e?.label)}function N(e,t){return typeof t?.label==`string`&&t.label.trim()?t.label:e||`empty`}function P(e){return M(e)?(0,R.jsxs)(`span`,{className:k.optionMeta,children:[e?.icon?(0,R.jsx)(`span`,{className:k.optionMetaIcon,children:e.icon}):null,e?.label?(0,R.jsx)(`span`,{className:k.optionMetaLabel,children:e.label}):null]}):null}function F(e,t){return(0,R.jsxs)(`div`,{className:k.valueContainer,children:[(0,R.jsx)(j,{state:e}),P(t)]})}function I({label:e,description:t,disabled:n,placeholder:r,size:i,value:o,onChange:s,options:c=m,stateMeta:l,className:u,clearable:d}){let f=(0,L.useMemo)(()=>Array.from(new Set(c)),[c]),p=f.some(e=>M(l?.[e]));return(0,R.jsx)(g,{label:e,description:t,disabled:n,placeholder:r,size:i,value:o,onChange:s,options:f,className:u,clearable:d,getOptionKey:e=>e||`__empty_state__`,getOptionLabel:e=>l?.[e]?.label??e,getOptionAriaLabel:e=>N(e,l?.[e]),renderValue:e=>F(e,l?.[e]),renderOption:e=>(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(j,{state:e}),p?P(l?.[e]):null]}),buttonClassName:k.button,optionsContentClassName:a(p?k.optionsDetailed:k.optionsPalette),getOptionClassName:()=>a(k.option,p?k.optionDetailed:k.optionPalette)})}var L,R,z=n((()=>{L=t(r(),1),h(),o(),_(),A(),R=i(),I.__docgenInfo={description:`Специализированный селект для выбора цветового или статусного состояния. Используется там, где значению соответствует визуальный swatch.`,methods:[],displayName:`StateSelect`,props:{placeholder:{required:!1,tsType:{name:`string`},description:``},options:{required:!1,tsType:{name:`unknown`},description:``,defaultValue:{value:`DEFAULT_VALUE_STATES`,computed:!0}},stateMeta:{required:!1,tsType:{name:`Partial`,elements:[{name:`Record`,elements:[{name:`State`},{name:`signature`,type:`object`,raw:`{
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{J as s,K as c,O as l,W as u,o as d,t as f}from"./lucide-react-ClGevkpS.js";import{d as p,n as m,t as h}from"./formatters-C0d3JoZj.js";import{t as g}from"./Select-BxK9yj6_.js";import{t as _}from"./select-DYXb71nn.js";var v,y,b,x,S,C,w,T,E,D,O,k,A=n((()=>{v=`p4nQdZ`,y=`_94tg5v`,b=`HyK7Zs`,x=`Mm4hrB`,S=`clxxBQ`,C=`_5pJ7o-`,w=`VV6hKN`,T=`cuQNP0`,E=`w7nIOT`,D=`ed-Afj`,O=`Lbxloe`,k={button:v,valueContainer:y,swatch:b,optionsPalette:x,optionsDetailed:S,option:C,optionPalette:w,optionDetailed:T,optionMeta:E,optionMetaIcon:D,optionMetaLabel:O}}));function j({state:e,className:t}){return(0,R.jsx)(`span`,{className:a(k.swatch,t),"data-empty":e===`none`?``:void 0,style:{"--state-color":p[e]}})}function M(e){return!!(e?.icon||e?.label)}function N(e,t){return typeof t?.label==`string`&&t.label.trim()?t.label:e||`empty`}function P(e){return M(e)?(0,R.jsxs)(`span`,{className:k.optionMeta,children:[e?.icon?(0,R.jsx)(`span`,{className:k.optionMetaIcon,children:e.icon}):null,e?.label?(0,R.jsx)(`span`,{className:k.optionMetaLabel,children:e.label}):null]}):null}function F(e,t){return(0,R.jsxs)(`div`,{className:k.valueContainer,children:[(0,R.jsx)(j,{state:e}),P(t)]})}function I({label:e,description:t,disabled:n,placeholder:r,size:i,value:o,onChange:s,options:c=m,stateMeta:l,className:u,clearable:d}){let f=(0,L.useMemo)(()=>Array.from(new Set(c)),[c]),p=f.some(e=>M(l?.[e]));return(0,R.jsx)(g,{label:e,description:t,disabled:n,placeholder:r,size:i,value:o,onChange:s,options:f,className:u,clearable:d,getOptionKey:e=>e||`__empty_state__`,getOptionLabel:e=>l?.[e]?.label??e,getOptionAriaLabel:e=>N(e,l?.[e]),renderValue:e=>F(e,l?.[e]),renderOption:e=>(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(j,{state:e}),p?P(l?.[e]):null]}),buttonClassName:k.button,optionsContentClassName:a(p?k.optionsDetailed:k.optionsPalette),getOptionClassName:()=>a(k.option,p?k.optionDetailed:k.optionPalette)})}var L,R,z=n((()=>{L=t(r(),1),h(),o(),_(),A(),R=i(),I.__docgenInfo={description:`Специализированный селект для выбора цветового или статусного состояния. Используется там, где значению соответствует визуальный swatch.`,methods:[],displayName:`StateSelect`,props:{placeholder:{required:!1,tsType:{name:`string`},description:``},options:{required:!1,tsType:{name:`unknown`},description:``,defaultValue:{value:`DEFAULT_VALUE_STATES`,computed:!0}},stateMeta:{required:!1,tsType:{name:`Partial`,elements:[{name:`Record`,elements:[{name:`State`},{name:`signature`,type:`object`,raw:`{
2
2
  label?: ReactNode;
3
3
  icon?: ReactNode;
4
4
  }`,signature:{properties:[{key:`label`,value:{name:`ReactNode`,required:!1}},{key:`icon`,value:{name:`ReactNode`,required:!1}}]}}],raw:`Record<State, StateMeta>`}],raw:`Partial<Record<State, StateMeta>>`},description:``},className:{required:!1,tsType:{name:`string`},description:``},clearable:{required:!1,tsType:{name:`boolean`},description:``}},composes:[`Omit`]}})),B=e({Controlled:()=>W,PaletteOnly:()=>K,WithMeta:()=>G,__namedExportsOrder:()=>q,default:()=>U}),V,H,U,W,G,K,q,J=n((()=>{V=t(r(),1),f(),z(),H=i(),U={title:`Shared/UI/StateSelect`,component:I,args:{label:`Состояние`,description:`Выберите визуальный статус.`,placeholder:`Выберите значение`,value:`information`,onChange:()=>{},disabled:!1,size:`md`},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{label:{description:`Заголовок поля выбора состояния.`,control:`text`},description:{description:`Описание под заголовком.`,control:`text`},placeholder:{description:`Текст, когда значение не выбрано.`,control:`text`},value:{description:`Текущее состояние.`,control:`select`,options:[``,`none`,`information`,`success`,`warning`,`error`]},onChange:{description:`Вызывается при выборе состояния.`,control:!1},options:{description:`Кастомный набор доступных состояний.`,control:!1},stateMeta:{description:`Кастомные иконки и подписи для значений.`,control:!1},disabled:{description:`Блокирует взаимодействие с полем.`,control:`boolean`},size:{description:`Размер поля и подписей.`,control:`select`,options:[`xs`,`sm`,`md`,`lg`,`xl`]},className:{description:`Дополнительный CSS-класс.`,control:`text`}}},W={render:e=>{let[t,n]=(0,V.useState)(`information`);return(0,H.jsx)(I,{...e,value:t,onChange:n})}},G={render:e=>{let[t,n]=(0,V.useState)(`warning`);return(0,H.jsx)(I,{...e,value:t,onChange:n,stateMeta:{none:{label:`Без статуса`,icon:(0,H.jsx)(c,{})},information:{label:`Инфо`,icon:(0,H.jsx)(l,{})},success:{label:`Успех`,icon:(0,H.jsx)(s,{})},warning:{label:`Предупреждение`,icon:(0,H.jsx)(d,{})},error:{label:`Ошибка`,icon:(0,H.jsx)(u,{})}}})},args:{value:`warning`}},K={render:e=>{let[t,n]=(0,V.useState)(`none`);return(0,H.jsx)(I,{...e,value:t,onChange:n,options:[`none`,`success`,`error`]})},args:{options:[`none`,`success`,`error`],value:`none`}},W.parameters={...W.parameters,docs:{...W.parameters?.docs,source:{originalSource:`{
@@ -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-nvFBZnmF.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-BUeZ3JmE.js";import{BiState as p,Disabled as m,TriState as h,n as g,t as _}from"./Switch.stories-BB3h3c5K.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{BiState as p,Disabled as m,TriState as h,n as g,t as _}from"./Switch.stories-BVAIn4yd.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:`Switch`}),`
3
3
  `,(0,b.jsx)(i,{children:`Переключатель в виде слайдера для быстрых включений, отключений и tri-state сценариев`}),`
4
4
  `,(0,b.jsx)(o.p,{children:`Switch уже имеет живые 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-CELq1yHK.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{a,i as o}from"./utils-V012ES4W.js";import{J as s,t as c,vt as l}from"./lucide-react-DaLrYAcN.js";import{n as u,t as d}from"./ui.module-wFHXkJzp.js";var f,p,m,h,g,_=n((()=>{f=`Or5LYA`,p=`w0AMfA`,m=`P1x4lq`,h=`-ZVOZo`,g={switchWrapper:f,switch:`qge3io`,iconWrapper:p,auto:m,checked:h}}));function v(e){let{label:t,description:n,disabled:r,checkedIcon:i=(0,b.jsx)(s,{}),uncheckedIcon:o=(0,b.jsx)(l,{}),className:c,type:d,id:f,size:p,placeholder:m,onChange:h,value:_,triState:v,...x}=e,S=(0,y.useId)(),C=f??S,w=n?`${C}-description`:void 0,T=t?`${C}-label`:void 0,E=()=>{if(!e.triState){e.onChange(!e.value);return}if(e.value===void 0){e.onChange(!0);return}if(e.value===!0){e.onChange(!1);return}e.value===!1&&e.onChange(void 0)},D=typeof e.value==`boolean`?e.value:!1,O=e.triState&&typeof e.value!=`boolean`,k=x[`aria-label`]??(t?void 0:`Переключатель`);return(0,b.jsxs)(`div`,{className:a(u.uiElement,r&&u.disabled),"aria-disabled":r||void 0,children:[t&&(0,b.jsxs)(`div`,{id:T,className:u.uiLabel,children:[t,`:`]}),n&&(0,b.jsx)(`p`,{id:w,className:u.uiDescription,children:n}),(0,b.jsx)(`button`,{...x,id:C,type:d??`button`,role:`switch`,disabled:r,"aria-checked":D,"aria-describedby":w,"aria-labelledby":T,"aria-label":k,"aria-disabled":r,"data-ui":`switch`,"data-action":`toggle-switch`,onClick:E,className:a(u.uiInputControl,g.switchWrapper,c),children:(0,b.jsx)(`div`,{className:g.switch,"data-disabled":r||void 0,children:O?(0,b.jsx)(`div`,{className:a(g.iconWrapper,g.auto,g.checked),children:`Auto`}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(`div`,{className:a(g.iconWrapper,!e.value&&g.checked),children:o}),(0,b.jsx)(`div`,{className:a(g.iconWrapper,e.value&&g.checked),children:i})]})})})]})}var y,b,x=n((()=>{y=t(r(),1),o(),c(),d(),_(),b=i(),v.__docgenInfo={description:`Переключатель boolean-состояния в виде слайдера. Подходит для быстрых настроек и включения/отключения опций.`,methods:[],displayName:`Switch`}})),S=e({BiState:()=>E,Disabled:()=>O,TriState:()=>D,__namedExportsOrder:()=>k,default:()=>T}),C,w,T,E,D,O,k,A=n((()=>{C=t(r(),1),x(),w=i(),T={title:`Shared/UI/Switch`,component:v,args:{label:`Режим обработки`,description:`Переключение состояния`,value:!1,onChange:()=>{},triState:!1,disabled:!1},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{label:{description:`Заголовок переключателя.`,control:`text`},description:{description:`Описание под заголовком.`,control:`text`},value:{description:"Текущее значение (`boolean` или `undefined` в tri-state).",control:!1},onChange:{description:`Вызывается при изменении состояния.`,control:!1},triState:{description:"Включает трехсостоянный режим (`undefined → true → false`).",control:`boolean`},checkedIcon:{description:"Кастомная иконка для состояния `true`.",control:!1},uncheckedIcon:{description:"Кастомная иконка для состояния `false`.",control:!1},disabled:{description:`Блокирует переключение.`,control:`boolean`}}},E={render:e=>{let[t,n]=(0,C.useState)(!1);return(0,w.jsx)(v,{...e,value:t,onChange:n,triState:!1})}},D={render:e=>{let[t,n]=(0,C.useState)(void 0);return(0,w.jsxs)(`div`,{style:{display:`grid`,gap:8},children:[(0,w.jsx)(v,{...e,value:t,onChange:n,triState:!0}),(0,w.jsxs)(`div`,{children:[`Текущее значение: `,String(t)]})]})},args:{triState:!0,value:void 0}},O={args:{disabled:!0,value:!0}},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}from"./utils-Bg8QclQy.js";import{J as s,t as c,vt as l}from"./lucide-react-ClGevkpS.js";import{n as u,t as d}from"./ui.module-wFHXkJzp.js";var f,p,m,h,g,_=n((()=>{f=`Or5LYA`,p=`w0AMfA`,m=`P1x4lq`,h=`-ZVOZo`,g={switchWrapper:f,switch:`qge3io`,iconWrapper:p,auto:m,checked:h}}));function v(e){let{label:t,description:n,disabled:r,checkedIcon:i=(0,b.jsx)(s,{}),uncheckedIcon:o=(0,b.jsx)(l,{}),className:c,type:d,id:f,size:p,placeholder:m,onChange:h,value:_,triState:v,...x}=e,S=(0,y.useId)(),C=f??S,w=n?`${C}-description`:void 0,T=t?`${C}-label`:void 0,E=()=>{if(!e.triState){e.onChange(!e.value);return}if(e.value===void 0){e.onChange(!0);return}if(e.value===!0){e.onChange(!1);return}e.value===!1&&e.onChange(void 0)},D=typeof e.value==`boolean`?e.value:!1,O=e.triState&&typeof e.value!=`boolean`,k=x[`aria-label`]??(t?void 0:`Переключатель`);return(0,b.jsxs)(`div`,{className:a(u.uiElement,r&&u.disabled),"aria-disabled":r||void 0,children:[t&&(0,b.jsxs)(`div`,{id:T,className:u.uiLabel,children:[t,`:`]}),n&&(0,b.jsx)(`p`,{id:w,className:u.uiDescription,children:n}),(0,b.jsx)(`button`,{...x,id:C,type:d??`button`,role:`switch`,disabled:r,"aria-checked":D,"aria-describedby":w,"aria-labelledby":T,"aria-label":k,"aria-disabled":r,"data-ui":`switch`,"data-action":`toggle-switch`,onClick:E,className:a(u.uiInputControl,g.switchWrapper,c),children:(0,b.jsx)(`div`,{className:g.switch,"data-disabled":r||void 0,children:O?(0,b.jsx)(`div`,{className:a(g.iconWrapper,g.auto,g.checked),children:`Auto`}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(`div`,{className:a(g.iconWrapper,!e.value&&g.checked),children:o}),(0,b.jsx)(`div`,{className:a(g.iconWrapper,e.value&&g.checked),children:i})]})})})]})}var y,b,x=n((()=>{y=t(r(),1),o(),c(),d(),_(),b=i(),v.__docgenInfo={description:`Переключатель boolean-состояния в виде слайдера. Подходит для быстрых настроек и включения/отключения опций.`,methods:[],displayName:`Switch`}})),S=e({BiState:()=>E,Disabled:()=>O,TriState:()=>D,__namedExportsOrder:()=>k,default:()=>T}),C,w,T,E,D,O,k,A=n((()=>{C=t(r(),1),x(),w=i(),T={title:`Shared/UI/Switch`,component:v,args:{label:`Режим обработки`,description:`Переключение состояния`,value:!1,onChange:()=>{},triState:!1,disabled:!1},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{label:{description:`Заголовок переключателя.`,control:`text`},description:{description:`Описание под заголовком.`,control:`text`},value:{description:"Текущее значение (`boolean` или `undefined` в tri-state).",control:!1},onChange:{description:`Вызывается при изменении состояния.`,control:!1},triState:{description:"Включает трехсостоянный режим (`undefined → true → false`).",control:`boolean`},checkedIcon:{description:"Кастомная иконка для состояния `true`.",control:!1},uncheckedIcon:{description:"Кастомная иконка для состояния `false`.",control:!1},disabled:{description:`Блокирует переключение.`,control:`boolean`}}},E={render:e=>{let[t,n]=(0,C.useState)(!1);return(0,w.jsx)(v,{...e,value:t,onChange:n,triState:!1})}},D={render:e=>{let[t,n]=(0,C.useState)(void 0);return(0,w.jsxs)(`div`,{style:{display:`grid`,gap:8},children:[(0,w.jsx)(v,{...e,value:t,onChange:n,triState:!0}),(0,w.jsxs)(`div`,{children:[`Текущее значение: `,String(t)]})]})},args:{triState:!0,value:void 0}},O={args:{disabled:!0,value:!0}},E.parameters={...E.parameters,docs:{...E.parameters?.docs,source:{originalSource:`{
2
2
  render: args => {
3
3
  const [value, setValue] = useState(false);
4
4
  return <Switch {...args} value={value} onChange={setValue} triState={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-nvFBZnmF.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-BUeZ3JmE.js";import{Basic as p,Empty as m,Fetching as h,Loading as g,MultiSelect as _,ReachEnd as v,WithColumnPinning as y,WithDisabledRows as b,WithFormattingPipeline as x,WithFormulaColumn as S,WithHiddenZero as C,WithMergedDuplicates as w,WithODataMetadataAdapter as T,WithUseODataTableColumnsBuildHook as E,WithUseODataTableColumnsEnrichHook as D,n as O,t as k}from"./Table.stories-CYPyFV0A.js";function A(e){let o={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...t(),...e.components};return(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(a,{of:k,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,Fetching as h,Loading as g,MultiSelect as _,ReachEnd as v,WithColumnPinning as y,WithDisabledRows as b,WithFormattingPipeline as x,WithFormulaColumn as S,WithHiddenZero as C,WithMergedDuplicates as w,WithODataMetadataAdapter as T,WithUseODataTableColumnsBuildHook as E,WithUseODataTableColumnsEnrichHook as D,n as O,t as k}from"./Table.stories-sckp-lho.js";function A(e){let o={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...t(),...e.components};return(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(a,{of:k,parameters:{docs:{toc:!0}}}),`
2
2
  `,(0,M.jsx)(c,{children:`Table`}),`
3
3
  `,(0,M.jsxs)(i,{children:[`Плоская таблица как React-альтернатива `,(0,M.jsx)(o.code,{children:`sap.m.Table`})]}),`
4
4
  `,(0,M.jsxs)(o.p,{children:[(0,M.jsx)(o.code,{children:`Table`}),` предназначен для плоских данных и по поведению осознанно сближен с `,(0,M.jsx)(o.code,{children:`TreeTable`}),`.
@@ -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-CELq1yHK.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{t as a,w as ee}from"./formatters-Cnj-VWHB.js";import{D as te,E as o,T as ne,c as re,l as ie,s as ae,t as s,v as c,w as oe}from"./odata-gGnv74mq.js";import{C as se,S as ce,d as le,g as ue,i as de,l as fe,m as pe,n as me,p as he,s as ge,t as l,v as _e,x as u,y as ve}from"./base-table-ChlvVz_l.js";var d,f,p,ye=n((()=>{d=`hKghZt`,f=`QsLRvS`,p={selectedIndicatorCell:d,sentinel:f}}));function be(e,t){return String(t)}function m({title:e,isLoading:t,isFetching:n,data:r,columns:i,selectionMode:a=`none`,selectedRowIds:te,getRowId:o,className:ne,minHeight:ie,tableClassName:ae,columnVisibility:s,defaultColumnVisibility:c,columnOrder:oe,defaultColumnOrder:l,columnSizing:u,defaultColumnSizing:d,columnPinning:f,defaultColumnPinning:ye,enableColumnResizing:m=!1,enableColumnReordering:xe=!1,columnResizeMinWidth:_,onColumnVisibilityChange:Se,onColumnOrderChange:Ce,onColumnSizingChange:we,onColumnPinningChange:Te,onRowClick:v,onRowSelectionChange:y,onReachEnd:b,getRowCanSelect:x,getRowClassName:S,renderHeaderContextMenu:C,renderCellContent:w}){let T=(0,h.useMemo)(()=>r??[],[r]),E=(0,h.useMemo)(()=>ue(i),[i]),D=o??be,O=(0,h.useMemo)(()=>new Map(T.map((e,t)=>[D(e,t),e])),[D,T]),k=(0,h.useMemo)(()=>Array.from(O.keys()),[O]),A=(0,h.useRef)(null),j=(0,h.useRef)(null),{rowSelection:M,activateRowSelection:N}=re({availableRowIds:k,rowById:O,selectionMode:a,selectedRowIds:te,onRowSelectionChange:y}),{columnVisibility:P,onColumnVisibilityChange:F}=ge({columnVisibility:s,defaultColumnVisibility:c,onColumnVisibilityChange:Se}),{columnOrder:I,onColumnOrderChange:L}=he({columnOrder:oe,defaultColumnOrder:l,onColumnOrderChange:Ce}),{columnSizing:R,onColumnSizingChange:z}=fe({columnSizing:u,defaultColumnSizing:d,columnResizeMinWidth:_,onColumnSizingChange:we}),{columnPinning:B,onColumnPinningChange:V}=le({columnPinning:f,defaultColumnPinning:ye,onColumnPinningChange:Te}),H=(0,h.useMemo)(()=>({columnOrder:I,columnPinning:B,columnSizing:R,columnVisibility:P}),[I,B,R,P]),U=(0,h.useEffectEvent)(()=>{b?.()});(0,h.useEffect)(()=>{if(!b||!A.current||!j.current||t)return;let e=new IntersectionObserver(e=>{e[0]?.isIntersecting&&U()},{root:A.current,threshold:.1});return e.observe(j.current),()=>e.disconnect()},[t,b,T.length]);let W=ce({data:T,columns:i,state:{columnOrder:I,columnPinning:B,columnSizing:R,columnVisibility:P,rowSelection:M},onColumnOrderChange:L,onColumnPinningChange:V,onColumnSizingChange:z,onColumnVisibilityChange:F,getRowId:(e,t)=>D(e,t),getCoreRowModel:se(),enableMultiRowSelection:a===`multi`,enableRowSelection:e=>a===`none`?!1:x?x(e.original):!0}),G=ve(W,H),K=W.getRowModel().rows,q=(0,h.useMemo)(()=>pe({rows:K,columns:G}),[K,G]),J=G[0]?.id;return(0,g.jsx)(de,{table:W,columnState:H,title:e,isLoading:t,isFetching:n,className:ne,minHeight:ie,tableClassName:ae,selectionMode:a,scrollableRef:A,onActivateRow:a!==`none`||v?e=>{N(e.id,e.getCanSelect()),v?.(e.original)}:void 0,isRowInteractive:e=>!!(v||a!==`none`&&e.getCanSelect()),getRowClassName:e=>S?.(e.original),getCellClassName:({row:e,cell:t})=>t.column.id===J&&e.getIsSelected()?p.selectedIndicatorCell:void 0,getCellLayout:({cell:e})=>q.get(e.id),renderHeaderContextMenu:C,enableColumnResizing:m,enableColumnReordering:xe,columnResizeMinWidth:_,renderCellContent:e=>{let t=ee({field:E.runtimeByColumnId[e.cell.column.id],rawValue:e.cell.getValue(),rowData:e.row.original,rowKind:`plain`}),n=_e({columnId:e.cell.column.id,runtimeByColumnId:E.runtimeByColumnId,customCellColumnIds:E.customCellColumnIds})?(0,g.jsx)(me,{displayValue:t,align:e.columnMeta?.align}):e.defaultContent;return w?w({...e,defaultContent:n,displayValue:t}):n},afterTableContent:b?(0,g.jsx)(`div`,{ref:j,className:p.sentinel,"aria-hidden":`true`}):null})}var h,g,xe=n((()=>{h=t(r(),1),a(),c(),u(),l(),ye(),g=i(),m.__docgenInfo={description:"Плоская таблица на базе TanStack Table как React-альтернатива `sap.m.Table`.",methods:[],displayName:`Table`,props:{title:{required:!1,tsType:{name:`string`},description:`Необязательный заголовок над таблицей.`},isLoading:{required:!1,tsType:{name:`boolean`},description:`Признак первичной загрузки.`},isFetching:{required:!1,tsType:{name:`boolean`},description:`Признак фоновой догрузки или обновления данных.`},data:{required:!0,tsType:{name:`union`,raw:`readonly TData[] | undefined | null`,elements:[{name:`unknown`},{name:`undefined`},{name:`null`}]},description:`Плоский источник строк.`},columns:{required:!0,tsType:{name:`unknown`},description:`Описание колонок таблицы.`},selectionMode:{required:!1,tsType:{name:`TableSelectionMode`},description:`Режим выбора строк.`,defaultValue:{value:`"none"`,computed:!1}},selectedRowIds:{required:!1,tsType:{name:`unknown`},description:`Внешний список выбранных строк.
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{t as a,w as ee}from"./formatters-C0d3JoZj.js";import{D as te,E as o,T as ne,c as re,l as ie,s as ae,t as s,v as c,w as oe}from"./odata-DQSm2H7O.js";import{C as se,S as ce,d as le,g as ue,i as de,l as fe,m as pe,n as me,p as he,s as ge,t as l,v as _e,x as u,y as ve}from"./base-table-BbenC81q.js";var d,f,p,ye=n((()=>{d=`hKghZt`,f=`QsLRvS`,p={selectedIndicatorCell:d,sentinel:f}}));function be(e,t){return String(t)}function m({title:e,isLoading:t,isFetching:n,data:r,columns:i,selectionMode:a=`none`,selectedRowIds:te,getRowId:o,className:ne,minHeight:ie,tableClassName:ae,columnVisibility:s,defaultColumnVisibility:c,columnOrder:oe,defaultColumnOrder:l,columnSizing:u,defaultColumnSizing:d,columnPinning:f,defaultColumnPinning:ye,enableColumnResizing:m=!1,enableColumnReordering:xe=!1,columnResizeMinWidth:_,onColumnVisibilityChange:Se,onColumnOrderChange:Ce,onColumnSizingChange:we,onColumnPinningChange:Te,onRowClick:v,onRowSelectionChange:y,onReachEnd:b,getRowCanSelect:x,getRowClassName:S,renderHeaderContextMenu:C,renderCellContent:w}){let T=(0,h.useMemo)(()=>r??[],[r]),E=(0,h.useMemo)(()=>ue(i),[i]),D=o??be,O=(0,h.useMemo)(()=>new Map(T.map((e,t)=>[D(e,t),e])),[D,T]),k=(0,h.useMemo)(()=>Array.from(O.keys()),[O]),A=(0,h.useRef)(null),j=(0,h.useRef)(null),{rowSelection:M,activateRowSelection:N}=re({availableRowIds:k,rowById:O,selectionMode:a,selectedRowIds:te,onRowSelectionChange:y}),{columnVisibility:P,onColumnVisibilityChange:F}=ge({columnVisibility:s,defaultColumnVisibility:c,onColumnVisibilityChange:Se}),{columnOrder:I,onColumnOrderChange:L}=he({columnOrder:oe,defaultColumnOrder:l,onColumnOrderChange:Ce}),{columnSizing:R,onColumnSizingChange:z}=fe({columnSizing:u,defaultColumnSizing:d,columnResizeMinWidth:_,onColumnSizingChange:we}),{columnPinning:B,onColumnPinningChange:V}=le({columnPinning:f,defaultColumnPinning:ye,onColumnPinningChange:Te}),H=(0,h.useMemo)(()=>({columnOrder:I,columnPinning:B,columnSizing:R,columnVisibility:P}),[I,B,R,P]),U=(0,h.useEffectEvent)(()=>{b?.()});(0,h.useEffect)(()=>{if(!b||!A.current||!j.current||t)return;let e=new IntersectionObserver(e=>{e[0]?.isIntersecting&&U()},{root:A.current,threshold:.1});return e.observe(j.current),()=>e.disconnect()},[t,b,T.length]);let W=ce({data:T,columns:i,state:{columnOrder:I,columnPinning:B,columnSizing:R,columnVisibility:P,rowSelection:M},onColumnOrderChange:L,onColumnPinningChange:V,onColumnSizingChange:z,onColumnVisibilityChange:F,getRowId:(e,t)=>D(e,t),getCoreRowModel:se(),enableMultiRowSelection:a===`multi`,enableRowSelection:e=>a===`none`?!1:x?x(e.original):!0}),G=ve(W,H),K=W.getRowModel().rows,q=(0,h.useMemo)(()=>pe({rows:K,columns:G}),[K,G]),J=G[0]?.id;return(0,g.jsx)(de,{table:W,columnState:H,title:e,isLoading:t,isFetching:n,className:ne,minHeight:ie,tableClassName:ae,selectionMode:a,scrollableRef:A,onActivateRow:a!==`none`||v?e=>{N(e.id,e.getCanSelect()),v?.(e.original)}:void 0,isRowInteractive:e=>!!(v||a!==`none`&&e.getCanSelect()),getRowClassName:e=>S?.(e.original),getCellClassName:({row:e,cell:t})=>t.column.id===J&&e.getIsSelected()?p.selectedIndicatorCell:void 0,getCellLayout:({cell:e})=>q.get(e.id),renderHeaderContextMenu:C,enableColumnResizing:m,enableColumnReordering:xe,columnResizeMinWidth:_,renderCellContent:e=>{let t=ee({field:E.runtimeByColumnId[e.cell.column.id],rawValue:e.cell.getValue(),rowData:e.row.original,rowKind:`plain`}),n=_e({columnId:e.cell.column.id,runtimeByColumnId:E.runtimeByColumnId,customCellColumnIds:E.customCellColumnIds})?(0,g.jsx)(me,{displayValue:t,align:e.columnMeta?.align}):e.defaultContent;return w?w({...e,defaultContent:n,displayValue:t}):n},afterTableContent:b?(0,g.jsx)(`div`,{ref:j,className:p.sentinel,"aria-hidden":`true`}):null})}var h,g,xe=n((()=>{h=t(r(),1),a(),c(),u(),l(),ye(),g=i(),m.__docgenInfo={description:"Плоская таблица на базе TanStack Table как React-альтернатива `sap.m.Table`.",methods:[],displayName:`Table`,props:{title:{required:!1,tsType:{name:`string`},description:`Необязательный заголовок над таблицей.`},isLoading:{required:!1,tsType:{name:`boolean`},description:`Признак первичной загрузки.`},isFetching:{required:!1,tsType:{name:`boolean`},description:`Признак фоновой догрузки или обновления данных.`},data:{required:!0,tsType:{name:`union`,raw:`readonly TData[] | undefined | null`,elements:[{name:`unknown`},{name:`undefined`},{name:`null`}]},description:`Плоский источник строк.`},columns:{required:!0,tsType:{name:`unknown`},description:`Описание колонок таблицы.`},selectionMode:{required:!1,tsType:{name:`TableSelectionMode`},description:`Режим выбора строк.`,defaultValue:{value:`"none"`,computed:!1}},selectedRowIds:{required:!1,tsType:{name:`unknown`},description:`Внешний список выбранных строк.
2
2
 
3
3
  Если передан, таблица синхронизирует визуальное выделение с этим набором id.`},getRowId:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(row: TData, index: number) => string`,signature:{arguments:[{type:{name:`TData`},name:`row`},{type:{name:`number`},name:`index`}],return:{name:`string`}}},description:`Стабильный идентификатор строки.
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}from"./blocks-nvFBZnmF.js";import{t as u}from"./jsx-runtime-BBQGix-2.js";import{t as d}from"./mdx-react-shim-BUeZ3JmE.js";import{BoxBasic as f,BoxControlled as p,BoxMountStrategies as m,BoxVertical as h,DisabledTabs as g,Empty as _,LayoutPanels as v,LegacyTabs as y,Loading as b,n as x,t as S}from"./Tabs.stories-DSl3G7Ze.js";function C(e){let o={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...t(),...e.components};return(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(a,{of:S,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}from"./blocks-DsN3hykK.js";import{t as u}from"./jsx-runtime-BBQGix-2.js";import{t as d}from"./mdx-react-shim-CdXPOrRW.js";import{BoxBasic as f,BoxControlled as p,BoxMountStrategies as m,BoxVertical as h,DisabledTabs as g,Empty as _,LayoutPanels as v,LegacyTabs as y,Loading as b,n as x,t as S}from"./Tabs.stories-C6-sZs4H.js";function C(e){let o={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...t(),...e.components};return(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(a,{of:S,parameters:{docs:{toc:!0}}}),`
2
2
  `,(0,T.jsx)(c,{children:`Tabs`}),`
3
3
  `,(0,T.jsx)(i,{children:`Набор tabs-компонентов с разделением простого scroll-сценария и составного panel-layout сценария`}),`
4
4
  `,(0,T.jsxs)(o.p,{children:[`После рефакторинга `,(0,T.jsx)(o.code,{children:`tabs`}),` разделены на два независимых сценария:`]}),`
@@ -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-CELq1yHK.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{a,i as o,o as ee}from"./utils-V012ES4W.js";import{c as s,i as c,o as l,t as u,u as d}from"./misc-BsWm_Gl7.js";function f(e){return e.find(e=>!e.disabled)?.id??null}function p(e,t){return t?e.find(e=>e.id===t&&!e.disabled)?.id??f(e):f(e)}function m(e){return e.filter(e=>!e.disabled)}function h({mountStrategy:e,isSelected:t,isVisited:n}){return e===`keep-mounted`||t||e===`lazy`&&n}var g=n((()=>{}));function _({items:e,value:t,defaultValue:n,onValueChange:r,orientation:i=`horizontal`,activationMode:a=`automatic`,loop:o=!0}){let s=t!==void 0,c=(0,v.useMemo)(()=>m(e),[e]),l=c[0]?.id??null,[u,d]=(0,v.useState)(()=>p(e,n)),[f,h]=(0,v.useState)(()=>p(e,t??n)),g=p(e,t??n),[_,y]=(0,v.useState)(()=>g?new Set([g]):new Set),b=(0,v.useId)(),x=(0,v.useRef)({}),S=p(e,s?t:u),C=p(e,f)??S??l,te=(0,v.useMemo)(()=>{if(!S||_.has(S))return _;let e=new Set(_);return e.add(S),e},[S,_]),w=t=>{let n=p(e,t);n&&(y(e=>{if(e.has(n))return e;let t=new Set(e);return t.add(n),t}),s||d(n),r?.(n))},ne=e=>{x.current[e]?.focus()},re=e=>{if(c.length<2)return;let t=ee({currentIndex:Math.max(0,c.findIndex(e=>e.id===(C??S??l))),itemCount:c.length,key:e.key,orientation:i,wrap:o});if(t===null)return;e.preventDefault();let n=c[t]?.id;n&&(h(n),ne(n),a===`automatic`&&w(n))},ie=e=>{let t=e.relatedTarget;t instanceof Node&&e.currentTarget.contains(t)||h(S??l)},T=e=>`${b}-tab-${e}`,E=e=>`${b}-panel-${e}`;return{activationMode:a,orientation:i,selectedTabId:S,tabbableTabId:C,onTabListKeyDown:re,onTabListBlur:ie,getTabElementId:T,getPanelElementId:E,getTabButtonProps:e=>{let t=e.id===S,n=e.id===C;return{ref:t=>{x.current[e.id]=t},type:`button`,role:`tab`,id:T(e.id),disabled:e.disabled,"aria-selected":t,"aria-controls":E(e.id),"aria-disabled":e.disabled||void 0,tabIndex:e.disabled?-1:n?0:-1,onFocus:()=>h(e.id),onClick:()=>w(e.id)}},isVisited:e=>te.has(e)}}var v,y=n((()=>{v=t(r(),1),o(),g()})),b,x,S,C,te,w,ne,re,ie,T,E,ae,oe,se,ce,le,D,O=n((()=>{b=`pcMjuj`,x=`ITP5v-`,S=`kzs94N`,C=`ZSAoAa`,te=`psYhsZ`,w=`mNDq9-`,ne=`g156KO`,re=`C2mO1e`,ie=`_28F3fs`,T=`UKZXTZ`,E=`jiTafe`,ae=`nhD0k7`,oe=`G8FICe`,se=`W50XHh`,ce=`vnjXkU`,le=`Nzvfhw`,D={tabsContainer:b,bordered:x,cleanPanel:S,tabs:C,panels:te,horizontal:w,vertical:ne,panelScrollable:re,tab:ie,selected:T,panel:E,panelBody:ae,layoutPanels:oe,layoutPanel:se,layoutSection:ce,layoutContent:le}}));function ue({containerClassName:e,tabListClassName:t,panelsClassName:n,panelClassName:r,panelBodyClassName:i,loadingText:o}){return(0,k.jsxs)(`div`,{className:e,children:[(0,k.jsx)(`div`,{className:t,"aria-hidden":`true`,children:(0,k.jsx)(`button`,{type:`button`,disabled:!0,"data-disabled":``,className:a(D.tab,`skeletonLine`),children:`Загрузка...`})}),(0,k.jsx)(`div`,{className:n,"aria-busy":`true`,children:(0,k.jsx)(`div`,{className:r,children:(0,k.jsx)(`div`,{className:i,children:(0,k.jsx)(d,{text:o,className:`radiusSm`})})})})]})}var k,de=n((()=>{o(),u(),O(),k=i(),ue.__docgenInfo={description:"Служебное loading-состояние для `TabsBox`.",methods:[],displayName:`TabsLoadingState`,props:{containerClassName:{required:!0,tsType:{name:`string`},description:``},tabListClassName:{required:!0,tsType:{name:`string`},description:``},panelsClassName:{required:!0,tsType:{name:`string`},description:``},panelClassName:{required:!0,tsType:{name:`string`},description:``},panelBodyClassName:{required:!0,tsType:{name:`string`},description:``},loadingText:{required:!1,tsType:{name:`string`},description:``}}}}));function fe({containerClassName:e,panelsClassName:t,panelClassName:n,panelBodyClassName:r}){return(0,A.jsx)(`div`,{className:e,children:(0,A.jsx)(`div`,{className:t,children:(0,A.jsx)(`div`,{className:n,children:(0,A.jsx)(`div`,{className:r,children:(0,A.jsx)(s,{className:`radiusSm`})})})})})}var A,pe=n((()=>{u(),A=i(),fe.__docgenInfo={description:"Служебное empty-состояние для `TabsBox`.",methods:[],displayName:`TabsNoDataState`,props:{containerClassName:{required:!0,tsType:{name:`string`},description:``},panelsClassName:{required:!0,tsType:{name:`string`},description:``},panelClassName:{required:!0,tsType:{name:`string`},description:``},panelBodyClassName:{required:!0,tsType:{name:`string`},description:``}}}}));function me({tabId:e,isSelected:t,className:n,getTabElementId:r,getPanelElementId:i,children:a}){return(0,he.jsx)(`div`,{role:`tabpanel`,id:i(e),"aria-labelledby":r(e),hidden:!t,className:n,children:a})}var he,ge=n((()=>{r(),he=i(),me.__docgenInfo={description:``,methods:[],displayName:`TabsPanel`,props:{tabId:{required:!0,tsType:{name:`string`},description:``},isSelected:{required:!0,tsType:{name:`boolean`},description:``},className:{required:!1,tsType:{name:`string`},description:``},getTabElementId:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(tabId: string) => string`,signature:{arguments:[{type:{name:`string`},name:`tabId`}],return:{name:`string`}}},description:``},getPanelElementId:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(tabId: string) => string`,signature:{arguments:[{type:{name:`string`},name:`tabId`}],return:{name:`string`}}},description:``},children:{required:!0,tsType:{name:`ReactReactNode`,raw:`React.ReactNode`},description:``}}}}));function _e({items:e,state:t,className:n,ariaLabel:r,ariaLabelledBy:i}){return(0,j.jsx)(`div`,{className:n,role:`tablist`,"aria-orientation":t.orientation,"aria-label":r,"aria-labelledby":i,onKeyDown:t.onTabListKeyDown,onBlur:t.onTabListBlur,children:(e=>t.orientation===`horizontal`?(0,j.jsx)(l,{children:e}):(0,j.jsx)(j.Fragment,{children:e}))(e.map(e=>(0,j.jsx)(`button`,{...t.getTabButtonProps(e),"data-ui":`tabs-tab`,"data-action":`select-tab`,className:a(D.tab,`textWrap`,e.id===t.selectedTabId&&D.selected),children:e.title},e.id)))})}var j,ve=n((()=>{o(),u(),O(),j=i(),_e.__docgenInfo={description:``,methods:[],displayName:`TabsTabList`,props:{items:{required:!0,tsType:{name:`Array`,elements:[{name:`TabsDescriptor`}],raw:`TabsDescriptor[]`},description:``},state:{required:!0,tsType:{name:`TabsStateModel`},description:``},className:{required:!1,tsType:{name:`string`},description:``},ariaLabel:{required:!1,tsType:{name:`string`},description:``},ariaLabelledBy:{required:!1,tsType:{name:`string`},description:``}}}}));function M({items:e,value:t,defaultValue:n,onValueChange:r,className:i,isLoading:o,loadingText:ee,cleanPanel:s,bordered:c=!1,orientation:l=`horizontal`,activationMode:u=`automatic`,mountStrategy:d=`unmount`,loop:f=!0,"aria-label":p,"aria-labelledby":m}){let g=_({items:e,value:t,defaultValue:n,onValueChange:r,orientation:l,activationMode:u,loop:f}),v=a(D.tabsContainer,D[l],c&&D.bordered,s&&D.cleanPanel,i),y=D.tabs,b=a(D.panels,D.panelScrollable,`scrollable overscroll`),x=D.panel,S=D.panelBody;return o?(0,N.jsx)(ue,{containerClassName:v,tabListClassName:y,panelsClassName:b,panelClassName:x,panelBodyClassName:S,loadingText:ee}):e.length?(0,N.jsxs)(`div`,{className:v,children:[(0,N.jsx)(_e,{items:e,state:g,className:y,ariaLabel:p,ariaLabelledBy:m}),(0,N.jsx)(`div`,{className:b,children:e.map(e=>{let t=e.id===g.selectedTabId;return h({mountStrategy:d,isSelected:t,isVisited:g.isVisited(e.id)})?(0,N.jsx)(me,{tabId:e.id,isSelected:t,className:x,getTabElementId:g.getTabElementId,getPanelElementId:g.getPanelElementId,children:(0,N.jsx)(`div`,{className:S,children:e.content})},e.id):null})})]}):(0,N.jsx)(fe,{containerClassName:v,panelsClassName:b,panelClassName:x,panelBodyClassName:S})}var N,ye=n((()=>{o(),g(),y(),O(),de(),pe(),ge(),ve(),N=i(),M.__docgenInfo={description:`Простой items-based tabs-компонент.
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,o as ee}from"./utils-Bg8QclQy.js";import{c as s,i as c,o as l,t as u,u as d}from"./misc-yRJvnOkX.js";function f(e){return e.find(e=>!e.disabled)?.id??null}function p(e,t){return t?e.find(e=>e.id===t&&!e.disabled)?.id??f(e):f(e)}function m(e){return e.filter(e=>!e.disabled)}function h({mountStrategy:e,isSelected:t,isVisited:n}){return e===`keep-mounted`||t||e===`lazy`&&n}var g=n((()=>{}));function _({items:e,value:t,defaultValue:n,onValueChange:r,orientation:i=`horizontal`,activationMode:a=`automatic`,loop:o=!0}){let s=t!==void 0,c=(0,v.useMemo)(()=>m(e),[e]),l=c[0]?.id??null,[u,d]=(0,v.useState)(()=>p(e,n)),[f,h]=(0,v.useState)(()=>p(e,t??n)),g=p(e,t??n),[_,y]=(0,v.useState)(()=>g?new Set([g]):new Set),b=(0,v.useId)(),x=(0,v.useRef)({}),S=p(e,s?t:u),C=p(e,f)??S??l,te=(0,v.useMemo)(()=>{if(!S||_.has(S))return _;let e=new Set(_);return e.add(S),e},[S,_]),w=t=>{let n=p(e,t);n&&(y(e=>{if(e.has(n))return e;let t=new Set(e);return t.add(n),t}),s||d(n),r?.(n))},ne=e=>{x.current[e]?.focus()},re=e=>{if(c.length<2)return;let t=ee({currentIndex:Math.max(0,c.findIndex(e=>e.id===(C??S??l))),itemCount:c.length,key:e.key,orientation:i,wrap:o});if(t===null)return;e.preventDefault();let n=c[t]?.id;n&&(h(n),ne(n),a===`automatic`&&w(n))},ie=e=>{let t=e.relatedTarget;t instanceof Node&&e.currentTarget.contains(t)||h(S??l)},T=e=>`${b}-tab-${e}`,E=e=>`${b}-panel-${e}`;return{activationMode:a,orientation:i,selectedTabId:S,tabbableTabId:C,onTabListKeyDown:re,onTabListBlur:ie,getTabElementId:T,getPanelElementId:E,getTabButtonProps:e=>{let t=e.id===S,n=e.id===C;return{ref:t=>{x.current[e.id]=t},type:`button`,role:`tab`,id:T(e.id),disabled:e.disabled,"aria-selected":t,"aria-controls":E(e.id),"aria-disabled":e.disabled||void 0,tabIndex:e.disabled?-1:n?0:-1,onFocus:()=>h(e.id),onClick:()=>w(e.id)}},isVisited:e=>te.has(e)}}var v,y=n((()=>{v=t(r(),1),o(),g()})),b,x,S,C,te,w,ne,re,ie,T,E,ae,oe,se,ce,le,D,O=n((()=>{b=`pcMjuj`,x=`ITP5v-`,S=`kzs94N`,C=`ZSAoAa`,te=`psYhsZ`,w=`mNDq9-`,ne=`g156KO`,re=`C2mO1e`,ie=`_28F3fs`,T=`UKZXTZ`,E=`jiTafe`,ae=`nhD0k7`,oe=`G8FICe`,se=`W50XHh`,ce=`vnjXkU`,le=`Nzvfhw`,D={tabsContainer:b,bordered:x,cleanPanel:S,tabs:C,panels:te,horizontal:w,vertical:ne,panelScrollable:re,tab:ie,selected:T,panel:E,panelBody:ae,layoutPanels:oe,layoutPanel:se,layoutSection:ce,layoutContent:le}}));function ue({containerClassName:e,tabListClassName:t,panelsClassName:n,panelClassName:r,panelBodyClassName:i,loadingText:o}){return(0,k.jsxs)(`div`,{className:e,children:[(0,k.jsx)(`div`,{className:t,"aria-hidden":`true`,children:(0,k.jsx)(`button`,{type:`button`,disabled:!0,"data-disabled":``,className:a(D.tab,`skeletonLine`),children:`Загрузка...`})}),(0,k.jsx)(`div`,{className:n,"aria-busy":`true`,children:(0,k.jsx)(`div`,{className:r,children:(0,k.jsx)(`div`,{className:i,children:(0,k.jsx)(d,{text:o,className:`radiusSm`})})})})]})}var k,de=n((()=>{o(),u(),O(),k=i(),ue.__docgenInfo={description:"Служебное loading-состояние для `TabsBox`.",methods:[],displayName:`TabsLoadingState`,props:{containerClassName:{required:!0,tsType:{name:`string`},description:``},tabListClassName:{required:!0,tsType:{name:`string`},description:``},panelsClassName:{required:!0,tsType:{name:`string`},description:``},panelClassName:{required:!0,tsType:{name:`string`},description:``},panelBodyClassName:{required:!0,tsType:{name:`string`},description:``},loadingText:{required:!1,tsType:{name:`string`},description:``}}}}));function fe({containerClassName:e,panelsClassName:t,panelClassName:n,panelBodyClassName:r}){return(0,A.jsx)(`div`,{className:e,children:(0,A.jsx)(`div`,{className:t,children:(0,A.jsx)(`div`,{className:n,children:(0,A.jsx)(`div`,{className:r,children:(0,A.jsx)(s,{className:`radiusSm`})})})})})}var A,pe=n((()=>{u(),A=i(),fe.__docgenInfo={description:"Служебное empty-состояние для `TabsBox`.",methods:[],displayName:`TabsNoDataState`,props:{containerClassName:{required:!0,tsType:{name:`string`},description:``},panelsClassName:{required:!0,tsType:{name:`string`},description:``},panelClassName:{required:!0,tsType:{name:`string`},description:``},panelBodyClassName:{required:!0,tsType:{name:`string`},description:``}}}}));function me({tabId:e,isSelected:t,className:n,getTabElementId:r,getPanelElementId:i,children:a}){return(0,he.jsx)(`div`,{role:`tabpanel`,id:i(e),"aria-labelledby":r(e),hidden:!t,className:n,children:a})}var he,ge=n((()=>{r(),he=i(),me.__docgenInfo={description:``,methods:[],displayName:`TabsPanel`,props:{tabId:{required:!0,tsType:{name:`string`},description:``},isSelected:{required:!0,tsType:{name:`boolean`},description:``},className:{required:!1,tsType:{name:`string`},description:``},getTabElementId:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(tabId: string) => string`,signature:{arguments:[{type:{name:`string`},name:`tabId`}],return:{name:`string`}}},description:``},getPanelElementId:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(tabId: string) => string`,signature:{arguments:[{type:{name:`string`},name:`tabId`}],return:{name:`string`}}},description:``},children:{required:!0,tsType:{name:`ReactReactNode`,raw:`React.ReactNode`},description:``}}}}));function _e({items:e,state:t,className:n,ariaLabel:r,ariaLabelledBy:i}){return(0,j.jsx)(`div`,{className:n,role:`tablist`,"aria-orientation":t.orientation,"aria-label":r,"aria-labelledby":i,onKeyDown:t.onTabListKeyDown,onBlur:t.onTabListBlur,children:(e=>t.orientation===`horizontal`?(0,j.jsx)(l,{children:e}):(0,j.jsx)(j.Fragment,{children:e}))(e.map(e=>(0,j.jsx)(`button`,{...t.getTabButtonProps(e),"data-ui":`tabs-tab`,"data-action":`select-tab`,className:a(D.tab,`textWrap`,e.id===t.selectedTabId&&D.selected),children:e.title},e.id)))})}var j,ve=n((()=>{o(),u(),O(),j=i(),_e.__docgenInfo={description:``,methods:[],displayName:`TabsTabList`,props:{items:{required:!0,tsType:{name:`Array`,elements:[{name:`TabsDescriptor`}],raw:`TabsDescriptor[]`},description:``},state:{required:!0,tsType:{name:`TabsStateModel`},description:``},className:{required:!1,tsType:{name:`string`},description:``},ariaLabel:{required:!1,tsType:{name:`string`},description:``},ariaLabelledBy:{required:!1,tsType:{name:`string`},description:``}}}}));function M({items:e,value:t,defaultValue:n,onValueChange:r,className:i,isLoading:o,loadingText:ee,cleanPanel:s,bordered:c=!1,orientation:l=`horizontal`,activationMode:u=`automatic`,mountStrategy:d=`unmount`,loop:f=!0,"aria-label":p,"aria-labelledby":m}){let g=_({items:e,value:t,defaultValue:n,onValueChange:r,orientation:l,activationMode:u,loop:f}),v=a(D.tabsContainer,D[l],c&&D.bordered,s&&D.cleanPanel,i),y=D.tabs,b=a(D.panels,D.panelScrollable,`scrollable overscroll`),x=D.panel,S=D.panelBody;return o?(0,N.jsx)(ue,{containerClassName:v,tabListClassName:y,panelsClassName:b,panelClassName:x,panelBodyClassName:S,loadingText:ee}):e.length?(0,N.jsxs)(`div`,{className:v,children:[(0,N.jsx)(_e,{items:e,state:g,className:y,ariaLabel:p,ariaLabelledBy:m}),(0,N.jsx)(`div`,{className:b,children:e.map(e=>{let t=e.id===g.selectedTabId;return h({mountStrategy:d,isSelected:t,isVisited:g.isVisited(e.id)})?(0,N.jsx)(me,{tabId:e.id,isSelected:t,className:x,getTabElementId:g.getTabElementId,getPanelElementId:g.getPanelElementId,children:(0,N.jsx)(`div`,{className:S,children:e.content})},e.id):null})})]}):(0,N.jsx)(fe,{containerClassName:v,panelsClassName:b,panelClassName:x,panelBodyClassName:S})}var N,ye=n((()=>{o(),g(),y(),O(),de(),pe(),ge(),ve(),N=i(),M.__docgenInfo={description:`Простой items-based tabs-компонент.
2
2
  Сам управляет областью панели и её прокруткой.`,methods:[],displayName:`TabsBox`,props:{value:{required:!1,tsType:{name:`string`},description:``},defaultValue:{required:!1,tsType:{name:`string`},description:``},onValueChange:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(value: string) => void`,signature:{arguments:[{type:{name:`string`},name:`value`}],return:{name:`void`}}},description:``},orientation:{required:!1,tsType:{name:`union`,raw:`"horizontal" | "vertical"`,elements:[{name:`literal`,value:`"horizontal"`},{name:`literal`,value:`"vertical"`}]},description:``,defaultValue:{value:`"horizontal"`,computed:!1}},activationMode:{required:!1,tsType:{name:`union`,raw:`"automatic" | "manual"`,elements:[{name:`literal`,value:`"automatic"`},{name:`literal`,value:`"manual"`}]},description:``,defaultValue:{value:`"automatic"`,computed:!1}},mountStrategy:{required:!1,tsType:{name:`union`,raw:`"unmount" | "lazy" | "keep-mounted"`,elements:[{name:`literal`,value:`"unmount"`},{name:`literal`,value:`"lazy"`},{name:`literal`,value:`"keep-mounted"`}]},description:``,defaultValue:{value:`"unmount"`,computed:!1}},loop:{required:!1,tsType:{name:`boolean`},description:``,defaultValue:{value:`true`,computed:!1}},cleanPanel:{required:!1,tsType:{name:`boolean`},description:``},bordered:{required:!1,tsType:{name:`boolean`},description:``,defaultValue:{value:`false`,computed:!1}},className:{required:!1,tsType:{name:`string`},description:``},"aria-label":{required:!1,tsType:{name:`string`},description:``},"aria-labelledby":{required:!1,tsType:{name:`string`},description:``},items:{required:!0,tsType:{name:`Array`,elements:[{name:`TabsBoxItem`}],raw:`TabsBoxItem[]`},description:``},isLoading:{required:!1,tsType:{name:`boolean`},description:``},loadingText:{required:!1,tsType:{name:`string`},description:``}}}}));function be({onChange:e,onValueChange:t,...n}){return(0,xe.jsx)(M,{...n,onValueChange:n=>{t?.(n),e?.(n)}})}var xe,Se=n((()=>{ye(),xe=i(),be.__docgenInfo={description:"@deprecated Используйте `TabsBox` для простого сценария и `TabsLayout` для составных layout-сценариев.",methods:[],displayName:`Tabs`,props:{value:{required:!1,tsType:{name:`string`},description:``},defaultValue:{required:!1,tsType:{name:`string`},description:``},onValueChange:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(value: string) => void`,signature:{arguments:[{type:{name:`string`},name:`value`}],return:{name:`void`}}},description:``},orientation:{required:!1,tsType:{name:`union`,raw:`"horizontal" | "vertical"`,elements:[{name:`literal`,value:`"horizontal"`},{name:`literal`,value:`"vertical"`}]},description:``},activationMode:{required:!1,tsType:{name:`union`,raw:`"automatic" | "manual"`,elements:[{name:`literal`,value:`"automatic"`},{name:`literal`,value:`"manual"`}]},description:``},mountStrategy:{required:!1,tsType:{name:`union`,raw:`"unmount" | "lazy" | "keep-mounted"`,elements:[{name:`literal`,value:`"unmount"`},{name:`literal`,value:`"lazy"`},{name:`literal`,value:`"keep-mounted"`}]},description:``},loop:{required:!1,tsType:{name:`boolean`},description:``},cleanPanel:{required:!1,tsType:{name:`boolean`},description:``},bordered:{required:!1,tsType:{name:`boolean`},description:``},className:{required:!1,tsType:{name:`string`},description:``},"aria-label":{required:!1,tsType:{name:`string`},description:``},"aria-labelledby":{required:!1,tsType:{name:`string`},description:``},items:{required:!0,tsType:{name:`Array`,elements:[{name:`TabsBoxItem`}],raw:`TabsBoxItem[]`},description:``},isLoading:{required:!1,tsType:{name:`boolean`},description:``},loadingText:{required:!1,tsType:{name:`string`},description:``},onChange:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(value: string) => void`,signature:{arguments:[{type:{name:`string`},name:`value`}],return:{name:`void`}}},description:``}}}}));function Ce(e){let{type:t}=e;if(typeof t==`function`){let e=t;return e.displayName??e.name??null}if(typeof t==`object`&&t&&`displayName`in t){let e=t;return typeof e.displayName==`string`?e.displayName:null}return null}function P(e,t){return(0,F.isValidElement)(e)&&Ce(e)===t}function we({children:e}){return(0,I.jsx)(I.Fragment,{children:e})}function Te({children:e}){return(0,I.jsx)(I.Fragment,{children:e})}function Ee({children:e}){return(0,I.jsx)(I.Fragment,{children:e})}function De({children:e}){return(0,I.jsx)(I.Fragment,{children:e})}function Oe(e,t){let n=null,r=null,i=null;for(let a of F.Children.toArray(e)){if(!(0,F.isValidElement)(a))throw Error(`TabsLayout.Tab "${t}" поддерживает только дочерние элементы TabsLayout.Toolbar, TabsLayout.Content и TabsLayout.Footer.`);if(P(a,L)){if(n)throw Error(`TabsLayout.Tab "${t}" содержит более одного блока TabsLayout.Toolbar.`);n=a.props;continue}if(P(a,je)){if(r)throw Error(`TabsLayout.Tab "${t}" содержит более одного блока TabsLayout.Content.`);r=a.props;continue}if(P(a,Me)){if(i)throw Error(`TabsLayout.Tab "${t}" содержит более одного блока TabsLayout.Footer.`);i=a.props;continue}throw Error(`TabsLayout.Tab "${t}" поддерживает только дочерние элементы TabsLayout.Toolbar, TabsLayout.Content и TabsLayout.Footer.`)}if(!r)throw Error(`TabsLayout.Tab "${t}" должен содержать блок TabsLayout.Content.`);return{toolbar:n,content:r,footer:i}}function ke(e){return F.Children.toArray(e).map(e=>{if(!P(e,Ae))throw Error(`TabsLayout принимает только дочерние элементы TabsLayout.Tab.`);return{id:e.props.id,title:e.props.title,disabled:e.props.disabled,...Oe(e.props.children,e.props.id)}})}var F,I,Ae,L,je,Me,R,z,Ne=n((()=>{F=t(r(),1),o(),g(),y(),O(),ge(),ve(),I=i(),Ae=`TabsLayout.Tab`,L=`TabsLayout.Toolbar`,je=`TabsLayout.Content`,Me=`TabsLayout.Footer`,we.displayName=Ae,Te.displayName=L,Ee.displayName=je,De.displayName=Me,R=({children:e,value:t,defaultValue:n,onValueChange:r,className:i,bordered:o,cleanPanel:ee,orientation:s=`horizontal`,activationMode:c=`manual`,mountStrategy:l=`lazy`,loop:u=!0,"aria-label":d,"aria-labelledby":f})=>{let p=(0,F.useMemo)(()=>ke(e),[e]),m=_({items:p,value:t,defaultValue:n,onValueChange:r,orientation:s,activationMode:c,loop:u}),g=a(D.tabsContainer,D[s],o&&D.bordered,ee&&D.cleanPanel,i),v=a(D.panels,D.layoutPanels);return(0,I.jsxs)(`div`,{className:g,children:[(0,I.jsx)(_e,{items:p,state:m,className:D.tabs,ariaLabel:d,ariaLabelledBy:f}),(0,I.jsx)(`div`,{className:v,children:p.map(e=>{let t=e.id===m.selectedTabId;if(!h({mountStrategy:l,isSelected:t,isVisited:m.isVisited(e.id)}))return null;let n=`${e.toolbar?`auto `:``}minmax(0, 1fr)${e.footer?` auto`:``}`;return(0,I.jsx)(me,{tabId:e.id,isSelected:t,className:D.panel,getTabElementId:m.getTabElementId,getPanelElementId:m.getPanelElementId,children:(0,I.jsxs)(`div`,{className:D.layoutPanel,style:{gridTemplateRows:n},children:[e.toolbar?(0,I.jsx)(`div`,{className:a(D.layoutSection,e.toolbar.className),children:e.toolbar.children}):null,(0,I.jsx)(`div`,{className:a(D.layoutSection,D.layoutContent,e.content.className),children:e.content.children}),e.footer?(0,I.jsx)(`div`,{className:a(D.layoutSection,e.footer.className),children:e.footer.children}):null]})},e.id)})})]})},R.displayName=`TabsLayout`,z=Object.assign(R,{Tab:we,Toolbar:Te,Content:Ee,Footer:De}),R.__docgenInfo={description:`Compound-оболочка tabs для составных panel-layout сценариев.
3
3
  Сам компонент управляет только переключением и каркасом панели.`,methods:[],displayName:`TabsLayout`,props:{value:{required:!1,tsType:{name:`string`},description:``},defaultValue:{required:!1,tsType:{name:`string`},description:``},onValueChange:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(value: string) => void`,signature:{arguments:[{type:{name:`string`},name:`value`}],return:{name:`void`}}},description:``},orientation:{required:!1,tsType:{name:`union`,raw:`"horizontal" | "vertical"`,elements:[{name:`literal`,value:`"horizontal"`},{name:`literal`,value:`"vertical"`}]},description:``,defaultValue:{value:`"horizontal"`,computed:!1}},activationMode:{required:!1,tsType:{name:`union`,raw:`"automatic" | "manual"`,elements:[{name:`literal`,value:`"automatic"`},{name:`literal`,value:`"manual"`}]},description:``,defaultValue:{value:`"manual"`,computed:!1}},mountStrategy:{required:!1,tsType:{name:`union`,raw:`"unmount" | "lazy" | "keep-mounted"`,elements:[{name:`literal`,value:`"unmount"`},{name:`literal`,value:`"lazy"`},{name:`literal`,value:`"keep-mounted"`}]},description:``,defaultValue:{value:`"lazy"`,computed:!1}},loop:{required:!1,tsType:{name:`boolean`},description:``,defaultValue:{value:`true`,computed:!1}},cleanPanel:{required:!1,tsType:{name:`boolean`},description:``},bordered:{required:!1,tsType:{name:`boolean`},description:``},className:{required:!1,tsType:{name:`string`},description:``},"aria-label":{required:!1,tsType:{name:`string`},description:``},"aria-labelledby":{required:!1,tsType:{name:`string`},description:``},children:{required:!0,tsType:{name:`ReactReactNode`,raw:`React.ReactNode`},description:``}}}})),Pe=n((()=>{Se(),ye(),Ne()})),Fe=e({BoxBasic:()=>G,BoxControlled:()=>K,BoxMountStrategies:()=>J,BoxVertical:()=>q,DisabledTabs:()=>Y,Empty:()=>$,LayoutPanels:()=>X,LegacyTabs:()=>Z,Loading:()=>Q,__namedExportsOrder:()=>Ve,default:()=>Be});function Ie({label:e}){let[t,n]=(0,B.useState)(0);return(0,V.jsxs)(`div`,{style:H,children:[(0,V.jsxs)(`div`,{children:[`Панель: `,e]}),(0,V.jsxs)(`div`,{children:[`Локальный счётчик: `,t]}),(0,V.jsx)(`button`,{type:`button`,onClick:()=>n(e=>e+1),children:`Увеличить`})]})}function Le(){let[e,t]=(0,B.useState)(`details`);return(0,V.jsx)(`div`,{style:{height:360},children:(0,V.jsxs)(z,{value:e,onValueChange:t,bordered:!0,"aria-label":`Составные панели документа`,children:[(0,V.jsxs)(z.Tab,{id:`details`,title:`Детали`,children:[(0,V.jsx)(z.Toolbar,{children:(0,V.jsx)(`div`,{className:`surface0 border radiusSm paddingSm`,children:`Панель инструментов вне scroll-области.`})}),(0,V.jsx)(z.Content,{children:(0,V.jsxs)(`div`,{style:{display:`grid`,gridTemplateColumns:`1fr 1fr`,gap:12,height:`100%`},children:[(0,V.jsx)(c,{className:`surface0 border radiusSm paddingSm h100`,children:W.map(e=>(0,V.jsxs)(`div`,{className:`paddingBlockXs`,children:[`Левая колонка: `,e]},`left-${e}`))}),(0,V.jsx)(c,{className:`surface0 border radiusSm paddingSm h100`,children:W.map(e=>(0,V.jsxs)(`div`,{className:`paddingBlockXs`,children:[`Правая колонка: `,e]},`right-${e}`))})]})}),(0,V.jsx)(z.Footer,{children:(0,V.jsx)(`div`,{className:`surface0 border radiusSm paddingSm`,children:`Футер тоже исключён из scroll-контента.`})})]}),(0,V.jsx)(z.Tab,{id:`history`,title:`История`,children:(0,V.jsx)(z.Content,{children:(0,V.jsx)(c,{className:`surface0 border radiusSm paddingSm h100`,children:W.map(e=>(0,V.jsxs)(`div`,{className:`paddingBlockXs`,children:[`История изменения: `,e]},`history-${e}`))})})})]})})}var B,V,H,U,Re,ze,W,Be,G,K,q,J,Y,X,Z,Q,$,Ve,He=n((()=>{B=t(r(),1),Pe(),u(),V=i(),H={padding:16,display:`grid`,gap:12},U=[{id:`profile`,title:`Профиль`,content:(0,V.jsx)(`div`,{style:H,children:`Карточка пользователя и основные поля профиля.`})},{id:`settings`,title:`Настройки`,content:(0,V.jsx)(`div`,{style:H,children:`Параметры интерфейса, уведомлений и доступа.`})},{id:`history`,title:`История`,content:(0,V.jsx)(`div`,{style:H,children:`Последние действия, комментарии и изменения.`})}],Re=[{id:`first`,title:`Первая`,content:(0,V.jsx)(Ie,{label:`Первая`})},{id:`second`,title:`Вторая`,content:(0,V.jsx)(Ie,{label:`Вторая`})},{id:`third`,title:`Третья`,content:(0,V.jsx)(Ie,{label:`Третья`})}],ze=[{id:`overview`,title:`Обзор`,content:(0,V.jsx)(`div`,{style:H,children:`Раздел доступен сразу.`})},{id:`analytics`,title:`Аналитика`,disabled:!0,content:(0,V.jsx)(`div`,{style:H,children:`Пока недоступно.`})},{id:`history`,title:`История`,content:(0,V.jsx)(`div`,{style:H,children:`История изменений и действий.`})}],W=Array.from({length:12},(e,t)=>`Элемент ${t+1}`),Be={title:`Shared/UI/Tabs`,component:M,args:{items:U,orientation:`horizontal`,activationMode:`automatic`,mountStrategy:`unmount`,isLoading:!1,loadingText:`Загрузка вкладок...`,bordered:!1,loop:!0},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{items:{description:"Набор вкладок для `TabsBox`. Каждая вкладка задаётся через `id`, `title`, `content` и опциональный `disabled`.",control:!1},value:{description:`Активная вкладка в controlled-режиме.`,control:`text`},defaultValue:{description:`Начальная вкладка в uncontrolled-режиме.`,control:`text`},onValueChange:{description:`Вызывается при смене активной вкладки.`,control:!1},orientation:{description:`Направление списка вкладок.`,control:`inline-radio`,options:[`horizontal`,`vertical`]},activationMode:{description:"Режим клавиатурной активации: `automatic` меняет вкладку стрелками, `manual` только переводит фокус.",control:`inline-radio`,options:[`automatic`,`manual`]},mountStrategy:{description:"Политика монтирования панелей: `unmount`, `lazy` или `keep-mounted`.",control:`inline-radio`,options:[`unmount`,`lazy`,`keep-mounted`]},bordered:{description:`Добавляет рамку вокруг области панелей.`,control:`boolean`},loop:{description:`Разрешает циклическую навигацию стрелками и Home/End.`,control:`boolean`},className:{description:`Дополнительный CSS-класс корневого контейнера.`,control:`text`},isLoading:{description:"Показывает loading-состояние `TabsBox`.",control:`boolean`},loadingText:{description:`Текст внутри loading-состояния.`,control:`text`},"aria-label":{description:"Текстовая подпись для `tablist`, если рядом нет видимого заголовка.",control:`text`},"aria-labelledby":{description:"Ссылка на внешний заголовок `tablist`.",control:`text`}}},G={args:{"aria-label":`Основные разделы профиля`}},K={render:e=>{let[t,n]=(0,B.useState)(`settings`);return(0,V.jsx)(M,{...e,value:t,onValueChange:n})},args:{value:`settings`,"aria-label":`Управляемые вкладки`}},q={render:e=>(0,V.jsx)(`div`,{style:{height:320},children:(0,V.jsx)(M,{...e})}),args:{orientation:`vertical`,bordered:!0,"aria-label":`Вертикальные вкладки`}},J={render:e=>(0,V.jsx)(M,{...e,items:Re}),args:{mountStrategy:`lazy`,"aria-label":`Демонстрация стратегий монтирования`}},Y={args:{items:ze,"aria-label":`Вкладки с недоступным разделом`}},X={render:()=>(0,V.jsx)(Le,{})},Z={render:e=>(0,V.jsx)(be,{...e,items:U,"aria-label":`Устаревший совместимый API`}),parameters:{docs:{description:{story:"Совместимый фасад поверх `TabsBox`. Новый функционал добавляется только в `TabsBox` и `TabsLayout`."}}}},Q={args:{isLoading:!0,items:U}},$={args:{items:[]}},G.parameters={...G.parameters,docs:{...G.parameters?.docs,source:{originalSource:`{
4
4
  args: {
@@ -0,0 +1 @@
1
+ .AoFB3K{min-height:var(--control-height);align-items:center;gap:var(--space-xs);padding:calc(var(--space-xs) / 2) var(--space-sm);cursor:text;--ui-color:var(--content-0);--ui-color-hover:var(--content-0);--ui-color-active:var(--content-0);flex-wrap:wrap;display:flex}.AoFB3K[data-readonly]{cursor:default;background-color:var(--surface-1)}.PvaUEA{align-items:center;gap:var(--space-xs);flex-wrap:wrap;flex:0 auto;min-width:0;max-width:100%;margin:0;padding:0;list-style:none;display:flex}.FZ-xEM{color:var(--ui-color,var(--content-0));background-color:var(--ui-background,transparent);border:var(--border-width) solid var(--ui-border-color,transparent);border-radius:var(--ui-radius,var(--radius-sm));transition-property:border-color,color,background-color,opacity;transition-duration:var(--transition-fast);--ui-color:var(--content-0);--ui-background:var(--surface-2);--ui-border-color:var(--border-0);align-items:center;gap:var(--space-xs);min-width:0;max-width:100%;padding:calc(var(--space-xs) / 2) var(--space-xs);font-size:var(--font-size-sm);transition-timing-function:ease;display:inline-flex}.-RCqfG{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.ggY643{border-radius:var(--radius-xs);width:1.25em;height:1.25em;color:inherit;transition:color var(--transition-fast) ease, background-color var(--transition-fast) ease;background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.ggY643:hover{background-color:var(--status-error-soft);color:var(--status-error-text)}.ggY643:focus-visible{outline:var(--focus-width) solid var(--focus-ring);outline-offset:var(--focus-offset)}.ggY643 svg{display:block}.hiZq-y{min-width:8ch;min-height:calc(var(--control-height) - var(--space-xs) - var(--border-width) * 2);color:inherit;font:inherit;background:0 0;border:none;outline:none;flex:8rem;padding:0}.hiZq-y::placeholder{color:var(--content-2)}.hiZq-y:read-only{cursor:default}
@@ -0,0 +1,18 @@
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{n as c,t as l}from"./ui.module-wFHXkJzp.js";import{o as ee,u}from"./Input-B6UklXwb.js";import{t as d}from"./input-D77vjPVL.js";function f(...e){return e.filter(Boolean).join(` `)||void 0}var p=t((()=>{}));function te(e){return e.trim()}function ne(e){return e}function re(e){return`Удалить тег «${e}»`}var m=t((()=>{})),h,g,_,v,y,b,x,S=t((()=>{h=`AoFB3K`,g=`PvaUEA`,_=`FZ-xEM`,v=`-RCqfG`,y=`ggY643`,b=`hiZq-y`,x={control:h,tagList:g,tag:_,tagText:v,removeButton:y,input:b}}));function C({ref:e,value:t,onChange:n,label:r,description:a,placeholder:s,size:l,disabled:d,readOnly:p=!1,error:m,onClearError:h,maxTags:g,normalizeTag:_=te,getTagKey:v=ne,addOnBlur:y=!0,getRemoveButtonAriaLabel:b=re,tokensAriaLabel:S=`Добавленные теги`,inputClassName:C,className:O,id:k,name:A,form:j,required:M,maxLength:N,onKeyDown:P,onPaste:F,onBlur:I,onCompositionStart:L,onCompositionEnd:R,"aria-describedby":z,"aria-labelledby":B,...ie}){let V=(0,w.useRef)(null),H=(0,w.useRef)(null),U=(0,w.useRef)(!1),[W,G]=(0,w.useState)(``),[ae,K]=(0,w.useState)(``),{controlId:q,labelId:J,descriptionId:oe,errorId:se,describedBy:ce}=u({id:k,hasLabel:r!=null,hasDescription:!!a,hasError:!!m}),Y=g===void 0?1/0:Math.max(0,Math.floor(g)),X=d||p,le=f(ce,z),ue=f(J,B);(0,w.useImperativeHandle)(e,()=>{let e=V.current;if(!e)throw Error(`TagInput: внутренний input недоступен при создании imperative handle.`);return e},[]);let Z=e=>{if(X)return;h?.();let r=[...t],i=new Set(r.map(e=>v(e))),a=[],o=0,s=!1;for(let t of e){let e=_(t);if(!e)continue;if(N!==void 0&&e.length>N){K(`Тег «${e}» длиннее допустимого значения.`);continue}let n=v(e);if(i.has(n)){o+=1;continue}if(r.length>=Y){s=!0;break}i.add(n),r.push(e),a.push(e)}a.length>0?(n(r),K(a.length===1?`Добавлен тег «${a[0]}».`:`Добавлено тегов: ${a.length}.`)):s?K(`Достигнуто максимальное количество тегов: ${Y}.`):o>0&&K(`Такой тег уже добавлен.`)},Q=()=>W?(Z(W.split(D)),G(``),!0):!1,$=e=>{if(X)return;let r=t[e];r!==void 0&&(n(t.filter((t,n)=>n!==e)),h?.(),K(`Удалён тег «${r}».`),V.current?.focus())},de=e=>{if(P?.(e),!(e.defaultPrevented||e.nativeEvent.isComposing||U.current||X)){if(e.key===`Enter`||e.key===`,`){(Q()||e.key===`,`)&&e.preventDefault();return}e.key===`Backspace`&&W.length===0&&t.length>0&&(e.preventDefault(),$(t.length-1))}},fe=e=>{if(F?.(e),e.defaultPrevented||X)return;let t=e.clipboardData.getData(`text`);if(!E.test(t))return;e.preventDefault();let n=e.currentTarget.selectionStart??W.length,r=e.currentTarget.selectionEnd??n,i=`${W.slice(0,n)}${t}${W.slice(r)}`;Z(i.split(D)),G(``)};return(0,T.jsxs)(ee,{label:r,description:a,disabled:d,className:O,size:l,error:m,controlId:q,labelId:J,descriptionId:oe,errorId:se,children:[(0,T.jsxs)(`div`,{ref:H,className:i(c.uiControl,m&&c.invalid,x.control),"data-disabled":d?``:void 0,"data-readonly":p?``:void 0,"data-invalid":m?``:void 0,onClick:()=>V.current?.focus(),children:[t.length>0&&(0,T.jsx)(`ul`,{className:x.tagList,"aria-label":S,children:t.map((e,t)=>(0,T.jsxs)(`li`,{className:x.tag,children:[(0,T.jsx)(`span`,{className:x.tagText,children:e}),!X&&(0,T.jsx)(`button`,{type:`button`,className:x.removeButton,onClick:e=>{e.stopPropagation(),$(t)},"aria-label":b(e,t),children:(0,T.jsx)(o,{"aria-hidden":`true`})})]},`${v(e)}-${t}`))}),(0,T.jsx)(`input`,{...ie,ref:V,id:q,form:j,disabled:d,readOnly:p,required:M&&t.length===0,maxLength:N,value:W,placeholder:t.length===0?s:void 0,"aria-invalid":!!m||void 0,"aria-labelledby":ue,"aria-describedby":le,className:i(x.input,C),onChange:e=>{let t=e.target.value,n=E.test(t);if(U.current)G(t);else if(n){let e=t.split(D),n=E.test(t.at(-1)??``)?``:e.pop()??``;Z(e),G(n)}else G(t);(U.current||!n)&&h?.()},onKeyDown:de,onPaste:fe,onCompositionStart:e=>{U.current=!0,L?.(e)},onCompositionEnd:e=>{U.current=!1,R?.(e)},onBlur:e=>{I?.(e);let t=e.relatedTarget,n=t instanceof Node&&H.current?.contains(t);!e.defaultPrevented&&!n&&y&&!X&&Q()}}),A&&t.map((e,t)=>(0,T.jsx)(`input`,{type:`hidden`,name:A,value:e,form:j,disabled:d},`${v(e)}-${t}`))]}),(0,T.jsx)(`span`,{className:`visuallyHidden`,"aria-live":`polite`,"aria-atomic":`true`,children:ae})]})}var w,T,E,D,O=t((()=>{w=e(n(),1),a(),s(),d(),l(),p(),m(),S(),T=r(),E=/[,\r\n]/,D=/[,\r\n]+/,C.__docgenInfo={description:"Controlled-поле для создания коротких строковых тегов.\n\nНовое значение фиксируется по `Enter`, запятой, вставке списка или потере фокуса. Компонент хранит\nтолько незавершённый текст input, а окончательный набор всегда принадлежит потребителю через `value`.",methods:[],displayName:`TagInput`,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:``},ref:{required:!1,tsType:{name:`Ref`,elements:[{name:`HTMLInputElement`}],raw:`Ref<HTMLInputElement>`},description:"Ссылка на внутренний нативный `input`, передаваемая напрямую как React 19 prop."},error:{required:!1,tsType:{name:`string`},description:"Сообщение валидации, связанное с полем через `aria-describedby`."},onClearError:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:`Сбрасывает внешнюю ошибку после изменения черновика или набора тегов.`},readOnly:{required:!1,tsType:{name:`boolean`},description:`Запрещает изменение набора тегов, сохраняя возможность выделять и копировать текст.`,defaultValue:{value:`false`,computed:!1}},maxTags:{required:!1,tsType:{name:`number`},description:`Максимальное количество тегов. Отсутствие значения не ограничивает набор.`},normalizeTag:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(value: string) => string`,signature:{arguments:[{type:{name:`string`},name:`value`}],return:{name:`string`}}},description:`Нормализует введённое значение перед проверкой дубликата и добавлением.
2
+ По умолчанию удаляет пробелы в начале и конце.`,defaultValue:{value:`function defaultNormalizeTag(value: string) {
3
+ return value.trim();
4
+ }`,computed:!1}},getTagKey:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(value: string) => string`,signature:{arguments:[{type:{name:`string`},name:`value`}],return:{name:`string`}}},description:`Возвращает ключ сравнения тегов. Позволяет, например, запретить дубликаты без учёта регистра.
5
+ По умолчанию используется точное строковое сравнение.`,defaultValue:{value:`function defaultGetTagKey(value: string) {
6
+ return value;
7
+ }`,computed:!1}},addOnBlur:{required:!1,tsType:{name:`boolean`},description:`Добавляет непустой черновик при уходе фокуса с input. По умолчанию включено.`,defaultValue:{value:`true`,computed:!1}},getRemoveButtonAriaLabel:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(value: string, index: number) => string`,signature:{arguments:[{type:{name:`string`},name:`value`},{type:{name:`number`},name:`index`}],return:{name:`string`}}},description:`Формирует доступное имя кнопки удаления конкретного тега.`,defaultValue:{value:"function defaultGetRemoveButtonAriaLabel(value: string) {\n return `Удалить тег «${value}»`;\n}",computed:!1}},tokensAriaLabel:{required:!1,tsType:{name:`string`},description:`Доступное имя списка уже добавленных тегов.`,defaultValue:{value:`"Добавленные теги"`,computed:!1}},inputClassName:{required:!1,tsType:{name:`string`},description:"CSS-класс непосредственно для внутреннего `input`; `className` применяется к оболочке поля."}},composes:[`Omit`]}})),k,A,j,M,N,P;t((()=>{k=e(n(),1),O(),A=r(),j={title:`Shared/UI/TagInput`,component:C,args:{value:[],onChange:()=>void 0},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{value:{description:`Controlled-набор добавленных тегов.`,control:!1},onChange:{description:`Возвращает новый набор после добавления или удаления тега.`,control:!1},maxTags:{description:`Максимальное количество тегов.`,control:`number`},readOnly:{description:`Показывает набор без действий изменения.`,control:`boolean`},normalizeTag:{control:!1},getTagKey:{control:!1},getRemoveButtonAriaLabel:{control:!1}}},M={render:e=>{let[t,n]=(0,k.useState)([`Новости`,`Колледж`]);return(0,A.jsx)(C,{...e,label:`Теги материала`,description:`Введите значение и нажмите Enter или запятую. Можно вставить сразу несколько строк.`,placeholder:`Добавить тег`,value:t,onChange:n,maxTags:10,getTagKey:e=>e.toLocaleLowerCase(`ru`)})}},N={args:{label:`Теги материала`,value:[`Новости`,`Колледж`],readOnly:!0}},M.parameters={...M.parameters,docs:{...M.parameters?.docs,source:{originalSource:`{
8
+ render: args => {
9
+ const [value, setValue] = useState<readonly string[]>(["Новости", "Колледж"]);
10
+ return <TagInput {...args} label="Теги материала" description="Введите значение и нажмите Enter или запятую. Можно вставить сразу несколько строк." placeholder="Добавить тег" value={value} onChange={setValue} maxTags={10} getTagKey={tag => tag.toLocaleLowerCase("ru")} />;
11
+ }
12
+ }`,...M.parameters?.docs?.source}}},N.parameters={...N.parameters,docs:{...N.parameters?.docs,source:{originalSource:`{
13
+ args: {
14
+ label: "Теги материала",
15
+ value: ["Новости", "Колледж"],
16
+ readOnly: true
17
+ }
18
+ }`,...N.parameters?.docs?.source}}},P=[`Controlled`,`ReadOnly`]}))();export{M as Controlled,N as ReadOnly,P as __namedExportsOrder,j as default};
@@ -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-nvFBZnmF.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-BUeZ3JmE.js";import{Controlled as p,Disabled as m,WithValue as h,n as g,t as _}from"./Textarea.stories-DNFuMzL8.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,Disabled as m,WithValue as h,n as g,t as _}from"./Textarea.stories-ByJH2uhT.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:`Textarea`}),`
3
3
  `,(0,b.jsx)(i,{children:`Многострочное текстовое поле для описаний, комментариев и заметок`}),`
4
4
  `,(0,b.jsx)(o.p,{children:`Textarea уже имеет живые 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-CELq1yHK.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{a,i as o}from"./utils-V012ES4W.js";import{n as s,t as c}from"./ui.module-wFHXkJzp.js";import{o as l,u}from"./Input-DqkpneO3.js";import{t as d}from"./input-Bq20EuR5.js";var f,p,m=n((()=>{f=`TjY2iu`,p={textarea:f}}));function h({label:e,description:t,className:n,disabled:r,size:i,value:o,onChange:c,error:d,onClearError:f,id:m,...h}){let{controlId:_,labelId:v,descriptionId:y,errorId:b,describedBy:x}=u({id:m,hasLabel:e!=null,hasDescription:!!t,hasError:!!d});return(0,g.jsx)(l,{label:e,description:t,disabled:r,size:i,error:d,controlId:_,labelId:v,descriptionId:y,errorId:b,children:(0,g.jsx)(`textarea`,{...h,id:_,disabled:r,value:o,"aria-invalid":!!d||void 0,"aria-labelledby":v,"aria-describedby":x,"data-invalid":d?``:void 0,className:a(s.uiControl,p.textarea,`scrollable`,n),onChange:e=>{c?.(e.target.value),d&&f&&f()}})})}var g,_=n((()=>{o(),d(),c(),m(),g=i(),h.__docgenInfo={description:`Многострочное текстовое поле для ввода свободного текста. Поддерживает подпись, описание, ошибки и единый визуальный стиль формы.`,methods:[],displayName:`Textarea`,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:``},error:{required:!1,tsType:{name:`string`},description:``},onClearError:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``}},composes:[`Omit`]}})),v=e({Controlled:()=>S,Disabled:()=>w,WithValue:()=>C,__namedExportsOrder:()=>T,default:()=>x}),y,b,x,S,C,w,T,E=n((()=>{y=t(r(),1),_(),b=i(),x={title:`Shared/UI/Textarea`,component:h,args:{label:`Комментарий`,description:`Оставьте примечание к документу.`,placeholder:`Введите текст...`,rows:4,disabled:!1,value:``,onChange:()=>void 0},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},rows:{description:`Количество видимых строк.`,control:`number`},cols:{description:`Ширина в количестве символов.`,control:`number`},disabled:{description:`Блокирует редактирование.`,control:`boolean`},className:{description:`Дополнительный CSS-класс.`,control:`text`}}},S={args:{value:``,onChange:()=>void 0},render:e=>{let[t,n]=(0,y.useState)(`Первичный комментарий`);return(0,b.jsx)(h,{...e,value:t,onChange:n})}},C={args:{rows:5,value:``,onChange:()=>void 0},render:e=>{let[t,n]=(0,y.useState)(`Шаблонный текст для редактирования.`);return(0,b.jsx)(h,{...e,value:t,onChange:n})}},w={args:{disabled:!0,value:`Редактирование недоступно.`,onChange:()=>void 0},render:e=>(0,b.jsx)(h,{...e})},S.parameters={...S.parameters,docs:{...S.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{o as l,u}from"./Input-B6UklXwb.js";import{t as d}from"./input-D77vjPVL.js";var f,p,m=n((()=>{f=`TjY2iu`,p={textarea:f}}));function h({label:e,description:t,className:n,disabled:r,size:i,value:o,onChange:c,error:d,onClearError:f,id:m,...h}){let{controlId:_,labelId:v,descriptionId:y,errorId:b,describedBy:x}=u({id:m,hasLabel:e!=null,hasDescription:!!t,hasError:!!d});return(0,g.jsx)(l,{label:e,description:t,disabled:r,size:i,error:d,controlId:_,labelId:v,descriptionId:y,errorId:b,children:(0,g.jsx)(`textarea`,{...h,id:_,disabled:r,value:o,"aria-invalid":!!d||void 0,"aria-labelledby":v,"aria-describedby":x,"data-invalid":d?``:void 0,className:a(s.uiControl,p.textarea,`scrollable`,n),onChange:e=>{c?.(e.target.value),d&&f&&f()}})})}var g,_=n((()=>{o(),d(),c(),m(),g=i(),h.__docgenInfo={description:`Многострочное текстовое поле для ввода свободного текста. Поддерживает подпись, описание, ошибки и единый визуальный стиль формы.`,methods:[],displayName:`Textarea`,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:``},error:{required:!1,tsType:{name:`string`},description:``},onClearError:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``}},composes:[`Omit`]}})),v=e({Controlled:()=>S,Disabled:()=>w,WithValue:()=>C,__namedExportsOrder:()=>T,default:()=>x}),y,b,x,S,C,w,T,E=n((()=>{y=t(r(),1),_(),b=i(),x={title:`Shared/UI/Textarea`,component:h,args:{label:`Комментарий`,description:`Оставьте примечание к документу.`,placeholder:`Введите текст...`,rows:4,disabled:!1,value:``,onChange:()=>void 0},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},rows:{description:`Количество видимых строк.`,control:`number`},cols:{description:`Ширина в количестве символов.`,control:`number`},disabled:{description:`Блокирует редактирование.`,control:`boolean`},className:{description:`Дополнительный CSS-класс.`,control:`text`}}},S={args:{value:``,onChange:()=>void 0},render:e=>{let[t,n]=(0,y.useState)(`Первичный комментарий`);return(0,b.jsx)(h,{...e,value:t,onChange:n})}},C={args:{rows:5,value:``,onChange:()=>void 0},render:e=>{let[t,n]=(0,y.useState)(`Шаблонный текст для редактирования.`);return(0,b.jsx)(h,{...e,value:t,onChange:n})}},w={args:{disabled:!0,value:`Редактирование недоступно.`,onChange:()=>void 0},render:e=>(0,b.jsx)(h,{...e})},S.parameters={...S.parameters,docs:{...S.parameters?.docs,source:{originalSource:`{
2
2
  args: {
3
3
  value: "",
4
4
  onChange: () => undefined
@@ -1 +1 @@
1
- import{c as e,i as t}from"./preload-helper-B45gAKPr.js";import{C as n}from"./iframe-CELq1yHK.js";import{t as r}from"./jsx-runtime-BBQGix-2.js";import{a as i,i as a}from"./utils-V012ES4W.js";import{R as o,t as s,v as c}from"./formatters-Cnj-VWHB.js";import{i as l,r as u}from"./date-segments-CzU9k5bl.js";function d(e=0,t=0){return c(S,C,w,e,t,0,0)}function f(e=`date-time`){return e===`time`?x:b}function p(e,t=`date-time`){if(e==null)return null;let n=o(e);return n?t===`time`?d(n.getHours(),n.getMinutes()):n:null}function m(e,t,n,r=`date-time`){let i=p(e,r);if(!i)return!1;if(r===`time`){let e=i.getHours()*60+i.getMinutes(),r=t?p(t,`time`):null,a=n?p(n,`time`):null;return!(r&&e<r.getHours()*60+r.getMinutes()||a&&e>a.getHours()*60+a.getMinutes())}return!(t&&i<t||n&&i>n)}function h(e,t){let n=p(t),r=n?.getHours()??0,i=n?.getMinutes()??0;return c(e.getFullYear(),e.getMonth(),e.getDate(),r,i,0,0)}function g(e,t,n,r=`date-time`){return r===`time`?d(t,n):c(e.getFullYear(),e.getMonth(),e.getDate(),t,n,0,0)}function _(e,t,n=`date-time`){return n===`time`?p(e,`time`)??d():p(e,n)??t}function v(e,t,n,r=`date-time`){let i=p(e,r)??e,a=t?p(t,r):null,o=n?p(n,r):null,s=!!a&&i.getFullYear()===a.getFullYear()&&i.getMonth()===a.getMonth()&&i.getDate()===a.getDate(),c=!!o&&i.getFullYear()===o.getFullYear()&&i.getMonth()===o.getMonth()&&i.getDate()===o.getDate(),l=s?a.getHours():0,u=c?o.getHours():23,d=s&&l===u?a.getMinutes():0,f=c&&l===u?o.getMinutes():59,m=l>u||l===u&&d>f;return{disabled:m,minHour:l,maxHour:u,minMinuteByHour:e=>m?0:s&&e===l?a.getMinutes():0,maxMinuteByHour:e=>m?59:c&&e===u?o.getMinutes():59}}function y(e,t,n,r,i,a=`date-time`){let o=v(e,r,i,a);if(o.disabled)return{hours:0,minutes:0};let s=Math.min(Math.max(t,o.minHour),o.maxHour),c=o.minMinuteByHour(s),l=o.maxMinuteByHour(s);return{hours:s,minutes:Math.min(Math.max(n,c),l)}}var b,x,S,C,w,T=t((()=>{u(),s(),b=`dd.MM.yyyy HH:mm`,x=`HH:mm`,S=1970,C=0,w=1,l(x)}));function ee(e,t,n,r=`date-time`){let i=v(e,t,n,r),a=e.getHours(),o=e.getMinutes(),s=i.minMinuteByHour(a),c=i.maxMinuteByHour(a);return i.disabled?{disabled:!0,selectedHour:a,selectedMinute:o,hours:[],minutes:[]}:{disabled:!1,selectedHour:a,selectedMinute:o,hours:Array.from({length:i.maxHour-i.minHour+1},(e,t)=>i.minHour+t),minutes:Array.from({length:c-s+1},(e,t)=>s+t)}}var te=t((()=>{T()}));function E(e,t){return t<=0||e<0?0:e>t-1?t-1:e}function D(e,t){return!Number.isFinite(e)||e<=0?t:Math.max(e,t)}function ne(e,t){return Math.max(1,Math.round(e/Math.max(1,t)))}function re(e,t){return Math.max(0,Math.round(e/2-t/2))}function O(e,t){return Math.max(0,Math.round(e*t))}function k(e,t,n){return n<=0||t<=0?0:E(Math.round(e/t),n)}var A=t((()=>{})),j,M,N,P,F,I,L,R=t((()=>{j=`GLhdJ6`,M=`_2xLNL2`,N=`dgX32S`,P=`WfOtQ9`,F=`XIdSMi`,I=`_--Hsbk`,L={wheelPicker:j,viewport:M,scroller:N,items:P,item:F,selectionFrame:I}}));function z({items:e,value:t,onChange:n,ariaLabel:r,disabled:a,className:o,minHeight:s=H,visibleRows:c=U,formatItem:l,getItemKey:u}){let d=(0,B.useRef)(null),f=(0,B.useRef)(null),p=(0,B.useRef)(null),m=(0,B.useMemo)(()=>Math.max(0,e.findIndex(e=>Object.is(e,t))),[e,t]),[h,g]=(0,B.useState)(0),_=D(h,s),v=ne(_,c),y=re(_,v),b=(0,B.useRef)(m),x=(0,B.useCallback)(e=>Math.round(e.clientHeight),[]),S=(0,B.useCallback)(()=>{let t=f.current;if(!t||e.length===0)return;let r=k(t.scrollTop,v,e.length);t.scrollTo({top:O(r,v),behavior:`smooth`}),r!==b.current&&(b.current=r,n(e[r]))},[v,e,n]),C=(0,B.useCallback)(()=>{p.current!==null&&window.clearTimeout(p.current),p.current=window.setTimeout(()=>{p.current=null,S()},W)},[S]);(0,B.useEffect)(()=>{let e=d.current;if(!e||typeof ResizeObserver>`u`)return;let t=e=>{g(t=>t===e?t:e)},n=new ResizeObserver(n=>{let r=n[0],i=Math.round(r?.contentRect.height??x(e));t(i)});return n.observe(e),t(x(e)),()=>n.disconnect()},[x]),(0,B.useEffect)(()=>{let t=f.current;if(!t||e.length===0)return;let n=E(m,e.length);b.current=n,t.scrollTo({top:O(n,v),behavior:`auto`})},[v,e.length,m]),(0,B.useEffect)(()=>{let e=f.current;if(!e)return;let t=()=>{a||C()},n=t=>{a||(t.preventDefault(),e.scrollTop+=t.deltaY,C())};return e.addEventListener(`scroll`,t,{passive:!0}),e.addEventListener(`wheel`,n,{passive:!1}),()=>{e.removeEventListener(`scroll`,t),e.removeEventListener(`wheel`,n)}},[a,e,n,C]),(0,B.useEffect)(()=>()=>{p.current!==null&&window.clearTimeout(p.current)},[]);let w=t=>{if(a||e.length===0||t.key!==`ArrowUp`&&t.key!==`ArrowDown`)return;t.preventDefault();let r=t.key===`ArrowUp`?-1:1,i=E(m+r,e.length);i!==m&&(b.current=i,n(e[i]))},T={"--wheel-picker-min-height":`${s}px`,"--wheel-picker-viewport-height":`${_}px`,"--wheel-picker-item-height":`${v}px`,"--wheel-picker-edge-padding":`${y}px`};return(0,V.jsx)(`div`,{ref:d,className:i(L.wheelPicker,o),style:T,children:(0,V.jsxs)(`div`,{className:L.viewport,children:[(0,V.jsx)(`div`,{ref:f,className:L.scroller,role:`listbox`,tabIndex:a?-1:0,"aria-label":r,"aria-disabled":a||void 0,onKeyDown:w,children:(0,V.jsx)(`div`,{className:L.items,children:e.map((e,t)=>{let r=t===m;return(0,V.jsx)(`button`,{type:`button`,role:`option`,"aria-selected":r,className:L.item,"data-selected":r?``:void 0,disabled:a,onClick:()=>{b.current=t,n(e)},children:l?.(e)??String(e)},u?.(e,t)??t)})})}),(0,V.jsx)(`div`,{className:L.selectionFrame,"aria-hidden":`true`})]})})}var B,V,H,U,W,ie=t((()=>{B=e(n(),1),a(),A(),R(),V=r(),H=192,U=7,W=96,z.__docgenInfo={description:`Внутренний wheel-picker со snap-кареткой по центру и блокировкой page scroll.`,methods:[],displayName:`WheelPicker`,props:{items:{required:!0,tsType:{name:`unknown`},description:``},value:{required:!0,tsType:{name:`T`},description:``},onChange:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(value: T) => void`,signature:{arguments:[{type:{name:`T`},name:`value`}],return:{name:`void`}}},description:``},ariaLabel:{required:!0,tsType:{name:`string`},description:``},disabled:{required:!1,tsType:{name:`boolean`},description:``},className:{required:!1,tsType:{name:`string`},description:``},minHeight:{required:!1,tsType:{name:`number`},description:``,defaultValue:{value:`192`,computed:!1}},visibleRows:{required:!1,tsType:{name:`number`},description:``,defaultValue:{value:`7`,computed:!1}},formatItem:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(item: T) => ReactNode`,signature:{arguments:[{type:{name:`T`},name:`item`}],return:{name:`ReactNode`}}},description:``},getItemKey:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(item: T, index: number) => Key`,signature:{arguments:[{type:{name:`T`},name:`item`},{type:{name:`number`},name:`index`}],return:{name:`Key`}}},description:``}}}})),ae=t((()=>{ie()})),G,K,q,J,Y,X,Z,oe=t((()=>{G=`_5-SSnO`,K=`s1NHua`,q=`KQC9-8`,J=`WDu02W`,Y=`_9mEhfD`,X=`N-Fzjk`,Z={timePanel:G,hint:K,fields:q,field:J,label:Y,wheel:X}}));function Q({value:e,disabled:t,minDate:n,maxDate:r,mode:i=`date-time`,onChange:a}){let o=ee(e,n,r,i),s=e=>String(e).padStart(2,`0`);return o.disabled?(0,$.jsx)(`div`,{className:Z.timePanel,children:(0,$.jsx)(`p`,{className:Z.hint,children:`Для выбранного дня нет доступного времени в заданном диапазоне.`})}):(0,$.jsx)(`div`,{className:Z.timePanel,children:(0,$.jsxs)(`div`,{className:Z.fields,children:[(0,$.jsxs)(`label`,{className:Z.field,children:[(0,$.jsx)(`span`,{className:Z.label,children:`Часы`}),(0,$.jsx)(z,{className:Z.wheel,items:o.hours,value:o.selectedHour,onChange:e=>a(e,o.selectedMinute),ariaLabel:`Выбор часов`,disabled:t,formatItem:s})]}),(0,$.jsxs)(`label`,{className:Z.field,children:[(0,$.jsx)(`span`,{className:Z.label,children:`Минуты`}),(0,$.jsx)(z,{className:Z.wheel,items:o.minutes,value:o.selectedMinute,onChange:e=>a(o.selectedHour,e),ariaLabel:`Выбор минут`,disabled:t,formatItem:s})]})]})})}var $,se=t((()=>{ae(),te(),oe(),$=r(),Q.__docgenInfo={description:`Переиспользуемая панель выбора времени поверх internal wheel-picker.`,methods:[],displayName:`TimePanel`,props:{value:{required:!0,tsType:{name:`Date`},description:``},disabled:{required:!1,tsType:{name:`boolean`},description:``},minDate:{required:!1,tsType:{name:`Date`},description:``},maxDate:{required:!1,tsType:{name:`Date`},description:``},mode:{required:!1,tsType:{name:`union`,raw:`"date-time" | "time"`,elements:[{name:`literal`,value:`"date-time"`},{name:`literal`,value:`"time"`}]},description:``,defaultValue:{value:`"date-time"`,computed:!1}},onChange:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(hours: number, minutes: number) => void`,signature:{arguments:[{type:{name:`number`},name:`hours`},{type:{name:`number`},name:`minutes`}],return:{name:`void`}}},description:``}}}}));export{f as a,h as c,_ as d,d as i,g as l,se as n,T as o,y as r,m as s,Q as t,p as u};
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{R as o,t as s,v as c}from"./formatters-C0d3JoZj.js";import{i as l,r as u}from"./date-segments-CzU9k5bl.js";function d(e=0,t=0){return c(S,C,w,e,t,0,0)}function f(e=`date-time`){return e===`time`?x:b}function p(e,t=`date-time`){if(e==null)return null;let n=o(e);return n?t===`time`?d(n.getHours(),n.getMinutes()):n:null}function m(e,t,n,r=`date-time`){let i=p(e,r);if(!i)return!1;if(r===`time`){let e=i.getHours()*60+i.getMinutes(),r=t?p(t,`time`):null,a=n?p(n,`time`):null;return!(r&&e<r.getHours()*60+r.getMinutes()||a&&e>a.getHours()*60+a.getMinutes())}return!(t&&i<t||n&&i>n)}function h(e,t){let n=p(t),r=n?.getHours()??0,i=n?.getMinutes()??0;return c(e.getFullYear(),e.getMonth(),e.getDate(),r,i,0,0)}function g(e,t,n,r=`date-time`){return r===`time`?d(t,n):c(e.getFullYear(),e.getMonth(),e.getDate(),t,n,0,0)}function _(e,t,n=`date-time`){return n===`time`?p(e,`time`)??d():p(e,n)??t}function v(e,t,n,r=`date-time`){let i=p(e,r)??e,a=t?p(t,r):null,o=n?p(n,r):null,s=!!a&&i.getFullYear()===a.getFullYear()&&i.getMonth()===a.getMonth()&&i.getDate()===a.getDate(),c=!!o&&i.getFullYear()===o.getFullYear()&&i.getMonth()===o.getMonth()&&i.getDate()===o.getDate(),l=s?a.getHours():0,u=c?o.getHours():23,d=s&&l===u?a.getMinutes():0,f=c&&l===u?o.getMinutes():59,m=l>u||l===u&&d>f;return{disabled:m,minHour:l,maxHour:u,minMinuteByHour:e=>m?0:s&&e===l?a.getMinutes():0,maxMinuteByHour:e=>m?59:c&&e===u?o.getMinutes():59}}function y(e,t,n,r,i,a=`date-time`){let o=v(e,r,i,a);if(o.disabled)return{hours:0,minutes:0};let s=Math.min(Math.max(t,o.minHour),o.maxHour),c=o.minMinuteByHour(s),l=o.maxMinuteByHour(s);return{hours:s,minutes:Math.min(Math.max(n,c),l)}}var b,x,S,C,w,T=t((()=>{u(),s(),b=`dd.MM.yyyy HH:mm`,x=`HH:mm`,S=1970,C=0,w=1,l(x)}));function ee(e,t,n,r=`date-time`){let i=v(e,t,n,r),a=e.getHours(),o=e.getMinutes(),s=i.minMinuteByHour(a),c=i.maxMinuteByHour(a);return i.disabled?{disabled:!0,selectedHour:a,selectedMinute:o,hours:[],minutes:[]}:{disabled:!1,selectedHour:a,selectedMinute:o,hours:Array.from({length:i.maxHour-i.minHour+1},(e,t)=>i.minHour+t),minutes:Array.from({length:c-s+1},(e,t)=>s+t)}}var te=t((()=>{T()}));function E(e,t){return t<=0||e<0?0:e>t-1?t-1:e}function D(e,t){return!Number.isFinite(e)||e<=0?t:Math.max(e,t)}function ne(e,t){return Math.max(1,Math.round(e/Math.max(1,t)))}function re(e,t){return Math.max(0,Math.round(e/2-t/2))}function O(e,t){return Math.max(0,Math.round(e*t))}function k(e,t,n){return n<=0||t<=0?0:E(Math.round(e/t),n)}var A=t((()=>{})),j,M,N,P,F,I,L,R=t((()=>{j=`GLhdJ6`,M=`_2xLNL2`,N=`dgX32S`,P=`WfOtQ9`,F=`XIdSMi`,I=`_--Hsbk`,L={wheelPicker:j,viewport:M,scroller:N,items:P,item:F,selectionFrame:I}}));function z({items:e,value:t,onChange:n,ariaLabel:r,disabled:a,className:o,minHeight:s=H,visibleRows:c=U,formatItem:l,getItemKey:u}){let d=(0,B.useRef)(null),f=(0,B.useRef)(null),p=(0,B.useRef)(null),m=(0,B.useMemo)(()=>Math.max(0,e.findIndex(e=>Object.is(e,t))),[e,t]),[h,g]=(0,B.useState)(0),_=D(h,s),v=ne(_,c),y=re(_,v),b=(0,B.useRef)(m),x=(0,B.useCallback)(e=>Math.round(e.clientHeight),[]),S=(0,B.useCallback)(()=>{let t=f.current;if(!t||e.length===0)return;let r=k(t.scrollTop,v,e.length);t.scrollTo({top:O(r,v),behavior:`smooth`}),r!==b.current&&(b.current=r,n(e[r]))},[v,e,n]),C=(0,B.useCallback)(()=>{p.current!==null&&window.clearTimeout(p.current),p.current=window.setTimeout(()=>{p.current=null,S()},W)},[S]);(0,B.useEffect)(()=>{let e=d.current;if(!e||typeof ResizeObserver>`u`)return;let t=e=>{g(t=>t===e?t:e)},n=new ResizeObserver(n=>{let r=n[0],i=Math.round(r?.contentRect.height??x(e));t(i)});return n.observe(e),t(x(e)),()=>n.disconnect()},[x]),(0,B.useEffect)(()=>{let t=f.current;if(!t||e.length===0)return;let n=E(m,e.length);b.current=n,t.scrollTo({top:O(n,v),behavior:`auto`})},[v,e.length,m]),(0,B.useEffect)(()=>{let e=f.current;if(!e)return;let t=()=>{a||C()},n=t=>{a||(t.preventDefault(),e.scrollTop+=t.deltaY,C())};return e.addEventListener(`scroll`,t,{passive:!0}),e.addEventListener(`wheel`,n,{passive:!1}),()=>{e.removeEventListener(`scroll`,t),e.removeEventListener(`wheel`,n)}},[a,e,n,C]),(0,B.useEffect)(()=>()=>{p.current!==null&&window.clearTimeout(p.current)},[]);let w=t=>{if(a||e.length===0||t.key!==`ArrowUp`&&t.key!==`ArrowDown`)return;t.preventDefault();let r=t.key===`ArrowUp`?-1:1,i=E(m+r,e.length);i!==m&&(b.current=i,n(e[i]))},T={"--wheel-picker-min-height":`${s}px`,"--wheel-picker-viewport-height":`${_}px`,"--wheel-picker-item-height":`${v}px`,"--wheel-picker-edge-padding":`${y}px`};return(0,V.jsx)(`div`,{ref:d,className:i(L.wheelPicker,o),style:T,children:(0,V.jsxs)(`div`,{className:L.viewport,children:[(0,V.jsx)(`div`,{ref:f,className:L.scroller,role:`listbox`,tabIndex:a?-1:0,"aria-label":r,"aria-disabled":a||void 0,onKeyDown:w,children:(0,V.jsx)(`div`,{className:L.items,children:e.map((e,t)=>{let r=t===m;return(0,V.jsx)(`button`,{type:`button`,role:`option`,"aria-selected":r,className:L.item,"data-selected":r?``:void 0,disabled:a,onClick:()=>{b.current=t,n(e)},children:l?.(e)??String(e)},u?.(e,t)??t)})})}),(0,V.jsx)(`div`,{className:L.selectionFrame,"aria-hidden":`true`})]})})}var B,V,H,U,W,ie=t((()=>{B=e(n(),1),a(),A(),R(),V=r(),H=192,U=7,W=96,z.__docgenInfo={description:`Внутренний wheel-picker со snap-кареткой по центру и блокировкой page scroll.`,methods:[],displayName:`WheelPicker`,props:{items:{required:!0,tsType:{name:`unknown`},description:``},value:{required:!0,tsType:{name:`T`},description:``},onChange:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(value: T) => void`,signature:{arguments:[{type:{name:`T`},name:`value`}],return:{name:`void`}}},description:``},ariaLabel:{required:!0,tsType:{name:`string`},description:``},disabled:{required:!1,tsType:{name:`boolean`},description:``},className:{required:!1,tsType:{name:`string`},description:``},minHeight:{required:!1,tsType:{name:`number`},description:``,defaultValue:{value:`192`,computed:!1}},visibleRows:{required:!1,tsType:{name:`number`},description:``,defaultValue:{value:`7`,computed:!1}},formatItem:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(item: T) => ReactNode`,signature:{arguments:[{type:{name:`T`},name:`item`}],return:{name:`ReactNode`}}},description:``},getItemKey:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(item: T, index: number) => Key`,signature:{arguments:[{type:{name:`T`},name:`item`},{type:{name:`number`},name:`index`}],return:{name:`Key`}}},description:``}}}})),ae=t((()=>{ie()})),G,K,q,J,Y,X,Z,oe=t((()=>{G=`_5-SSnO`,K=`s1NHua`,q=`KQC9-8`,J=`WDu02W`,Y=`_9mEhfD`,X=`N-Fzjk`,Z={timePanel:G,hint:K,fields:q,field:J,label:Y,wheel:X}}));function Q({value:e,disabled:t,minDate:n,maxDate:r,mode:i=`date-time`,onChange:a}){let o=ee(e,n,r,i),s=e=>String(e).padStart(2,`0`);return o.disabled?(0,$.jsx)(`div`,{className:Z.timePanel,children:(0,$.jsx)(`p`,{className:Z.hint,children:`Для выбранного дня нет доступного времени в заданном диапазоне.`})}):(0,$.jsx)(`div`,{className:Z.timePanel,children:(0,$.jsxs)(`div`,{className:Z.fields,children:[(0,$.jsxs)(`label`,{className:Z.field,children:[(0,$.jsx)(`span`,{className:Z.label,children:`Часы`}),(0,$.jsx)(z,{className:Z.wheel,items:o.hours,value:o.selectedHour,onChange:e=>a(e,o.selectedMinute),ariaLabel:`Выбор часов`,disabled:t,formatItem:s})]}),(0,$.jsxs)(`label`,{className:Z.field,children:[(0,$.jsx)(`span`,{className:Z.label,children:`Минуты`}),(0,$.jsx)(z,{className:Z.wheel,items:o.minutes,value:o.selectedMinute,onChange:e=>a(o.selectedHour,e),ariaLabel:`Выбор минут`,disabled:t,formatItem:s})]})]})})}var $,se=t((()=>{ae(),te(),oe(),$=r(),Q.__docgenInfo={description:`Переиспользуемая панель выбора времени поверх internal wheel-picker.`,methods:[],displayName:`TimePanel`,props:{value:{required:!0,tsType:{name:`Date`},description:``},disabled:{required:!1,tsType:{name:`boolean`},description:``},minDate:{required:!1,tsType:{name:`Date`},description:``},maxDate:{required:!1,tsType:{name:`Date`},description:``},mode:{required:!1,tsType:{name:`union`,raw:`"date-time" | "time"`,elements:[{name:`literal`,value:`"date-time"`},{name:`literal`,value:`"time"`}]},description:``,defaultValue:{value:`"date-time"`,computed:!1}},onChange:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(hours: number, minutes: number) => void`,signature:{arguments:[{type:{name:`number`},name:`hours`},{type:{name:`number`},name:`minutes`}],return:{name:`void`}}},description:``}}}}));export{f as a,h as c,_ as d,d as i,g as l,se as n,T as o,y as r,m as s,Q as t,p as u};
@@ -1,4 +1,4 @@
1
- import{c as e,i as t}from"./preload-helper-B45gAKPr.js";import{C as n}from"./iframe-CELq1yHK.js";import{t as r}from"./jsx-runtime-BBQGix-2.js";import{n as i,t as a}from"./TimePanel-DfD2qCKU.js";var o,s,c,l,u,d;t((()=>{o=e(n(),1),i(),s=r(),c={title:`Shared/UI/Internal/DateTime/TimePanel`,component:a,args:{value:new Date(2026,2,10,12,30,0,0),onChange:()=>{}},parameters:{atomicCanvas:!0,layout:`centered`}},l={render:e=>{let[t,n]=(0,o.useState)(e.value);return(0,s.jsx)(`div`,{style:{width:320,minHeight:280},children:(0,s.jsx)(a,{...e,value:t,onChange:(e,r)=>{n(new Date(t.getFullYear(),t.getMonth(),t.getDate(),e,r,0,0))}})})}},u={render:e=>{let[t,n]=(0,o.useState)(new Date(2026,2,10,9,30,0,0));return(0,s.jsx)(`div`,{style:{width:320,minHeight:280},children:(0,s.jsx)(a,{...e,value:t,minDate:new Date(2026,2,10,9,15,0,0),maxDate:new Date(2026,2,10,18,30,0,0),onChange:(e,r)=>{n(new Date(t.getFullYear(),t.getMonth(),t.getDate(),e,r,0,0))}})})}},l.parameters={...l.parameters,docs:{...l.parameters?.docs,source:{originalSource:`{
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{n as i,t as a}from"./TimePanel-B5c9MfmC.js";var o,s,c,l,u,d;t((()=>{o=e(n(),1),i(),s=r(),c={title:`Shared/UI/Internal/DateTime/TimePanel`,component:a,args:{value:new Date(2026,2,10,12,30,0,0),onChange:()=>{}},parameters:{atomicCanvas:!0,layout:`centered`}},l={render:e=>{let[t,n]=(0,o.useState)(e.value);return(0,s.jsx)(`div`,{style:{width:320,minHeight:280},children:(0,s.jsx)(a,{...e,value:t,onChange:(e,r)=>{n(new Date(t.getFullYear(),t.getMonth(),t.getDate(),e,r,0,0))}})})}},u={render:e=>{let[t,n]=(0,o.useState)(new Date(2026,2,10,9,30,0,0));return(0,s.jsx)(`div`,{style:{width:320,minHeight:280},children:(0,s.jsx)(a,{...e,value:t,minDate:new Date(2026,2,10,9,15,0,0),maxDate:new Date(2026,2,10,18,30,0,0),onChange:(e,r)=>{n(new Date(t.getFullYear(),t.getMonth(),t.getDate(),e,r,0,0))}})})}},l.parameters={...l.parameters,docs:{...l.parameters?.docs,source:{originalSource:`{
2
2
  render: args => {
3
3
  const [value, setValue] = useState<Date>(args.value);
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-nvFBZnmF.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-BUeZ3JmE.js";import{Controlled as p,Disabled as m,LabelAfter as h,n as g,t as _}from"./Toggle.stories-gX7GAhf5.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,Disabled as m,LabelAfter as h,n as g,t as _}from"./Toggle.stories-g3Eq8oVl.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:`Toggle`}),`
3
3
  `,(0,b.jsx)(i,{children:`Переключаемый булев контрол для локальных режимов и простых опций`}),`
4
4
  `,(0,b.jsx)(o.p,{children:`Toggle уже имеет живые 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-CELq1yHK.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{a,i as o}from"./utils-V012ES4W.js";import{n as s,t as c}from"./ui.module-wFHXkJzp.js";var l,u,d,f,p,m,h,g,_,v=n((()=>{l=`FFyoOs`,u=`zPYy7T`,d=`j6ek6R`,f=`HFTPXI`,p=`_0RK4xF`,m=`kDPnKt`,h=`DQHqws`,g=`nCQ9v4`,_={row:l,wrapper:u,input:d,track:f,thumb:p,unchecked:m,checked:h,option:g}}));function y({label:e,description:t,placeholder:n,disabled:r,size:i,className:o,onChange:c,value:l,id:u,checkedText:d=`ВКЛ`,uncheckedText:f=`ВЫКЛ`,labelPosition:p=`before`,...m}){let h=(0,b.useId)(),g=u??h,v=t?`${g}-description`:void 0,y=e??n,S=!!l,C=!y&&!m[`aria-label`]?`${f} / ${d}`:void 0,w=y?(0,x.jsx)(`label`,{htmlFor:g,className:s.uiLabel,children:y}):null;return(0,x.jsxs)(`div`,{className:a(s.uiElement,r&&s.disabled,i&&s.uiSizable,i&&s[i],o),"aria-disabled":r||void 0,children:[(0,x.jsxs)(`div`,{className:_.row,children:[p===`before`&&w,(0,x.jsxs)(`div`,{className:_.wrapper,children:[(0,x.jsx)(`input`,{...m,id:g,type:`checkbox`,role:`switch`,checked:S,disabled:r,"aria-checked":S,"aria-describedby":v,"aria-label":C,className:a(s.uiInputControl,_.input),onChange:e=>c?.(e.currentTarget.checked)}),(0,x.jsxs)(`div`,{className:_.track,"data-disabled":r||void 0,"aria-hidden":`true`,children:[(0,x.jsx)(`div`,{className:_.thumb}),(0,x.jsx)(`div`,{className:a(_.option,_.unchecked),children:f}),(0,x.jsx)(`div`,{className:a(_.option,_.checked),children:d})]})]}),p===`after`&&w]}),t&&(0,x.jsx)(`p`,{id:v,className:s.uiDescription,children:t})]})}var b,x,S=n((()=>{b=t(r(),1),o(),c(),v(),x=i(),y.__docgenInfo={description:`Переключаемая кнопка с сохранением активного состояния. Используется для локального выбора режима, фильтра или форматирования.`,methods:[],displayName:`Toggle`,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:``},checkedText:{required:!1,tsType:{name:`string`},description:``,defaultValue:{value:`"ВКЛ"`,computed:!1}},uncheckedText:{required:!1,tsType:{name:`string`},description:``,defaultValue:{value:`"ВЫКЛ"`,computed:!1}},labelPosition:{required:!1,tsType:{name:`union`,raw:`"before" | "after"`,elements:[{name:`literal`,value:`"before"`},{name:`literal`,value:`"after"`}]},description:``,defaultValue:{value:`"before"`,computed:!1}}},composes:[`Omit`]}})),C=e({Controlled:()=>D,Disabled:()=>k,LabelAfter:()=>O,__namedExportsOrder:()=>A,default:()=>E}),w,T,E,D,O,k,A,j=n((()=>{w=t(r(),1),S(),T=i(),E={title:`Shared/UI/Toggle`,component:y,args:{value:!1,onChange:()=>{}},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{label:{description:`Текст подписи переключателя.`,control:`text`},description:{description:`Описание под переключателем.`,control:`text`},value:{description:`Текущее значение переключателя.`,control:`boolean`},onChange:{description:`Вызывается при изменении значения.`,control:!1},checkedText:{description:`Текст для включенного состояния.`,control:`text`},uncheckedText:{description:`Текст для выключенного состояния.`,control:`text`},labelPosition:{description:`Положение подписи относительно переключателя.`,control:`inline-radio`,options:[`before`,`after`]},disabled:{description:`Блокирует взаимодействие.`,control:`boolean`},size:{description:`Размер контрола и подписи.`,control:`select`,options:[`xs`,`sm`,`md`,`lg`,`xl`]}}},D={render:e=>{let[t,n]=(0,w.useState)(e.value??!1);return(0,T.jsx)(y,{...e,value:t,onChange:n})},args:{label:`Режим синхронизации`,description:`Мгновенное переключение состояния.`,value:!1,checkedText:`ВКЛ`,uncheckedText:`ВЫКЛ`,labelPosition:`before`}},O={render:e=>{let[t,n]=(0,w.useState)(e.value??!0);return(0,T.jsx)(y,{...e,value:t,onChange:n})},args:{label:`Уведомления`,value:!0,labelPosition:`after`}},k={args:{label:`Недоступный переключатель`,value:!0,disabled:!0}},D.parameters={...D.parameters,docs:{...D.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";var l,u,d,f,p,m,h,g,_,v=n((()=>{l=`FFyoOs`,u=`zPYy7T`,d=`j6ek6R`,f=`HFTPXI`,p=`_0RK4xF`,m=`kDPnKt`,h=`DQHqws`,g=`nCQ9v4`,_={row:l,wrapper:u,input:d,track:f,thumb:p,unchecked:m,checked:h,option:g}}));function y({label:e,description:t,placeholder:n,disabled:r,size:i,className:o,onChange:c,value:l,id:u,checkedText:d=`ВКЛ`,uncheckedText:f=`ВЫКЛ`,labelPosition:p=`before`,...m}){let h=(0,b.useId)(),g=u??h,v=t?`${g}-description`:void 0,y=e??n,S=!!l,C=!y&&!m[`aria-label`]?`${f} / ${d}`:void 0,w=y?(0,x.jsx)(`label`,{htmlFor:g,className:s.uiLabel,children:y}):null;return(0,x.jsxs)(`div`,{className:a(s.uiElement,r&&s.disabled,i&&s.uiSizable,i&&s[i],o),"aria-disabled":r||void 0,children:[(0,x.jsxs)(`div`,{className:_.row,children:[p===`before`&&w,(0,x.jsxs)(`div`,{className:_.wrapper,children:[(0,x.jsx)(`input`,{...m,id:g,type:`checkbox`,role:`switch`,checked:S,disabled:r,"aria-checked":S,"aria-describedby":v,"aria-label":C,className:a(s.uiInputControl,_.input),onChange:e=>c?.(e.currentTarget.checked)}),(0,x.jsxs)(`div`,{className:_.track,"data-disabled":r||void 0,"aria-hidden":`true`,children:[(0,x.jsx)(`div`,{className:_.thumb}),(0,x.jsx)(`div`,{className:a(_.option,_.unchecked),children:f}),(0,x.jsx)(`div`,{className:a(_.option,_.checked),children:d})]})]}),p===`after`&&w]}),t&&(0,x.jsx)(`p`,{id:v,className:s.uiDescription,children:t})]})}var b,x,S=n((()=>{b=t(r(),1),o(),c(),v(),x=i(),y.__docgenInfo={description:`Переключаемая кнопка с сохранением активного состояния. Используется для локального выбора режима, фильтра или форматирования.`,methods:[],displayName:`Toggle`,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:``},checkedText:{required:!1,tsType:{name:`string`},description:``,defaultValue:{value:`"ВКЛ"`,computed:!1}},uncheckedText:{required:!1,tsType:{name:`string`},description:``,defaultValue:{value:`"ВЫКЛ"`,computed:!1}},labelPosition:{required:!1,tsType:{name:`union`,raw:`"before" | "after"`,elements:[{name:`literal`,value:`"before"`},{name:`literal`,value:`"after"`}]},description:``,defaultValue:{value:`"before"`,computed:!1}}},composes:[`Omit`]}})),C=e({Controlled:()=>D,Disabled:()=>k,LabelAfter:()=>O,__namedExportsOrder:()=>A,default:()=>E}),w,T,E,D,O,k,A,j=n((()=>{w=t(r(),1),S(),T=i(),E={title:`Shared/UI/Toggle`,component:y,args:{value:!1,onChange:()=>{}},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{label:{description:`Текст подписи переключателя.`,control:`text`},description:{description:`Описание под переключателем.`,control:`text`},value:{description:`Текущее значение переключателя.`,control:`boolean`},onChange:{description:`Вызывается при изменении значения.`,control:!1},checkedText:{description:`Текст для включенного состояния.`,control:`text`},uncheckedText:{description:`Текст для выключенного состояния.`,control:`text`},labelPosition:{description:`Положение подписи относительно переключателя.`,control:`inline-radio`,options:[`before`,`after`]},disabled:{description:`Блокирует взаимодействие.`,control:`boolean`},size:{description:`Размер контрола и подписи.`,control:`select`,options:[`xs`,`sm`,`md`,`lg`,`xl`]}}},D={render:e=>{let[t,n]=(0,w.useState)(e.value??!1);return(0,T.jsx)(y,{...e,value:t,onChange:n})},args:{label:`Режим синхронизации`,description:`Мгновенное переключение состояния.`,value:!1,checkedText:`ВКЛ`,uncheckedText:`ВЫКЛ`,labelPosition:`before`}},O={render:e=>{let[t,n]=(0,w.useState)(e.value??!0);return(0,T.jsx)(y,{...e,value:t,onChange:n})},args:{label:`Уведомления`,value:!0,labelPosition:`after`}},k={args:{label:`Недоступный переключатель`,value:!0,disabled:!0}},D.parameters={...D.parameters,docs:{...D.parameters?.docs,source:{originalSource:`{
2
2
  render: args => {
3
3
  const [value, setValue] = useState(args.value ?? false);
4
4
  return <Toggle {...args} value={value} onChange={setValue} />;
@@ -1 +1 @@
1
- import{c as e,i as t}from"./preload-helper-B45gAKPr.js";import{C as n}from"./iframe-CELq1yHK.js";import{t as r}from"./jsx-runtime-BBQGix-2.js";import{a as i,i as a,n as o,o as s,r as c,s as l,t as u}from"./TreePickerBase-CKrFw1xA.js";function d(e,t){if(e.size!==0){if(e.size===1){let n=t.nodeById.get([...e][0]);return n?n.code&&n.code!==n.label?`${n.label} · ${n.code}`:n.label:void 0}return`Выбрано ${e.size} узл.`}}function f({label:e,description:t,disabled:n,placeholder:r=`Выберите значения`,size:i,nodes:o,value:f,onChange:h,query:g,defaultQuery:_,onQuery:v,isLoading:y,error:b}){let x=(0,p.useMemo)(()=>c(o),[o]),S=(0,p.useMemo)(()=>l(f,x),[x,f]),C=(0,p.useMemo)(()=>a(S,x),[S,x]),w=(0,p.useMemo)(()=>d(S,x),[S,x]);return(0,m.jsx)(u,{label:e,description:t,disabled:n,placeholder:r,size:i,nodes:o,selectedIds:C.selectedIds,partialIds:C.partialIds,selectionMode:`multi`,triggerMode:`search`,selectedSummary:w,query:g,defaultQuery:_,onQuery:v,onNodeActivate:e=>h(s(f,e.id,x)),onClearSelection:()=>h({}),isLoading:y,error:b})}var p,m,h=t((()=>{p=e(n(),1),i(),o(),m=r(),f.__docgenInfo={description:``,methods:[],displayName:`TreeMultiSelect`,props:{nodes:{required:!0,tsType:{name:`unknown`},description:``},placeholder:{required:!1,tsType:{name:`string`},description:``,defaultValue:{value:`"Выберите значения"`,computed:!1}},query:{required:!1,tsType:{name:`string`},description:``},defaultQuery:{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:``},isLoading:{required:!1,tsType:{name:`boolean`},description:``},error:{required:!1,tsType:{name:`string`},description:``}},composes:[`Omit`]}}));export{h as n,f 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,o as s,r as c,s as l,t as u}from"./TreePickerBase-VJSaTBqo.js";function d(e,t){if(e.size!==0){if(e.size===1){let n=t.nodeById.get([...e][0]);return n?n.code&&n.code!==n.label?`${n.label} · ${n.code}`:n.label:void 0}return`Выбрано ${e.size} узл.`}}function f({label:e,description:t,disabled:n,placeholder:r=`Выберите значения`,size:i,nodes:o,value:f,onChange:h,query:g,defaultQuery:_,onQuery:v,isLoading:y,error:b}){let x=(0,p.useMemo)(()=>c(o),[o]),S=(0,p.useMemo)(()=>l(f,x),[x,f]),C=(0,p.useMemo)(()=>a(S,x),[S,x]),w=(0,p.useMemo)(()=>d(S,x),[S,x]);return(0,m.jsx)(u,{label:e,description:t,disabled:n,placeholder:r,size:i,nodes:o,selectedIds:C.selectedIds,partialIds:C.partialIds,selectionMode:`multi`,triggerMode:`search`,selectedSummary:w,query:g,defaultQuery:_,onQuery:v,onNodeActivate:e=>h(s(f,e.id,x)),onClearSelection:()=>h({}),isLoading:y,error:b})}var p,m,h=t((()=>{p=e(n(),1),i(),o(),m=r(),f.__docgenInfo={description:``,methods:[],displayName:`TreeMultiSelect`,props:{nodes:{required:!0,tsType:{name:`unknown`},description:``},placeholder:{required:!1,tsType:{name:`string`},description:``,defaultValue:{value:`"Выберите значения"`,computed:!1}},query:{required:!1,tsType:{name:`string`},description:``},defaultQuery:{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:``},isLoading:{required:!1,tsType:{name:`boolean`},description:``},error:{required:!1,tsType:{name:`string`},description:``}},composes:[`Omit`]}}));export{h as n,f as t};
@@ -1,4 +1,4 @@
1
- import{i as e}from"./preload-helper-B45gAKPr.js";import{E as t,a as n,d as r,f as i,l as a,m as o,n as s,p as c,r as l,u}from"./blocks-nvFBZnmF.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-BUeZ3JmE.js";import{Basic as p,MixedSelection as m,ParentCompression as h,n as g,t as _}from"./TreeMultiSelect.stories-TNrQi3tC.js";function v(e){let o={code:`code`,h2:`h2`,p:`p`,...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{Basic as p,MixedSelection as m,ParentCompression as h,n as g,t as _}from"./TreeMultiSelect.stories-C85O7gDN.js";function v(e){let o={code:`code`,h2:`h2`,p:`p`,...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:`TreeMultiSelect`}),`
3
3
  `,(0,b.jsx)(i,{children:`Мультивыбор узлов дерева с компрессией subtree в parent`}),`
4
4
  `,(0,b.jsxs)(o.p,{children:[(0,b.jsx)(o.code,{children:`TreeMultiSelect`}),` хранит наружу не “все листья”, а канонизированный frontier по уровням дерева.`]}),`