@ryuzaki13/react-foundation-ui 1.4.3 → 1.4.5

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 (206) hide show
  1. package/dist/advanced-search/index.js +1 -1
  2. package/dist/chunks/{multi-select-COa6-owj.js → multi-select-COEkc8Qc.js} +2 -3
  3. package/dist/chunks/multi-select-COEkc8Qc.js.map +1 -0
  4. package/dist/chunks/{select-C95db02j.js → select-BON0S9Dr.js} +106 -107
  5. package/dist/chunks/select-BON0S9Dr.js.map +1 -0
  6. package/dist/layout-picker/index.js +0 -1
  7. package/dist/layout-picker/index.js.map +1 -1
  8. package/dist/layout-picker/ui/LayoutPicker.d.ts.map +1 -1
  9. package/dist/multi-select/index.js +1 -1
  10. package/dist/multi-select/ui/MultiSelect.d.ts.map +1 -1
  11. package/dist/picker/types.d.ts +1 -1
  12. package/dist/picker/types.d.ts.map +1 -1
  13. package/dist/preset-select/index.js +1 -1
  14. package/dist/select/Select.d.ts.map +1 -1
  15. package/dist/select/index.js +1 -1
  16. package/dist/state-select/index.js +1 -1
  17. package/dist/styles.css +1 -1
  18. package/dist/tree-select/TreePickerBase.d.ts.map +1 -1
  19. package/dist/tree-select/index.js +112 -113
  20. package/dist/tree-select/index.js.map +1 -1
  21. package/package.json +18 -17
  22. package/storybook-static/assets/{Badge-DHexWW92.js → Badge-Bh73-APE.js} +1 -1
  23. package/storybook-static/assets/{Badge.stories-CeWDekpP.js → Badge.stories-gNFtCWnR.js} +1 -1
  24. package/storybook-static/assets/{Button-kybsFNS9.js → Button-O9QPAftp.js} +1 -1
  25. package/storybook-static/assets/{Button-VdPdxcvG.js → Button-mjF9HSg0.js} +1 -1
  26. package/storybook-static/assets/{Button.stories-DhgYDM_q.js → Button.stories-wkiE0c_a.js} +1 -1
  27. package/storybook-static/assets/{CalendarView-DTX0eO8t.js → CalendarView-CqKlnF8k.js} +1 -1
  28. package/storybook-static/assets/{CheckBox-CDwboiFD.js → CheckBox-CB8fTQF0.js} +1 -1
  29. package/storybook-static/assets/{CheckBox-B6rTemHK.js → CheckBox-Clpeg9q7.js} +1 -1
  30. package/storybook-static/assets/{CheckBox.stories-BSMihxpY.js → CheckBox.stories-pfWBxvOy.js} +1 -1
  31. package/storybook-static/assets/{Color-6AOWCN3U-D5F38IUU.js → Color-6AOWCN3U-CVvkiihj.js} +1 -1
  32. package/storybook-static/assets/{ContextMenu-CQtvL8kx.js → ContextMenu-Sv4wfyS3.js} +1 -1
  33. package/storybook-static/assets/{ContextMenu-2ZQAeo_p.js → ContextMenu-eGnlhRRu.js} +1 -1
  34. package/storybook-static/assets/{ContextMenu.stories-Dtz2YIGk.js → ContextMenu.stories-CVw3hOvY.js} +1 -1
  35. package/storybook-static/assets/{DateInput-DBwgBhFj.js → DateInput-D8_Oleoy.js} +1 -1
  36. package/storybook-static/assets/{DateInput-D41aWZ7_.js → DateInput-DQDplLib.js} +1 -1
  37. package/storybook-static/assets/{DateInput.stories-CMV96t-8.js → DateInput.stories-BNpS4CND.js} +1 -1
  38. package/storybook-static/assets/{DateRangePresetSelect-DXYYFJJn.js → DateRangePresetSelect-Bfx-d5qg.js} +1 -1
  39. package/storybook-static/assets/{DateRangePresetSelect-BLKJkg8X.js → DateRangePresetSelect-DCBEf98i.js} +1 -1
  40. package/storybook-static/assets/{DateRangePresetSelect.stories-BNtFx_iG.js → DateRangePresetSelect.stories-PAV2jgQb.js} +1 -1
  41. package/storybook-static/assets/{Detail-BHcGLZok.js → Detail-DvmdQCue.js} +1 -1
  42. package/storybook-static/assets/{Detail.stories-C4smn8Uu.js → Detail.stories-CEm00aSN.js} +1 -1
  43. package/storybook-static/assets/{Dialog-kji1ho-G.js → Dialog-3I2Y7jD7.js} +1 -1
  44. package/storybook-static/assets/{Dialog.stories-DYzrVcIT.js → Dialog.stories-lcadmonM.js} +1 -1
  45. package/storybook-static/assets/{Disclosure-BVLfp53o.js → Disclosure-DUIQ37oh.js} +1 -1
  46. package/storybook-static/assets/{Disclosure.stories-DcV1pGCt.js → Disclosure.stories-BeizaZWP.js} +1 -1
  47. package/storybook-static/assets/{DocsRenderer-JROSPFPF-CCwX0YiR.js → DocsRenderer-JROSPFPF-DwPk6ai7.js} +1 -1
  48. package/storybook-static/assets/{DropZone-6iWHt6C_.js → DropZone-BGuCU5dq.js} +1 -1
  49. package/storybook-static/assets/{DropZone.stories-bASZNbD5.js → DropZone.stories-B4J6OZ3T.js} +1 -1
  50. package/storybook-static/assets/{ExpandableActionPanel.stories-CMMbHs_d.js → ExpandableActionPanel.stories-gCrqbhG6.js} +1 -1
  51. package/storybook-static/assets/{Flex-BJViOwhH.js → Flex-CBwbh1yu.js} +1 -1
  52. package/storybook-static/assets/{Flex.stories-CI6DdxU7.js → Flex.stories-cdk6vRZq.js} +1 -1
  53. package/storybook-static/assets/{FloatingPopover-CPLOruAY.js → FloatingPopover-D4h-c24R.js} +1 -1
  54. package/storybook-static/assets/{FormattedTableCell-CV4yLuxl.js → FormattedTableCell-Dh-kHTOC.js} +1 -1
  55. package/storybook-static/assets/{Grid-CNEn2bRE.js → Grid-BkKqSMfk.js} +1 -1
  56. package/storybook-static/assets/{Grid.stories-qFo5E3qE.js → Grid.stories-828arrPi.js} +1 -1
  57. package/storybook-static/assets/{ImageCropper.stories-BeQI7oKQ.js → ImageCropper.stories-CrIWrKKR.js} +1 -1
  58. package/storybook-static/assets/{ImageRenderer-DK2ibQyr.js → ImageRenderer-F3AaZx-K.js} +1 -1
  59. package/storybook-static/assets/{ImageRenderer.stories-C1T4ne0G.js → ImageRenderer.stories-l3PnRYxy.js} +1 -1
  60. package/storybook-static/assets/{ImageView.stories-D_Q-ZBtQ.js → ImageView.stories-C6uhkvCN.js} +1 -1
  61. package/storybook-static/assets/{ImageViewer.stories-boombTJI.js → ImageViewer.stories-BSPiv5lU.js} +2 -2
  62. package/storybook-static/assets/{ImageViewerRuntime-D8KSESgf.js → ImageViewerRuntime-BOpMGgz6.js} +1 -1
  63. package/storybook-static/assets/{Input-DtOsW7ur.js → Input-Co--DMHY.js} +1 -1
  64. package/storybook-static/assets/{Input-CGHba0oM.js → Input-D-ZrbHVw.js} +1 -1
  65. package/storybook-static/assets/{Input.stories-C0qWd6SH.js → Input.stories-vqPv6pLx.js} +1 -1
  66. package/storybook-static/assets/{InputDateTime-CgYkmVYu.js → InputDateTime-DHBVbRii.js} +1 -1
  67. package/storybook-static/assets/{InputDateTime.stories-Brxo7Chn.js → InputDateTime.stories-BAvLMBuk.js} +1 -1
  68. package/storybook-static/assets/{InputFile-Bsxafe88.js → InputFile-B9TVOEZV.js} +1 -1
  69. package/storybook-static/assets/{InputFile.stories-BzEV7ybE.js → InputFile.stories-CypBLWFh.js} +1 -1
  70. package/storybook-static/assets/{InputFiles-KJFUsmSS.js → InputFiles-CxZkOZFK.js} +1 -1
  71. package/storybook-static/assets/{InputFiles.stories-ffjxiHSh.js → InputFiles.stories-BGwCp7OC.js} +1 -1
  72. package/storybook-static/assets/{InputFilesList-D6B5g99M.js → InputFilesList-OEX4zGI3.js} +1 -1
  73. package/storybook-static/assets/{InputImage-Cd39V4Vc.js → InputImage-31A6fxSf.js} +1 -1
  74. package/storybook-static/assets/{InputImage.stories-n-tpY8OO.js → InputImage.stories-CdpOudXI.js} +1 -1
  75. package/storybook-static/assets/{LayoutPicker-CGQFfQk6.js → LayoutPicker-Dc55ovYM.js} +1 -1
  76. package/storybook-static/assets/LayoutPicker.stories-DXcn-WXQ.js +449 -0
  77. package/storybook-static/assets/{Listbox-CxISK8c5.js → Listbox-DF8E6oMR.js} +1 -1
  78. package/storybook-static/assets/{Listbox.stories-BdQBmVFI.js → Listbox.stories-C98_9wX3.js} +1 -1
  79. package/storybook-static/assets/{Modal-BiaAWMdV.js → Modal-CXvDgktT.js} +1 -1
  80. package/storybook-static/assets/{Modal.stories-GV7fGqyd.js → Modal.stories-DAC_QwN7.js} +1 -1
  81. package/storybook-static/assets/{MultiSelect-D5XFosSU.js → MultiSelect-B-wX6JPo.js} +2 -2
  82. package/storybook-static/assets/{MultiSelect-Df2CpyNH.js → MultiSelect-DN4foQlG.js} +1 -1
  83. package/storybook-static/assets/{MultiSelect.stories-BEVQF6hO.js → MultiSelect.stories-CgKNQmma.js} +1 -1
  84. package/storybook-static/assets/MultiSelectToken-DDu5n78h.css +1 -0
  85. package/storybook-static/assets/{MultiSelectToken-CrVawISu.js → MultiSelectToken-fjW8p4YG.js} +1 -1
  86. package/storybook-static/assets/{NoData-Fm23iF4n.js → NoData-W7wK8oTW.js} +1 -1
  87. package/storybook-static/assets/{NotificationsHost-C2vSwAjz.js → NotificationsHost-D1UoWmF8.js} +1 -1
  88. package/storybook-static/assets/{NotificationsHost.stories-IbgayDlM.js → NotificationsHost.stories-BWUuMmPl.js} +1 -1
  89. package/storybook-static/assets/{ODataMultiSelect-oW3kW0nO.js → ODataMultiSelect-DE1V4el8.js} +1 -1
  90. package/storybook-static/assets/{ODataMultiSelect.stories-CP6_jGSr.js → ODataMultiSelect.stories-Q1DUIL2W.js} +1 -1
  91. package/storybook-static/assets/{ODataSelect-CrGF8fyC.js → ODataSelect-CtoT2Wxx.js} +1 -1
  92. package/storybook-static/assets/{ODataSelect.stories-DTv31Rkv.js → ODataSelect.stories-DLi7Rwzk.js} +1 -1
  93. package/storybook-static/assets/{ODataTreeMultiSelect-D0h8H3gw.js → ODataTreeMultiSelect-DEZfgyPK.js} +1 -1
  94. package/storybook-static/assets/{ODataTreeMultiSelect.stories-CM8QjG8r.js → ODataTreeMultiSelect.stories-H42q78xI.js} +1 -1
  95. package/storybook-static/assets/{ODataTreeSelect-PWn0-hI4.js → ODataTreeSelect-BeylEiPN.js} +1 -1
  96. package/storybook-static/assets/{ODataTreeSelect.stories-2UkFTnbE.js → ODataTreeSelect.stories-MOILmtfY.js} +1 -1
  97. package/storybook-static/assets/{OneStepScroller-CH6K7wiO.js → OneStepScroller-BSvYN6QP.js} +1 -1
  98. package/storybook-static/assets/{PeriodSelect-BtwJuAO6.js → PeriodSelect-KQFGCxq6.js} +1 -1
  99. package/storybook-static/assets/{PeriodSelect.stories-BH8I5Wmg.js → PeriodSelect.stories-BIYx4_Yy.js} +1 -1
  100. package/storybook-static/assets/{PickerSelectionToolbar-BcL8-O6n.js → PickerSelectionToolbar-Cvv8vTZm.js} +1 -1
  101. package/storybook-static/assets/{PickerTriggerActions-C8Asdp5e.js → PickerTriggerActions-BBZmXagt.js} +1 -1
  102. package/storybook-static/assets/{Popover-Ch5btFhR.js → Popover-7YZIq8Fi.js} +1 -1
  103. package/storybook-static/assets/{Popover-Djns7yXR.js → Popover-D6gSyjaW.js} +1 -1
  104. package/storybook-static/assets/{Popover.stories-Bask2I1I.js → Popover.stories-DM69Ztws.js} +1 -1
  105. package/storybook-static/assets/{PresetRangeDateInput-DvsTjQNP.js → PresetRangeDateInput-Ch6GapcJ.js} +1 -1
  106. package/storybook-static/assets/{PresetRangeDateInput.stories-BNfOUWgp.js → PresetRangeDateInput.stories-Cqd4eb0N.js} +1 -1
  107. package/storybook-static/assets/{PresetSelect-9zitP0-V.js → PresetSelect-C8uIYhPJ.js} +1 -1
  108. package/storybook-static/assets/{RadioButton-Yb9bQKYe.js → RadioButton-BQjiyASl.js} +1 -1
  109. package/storybook-static/assets/{RadioButton.stories-FIFxXFVP.js → RadioButton.stories-Cbho4i83.js} +1 -1
  110. package/storybook-static/assets/{RadioGroup-CWsVqwtm.js → RadioGroup-DNqu6WaC.js} +1 -1
  111. package/storybook-static/assets/{RadioGroup-Dn0zL838.js → RadioGroup-vw4ObVj-.js} +1 -1
  112. package/storybook-static/assets/{RadioGroup.stories-B_drop9x.js → RadioGroup.stories-B-WQzZW_.js} +1 -1
  113. package/storybook-static/assets/{Scrollable-3Z6b5g0Z.js → Scrollable-DrxMuH2M.js} +1 -1
  114. package/storybook-static/assets/{Select-BaR8D89E.js → Select-BxigZNtu.js} +1 -1
  115. package/storybook-static/assets/{Select-BiOxxy0y.js → Select-X_O4M8Hi.js} +1 -1
  116. package/storybook-static/assets/{Select.stories-CMlWu7vC.js → Select.stories-BpTrYJSr.js} +1 -1
  117. package/storybook-static/assets/{SelectOptionContent-DhtCMwz6.js → SelectOptionContent-RAmgWCOm.js} +1 -1
  118. package/storybook-static/assets/{SerializableSelect-BDiZo_-M.js → SerializableSelect-CA9wjk2m.js} +1 -1
  119. package/storybook-static/assets/{SerializableSelect.stories-DgC6oiRx.js → SerializableSelect.stories-DXd4E-3U.js} +1 -1
  120. package/storybook-static/assets/{SingleDateTimeInput-Dx1fvzyr.js → SingleDateTimeInput-BeFLYUBF.js} +1 -1
  121. package/storybook-static/assets/{SingleDateTimeInput.stories-NRUE7nnA.js → SingleDateTimeInput.stories-B1aZ754N.js} +1 -1
  122. package/storybook-static/assets/{Slider-DJpzPo7f.js → Slider-BYrHesOR.js} +1 -1
  123. package/storybook-static/assets/{Slider-aiFcrSGY.js → Slider-BdWBkKp4.js} +1 -1
  124. package/storybook-static/assets/{Slider.stories-B0YHmFf5.js → Slider.stories-CgmOhVBs.js} +1 -1
  125. package/storybook-static/assets/{SliderInput-sOoxvdku.js → SliderInput-QmF2VQWA.js} +1 -1
  126. package/storybook-static/assets/{SliderInput.stories-BYk1V19Z.js → SliderInput.stories-MjSmhiOM.js} +1 -1
  127. package/storybook-static/assets/{Sortable-CuVT40f8.js → Sortable-D5OTpesH.js} +1 -1
  128. package/storybook-static/assets/{Sortable.stories-KSWGoKrN.js → Sortable.stories-yz3c5EhY.js} +1 -1
  129. package/storybook-static/assets/{Splitter-EoNOj4XF.js → Splitter-DVq6XBul.js} +1 -1
  130. package/storybook-static/assets/{Splitter.stories-CuAZab2y.js → Splitter.stories-CopPw1_p.js} +1 -1
  131. package/storybook-static/assets/{StateSelect-B_M50HZl.js → StateSelect-ojwXeKmx.js} +1 -1
  132. package/storybook-static/assets/{StateSelect.stories-DQ_MzvL4.js → StateSelect.stories-D46m5HNn.js} +1 -1
  133. package/storybook-static/assets/{StringToggle.stories-BbRysCKA.js → StringToggle.stories-ByYMmlXl.js} +1 -1
  134. package/storybook-static/assets/{Switch-DO_tyZIc.js → Switch-Dy4Pahkn.js} +1 -1
  135. package/storybook-static/assets/{Switch.stories-BQakMoPp.js → Switch.stories-EiAb5Z-D.js} +1 -1
  136. package/storybook-static/assets/{Table-CVK5rwmT.js → Table-BO6Oa4JV.js} +1 -1
  137. package/storybook-static/assets/{Table.stories-IZaleOjp.js → Table.stories--TpBKwmP.js} +1 -1
  138. package/storybook-static/assets/{Tabs-DAaWUQb4.js → Tabs-7c93qVyH.js} +1 -1
  139. package/storybook-static/assets/{Tabs.stories-BC8LwG22.js → Tabs.stories-DXZ0r2ix.js} +1 -1
  140. package/storybook-static/assets/{TagInput.stories-CrXD57LV.js → TagInput.stories-CoM8rXwa.js} +1 -1
  141. package/storybook-static/assets/{Text-cVBcGheg.js → Text-BPlJUr3R.js} +1 -1
  142. package/storybook-static/assets/{Textarea-9VdIC6G0.js → Textarea-D3S4MkiX.js} +1 -1
  143. package/storybook-static/assets/{Textarea.stories-CEaMwEau.js → Textarea.stories-47k8uHdB.js} +1 -1
  144. package/storybook-static/assets/{TimePanel-vx1aOwT4.js → TimePanel-C2iZ9Qr6.js} +1 -1
  145. package/storybook-static/assets/{TimePanel.stories-BKyiLEgy.js → TimePanel.stories-JTjIv6z1.js} +1 -1
  146. package/storybook-static/assets/{Toggle-DrNoVpGe.js → Toggle-CHmajZE5.js} +1 -1
  147. package/storybook-static/assets/{Toggle-CyajrRVE.js → Toggle-OlKw8qaK.js} +1 -1
  148. package/storybook-static/assets/{Toggle.stories-CT0mQbdm.js → Toggle.stories-k4Z8qQVs.js} +1 -1
  149. package/storybook-static/assets/{TreeMultiSelect-CtDZ1cXU.js → TreeMultiSelect-BC_n1Wb-.js} +1 -1
  150. package/storybook-static/assets/{TreeMultiSelect-ag5i_Hw_.js → TreeMultiSelect-dOg0l7rk.js} +1 -1
  151. package/storybook-static/assets/{TreeMultiSelect.stories-BxrbKopS.js → TreeMultiSelect.stories-CAzZRxn5.js} +1 -1
  152. package/storybook-static/assets/TreePickerBase-ycYQYQgi.js +22 -0
  153. package/storybook-static/assets/{TreeSelect-CL8REXC5.js → TreeSelect-BrNyI_Qx.js} +1 -1
  154. package/storybook-static/assets/{TreeSelect-BNuJBo9x.js → TreeSelect-CDecTnag.js} +1 -1
  155. package/storybook-static/assets/{TreeSelect.stories-CsWGc9X0.js → TreeSelect.stories-BUOw2Rwn.js} +1 -1
  156. package/storybook-static/assets/{TreeTable-DrIFC4Oh.js → TreeTable-BXw7lFBk.js} +1 -1
  157. package/storybook-static/assets/{TreeTable.stories-Dq5c4_qe.js → TreeTable.stories-z40pruPV.js} +1 -1
  158. package/storybook-static/assets/{async-0-Te_uje.js → async-BLDV04P4.js} +1 -1
  159. package/storybook-static/assets/{blocks-Dz3dJBcm.js → blocks-BiaKjftm.js} +3 -3
  160. package/storybook-static/assets/{browserAndReact-kZBm3nQe.js → browserAndReact-DX4H5rjQ.js} +1 -1
  161. package/storybook-static/assets/{check-BMyoSD8F.js → check-fB4gCKB_.js} +1 -1
  162. package/storybook-static/assets/{chevron-down-QDFtnGcg.js → chevron-down-B9GH0QvB.js} +1 -1
  163. package/storybook-static/assets/{chevron-left-BoVuWD4h.js → chevron-left-DjbyJeHO.js} +1 -1
  164. package/storybook-static/assets/{chevron-right-DS62_o_9.js → chevron-right-D29uf09I.js} +1 -1
  165. package/storybook-static/assets/{chunk-W22LQPXL-DDIvKskF.js → chunk-W22LQPXL-CGkHFiZ0.js} +1 -1
  166. package/storybook-static/assets/{circle-alert-CXg50Gb0.js → circle-alert-Dmd7-WNp.js} +1 -1
  167. package/storybook-static/assets/{circle-check-BPfYNWmz.js → circle-check-VtVMsaJJ.js} +1 -1
  168. package/storybook-static/assets/{components-BejapTpU.js → components-CsfQDbHv.js} +3 -3
  169. package/storybook-static/assets/{contextMenu-DtXkMNr6.js → contextMenu-CzdfaUsd.js} +1 -1
  170. package/storybook-static/assets/{download-DnZ6jhvY.js → download-CyVhTbv6.js} +1 -1
  171. package/storybook-static/assets/{filesAndExcel-CXMXtMjq.js → filesAndExcel-DlUnL-Uu.js} +1 -1
  172. package/storybook-static/assets/{floating-ui.react-PN45KvBS.js → floating-ui.react-DZ8IyUV4.js} +1 -1
  173. package/storybook-static/assets/{formatters-DGXR8csR.js → formatters-BTz64vfu.js} +1 -1
  174. package/storybook-static/assets/{formatters-runtime-GsS-hTg9.js → formatters-runtime-DVi3RdYb.js} +1 -1
  175. package/storybook-static/assets/{foundationLib-XrLbqi3r.js → foundationLib-CFj4J-Pc.js} +1 -1
  176. package/storybook-static/assets/{hooks-Ddmw7JMF.js → hooks-Ch5aYb7R.js} +1 -1
  177. package/storybook-static/assets/iframe-Cr7AcW_R.js +1 -0
  178. package/storybook-static/assets/{iframe-CrnMVMTc.js → iframe-DaN-XFub.js} +3 -3
  179. package/storybook-static/assets/{info-Dqq5QHG7.js → info-Cirk1RKZ.js} +1 -1
  180. package/storybook-static/assets/{odata-BaxgzNGj.js → odata-BtfB5Aje.js} +1 -1
  181. package/storybook-static/assets/{odataAndTables-OEVW-gFK.js → odataAndTables-TEZyQ-TZ.js} +1 -1
  182. package/storybook-static/assets/{odataFetchFn-BLWeF0ZQ.js → odataFetchFn-DEKVPDzV.js} +1 -1
  183. package/storybook-static/assets/{odataStoryFixtures-BbswaX_5.js → odataStoryFixtures-CDDaJZKW.js} +1 -1
  184. package/storybook-static/assets/{persisted-BpFojVXw.js → persisted-BzLLmgUK.js} +1 -1
  185. package/storybook-static/assets/{pureUtilities-3afQk5ld.js → pureUtilities-Dw249t3R.js} +1 -1
  186. package/storybook-static/assets/{react-CpOcCp9T.js → react-KzpmXJc9.js} +1 -1
  187. package/storybook-static/assets/{refresh-cw-B2VU4UNA.js → refresh-cw-BN3JCsXv.js} +1 -1
  188. package/storybook-static/assets/{runtimeAndState-BEFDbOiZ.js → runtimeAndState-CCVgv3ck.js} +1 -1
  189. package/storybook-static/assets/{settings-2-CLJhjWJl.js → settings-2-jtcbbWm5.js} +1 -1
  190. package/storybook-static/assets/{sortable-DW_Veba0.js → sortable-dNWaObUX.js} +1 -1
  191. package/storybook-static/assets/{syntaxhighlighter-T5IQBZDB-D0RhvxXU.js → syntaxhighlighter-T5IQBZDB-hYwVxXYm.js} +1 -1
  192. package/storybook-static/assets/{trash-2-yLqdtpz8.js → trash-2-DrVfT0z5.js} +1 -1
  193. package/storybook-static/assets/{triangle-alert-wI8Cd8tI.js → triangle-alert-B1Q28Bq9.js} +1 -1
  194. package/storybook-static/assets/{useODataSelectBase-WnxdcAM4.js → useODataSelectBase-DlbeGYUP.js} +1 -1
  195. package/storybook-static/assets/{useODataTreeData-C7L5TOjl.js → useODataTreeData-CvsoLfiG.js} +1 -1
  196. package/storybook-static/assets/{usePickerQuery-CAWYFpCv.js → usePickerQuery-6rDaPaB0.js} +1 -1
  197. package/storybook-static/assets/{usePickerTriggerController-BRXUlggw.js → usePickerTriggerController-BHBjSLtn.js} +1 -1
  198. package/storybook-static/assets/{x-CyFk00QC.js → x-Dh43gJN9.js} +1 -1
  199. package/storybook-static/iframe.html +2 -2
  200. package/storybook-static/project.json +1 -1
  201. package/dist/chunks/multi-select-COa6-owj.js.map +0 -1
  202. package/dist/chunks/select-C95db02j.js.map +0 -1
  203. package/storybook-static/assets/LayoutPicker.stories-xSL2qafC.js +0 -449
  204. package/storybook-static/assets/MultiSelectToken-BoIwmje6.css +0 -1
  205. package/storybook-static/assets/TreePickerBase-DQzUtuAm.js +0 -22
  206. package/storybook-static/assets/iframe-FUHzX0Mr.js +0 -1
@@ -1,2 +1,2 @@
1
- import{n as e,o as t}from"./rolldown-runtime-C0FnF6B9.js";import{t as n}from"./react-C21x__mS.js";import{n as r,t as i}from"./CheckBox-B6rTemHK.js";import{n as a,t as o}from"./x-CyFk00QC.js";import{n as s}from"./iframe-CrnMVMTc.js";import{a as ee,i as c}from"./utils-DUM89eIj.js";import{n as l,t as u}from"./SelectOptionContent-DhtCMwz6.js";import{n as d,t as f}from"./Text-cVBcGheg.js";import{n as p,t as m}from"./ui.module-DoMIk8Oc.js";import{c as h,g,h as _,i as v,l as te,m as ne,n as re,p as ie,r as y,s as ae,t as b,u as x}from"./usePickerTriggerController-BRXUlggw.js";import{n as S,t as C}from"./PickerSelectionToolbar-BcL8-O6n.js";import{i as w,n as oe,r as T,t as E}from"./usePickerQuery-CAWYFpCv.js";import{n as D,t as se}from"./PickerTriggerActions-C8Asdp5e.js";import{n as O,t as k}from"./usePickerDefaultFilter-DdxyE_i8.js";import{a as ce,i as A,n as j,o as le,r as ue,t as M}from"./MultiSelectToken-CrVawISu.js";function N({item:e,textKey:t,codeKey:n,highlight:r}){return(0,P.jsx)(u,{label:e[t],code:n&&e[n],highlight:r})}var P;function F(){return(F=e((()=>{l(),P=s(),N.__docgenInfo={description:"Отдельная опция внутри `MultiSelect`. Отрисовывает состояние выбора и подсветку текста для найденных совпадений.",methods:[],displayName:`MultiSelectOption`,props:{item:{required:!0,tsType:{name:`CollectionItem`},description:``},textKey:{required:!0,tsType:{name:`string`},description:``},codeKey:{required:!1,tsType:{name:`string`},description:``},highlight:{required:!1,tsType:{name:`string`},description:``},selected:{required:!0,tsType:{name:`boolean`},description:``}}}})))()}function I(e,t,n){if(n)return n;let r=e[0];return r?Object.keys(r).find(e=>e!==t)??t:t}function de(e,t,n){if(e.length===0)return;if(e.length>1)return`${e.length} элементов`;let r=I(e,t,n);return e[0]?.[r]??e[0]?.[t]}function fe(e){return function(t){return(0,L.jsx)(M,{value:de(t.selectedItems,e.codeKey,e.textKey)})}}function pe(e){return(0,L.jsx)(C,{onSelectAll:e.selectAll,onDeselectAll:e.deselectAll})}function me(e){return function(t,n){return(0,L.jsx)(N,{item:t,selected:n.selected,highlight:n.highlightQuery,textKey:I([t],e.codeKey,e.textKey),codeKey:e.hideCode?void 0:e.codeKey})}}var L;function R(){return(R=e((()=>{S(),F(),j(),L=s(),pe.__docgenInfo={description:``,methods:[],displayName:`renderDefaultMultiSelectToolbar`,props:{selectedItems:{required:!0,tsType:{name:`Array`,elements:[{name:`CollectionItem`}],raw:`CollectionItem[]`},description:``},committedSelectedItems:{required:!0,tsType:{name:`Array`,elements:[{name:`CollectionItem`}],raw:`CollectionItem[]`},description:``},availableItems:{required:!0,tsType:{name:`Array`,elements:[{name:`CollectionItem`}],raw:`CollectionItem[]`},description:``},query:{required:!0,tsType:{name:`string`},description:``},open:{required:!0,tsType:{name:`boolean`},description:``},clearSelection:{required:!0,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},selectAll:{required:!0,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},deselectAll:{required:!0,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``}}}})))()}function z({text:e,isError:t}){return(0,B.jsxs)(`div`,{className:p.uiPopupOption,children:[(0,B.jsx)(`span`,{className:p.uiPopupOptionIcon}),(0,B.jsx)(f,{color:t?`error`:`primary`,children:e})]})}var B;function V(){return(V=e((()=>{d(),m(),B=s(),z.__docgenInfo={description:"Скелетон строки опции для `MultiSelect`. Используется во время загрузки или при отображении ошибок получения списка.",methods:[],displayName:`MultiSelectOptionSkeleton`,props:{text:{required:!0,tsType:{name:`string`},description:``},isError:{required:!1,tsType:{name:`boolean`},description:``}}}})))()}function he({isNoData:e,isLoading:t,error:n,children:r}){return e?(0,W.jsx)(T,{emptyState:(0,W.jsx)(z,{text:`Нет данных`})}):t?(0,W.jsx)(T,{loadingState:(0,W.jsx)(z,{text:`Загрузка...`})}):n?(0,W.jsx)(T,{errorState:(0,W.jsx)(z,{isError:!0,text:`Ошибка загрузки`})}):(0,W.jsx)(W.Fragment,{children:r})}function H(e,t){return e[t]}function ge(e,t,n){return Array.from(new Set([e[n],e[t],...Object.values(e)]))}function _e(e,t,n){if(e.length!==t.length)return!1;let r=new Set(t.map(e=>H(e,n)));return e.every(e=>r.has(H(e,n)))}function ve({entries:e,listId:t,activeIndex:n,selectedKeys:r,codeKey:a,query:o,highlightQuery:s,getOptionDisabled:c,getOptionId:l,setOptionRef:u,toggleOption:d,selectOnlyOption:f,renderItem:m}){return e.map(({item:e,index:h})=>{let g=h===n,_=r.has(H(e,a)),v=c?.(e)??!1;return(0,W.jsxs)(`div`,{id:l(t,h),ref:e=>u(h,e),role:`option`,"aria-selected":_,"aria-disabled":v||void 0,className:ee(p.uiSelectOption,v&&p.disabled,_&&p.selected,g&&p.uiPopupOptionActive),onMouseDown:e=>{e.preventDefault()},children:[(0,W.jsx)(`div`,{onClick:e=>{e.stopPropagation()},children:(0,W.jsx)(i,{value:_,disabled:v,onChange:()=>{v||d(e)},onClick:e=>{e.stopPropagation()},onMouseDown:e=>{e.stopPropagation()}})}),(0,W.jsx)(`div`,{className:`overflowHidden`,onClick:()=>{v||f(e)},children:m(e,{selected:_,active:g,disabled:v,query:o,highlightQuery:s})})]},`${H(e,a)}-${h}`)})}var U,W,G,K;function q(){return(q=e((()=>{U=t(n(),1),c(),a(),r(),g(),x(),w(),D(),h(),k(),y(),E(),ce(),b(),ne(),m(),R(),A(),V(),W=s(),G=[],K=(0,U.forwardRef)(({codeKey:e,textKey:t,hideCode:n,items:r,value:i,onChange:a,label:s,description:ee,placeholder:c,size:l,query:u,defaultQuery:d,highlightQuery:f,onQuery:m,defaultFilter:h=!0,onOpen:g,onClose:ne,getOptionDisabled:y,disabled:b,error:x,isLoading:S,renderToken:C,renderToolbar:w,renderItem:T},E)=>{let D=(0,U.useRef)(null),[k,ce]=(0,U.useState)(!1),A=`search-multi`,j=i??G,M=(0,U.useMemo)(()=>new Set(j.map(t=>H(t,e))),[e,j]),N=(0,U.useMemo)(()=>r.filter(t=>!M.has(H(t,e))),[e,M,r]),P=(0,U.useMemo)(()=>I([...j,...r],e,t),[e,j,r,t]),{query:F,setQuery:de}=oe({open:k,query:u,defaultQuery:d,onQuery:m,triggerMode:A}),L=O({options:j,query:F,enabled:h,getSearchText:t=>ge(t,e,P)}),R=O({options:N,query:F,enabled:h,getSearchText:t=>ge(t,e,P)}),z=(0,U.useMemo)(()=>[...L,...R],[R,L]),B=L.length>0?0:-1,{draftValue:V,setDraftValue:K,prepareOpen:q}=le({value:j,open:k,onCommit:a,onOpen:g,onClose:ne,isEqual:(t,n)=>_e(t,n,e)}),J=(0,U.useMemo)(()=>new Set(V.map(t=>H(t,e))),[e,V]),ye=(0,U.useMemo)(()=>({selectedItems:V,committedSelectedItems:j,selectedKeys:J,open:k}),[j,V,k,J]),Y=(0,U.useCallback)(e=>y?.(e,ye)??!1,[y,ye]),{activeIndex:X,context:be,floatingStyles:xe,getFloatingProps:Se,setReference:Ce,setFloating:we,setOptionRef:Te,close:Ee,openList:De,toggleOpen:Oe,selectActiveOption:ke,handleReferenceKeyDown:Ae,handleFloatingKeyDown:je,getOptionId:Me,getActiveOptionId:Ne}=v({options:z,selectedIndex:B,open:k,onOpenChange:ce,onSelect:void 0,disabled:b,getOptionDisabled:Y,closeOnSelect:!1,allowOpenWithoutOptions:!0,triggerMode:A}),Pe=f??F,Z=t=>{let n=H(t,e);K(r=>r.some(t=>H(t,e)===n)?r.filter(t=>H(t,e)!==n):Y(t)?r:[...r,t])},Fe=e=>{if(D.current=e,typeof E==`function`){E(e);return}E&&(E.current=e)},Ie=()=>{K([]),k||a([])},Le=()=>{K(t=>{let n=[...t],r=new Set(t.map(t=>H(t,e)));for(let t of z){let i=H(t,e);!r.has(i)&&!Y(t)&&(r.add(i),n.push(t))}return n})},Re=()=>{K([])},ze=e=>{Y(e)||(K([e]),Ee())},Be=k?V:j,Ve=Be.length>0,He={selectedItems:Be,committedSelectedItems:j,availableItems:R,query:F,open:k,clearSelection:Ie,selectAll:Le,deselectAll:Re},Ue=C===void 0?fe({codeKey:e,textKey:P}):C,We=w===void 0?pe:w,Ge=T??me({codeKey:e,textKey:P,hideCode:n}),Ke=typeof Ue==`function`?Ue(He):null,qe=typeof We==`function`?We(He):null,Q=L.map((e,t)=>({item:e,index:t})),Je=R.map((e,t)=>({item:e,index:t+Q.length})),Ye=!S&&!x&&z.length===0,$=re({mode:A,open:k,currentQuery:F,hasDisplayValue:!1,inputRef:D,setQuery:de,openList:De,close:Ee,toggleOpen:Oe,onBeforeOpen:()=>{k||q()}});return(0,W.jsx)(_,{label:s,description:ee,disabled:b,placeholder:c,size:l,className:ue.multiSelect,children:({controlId:t,labelId:n,describedBy:r})=>{let i=`${t}-listbox`;return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(ae,{ref:Fe,rootRef:Ce,id:t,type:`text`,role:`combobox`,autoComplete:`off`,disabled:b,value:F,placeholder:Ve?void 0:c,"aria-labelledby":n,"aria-describedby":r,"aria-haspopup":`listbox`,"aria-expanded":k,"aria-controls":k?i:void 0,"aria-autocomplete":`list`,"aria-activedescendant":k?Ne(i):void 0,rootClassName:`flex alignItemsCenter`,endAdornment:(0,W.jsxs)(se,{open:k,disabled:b,onToggleMouseDown:$.handleToggleMouseDown,onToggleClick:$.handleToggleClick,children:[Ke,(0,W.jsx)(`button`,{type:`button`,disabled:!Ve,className:p.uiClearButton,"data-ui":`multi-select-clear-button`,"data-action":`clear-multi-select`,onClick:Ie,"aria-label":`Очистить все`,children:(0,W.jsx)(o,{})})]}),onChange:e=>{$.handleTriggerInputChange(e.target.value)},onClick:$.handleTriggerClick,onFocus:e=>{$.handleTriggerFocus(e.currentTarget)},onKeyDown:e=>{Ae(e),!e.defaultPrevented&&$.handleTriggerKeyDown({event:e,onActivateWhenOpen:()=>{if(X>=0){let e=z[X];if(e){Z(e);return}}ke()},enableClosedArrowDownOpen:!0,suppressClosedArrowUp:!0})}}),(0,W.jsx)(te,{open:k,context:be,floatingStyles:xe,listId:i,labelId:n,descriptionId:r,activeOptionId:k?Ne(i):void 0,setFloating:we,getFloatingProps:Se,onKeyDown:je,initialFocus:-1,returnFocus:!1,tabIndex:-1,className:p.uiPopupOptions,header:qe,children:(0,W.jsx)(he,{isNoData:Ye,isLoading:S,error:x,children:(0,W.jsxs)(`div`,{className:`scrollable h100`,children:[(0,W.jsx)(ve,{entries:Q,listId:i,activeIndex:X,selectedKeys:J,codeKey:e,query:F,highlightQuery:Pe,getOptionDisabled:Y,getOptionId:Me,setOptionRef:Te,toggleOption:Z,selectOnlyOption:ze,renderItem:Ge}),Q.length>0&&N.length>0&&(0,W.jsx)(ie,{className:`marginBlockSm`}),(0,W.jsx)(ve,{entries:Je,listId:i,activeIndex:X,selectedKeys:J,codeKey:e,query:F,highlightQuery:Pe,getOptionDisabled:Y,getOptionId:Me,setOptionRef:Te,toggleOption:Z,selectOnlyOption:ze,renderItem:Ge})]})})})]})}})}),K.displayName=`MultiSelect`,K.__docgenInfo={description:`Поле множественного выбора с внутренним черновиком значений и подтверждением выбора при закрытии списка.
2
- Подходит как для самостоятельного использования, так и как базовый слой для OData-оберток.`,methods:[],displayName:`MultiSelect`,props:{renderToken:{required:!1,tsType:{name:`union`,raw:`((context: TContext) => React.ReactNode) | null | false`,elements:[{name:`unknown`},{name:`null`},{name:`literal`,value:`false`}]},description:``},renderToolbar:{required:!1,tsType:{name:`union`,raw:`((context: TContext) => React.ReactNode) | null | false`,elements:[{name:`unknown`},{name:`null`},{name:`literal`,value:`false`}]},description:``},renderItem:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(item: CollectionItem, state: MultiSelectItemState) => React.ReactNode`,signature:{arguments:[{type:{name:`CollectionItem`},name:`item`},{type:{name:`MultiSelectItemState`},name:`state`}],return:{name:`ReactReactNode`,raw:`React.ReactNode`}}},description:``},label:{required:!1,tsType:{name:`ReactNode`},description:``},description:{required:!1,tsType:{name:`string`},description:``},placeholder:{required:!1,tsType:{name:`string`},description:``},disabled:{required:!1,tsType:{name:`boolean`},description:``},size:{required:!1,tsType:{name:`union`,raw:`"xs" | "sm" | "md" | "lg" | "xl"`,elements:[{name:`literal`,value:`"xs"`},{name:`literal`,value:`"sm"`},{name:`literal`,value:`"md"`},{name:`literal`,value:`"lg"`},{name:`literal`,value:`"xl"`}]},description:``},value:{required:!0,tsType:{name:`V`},description:"Если начальное состояние может быть `null | undefined`\nзначит `onChange` тоже должен ументь сбрасывать.\nПоэтому такой контрол явно должен передавать `UiBaseProps<AnyType | undefined>`"},onChange:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(value: T) => void`,signature:{arguments:[{type:{name:`C`},name:`value`}],return:{name:`void`}}},description:``},codeKey:{required:!0,tsType:{name:`string`},description:``},textKey:{required:!1,tsType:{name:`string`},description:``},hideCode:{required:!1,tsType:{name:`boolean`},description:``},query:{required:!1,tsType:{name:`string`},description:``},defaultQuery:{required:!1,tsType:{name:`string`},description:``},highlightQuery:{required:!1,tsType:{name:`string`},description:``},onQuery:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(value: string) => void`,signature:{arguments:[{type:{name:`string`},name:`value`}],return:{name:`void`}}},description:``},defaultFilter:{required:!1,tsType:{name:`boolean`},description:``,defaultValue:{value:`true`,computed:!1}},items:{required:!0,tsType:{name:`Array`,elements:[{name:`TOption`}],raw:`TOption[]`},description:``},getOptionDisabled:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(item: TOption, context: MultiSelectOptionDisableContext) => boolean`,signature:{arguments:[{type:{name:`TOption`},name:`item`},{type:{name:`MultiSelectOptionDisableContext`},name:`context`}],return:{name:`boolean`}}},description:``},onOpen:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},onClose:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(value: TOption[]) => void`,signature:{arguments:[{type:{name:`Array`,elements:[{name:`TOption`}],raw:`TOption[]`},name:`value`}],return:{name:`void`}}},description:``},error:{required:!1,tsType:{name:`string`},description:``},isLoading:{required:!1,tsType:{name:`boolean`},description:``}}}})))()}export{q as n,K as t};
1
+ import{n as e,o as t}from"./rolldown-runtime-C0FnF6B9.js";import{t as n}from"./react-C21x__mS.js";import{n as r,t as i}from"./CheckBox-Clpeg9q7.js";import{n as a,t as o}from"./x-Dh43gJN9.js";import{n as s}from"./iframe-DaN-XFub.js";import{a as ee,i as c}from"./utils-DUM89eIj.js";import{n as l,t as u}from"./SelectOptionContent-RAmgWCOm.js";import{n as d,t as f}from"./Text-BPlJUr3R.js";import{n as p,t as m}from"./ui.module-DoMIk8Oc.js";import{c as h,g,h as _,i as v,l as te,m as ne,n as re,p as ie,r as y,s as ae,t as b,u as x}from"./usePickerTriggerController-BHBjSLtn.js";import{n as S,t as C}from"./PickerSelectionToolbar-Cvv8vTZm.js";import{i as w,n as oe,r as T,t as E}from"./usePickerQuery-6rDaPaB0.js";import{n as D,t as se}from"./PickerTriggerActions-BBZmXagt.js";import{n as ce,t as O}from"./usePickerDefaultFilter-DdxyE_i8.js";import{a as k,i as A,n as j,o as le,r as ue,t as M}from"./MultiSelectToken-fjW8p4YG.js";function N({item:e,textKey:t,codeKey:n,highlight:r}){return(0,P.jsx)(u,{label:e[t],code:n&&e[n],highlight:r})}var P;function F(){return(F=e((()=>{l(),P=s(),N.__docgenInfo={description:"Отдельная опция внутри `MultiSelect`. Отрисовывает состояние выбора и подсветку текста для найденных совпадений.",methods:[],displayName:`MultiSelectOption`,props:{item:{required:!0,tsType:{name:`CollectionItem`},description:``},textKey:{required:!0,tsType:{name:`string`},description:``},codeKey:{required:!1,tsType:{name:`string`},description:``},highlight:{required:!1,tsType:{name:`string`},description:``},selected:{required:!0,tsType:{name:`boolean`},description:``}}}})))()}function I(e,t,n){if(n)return n;let r=e[0];return r?Object.keys(r).find(e=>e!==t)??t:t}function de(e,t,n){if(e.length===0)return;if(e.length>1)return`${e.length} элементов`;let r=I(e,t,n);return e[0]?.[r]??e[0]?.[t]}function fe(e){return function(t){return(0,L.jsx)(M,{value:de(t.selectedItems,e.codeKey,e.textKey)})}}function pe(e){return(0,L.jsx)(C,{onSelectAll:e.selectAll,onDeselectAll:e.deselectAll})}function me(e){return function(t,n){return(0,L.jsx)(N,{item:t,selected:n.selected,highlight:n.highlightQuery,textKey:I([t],e.codeKey,e.textKey),codeKey:e.hideCode?void 0:e.codeKey})}}var L;function R(){return(R=e((()=>{S(),F(),j(),L=s(),pe.__docgenInfo={description:``,methods:[],displayName:`renderDefaultMultiSelectToolbar`,props:{selectedItems:{required:!0,tsType:{name:`Array`,elements:[{name:`CollectionItem`}],raw:`CollectionItem[]`},description:``},committedSelectedItems:{required:!0,tsType:{name:`Array`,elements:[{name:`CollectionItem`}],raw:`CollectionItem[]`},description:``},availableItems:{required:!0,tsType:{name:`Array`,elements:[{name:`CollectionItem`}],raw:`CollectionItem[]`},description:``},query:{required:!0,tsType:{name:`string`},description:``},open:{required:!0,tsType:{name:`boolean`},description:``},clearSelection:{required:!0,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},selectAll:{required:!0,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},deselectAll:{required:!0,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``}}}})))()}function z({text:e,isError:t}){return(0,B.jsxs)(`div`,{className:p.uiPopupOption,children:[(0,B.jsx)(`span`,{className:p.uiPopupOptionIcon}),(0,B.jsx)(f,{color:t?`error`:`primary`,children:e})]})}var B;function V(){return(V=e((()=>{d(),m(),B=s(),z.__docgenInfo={description:"Скелетон строки опции для `MultiSelect`. Используется во время загрузки или при отображении ошибок получения списка.",methods:[],displayName:`MultiSelectOptionSkeleton`,props:{text:{required:!0,tsType:{name:`string`},description:``},isError:{required:!1,tsType:{name:`boolean`},description:``}}}})))()}function he({isNoData:e,isLoading:t,error:n,children:r}){return e?(0,W.jsx)(T,{emptyState:(0,W.jsx)(z,{text:`Нет данных`})}):t?(0,W.jsx)(T,{loadingState:(0,W.jsx)(z,{text:`Загрузка...`})}):n?(0,W.jsx)(T,{errorState:(0,W.jsx)(z,{isError:!0,text:`Ошибка загрузки`})}):(0,W.jsx)(W.Fragment,{children:r})}function H(e,t){return e[t]}function ge(e,t,n){return Array.from(new Set([e[n],e[t],...Object.values(e)]))}function _e(e,t,n){if(e.length!==t.length)return!1;let r=new Set(t.map(e=>H(e,n)));return e.every(e=>r.has(H(e,n)))}function ve({entries:e,listId:t,activeIndex:n,selectedKeys:r,codeKey:a,query:o,highlightQuery:s,getOptionDisabled:c,getOptionId:l,setOptionRef:u,toggleOption:d,selectOnlyOption:f,renderItem:m}){return e.map(({item:e,index:h})=>{let g=h===n,_=r.has(H(e,a)),v=c?.(e)??!1;return(0,W.jsxs)(`div`,{id:l(t,h),ref:e=>u(h,e),role:`option`,"aria-selected":_,"aria-disabled":v||void 0,className:ee(p.uiSelectOption,v&&p.disabled,_&&p.selected,g&&p.uiPopupOptionActive),onMouseDown:e=>{e.preventDefault()},children:[(0,W.jsx)(`div`,{onClick:e=>{e.stopPropagation()},children:(0,W.jsx)(i,{value:_,disabled:v,onChange:()=>{v||d(e)},onClick:e=>{e.stopPropagation()},onMouseDown:e=>{e.stopPropagation()}})}),(0,W.jsx)(`div`,{className:`overflowHidden`,onClick:()=>{v||f(e)},children:m(e,{selected:_,active:g,disabled:v,query:o,highlightQuery:s})})]},`${H(e,a)}-${h}`)})}var U,W,ye,G;function K(){return(K=e((()=>{U=t(n(),1),c(),a(),r(),g(),x(),w(),D(),h(),O(),y(),E(),k(),b(),ne(),m(),R(),A(),V(),W=s(),ye=[],G=(0,U.forwardRef)(({codeKey:e,textKey:t,hideCode:n,items:r,value:i,onChange:a,label:s,description:ee,placeholder:c,size:l,query:u,defaultQuery:d,highlightQuery:f,onQuery:m,defaultFilter:h=!0,onOpen:g,onClose:ne,getOptionDisabled:y,disabled:b,error:x,isLoading:S,renderToken:C,renderToolbar:w,renderItem:T},E)=>{let D=(0,U.useRef)(null),[O,k]=(0,U.useState)(!1),A=`search-multi`,j=i??ye,M=(0,U.useMemo)(()=>new Set(j.map(t=>H(t,e))),[e,j]),N=(0,U.useMemo)(()=>r.filter(t=>!M.has(H(t,e))),[e,M,r]),P=(0,U.useMemo)(()=>I([...j,...r],e,t),[e,j,r,t]),{query:F,setQuery:de}=oe({open:O,query:u,defaultQuery:d,onQuery:m,triggerMode:A}),L=ce({options:j,query:F,enabled:h,getSearchText:t=>ge(t,e,P)}),R=ce({options:N,query:F,enabled:h,getSearchText:t=>ge(t,e,P)}),z=(0,U.useMemo)(()=>[...L,...R],[R,L]),B=L.length>0?0:-1,{draftValue:V,setDraftValue:G,prepareOpen:K}=le({value:j,open:O,onCommit:a,onOpen:g,onClose:ne,isEqual:(t,n)=>_e(t,n,e)}),q=(0,U.useMemo)(()=>new Set(V.map(t=>H(t,e))),[e,V]),be=(0,U.useMemo)(()=>({selectedItems:V,committedSelectedItems:j,selectedKeys:q,open:O}),[j,V,O,q]),J=(0,U.useCallback)(e=>y?.(e,be)??!1,[y,be]),{activeIndex:Y,context:xe,floatingStyles:Se,getFloatingProps:Ce,setReference:we,setFloating:Te,setOptionRef:Ee,close:De,openList:Oe,toggleOpen:ke,selectActiveOption:Ae,handleReferenceKeyDown:je,handleFloatingKeyDown:Me,getOptionId:Ne,getActiveOptionId:Pe}=v({options:z,selectedIndex:B,open:O,onOpenChange:k,onSelect:void 0,disabled:b,getOptionDisabled:J,closeOnSelect:!1,allowOpenWithoutOptions:!0,triggerMode:A}),Fe=f??F,X=t=>{let n=H(t,e);G(r=>r.some(t=>H(t,e)===n)?r.filter(t=>H(t,e)!==n):J(t)?r:[...r,t])},Ie=e=>{if(D.current=e,typeof E==`function`){E(e);return}E&&(E.current=e)},Le=()=>{G([]),O||a([])},Re=()=>{G(t=>{let n=[...t],r=new Set(t.map(t=>H(t,e)));for(let t of z){let i=H(t,e);!r.has(i)&&!J(t)&&(r.add(i),n.push(t))}return n})},ze=()=>{G([])},Be=e=>{J(e)||(G([e]),De())},Ve=O?V:j,Z=Ve.length>0,He={selectedItems:Ve,committedSelectedItems:j,availableItems:R,query:F,open:O,clearSelection:Le,selectAll:Re,deselectAll:ze},Ue=C===void 0?fe({codeKey:e,textKey:P}):C,We=w===void 0?pe:w,Ge=T??me({codeKey:e,textKey:P,hideCode:n}),Ke=typeof Ue==`function`?Ue(He):null,qe=typeof We==`function`?We(He):null,Q=L.map((e,t)=>({item:e,index:t})),Je=R.map((e,t)=>({item:e,index:t+Q.length})),Ye=!S&&!x&&z.length===0,$=re({mode:A,open:O,currentQuery:F,hasDisplayValue:!1,inputRef:D,setQuery:de,openList:Oe,close:De,toggleOpen:ke,onBeforeOpen:()=>{O||K()}});return(0,W.jsx)(_,{label:s,description:ee,disabled:b,size:l,className:ue.multiSelect,children:({controlId:t,labelId:n,describedBy:i})=>{let a=`${t}-listbox`;return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(ae,{ref:Ie,rootRef:we,id:t,type:`text`,role:`combobox`,autoComplete:`off`,disabled:b,value:F,placeholder:Z?void 0:`${c} <${r.length}>`,"aria-labelledby":n,"aria-describedby":i,"aria-haspopup":`listbox`,"aria-expanded":O,"aria-controls":O?a:void 0,"aria-autocomplete":`list`,"aria-activedescendant":O?Pe(a):void 0,rootClassName:`flex alignItemsCenter`,endAdornment:(0,W.jsxs)(se,{open:O,disabled:b,onToggleMouseDown:$.handleToggleMouseDown,onToggleClick:$.handleToggleClick,children:[Ke,(0,W.jsx)(`button`,{type:`button`,disabled:!Z,className:p.uiClearButton,"data-ui":`multi-select-clear-button`,"data-action":`clear-multi-select`,onClick:Le,"aria-label":`Очистить все`,children:(0,W.jsx)(o,{})})]}),onChange:e=>{$.handleTriggerInputChange(e.target.value)},onClick:$.handleTriggerClick,onFocus:e=>{$.handleTriggerFocus(e.currentTarget)},onKeyDown:e=>{je(e),!e.defaultPrevented&&$.handleTriggerKeyDown({event:e,onActivateWhenOpen:()=>{if(Y>=0){let e=z[Y];if(e){X(e);return}}Ae()},enableClosedArrowDownOpen:!0,suppressClosedArrowUp:!0})}}),(0,W.jsx)(te,{open:O,context:xe,floatingStyles:Se,listId:a,labelId:n,descriptionId:i,activeOptionId:O?Pe(a):void 0,setFloating:Te,getFloatingProps:Ce,onKeyDown:Me,initialFocus:-1,returnFocus:!1,tabIndex:-1,className:p.uiPopupOptions,header:qe,children:(0,W.jsx)(he,{isNoData:Ye,isLoading:S,error:x,children:(0,W.jsxs)(`div`,{className:`scrollable h100`,children:[(0,W.jsx)(ve,{entries:Q,listId:a,activeIndex:Y,selectedKeys:q,codeKey:e,query:F,highlightQuery:Fe,getOptionDisabled:J,getOptionId:Ne,setOptionRef:Ee,toggleOption:X,selectOnlyOption:Be,renderItem:Ge}),Q.length>0&&N.length>0&&(0,W.jsx)(ie,{className:`marginBlockSm`}),(0,W.jsx)(ve,{entries:Je,listId:a,activeIndex:Y,selectedKeys:q,codeKey:e,query:F,highlightQuery:Fe,getOptionDisabled:J,getOptionId:Ne,setOptionRef:Ee,toggleOption:X,selectOnlyOption:Be,renderItem:Ge})]})})})]})}})}),G.displayName=`MultiSelect`,G.__docgenInfo={description:`Поле множественного выбора с внутренним черновиком значений и подтверждением выбора при закрытии списка.
2
+ Подходит как для самостоятельного использования, так и как базовый слой для OData-оберток.`,methods:[],displayName:`MultiSelect`,props:{renderToken:{required:!1,tsType:{name:`union`,raw:`((context: TContext) => React.ReactNode) | null | false`,elements:[{name:`unknown`},{name:`null`},{name:`literal`,value:`false`}]},description:``},renderToolbar:{required:!1,tsType:{name:`union`,raw:`((context: TContext) => React.ReactNode) | null | false`,elements:[{name:`unknown`},{name:`null`},{name:`literal`,value:`false`}]},description:``},renderItem:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(item: CollectionItem, state: MultiSelectItemState) => React.ReactNode`,signature:{arguments:[{type:{name:`CollectionItem`},name:`item`},{type:{name:`MultiSelectItemState`},name:`state`}],return:{name:`ReactReactNode`,raw:`React.ReactNode`}}},description:``},label:{required:!1,tsType:{name:`ReactNode`},description:``},description:{required:!1,tsType:{name:`string`},description:``},placeholder:{required:!1,tsType:{name:`string`},description:``},disabled:{required:!1,tsType:{name:`boolean`},description:``},size:{required:!1,tsType:{name:`union`,raw:`"xs" | "sm" | "md" | "lg" | "xl"`,elements:[{name:`literal`,value:`"xs"`},{name:`literal`,value:`"sm"`},{name:`literal`,value:`"md"`},{name:`literal`,value:`"lg"`},{name:`literal`,value:`"xl"`}]},description:``},value:{required:!0,tsType:{name:`V`},description:"Если начальное состояние может быть `null | undefined`\nзначит `onChange` тоже должен ументь сбрасывать.\nПоэтому такой контрол явно должен передавать `UiBaseProps<AnyType | undefined>`"},onChange:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(value: T) => void`,signature:{arguments:[{type:{name:`C`},name:`value`}],return:{name:`void`}}},description:``},codeKey:{required:!0,tsType:{name:`string`},description:``},textKey:{required:!1,tsType:{name:`string`},description:``},hideCode:{required:!1,tsType:{name:`boolean`},description:``},query:{required:!1,tsType:{name:`string`},description:``},defaultQuery:{required:!1,tsType:{name:`string`},description:``},highlightQuery:{required:!1,tsType:{name:`string`},description:``},onQuery:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(value: string) => void`,signature:{arguments:[{type:{name:`string`},name:`value`}],return:{name:`void`}}},description:``},defaultFilter:{required:!1,tsType:{name:`boolean`},description:``,defaultValue:{value:`true`,computed:!1}},items:{required:!0,tsType:{name:`Array`,elements:[{name:`TOption`}],raw:`TOption[]`},description:``},getOptionDisabled:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(item: TOption, context: MultiSelectOptionDisableContext) => boolean`,signature:{arguments:[{type:{name:`TOption`},name:`item`},{type:{name:`MultiSelectOptionDisableContext`},name:`context`}],return:{name:`boolean`}}},description:``},onOpen:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},onClose:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(value: TOption[]) => void`,signature:{arguments:[{type:{name:`Array`,elements:[{name:`TOption`}],raw:`TOption[]`},name:`value`}],return:{name:`void`}}},description:``},error:{required:!1,tsType:{name:`string`},description:``},isLoading:{required:!1,tsType:{name:`boolean`},description:``}}}})))()}export{K as n,G as t};
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-CrnMVMTc.js";import{i as n,r}from"./react-qN2cStNd.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-Dz3dJBcm.js";import{a as p,i as m,n as h,o as g,r as _,t as v}from"./MultiSelect.stories-BEVQF6hO.js";function y(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(s,{of:p,parameters:{docs:{toc:!0}}}),`
1
+ import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-DaN-XFub.js";import{i as n,r}from"./react-qN2cStNd.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-BiaKjftm.js";import{a as p,i as m,n as h,o as g,r as _,t as v}from"./MultiSelect.stories-CgKNQmma.js";function y(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(s,{of:p,parameters:{docs:{toc:!0}}}),`
2
2
  `,(0,x.jsx)(u,{children:`MultiSelect`}),`
3
3
  `,(0,x.jsx)(o,{children:`Мультиселект для локальных коллекций с токенами, поиском и состояниями загрузки`}),`
4
4
  `,(0,x.jsx)(t.p,{children:`MultiSelect уже имеет живые stories, а эта страница собирает их в структурированную документацию с краткими рекомендациями, примерами подключения и API.
@@ -1,4 +1,4 @@
1
- import{n as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{t as n}from"./react-C21x__mS.js";import{n as r}from"./iframe-CrnMVMTc.js";import{n as i,t as a}from"./MultiSelect-D5XFosSU.js";var o=t({Basic:()=>d,Empty:()=>m,ErrorState:()=>p,Loading:()=>f,__namedExportsOrder:()=>h,default:()=>u}),s,c,l,u,d,f,p,m,h;function g(){return(g=e((()=>{s=n(),i(),c=r(),l=[{code:`MOW`,label:`Москва`},{code:`SPB`,label:`Санкт-Петербург`},{code:`EKB`,label:`Екатеринбург`},{code:`KZN`,label:`Казань`},{code:`NSK`,label:`Новосибирск`}],u={title:`Shared/UI/MultiSelect`,component:a,args:{label:`Города`,description:`Выберите несколько значений.`,placeholder:`Начните вводить`,value:[],onChange:()=>{},codeKey:`code`,textKey:`label`,items:l,query:``,onQuery:()=>{},onOpen:()=>{},onClose:()=>{},size:`md`,disabled:!1},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{value:{control:!1},onChange:{control:!1},items:{control:!1},onQuery:{control:!1},onOpen:{control:!1},onClose:{control:!1},renderToken:{control:!1},renderToolbar:{control:!1},renderItem:{control:!1},size:{control:`select`,options:[`xs`,`sm`,`md`,`lg`,`xl`]}}},d={render:e=>{let[t,n]=(0,s.useState)([l[1]]),[r,i]=(0,s.useState)(``),o=(0,s.useMemo)(()=>{let e=r.trim().toLowerCase();return e?l.filter(t=>t.label.toLowerCase().includes(e)||t.code.toLowerCase().includes(e)):l},[r]);return(0,c.jsx)(a,{...e,value:t,items:o,query:r,onQuery:i,onChange:n})}},f={render:e=>{let[t,n]=(0,s.useState)([]);return(0,c.jsx)(a,{...e,value:t,items:[],isLoading:!0,onChange:n})}},p={render:e=>{let[t,n]=(0,s.useState)([]);return(0,c.jsx)(a,{...e,value:t,items:[],error:`Ошибка загрузки`,onChange:n})}},m={render:e=>{let[t,n]=(0,s.useState)([]);return(0,c.jsx)(a,{...e,value:t,items:[],onChange:n})}},d.parameters={...d.parameters,docs:{...d.parameters?.docs,source:{originalSource:`{
1
+ import{n as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{t as n}from"./react-C21x__mS.js";import{n as r}from"./iframe-DaN-XFub.js";import{n as i,t as a}from"./MultiSelect-B-wX6JPo.js";var o=t({Basic:()=>d,Empty:()=>m,ErrorState:()=>p,Loading:()=>f,__namedExportsOrder:()=>h,default:()=>u}),s,c,l,u,d,f,p,m,h;function g(){return(g=e((()=>{s=n(),i(),c=r(),l=[{code:`MOW`,label:`Москва`},{code:`SPB`,label:`Санкт-Петербург`},{code:`EKB`,label:`Екатеринбург`},{code:`KZN`,label:`Казань`},{code:`NSK`,label:`Новосибирск`}],u={title:`Shared/UI/MultiSelect`,component:a,args:{label:`Города`,description:`Выберите несколько значений.`,placeholder:`Начните вводить`,value:[],onChange:()=>{},codeKey:`code`,textKey:`label`,items:l,query:``,onQuery:()=>{},onOpen:()=>{},onClose:()=>{},size:`md`,disabled:!1},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{value:{control:!1},onChange:{control:!1},items:{control:!1},onQuery:{control:!1},onOpen:{control:!1},onClose:{control:!1},renderToken:{control:!1},renderToolbar:{control:!1},renderItem:{control:!1},size:{control:`select`,options:[`xs`,`sm`,`md`,`lg`,`xl`]}}},d={render:e=>{let[t,n]=(0,s.useState)([l[1]]),[r,i]=(0,s.useState)(``),o=(0,s.useMemo)(()=>{let e=r.trim().toLowerCase();return e?l.filter(t=>t.label.toLowerCase().includes(e)||t.code.toLowerCase().includes(e)):l},[r]);return(0,c.jsx)(a,{...e,value:t,items:o,query:r,onQuery:i,onChange:n})}},f={render:e=>{let[t,n]=(0,s.useState)([]);return(0,c.jsx)(a,{...e,value:t,items:[],isLoading:!0,onChange:n})}},p={render:e=>{let[t,n]=(0,s.useState)([]);return(0,c.jsx)(a,{...e,value:t,items:[],error:`Ошибка загрузки`,onChange:n})}},m={render:e=>{let[t,n]=(0,s.useState)([]);return(0,c.jsx)(a,{...e,value:t,items:[],onChange:n})}},d.parameters={...d.parameters,docs:{...d.parameters?.docs,source:{originalSource:`{
2
2
  render: args => {
3
3
  const [value, setValue] = useState<CollectionItem[]>([catalog[1]]);
4
4
  const [query, setQuery] = useState("");
@@ -0,0 +1 @@
1
+ ._9oSdQi{padding:0}.iobHig{height:calc(100% - var(--space-sm));width:calc(var(--base-width,100%) - var(--control-height) * 2 - var(--space-md));pointer-events:none;justify-content:flex-end;align-items:center;display:flex}.iobHig:empty{display:none}.yatXso{white-space:nowrap;word-break:normal;text-overflow:ellipsis;pointer-events:none;max-width:100%;overflow:hidden}
@@ -1 +1 @@
1
- import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{t}from"./react-C21x__mS.js";import{n}from"./iframe-CrnMVMTc.js";function r({value:e,open:t,onCommit:n,onOpen:r,onClose:a,isEqual:o}){let s=(0,i.useRef)(!1),[c,l]=(0,i.useState)(e),u=(0,i.useEffectEvent)(e=>l(e));return(0,i.useEffect)(()=>{t||u(e)},[t,e]),(0,i.useEffect)(()=>{s.current&&!t&&(o(c,e)||n(c),a?.(c)),s.current=t},[c,o,a,n,t,e]),{draftValue:c,setDraftValue:l,prepareOpen:()=>{l(e),r?.()}}}var i;function a(){return(a=e((()=>{i=t()})))()}var o,s,c,l;function u(){return(u=e((()=>{o=`_9oSdQi`,s=`iobHig`,c=`yatXso`,l={multiSelect:o,multiSelectTokens:s,multiSelectToken:c}})))()}function d({value:e}){return e?(0,f.jsx)(`div`,{className:l.multiSelectTokens,children:(0,f.jsx)(`div`,{className:l.multiSelectToken,children:e})}):null}var f;function p(){return(p=e((()=>{u(),f=n(),d.__docgenInfo={description:"Токен выбранного значения в `MultiSelect`. Показывает выбранный элемент и кнопку его удаления из текущего набора.",methods:[],displayName:`MultiSelectToken`,props:{value:{required:!0,tsType:{name:`union`,raw:`string | undefined`,elements:[{name:`string`},{name:`undefined`}]},description:``}}}})))()}export{a,u as i,p as n,r as o,l as r,d as t};
1
+ import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{t}from"./react-C21x__mS.js";import{n}from"./iframe-DaN-XFub.js";function r({value:e,open:t,onCommit:n,onOpen:r,onClose:a,isEqual:o}){let s=(0,i.useRef)(!1),[c,l]=(0,i.useState)(e),u=(0,i.useEffectEvent)(e=>l(e));return(0,i.useEffect)(()=>{t||u(e)},[t,e]),(0,i.useEffect)(()=>{s.current&&!t&&(o(c,e)||n(c),a?.(c)),s.current=t},[c,o,a,n,t,e]),{draftValue:c,setDraftValue:l,prepareOpen:()=>{l(e),r?.()}}}var i;function a(){return(a=e((()=>{i=t()})))()}var o,s,c,l;function u(){return(u=e((()=>{o=`_9oSdQi`,s=`iobHig`,c=`yatXso`,l={multiSelect:o,multiSelectTokens:s,multiSelectToken:c}})))()}function d({value:e}){return e?(0,f.jsx)(`div`,{className:l.multiSelectTokens,children:(0,f.jsx)(`div`,{className:l.multiSelectToken,children:e})}):null}var f;function p(){return(p=e((()=>{u(),f=n(),d.__docgenInfo={description:"Токен выбранного значения в `MultiSelect`. Показывает выбранный элемент и кнопку его удаления из текущего набора.",methods:[],displayName:`MultiSelectToken`,props:{value:{required:!0,tsType:{name:`union`,raw:`string | undefined`,elements:[{name:`string`},{name:`undefined`}]},description:``}}}})))()}export{a,u as i,p as n,r as o,l as r,d as t};
@@ -1 +1 @@
1
- import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-CrnMVMTc.js";import{a as n,i as r}from"./utils-DUM89eIj.js";import{n as i,t as a}from"./Text-cVBcGheg.js";var o,s;function c(){return(c=e((()=>{r(),o=t(),s=({className:e,minHeight:t,children:r,style:i,...a})=>{let s=t===void 0?i:{...i,minHeight:t};return(0,o.jsx)(`div`,{...a,className:n(`flexCenter h100`,e),style:s,children:r})},s.__docgenInfo={description:``,methods:[],displayName:`FlexCenter`,props:{children:{required:!1,tsType:{name:`ReactNode`},description:``},minHeight:{required:!1,tsType:{name:`union`,raw:`string | number`,elements:[{name:`string`},{name:`number`}]},description:``}},composes:[`Omit`]}})))()}var l,u;function d(){return(d=e((()=>{l=`qgIKVo`,u={componentLoader:l}})))()}var f,p;function m(){return(m=e((()=>{r(),c(),i(),f=t(),p=({className:e,children:t,color:r=`muted`,minHeight:i,uppercase:o=!0})=>(0,f.jsx)(s,{className:n(`paddingMd textCenter`,e),minHeight:i,children:(0,f.jsx)(a,{as:`div`,weight:`bold`,color:r,uppercase:o,children:t})}),p.__docgenInfo={description:``,methods:[],displayName:`Message`,props:{color:{defaultValue:{value:`"muted"`,computed:!1},required:!1},uppercase:{defaultValue:{value:`true`,computed:!1},required:!1}}}})))()}function h({className:e,logo:t,text:r}){return(0,g.jsxs)(p,{className:n(u.componentLoader,t?void 0:`skeletonLine`,e),children:[t,r||`Загрузка...`]})}var g;function _(){return(_=e((()=>{r(),d(),m(),g=t(),h.__docgenInfo={description:``,methods:[],displayName:`LoadingMessage`,props:{className:{required:!1,tsType:{name:`string`},description:``},logo:{required:!1,tsType:{name:`ReactNode`},description:`Готовый брендовый знак, которым host-проект при необходимости дополняет сообщение о загрузке.`},text:{required:!1,tsType:{name:`string`},description:``}}}})))()}var v,y;function b(){return(b=e((()=>{m(),v=t(),y=({className:e,text:t,minHeight:n=`5em`})=>(0,v.jsx)(p,{className:e,color:`muted`,minHeight:n,children:t||`Нет данных`}),y.__docgenInfo={description:``,methods:[],displayName:`NoData`,props:{className:{required:!1,tsType:{name:`string`},description:``},text:{required:!1,tsType:{name:`string`},description:``},minHeight:{required:!1,tsType:{name:`union`,raw:`string | number`,elements:[{name:`string`},{name:`number`}]},description:``,defaultValue:{value:`"5em"`,computed:!1}}}}})))()}export{_ as i,b as n,h as r,y as t};
1
+ import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-DaN-XFub.js";import{a as n,i as r}from"./utils-DUM89eIj.js";import{n as i,t as a}from"./Text-BPlJUr3R.js";var o,s;function c(){return(c=e((()=>{r(),o=t(),s=({className:e,minHeight:t,children:r,style:i,...a})=>{let s=t===void 0?i:{...i,minHeight:t};return(0,o.jsx)(`div`,{...a,className:n(`flexCenter h100`,e),style:s,children:r})},s.__docgenInfo={description:``,methods:[],displayName:`FlexCenter`,props:{children:{required:!1,tsType:{name:`ReactNode`},description:``},minHeight:{required:!1,tsType:{name:`union`,raw:`string | number`,elements:[{name:`string`},{name:`number`}]},description:``}},composes:[`Omit`]}})))()}var l,u;function d(){return(d=e((()=>{l=`qgIKVo`,u={componentLoader:l}})))()}var f,p;function m(){return(m=e((()=>{r(),c(),i(),f=t(),p=({className:e,children:t,color:r=`muted`,minHeight:i,uppercase:o=!0})=>(0,f.jsx)(s,{className:n(`paddingMd textCenter`,e),minHeight:i,children:(0,f.jsx)(a,{as:`div`,weight:`bold`,color:r,uppercase:o,children:t})}),p.__docgenInfo={description:``,methods:[],displayName:`Message`,props:{color:{defaultValue:{value:`"muted"`,computed:!1},required:!1},uppercase:{defaultValue:{value:`true`,computed:!1},required:!1}}}})))()}function h({className:e,logo:t,text:r}){return(0,g.jsxs)(p,{className:n(u.componentLoader,t?void 0:`skeletonLine`,e),children:[t,r||`Загрузка...`]})}var g;function _(){return(_=e((()=>{r(),d(),m(),g=t(),h.__docgenInfo={description:``,methods:[],displayName:`LoadingMessage`,props:{className:{required:!1,tsType:{name:`string`},description:``},logo:{required:!1,tsType:{name:`ReactNode`},description:`Готовый брендовый знак, которым host-проект при необходимости дополняет сообщение о загрузке.`},text:{required:!1,tsType:{name:`string`},description:``}}}})))()}var v,y;function b(){return(b=e((()=>{m(),v=t(),y=({className:e,text:t,minHeight:n=`5em`})=>(0,v.jsx)(p,{className:e,color:`muted`,minHeight:n,children:t||`Нет данных`}),y.__docgenInfo={description:``,methods:[],displayName:`NoData`,props:{className:{required:!1,tsType:{name:`string`},description:``},text:{required:!1,tsType:{name:`string`},description:``},minHeight:{required:!1,tsType:{name:`union`,raw:`string | number`,elements:[{name:`string`},{name:`number`}]},description:``,defaultValue:{value:`"5em"`,computed:!1}}}}})))()}export{_ as i,b as n,h as r,y as t};
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{i as t,n,r,t as i}from"./NotificationsHost.stories-IbgayDlM.js";import{n as a}from"./iframe-CrnMVMTc.js";import{i as o,r as s}from"./react-qN2cStNd.js";import{a as c,d as l,f as u,l as d,m as f,n as p,p as m,r as h,u as g}from"./blocks-Dz3dJBcm.js";function _(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...o(),...e.components};return(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(d,{of:n,parameters:{docs:{toc:!0}}}),`
1
+ import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{i as t,n,r,t as i}from"./NotificationsHost.stories-BWUuMmPl.js";import{n as a}from"./iframe-DaN-XFub.js";import{i as o,r as s}from"./react-qN2cStNd.js";import{a as c,d as l,f as u,l as d,m as f,n as p,p as m,r as h,u as g}from"./blocks-BiaKjftm.js";function _(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...o(),...e.components};return(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(d,{of:n,parameters:{docs:{toc:!0}}}),`
2
2
  `,(0,y.jsx)(m,{children:`NotificationsHost`}),`
3
3
  `,(0,y.jsx)(u,{children:`Хост глобальных уведомлений для очереди toast-сообщений и длинных пользовательских операций`}),`
4
4
  `,(0,y.jsx)(t.p,{children:`NotificationsHost уже имеет живые stories, а эта страница собирает их в структурированную документацию с краткими рекомендациями, примерами подключения и API.
@@ -1,4 +1,4 @@
1
- import{n as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{t as n}from"./react-C21x__mS.js";import{n as r,t as i}from"./check-BMyoSD8F.js";import{n as a,t as o}from"./circle-alert-CXg50Gb0.js";import{n as s,t as c}from"./circle-check-BPfYNWmz.js";import{i as l,n as ee,r as u,t as d}from"./info-Dqq5QHG7.js";import{n as te,t as f}from"./refresh-cw-B2VU4UNA.js";import{n as ne,t as re}from"./trash-2-yLqdtpz8.js";import{n as p,t as m}from"./triangle-alert-wI8Cd8tI.js";import{n as ie,t as ae}from"./x-CyFk00QC.js";import{i as oe,n as h,r as se}from"./iframe-CrnMVMTc.js";import{a as ce,i as le}from"./utils-DUM89eIj.js";import{n as ue}from"./error-BZrNlEUO.js";import{n as de,t as fe}from"./FlexContainer-LmZIdhq2.js";import{n as pe,t as g}from"./Button-VdPdxcvG.js";import{a as me,i as he,n as ge,r as _}from"./react-CvkUhHUq.js";var v,y;function b(){return(b=e((()=>{oe(),v=[[`path`,{d:`M10.268 21a2 2 0 0 0 3.464 0`,key:`vwvbt9`}],[`path`,{d:`M22 8c0-2.3-.8-4.3-2-6`,key:`5bb3ad`}],[`path`,{d:`M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326`,key:`11g9vi`}],[`path`,{d:`M4 2C2.8 3.7 2 5.7 2 8`,key:`tap9e0`}]],y=se(`bell-ring`,v)})))()}var x,S;function C(){return(C=e((()=>{oe(),x=[[`path`,{d:`M10 2h4`,key:`n1abiw`}],[`path`,{d:`M12 14v-4`,key:`1evpnu`}],[`path`,{d:`M4 13a8 8 0 0 1 8-7 8 8 0 1 1-5.3 14L4 17.6`,key:`1ts96g`}],[`path`,{d:`M9 17H4v5`,key:`8t5av`}]],S=se(`timer-reset`,x)})))()}var w,T,E,D,O,k,A;function j(){return(j=e((()=>{me(),w=null,T=e=>(w=e,()=>{w===e&&(w=null)}),E=()=>{if(!w)throw Error(`Notifications store is not bound. Wrap app with NotificationsProvider.`);return w},D=Object.freeze({push:e=>E().getState().actions.push(e),upsert:e=>E().getState().actions.upsert(e),update:(e,t)=>E().getState().actions.update(e,t),dismiss:e=>E().getState().actions.dismiss(e),clear:()=>E().getState().actions.clear(),success:(e,t)=>E().getState().actions.push({type:`success`,message:e,...t}),info:(e,t)=>E().getState().actions.push({type:`info`,message:e,...t}),warning:(e,t)=>E().getState().actions.push({type:`warning`,message:e,...t}),error:(e,t)=>E().getState().actions.push({type:`error`,message:e,...t}),progress:(e,t)=>{let n=E(),r=t?.id;r&&n.getState().actions.upsert({id:r,type:`info`,title:t?.title,message:e,dismissible:!1});let i=r??n.getState().actions.push({type:`info`,title:t?.title,message:e,dismissible:!1});return{id:i,update:e=>D.update(i,{message:e}),success:(e,t=2500)=>D.update(i,{type:`success`,message:e,dismissible:!0,ttlMs:t}),error:(e,t=5e3)=>D.update(i,{type:`error`,message:e,dismissible:!0,ttlMs:t}),dismiss:()=>D.dismiss(i)}}}),O=()=>`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,9)}`,k=6,A=()=>{let e=new Map,t=t=>{let n=e.get(t);n&&(window.clearTimeout(n),e.delete(t))},n=(n,r,i=1e4)=>{if(t(r),i<=0)return;let a=window.setTimeout(()=>{n.getState().actions.dismiss(r)},i);e.set(r,a)},r=he()((i,a)=>({items:[],actions:{push:e=>{let t=e.id??O(),a=Date.now(),o={id:t,type:e.type,title:e.title,message:e.message,createdAt:a,ttlMs:e.ttlMs,dismissible:e.dismissible??!0,actions:e.actions};return i(e=>({items:[o,...e.items.filter(e=>e.id!==t)].slice(0,k)})),n(r,t,o.ttlMs),t},update:(e,t)=>{let{items:o}=a(),s=o.findIndex(t=>t.id===e);if(s===-1)return!1;let c=o[s],l={...c,...t,id:c.id,createdAt:c.createdAt};return i(t=>({items:t.items.map(t=>t.id===e?l:t)})),`ttlMs`in t&&n(r,e,l.ttlMs),!0},upsert:e=>a().actions.update(e.id,{type:e.type,title:e.title,message:e.message,ttlMs:e.ttlMs,dismissible:e.dismissible})?e.id:a().actions.push(e),dismiss:e=>{t(e),i(t=>({items:t.items.filter(t=>t.id!==e)}))},clear:()=>{e.forEach(e=>window.clearTimeout(e)),e.clear(),i({items:[]})}}}));return r}})))()}function M({children:e}){let t=(0,F.useMemo)(()=>A(),[]);return(0,F.useEffect)(()=>T(t),[t]),(0,I.jsx)(L.Provider,{value:t,children:e})}function N(){let e=(0,F.useContext)(L);if(!e)throw ue({hookName:`useNotificationApi`,providerName:`NotificationsProvider`});return e}function _e(){let e=N();return _(e,e=>e.items)}function P(){let e=N(),t=_(e,e=>e.actions),n=e=>(n,r)=>t.push({type:e,message:n,...r});return{...t,success:n(`success`),info:n(`info`),warning:n(`warning`),error:n(`error`)}}var F,I,L;function R(){return(R=e((()=>{F=n(),j(),ge(),I=h(),L=(0,F.createContext)(null),M.__docgenInfo={description:`Провайдер уведомлений приложения. Хранит состояние списка уведомлений и предоставляет хуки доступа к нему.`,methods:[],displayName:`NotificationsProvider`}})))()}var z,B,V,H,U,W,ve,ye,be,xe,Se,Ce,we,Te,G;function Ee(){return(Ee=e((()=>{z=`STGQ3g`,B=`RaiISE`,V=`cM81wO`,H=`nH2cuZ`,U=`A2glD7`,W=`yWjijS`,ve=`_1HO2ne`,ye=`OyRJpj`,be=`vrCrow`,xe=`A0X-ma`,Se=`AkHvPV`,Ce=`_4YDLB5`,we=`CK3Bqv`,Te=`nLmQut`,G={container:z,card:B,info:V,success:H,warning:U,error:W,header:ve,content:ye,copy:be,icon:xe,kicker:Se,title:Ce,message:we,actions:Te}})))()}function K(){let e=_e(),{dismiss:t}=P();return(0,q.jsx)(`div`,{className:G.container,"aria-label":`Область уведомлений`,"aria-live":`polite`,"aria-relevant":`additions text`,children:e.map(e=>{let n=De[e.type],r=e.title??n.title,i=n.Icon;return(0,q.jsx)(`article`,{role:e.type===`error`?`alert`:`status`,"aria-atomic":`true`,className:ce(G.card,G[e.type]),children:(0,q.jsxs)(fe,{align:`start`,justify:`between`,gap:`sm`,className:G.header,children:[(0,q.jsxs)(fe,{align:`start`,gap:`sm`,className:G.content,children:[(0,q.jsx)(`span`,{className:G.icon,"aria-hidden":`true`,children:(0,q.jsx)(i,{})}),(0,q.jsxs)(`div`,{className:G.copy,children:[(0,q.jsx)(`div`,{className:G.kicker,children:n.title}),e.title?(0,q.jsx)(`div`,{className:G.title,children:r}):null,(0,q.jsx)(`div`,{className:G.message,children:e.message}),e.actions?.length?(0,q.jsx)(`div`,{className:G.actions,children:e.actions.map(t=>(0,q.jsx)(g,{tone:t.tone??e.type,appearance:`outline`,"data-ui":`notification-action-button`,"data-action":`notification-action`,onClick:()=>void t.onClick(),children:t.label},t.label))}):null]})]}),e.dismissible===!1?null:(0,q.jsx)(g,{icon:(0,q.jsx)(ae,{}),appearance:`ghost`,tone:e.type,onClick:()=>t(e.id),"aria-label":`Закрыть уведомление`,"data-ui":`notification-dismiss-button`,"data-action":`dismiss-notification`})]})},e.id)})})}var q,De;function Oe(){return(Oe=e((()=>{le(),a(),s(),ee(),p(),ie(),pe(),de(),R(),Ee(),q=h(),De={info:{title:`Информация`,Icon:d},success:{title:`Успешно`,Icon:c},warning:{title:`Предупреждение`,Icon:m},error:{title:`Ошибка`,Icon:o}},K.__docgenInfo={description:`Хост для визуального отображения очереди уведомлений.
1
+ import{n as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{t as n}from"./react-C21x__mS.js";import{n as r,t as i}from"./check-fB4gCKB_.js";import{n as a,t as o}from"./circle-alert-Dmd7-WNp.js";import{n as s,t as c}from"./circle-check-VtVMsaJJ.js";import{i as l,n as ee,r as u,t as d}from"./info-Cirk1RKZ.js";import{n as te,t as f}from"./refresh-cw-BN3JCsXv.js";import{n as ne,t as re}from"./trash-2-DrVfT0z5.js";import{n as p,t as m}from"./triangle-alert-B1Q28Bq9.js";import{n as ie,t as ae}from"./x-Dh43gJN9.js";import{i as oe,n as h,r as se}from"./iframe-DaN-XFub.js";import{a as ce,i as le}from"./utils-DUM89eIj.js";import{n as ue}from"./error-BZrNlEUO.js";import{n as de,t as fe}from"./FlexContainer-LmZIdhq2.js";import{n as pe,t as g}from"./Button-mjF9HSg0.js";import{a as me,i as he,n as ge,r as _}from"./react-CvkUhHUq.js";var v,y;function b(){return(b=e((()=>{oe(),v=[[`path`,{d:`M10.268 21a2 2 0 0 0 3.464 0`,key:`vwvbt9`}],[`path`,{d:`M22 8c0-2.3-.8-4.3-2-6`,key:`5bb3ad`}],[`path`,{d:`M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326`,key:`11g9vi`}],[`path`,{d:`M4 2C2.8 3.7 2 5.7 2 8`,key:`tap9e0`}]],y=se(`bell-ring`,v)})))()}var x,S;function C(){return(C=e((()=>{oe(),x=[[`path`,{d:`M10 2h4`,key:`n1abiw`}],[`path`,{d:`M12 14v-4`,key:`1evpnu`}],[`path`,{d:`M4 13a8 8 0 0 1 8-7 8 8 0 1 1-5.3 14L4 17.6`,key:`1ts96g`}],[`path`,{d:`M9 17H4v5`,key:`8t5av`}]],S=se(`timer-reset`,x)})))()}var w,T,E,D,O,k,A;function j(){return(j=e((()=>{me(),w=null,T=e=>(w=e,()=>{w===e&&(w=null)}),E=()=>{if(!w)throw Error(`Notifications store is not bound. Wrap app with NotificationsProvider.`);return w},D=Object.freeze({push:e=>E().getState().actions.push(e),upsert:e=>E().getState().actions.upsert(e),update:(e,t)=>E().getState().actions.update(e,t),dismiss:e=>E().getState().actions.dismiss(e),clear:()=>E().getState().actions.clear(),success:(e,t)=>E().getState().actions.push({type:`success`,message:e,...t}),info:(e,t)=>E().getState().actions.push({type:`info`,message:e,...t}),warning:(e,t)=>E().getState().actions.push({type:`warning`,message:e,...t}),error:(e,t)=>E().getState().actions.push({type:`error`,message:e,...t}),progress:(e,t)=>{let n=E(),r=t?.id;r&&n.getState().actions.upsert({id:r,type:`info`,title:t?.title,message:e,dismissible:!1});let i=r??n.getState().actions.push({type:`info`,title:t?.title,message:e,dismissible:!1});return{id:i,update:e=>D.update(i,{message:e}),success:(e,t=2500)=>D.update(i,{type:`success`,message:e,dismissible:!0,ttlMs:t}),error:(e,t=5e3)=>D.update(i,{type:`error`,message:e,dismissible:!0,ttlMs:t}),dismiss:()=>D.dismiss(i)}}}),O=()=>`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,9)}`,k=6,A=()=>{let e=new Map,t=t=>{let n=e.get(t);n&&(window.clearTimeout(n),e.delete(t))},n=(n,r,i=1e4)=>{if(t(r),i<=0)return;let a=window.setTimeout(()=>{n.getState().actions.dismiss(r)},i);e.set(r,a)},r=he()((i,a)=>({items:[],actions:{push:e=>{let t=e.id??O(),a=Date.now(),o={id:t,type:e.type,title:e.title,message:e.message,createdAt:a,ttlMs:e.ttlMs,dismissible:e.dismissible??!0,actions:e.actions};return i(e=>({items:[o,...e.items.filter(e=>e.id!==t)].slice(0,k)})),n(r,t,o.ttlMs),t},update:(e,t)=>{let{items:o}=a(),s=o.findIndex(t=>t.id===e);if(s===-1)return!1;let c=o[s],l={...c,...t,id:c.id,createdAt:c.createdAt};return i(t=>({items:t.items.map(t=>t.id===e?l:t)})),`ttlMs`in t&&n(r,e,l.ttlMs),!0},upsert:e=>a().actions.update(e.id,{type:e.type,title:e.title,message:e.message,ttlMs:e.ttlMs,dismissible:e.dismissible})?e.id:a().actions.push(e),dismiss:e=>{t(e),i(t=>({items:t.items.filter(t=>t.id!==e)}))},clear:()=>{e.forEach(e=>window.clearTimeout(e)),e.clear(),i({items:[]})}}}));return r}})))()}function M({children:e}){let t=(0,F.useMemo)(()=>A(),[]);return(0,F.useEffect)(()=>T(t),[t]),(0,I.jsx)(L.Provider,{value:t,children:e})}function N(){let e=(0,F.useContext)(L);if(!e)throw ue({hookName:`useNotificationApi`,providerName:`NotificationsProvider`});return e}function _e(){let e=N();return _(e,e=>e.items)}function P(){let e=N(),t=_(e,e=>e.actions),n=e=>(n,r)=>t.push({type:e,message:n,...r});return{...t,success:n(`success`),info:n(`info`),warning:n(`warning`),error:n(`error`)}}var F,I,L;function R(){return(R=e((()=>{F=n(),j(),ge(),I=h(),L=(0,F.createContext)(null),M.__docgenInfo={description:`Провайдер уведомлений приложения. Хранит состояние списка уведомлений и предоставляет хуки доступа к нему.`,methods:[],displayName:`NotificationsProvider`}})))()}var z,B,V,H,U,W,ve,ye,be,xe,Se,Ce,we,Te,G;function Ee(){return(Ee=e((()=>{z=`STGQ3g`,B=`RaiISE`,V=`cM81wO`,H=`nH2cuZ`,U=`A2glD7`,W=`yWjijS`,ve=`_1HO2ne`,ye=`OyRJpj`,be=`vrCrow`,xe=`A0X-ma`,Se=`AkHvPV`,Ce=`_4YDLB5`,we=`CK3Bqv`,Te=`nLmQut`,G={container:z,card:B,info:V,success:H,warning:U,error:W,header:ve,content:ye,copy:be,icon:xe,kicker:Se,title:Ce,message:we,actions:Te}})))()}function K(){let e=_e(),{dismiss:t}=P();return(0,q.jsx)(`div`,{className:G.container,"aria-label":`Область уведомлений`,"aria-live":`polite`,"aria-relevant":`additions text`,children:e.map(e=>{let n=De[e.type],r=e.title??n.title,i=n.Icon;return(0,q.jsx)(`article`,{role:e.type===`error`?`alert`:`status`,"aria-atomic":`true`,className:ce(G.card,G[e.type]),children:(0,q.jsxs)(fe,{align:`start`,justify:`between`,gap:`sm`,className:G.header,children:[(0,q.jsxs)(fe,{align:`start`,gap:`sm`,className:G.content,children:[(0,q.jsx)(`span`,{className:G.icon,"aria-hidden":`true`,children:(0,q.jsx)(i,{})}),(0,q.jsxs)(`div`,{className:G.copy,children:[(0,q.jsx)(`div`,{className:G.kicker,children:n.title}),e.title?(0,q.jsx)(`div`,{className:G.title,children:r}):null,(0,q.jsx)(`div`,{className:G.message,children:e.message}),e.actions?.length?(0,q.jsx)(`div`,{className:G.actions,children:e.actions.map(t=>(0,q.jsx)(g,{tone:t.tone??e.type,appearance:`outline`,"data-ui":`notification-action-button`,"data-action":`notification-action`,onClick:()=>void t.onClick(),children:t.label},t.label))}):null]})]}),e.dismissible===!1?null:(0,q.jsx)(g,{icon:(0,q.jsx)(ae,{}),appearance:`ghost`,tone:e.type,onClick:()=>t(e.id),"aria-label":`Закрыть уведомление`,"data-ui":`notification-dismiss-button`,"data-action":`dismiss-notification`})]})},e.id)})})}var q,De;function Oe(){return(Oe=e((()=>{le(),a(),s(),ee(),p(),ie(),pe(),de(),R(),Ee(),q=h(),De={info:{title:`Информация`,Icon:d},success:{title:`Успешно`,Icon:c},warning:{title:`Предупреждение`,Icon:m},error:{title:`Ошибка`,Icon:o}},K.__docgenInfo={description:`Хост для визуального отображения очереди уведомлений.
2
2
  Обычно монтируется один раз на уровне приложения рядом с провайдером уведомлений.`,methods:[],displayName:`NotificationsHost`}})))()}var ke=t({InteractivePlayground:()=>$,Showcase:()=>Q,__namedExportsOrder:()=>ze,default:()=>Pe});function Ae(){let{clear:e}=P();return(0,J.useEffect)(()=>(e(),()=>{e()}),[e]),null}function je({children:e}){return(0,Y.jsxs)(M,{children:[(0,Y.jsx)(Ae,{}),(0,Y.jsx)(`div`,{style:Fe,children:(0,Y.jsxs)(`div`,{style:Ie,children:[(0,Y.jsxs)(`div`,{style:Le,children:[(0,Y.jsx)(`h2`,{style:{margin:0,fontSize:`var(--font-size-xl)`},children:`Демонстрация очереди уведомлений`}),(0,Y.jsx)(`p`,{style:{margin:`12px 0 0`,color:`var(--content-1)`},children:"Хост закреплён в левом нижнем углу и использует общие токены проекта: `surface`, `content`, `status` и семантические `tone-*`. Внутри историй можно проверить лимит очереди, sticky-уведомления и сценарий длительной операции с обновлением одного уведомления."})]}),e]})}),(0,Y.jsx)(K,{})]})}function Me(){let{clear:e,push:t}=P();return(0,J.useEffect)(()=>(e(),t({type:`info`,title:`Сетевой статус`,message:`Подключение к серверу восстановлено.`,ttlMs:6e3}),t({type:`success`,title:`Профиль обновлён`,message:`Изменения сохранены и отправлены в очередь на синхронизацию.`,ttlMs:4500}),t({type:`warning`,title:`Требуется внимание`,message:`Срок действия сессии истекает через 5 минут.`}),t({type:`error`,title:`Ошибка импорта`,message:`Не удалось загрузить журнал операций.
3
3
  Повторите запрос или обратитесь к администратору.`}),()=>{e()}),[e,t]),(0,Y.jsxs)(`div`,{style:X,children:[(0,Y.jsx)(`h3`,{style:{margin:0},children:`Снимок состояний`}),(0,Y.jsx)(`p`,{style:{margin:0,color:`var(--content-1)`},children:`История сразу заполняет очередь всеми типами уведомлений, чтобы оценить цвет, иконки, контраст и читаемость текста.`})]})}function Ne(){let e=P(),t=(0,J.useRef)(null),[n,r]=(0,J.useState)(!1),a=()=>{t.current=null,r(!1)},o=(n,r)=>{let i=t.current;i&&(!e.update(i,{message:n,...r})||r?.type)&&a()};return(0,Y.jsxs)(`div`,{style:Re,children:[(0,Y.jsxs)(`section`,{style:X,children:[(0,Y.jsx)(`h3`,{style:{margin:0},children:`Базовые сценарии`}),(0,Y.jsx)(`p`,{style:{margin:0,color:`var(--content-1)`},children:"Вызовы через `useNotify` подходят для UI-логики внутри React-компонентов."}),(0,Y.jsxs)(`div`,{style:Z,children:[(0,Y.jsx)(g,{tone:`info`,appearance:`outline`,icon:(0,Y.jsx)(d,{}),onClick:()=>e.info(`Справочник обновлён по расписанию.`,{title:`Информация`,ttlMs:3500}),children:`Info`}),(0,Y.jsx)(g,{tone:`success`,appearance:`solid`,icon:(0,Y.jsx)(i,{}),onClick:()=>e.success(`Изменения сохранены.`,{title:`Операция завершена`,ttlMs:2500}),children:`Success`}),(0,Y.jsx)(g,{tone:`warning`,appearance:`outline`,icon:(0,Y.jsx)(m,{}),onClick:()=>e.warning(`Подтвердите действие в течение 2 минут.`,{title:`Требуется подтверждение`,dismissible:!1}),children:`Sticky warning`}),(0,Y.jsx)(g,{tone:`error`,appearance:`solid`,icon:(0,Y.jsx)(u,{}),onClick:()=>e.error(`Сервис проверки подписей недоступен.`,{title:`Критическая ошибка`}),children:`Error`})]})]}),(0,Y.jsxs)(`section`,{style:X,children:[(0,Y.jsx)(`h3`,{style:{margin:0},children:`Долгая операция`}),(0,Y.jsx)(`p`,{style:{margin:0,color:`var(--content-1)`},children:"Сценарий имитирует `notify.progress`: создаёт одно sticky-уведомление и затем обновляет его по тому же `id`."}),(0,Y.jsxs)(`div`,{style:Z,children:[(0,Y.jsx)(g,{variant:`neutralOutline`,icon:(0,Y.jsx)(y,{}),onClick:()=>{let n=e.push({type:`info`,title:`Экспорт архива`,message:`Подготавливаю пакет документов...`,dismissible:!1});t.current=n,r(!0)},children:`Запустить`}),(0,Y.jsx)(g,{variant:`neutralOutline`,icon:(0,Y.jsx)(f,{}),onClick:()=>{o(`Обработано 68% записей. Формирую итоговый архив...`)},disabled:!n,children:`Обновить прогресс`}),(0,Y.jsx)(g,{tone:`success`,appearance:`outline`,icon:(0,Y.jsx)(i,{}),onClick:()=>{o(`Архив подготовлен и доступен для скачивания.`,{type:`success`,ttlMs:2500,dismissible:!0})},disabled:!n,children:`Завершить успешно`}),(0,Y.jsx)(g,{tone:`error`,appearance:`outline`,icon:(0,Y.jsx)(u,{}),onClick:()=>{o(`Не удалось собрать архив из-за ошибки чтения вложений.`,{type:`error`,ttlMs:5e3,dismissible:!0})},disabled:!n,children:`Завершить ошибкой`})]})]}),(0,Y.jsxs)(`section`,{style:X,children:[(0,Y.jsx)(`h3`,{style:{margin:0},children:`Очередь и очистка`}),(0,Y.jsx)(`p`,{style:{margin:0,color:`var(--content-1)`},children:`Стор сохраняет не более 6 уведомлений. Кнопка ниже специально создаёт 8 элементов, чтобы проверить отсечение старых записей.`}),(0,Y.jsxs)(`div`,{style:Z,children:[(0,Y.jsx)(g,{variant:`neutralOutline`,icon:(0,Y.jsx)(f,{}),onClick:()=>{for(let t=1;t<=8;t+=1)e.info(`Пакет ${t} поставлен в очередь на обработку.`,{title:`Задача ${t}`,ttlMs:8e3})},children:`Заполнить очередь`}),(0,Y.jsx)(g,{tone:`info`,appearance:`outline`,icon:(0,Y.jsx)(S,{}),onClick:()=>e.info(`Это уведомление исчезнет автоматически через 2 секунды.`,{title:`TTL = 2000 мс`,ttlMs:2e3}),children:`Проверить TTL`}),(0,Y.jsx)(g,{variant:`transparent`,icon:(0,Y.jsx)(re,{}),onClick:()=>{a(),e.clear()},children:`Очистить всё`})]})]})]})}var J,Y,Pe,Fe,Ie,Le,Re,X,Z,Q,$,ze;function Be(){return(Be=e((()=>{J=n(),b(),r(),ee(),te(),C(),ne(),p(),l(),pe(),R(),Oe(),Y=h(),Pe={title:`Shared/UI/Notifications`,component:K,parameters:{atomicCanvas:!0,layout:`fullscreen`,docs:{description:{component:`Компонент отображает очередь глобальных уведомлений поверх интерфейса. Истории ниже показывают внешний вид для разных статусов, работу автозакрытия, ограничение очереди и сценарий длительной операции с обновлением одного уведомления.`}}}},Fe={minHeight:`100vh`,padding:`32px 24px 160px`,background:`linear-gradient(180deg, color-mix(in srgb, var(--surface-1) 82%, transparent) 0%, var(--surface-0) 100%)`,color:`var(--content-0)`},Ie={maxWidth:1120,margin:`0 auto`,display:`grid`,gap:16},Le={padding:20,border:`var(--border)`,borderRadius:`var(--radius-md)`,background:`var(--surface-0)`,boxShadow:`var(--shadow-sm)`},Re={display:`grid`,gap:16,gridTemplateColumns:`repeat(auto-fit, minmax(280px, 1fr))`},X={padding:20,border:`var(--border)`,borderRadius:`var(--radius-md)`,background:`var(--surface-0)`,boxShadow:`var(--shadow-sm)`,display:`grid`,gap:12,alignContent:`start`},Z={display:`flex`,flexWrap:`wrap`,gap:10},Q={render:()=>(0,Y.jsx)(je,{children:(0,Y.jsx)(Me,{})}),parameters:{docs:{description:{story:`Быстрый визуальный обзор: все статусы сразу добавляются в очередь после открытия истории.`}}}},$={render:()=>(0,Y.jsx)(je,{children:(0,Y.jsx)(Ne,{})}),parameters:{docs:{description:{story:`Интерактивный сценарий для проверки базовых уведомлений, длительной операции, лимита очереди и автозакрытия.`}}}},Q.parameters={...Q.parameters,docs:{...Q.parameters?.docs,source:{originalSource:`{
4
4
  render: () => <NotificationsStoryShell>
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-CrnMVMTc.js";import{i as n,r}from"./react-qN2cStNd.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-Dz3dJBcm.js";import{a as p,c as m,i as h,l as g,n as _,o as v,r as y,s as b,t as x,u as S}from"./ODataMultiSelect.stories-CP6_jGSr.js";function C(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(s,{of:b,parameters:{docs:{toc:!0}}}),`
1
+ import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-DaN-XFub.js";import{i as n,r}from"./react-qN2cStNd.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-BiaKjftm.js";import{a as p,c as m,i as h,l as g,n as _,o as v,r as y,s as b,t as x,u as S}from"./ODataMultiSelect.stories-Q1DUIL2W.js";function C(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(s,{of:b,parameters:{docs:{toc:!0}}}),`
2
2
  `,(0,T.jsx)(u,{children:`ODataMultiSelect`}),`
3
3
  `,(0,T.jsx)(o,{children:`Мультиселект с загрузкой коллекций по OData и зависимостями от внешних фильтров`}),`
4
4
  `,(0,T.jsx)(t.p,{children:`ODataMultiSelect уже имеет живые stories, а эта страница собирает их в структурированную документацию с краткими рекомендациями, примерами подключения и API.
@@ -1,4 +1,4 @@
1
- import{n as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{t as n}from"./react-C21x__mS.js";import{n as r}from"./iframe-CrnMVMTc.js";import{r as i,s as a}from"./odata-BaxgzNGj.js";import{n as o,r as s,t as c}from"./useODataSelectBase-WnxdcAM4.js";import{n as l,t as u}from"./MultiSelect-D5XFosSU.js";import{a as d,i as f,l as p,n as m,o as h,r as g,s as _,t as v}from"./odataStoryFixtures-BbswaX_5.js";function y({odata:e,segment:t,model:n,value:r,dependencies:i,onChange:a}){let c=s({odata:e,segment:t,model:n,value:r,dependencies:i}),l=e=>{a(o(e,c.selectionKey))};return{...c,handleChange:l}}function b(){return(b=e((()=>{c()})))()}var x,S;function C(){return(C=e((()=>{n(),a(),b(),l(),x=r(),S=({odata:e,segment:t,model:n,label:r,description:a,disabled:o,value:s,dependencies:c,onChange:l,size:d})=>{let f=y({odata:e,segment:t,model:i(n),value:s,dependencies:c,onChange:l});return(0,x.jsx)(u,{label:r,description:a,size:d,codeKey:f.codeKey,textKey:f.textKey,hideCode:t.hideCode??e.hideCode,items:f.filteredItems,value:f.selectedItems,onChange:f.handleChange,onQuery:f.setQuery,query:f.query,defaultFilter:!1,highlightQuery:f.debouncedQuery,disabled:o||f.isLoading,placeholder:f.placeholder,error:f.isError?`Ошибка загрузки`:void 0})},S.__docgenInfo={description:``,methods:[],displayName:`ODataMultiSelect`}})))()}var w=t({BasicDivision:()=>A,CollectionError:()=>L,HideCode:()=>j,LinkedFilters:()=>P,LoadingState:()=>F,MetadataError:()=>I,SelectTextValue:()=>M,StaticDependency:()=>N,__namedExportsOrder:()=>R,default:()=>k});function T({initialValue:e=[],odata:t=m,model:n=v,segment:r=g,dependencies:i,label:a=`OData MultiSelect`,description:o}){let[s,c]=(0,D.useState)(e);return(0,O.jsxs)(`div`,{style:{display:`grid`,gap:12,maxWidth:520},children:[(0,O.jsx)(S,{label:a,description:o,odata:t,model:n,segment:r,value:s,dependencies:i,onChange:c}),(0,O.jsxs)(`div`,{style:{fontSize:`var(--font-size-sm)`,color:`var(--content-1)`},children:[`Текущее значение: `,s.length?s.join(`, `):`пусто`]})]})}function E(){let[e,t]=(0,D.useState)([_.region]),[n,r]=(0,D.useState)([_.branch,_.branchAlt]),[i,a]=(0,D.useState)([_.team]),[o,s]=(0,D.useState)([_.owner,_.ownerAlt]),c=e.length?{REGION:e}:void 0,l=e.length&&n.length?{REGION:e,BRANCH:n}:c,u=e.length&&n.length&&i.length?{REGION:e,BRANCH:n,TEAM:i}:l;return(0,O.jsxs)(`div`,{style:{display:`grid`,gap:16,maxWidth:720},children:[(0,O.jsx)(S,{label:`Регион`,description:`Корневой фильтр для цепочки. После смены значения downstream-фильтры сбрасываются.`,odata:m,model:{...v,codeKey:`REGION`},segment:{placeholder:`Регион`},value:e,onChange:e=>{t(e),r([]),a([]),s([])}}),(0,O.jsx)(S,{label:`Подразделение`,description:`Выбор нескольких подразделений внутри выбранных регионов.`,odata:m,model:{...v,codeKey:`BRANCH`},segment:{placeholder:`Подразделение`},dependencies:c,value:n,onChange:e=>{r(e),a([]),s([])}}),(0,O.jsx)(S,{label:`Команда`,description:`Третий уровень зависит от текущего набора подразделений.`,odata:m,model:{...v,codeKey:`TEAM`},segment:{placeholder:`Команда`},dependencies:l,value:i,onChange:e=>{a(e),s([])}}),(0,O.jsx)(S,{label:`Ответственный`,description:`Leaf-уровень для выбранных команд.`,odata:m,model:{...v,codeKey:`OWNER`},segment:{placeholder:`Ответственный`},dependencies:u,value:o,onChange:s}),(0,O.jsxs)(`div`,{style:{display:`grid`,gap:4,fontSize:`var(--font-size-sm)`,color:`var(--content-1)`},children:[(0,O.jsxs)(`div`,{children:[`Регион: `,e.length?e.join(`, `):`пусто`]}),(0,O.jsxs)(`div`,{children:[`Подразделение: `,n.length?n.join(`, `):`пусто`]}),(0,O.jsxs)(`div`,{children:[`Команда: `,i.length?i.join(`, `):`пусто`]}),(0,O.jsxs)(`div`,{children:[`Ответственный: `,o.length?o.join(`, `):`пусто`]})]})]})}var D,O,k,A,j,M,N,P,F,I,L,R;function z(){return(z=e((()=>{D=n(),f(),C(),O=r(),k={title:`Shared/UI/ODataMultiSelect`,component:S,decorators:[p],beforeEach:d,parameters:{atomicCanvas:!0,layout:`padded`,odataMockMode:`success`},args:{label:`Регион`,description:`Пример OData MultiSelect на основе конфигурации ui control.`,odata:m,model:v,segment:g,value:[],onChange:()=>{}},argTypes:{onChange:{control:!1},value:{control:!1},dependencies:{control:!1}}},A={name:`Базовый регион`,render:()=>(0,O.jsx)(T,{label:`Регион`,description:`Базовая настройка из multiSelectConfig: выбор кодов REGION с текстовым отображением.`,model:{...v,codeKey:`REGION`},segment:{placeholder:`Регион`},initialValue:[_.region]})},j={name:`Скрытый код`,render:()=>(0,O.jsx)(T,{label:`Подразделение`,description:`Сценарий segment.hideCode: в списке и токене показывается только текст без кода.`,model:{...v,codeKey:`BRANCH`},segment:{placeholder:`Подразделение`,hideCode:!0},initialValue:[_.branch,_.branchAlt]})},M={name:`Выбор текста вместо кода`,render:()=>(0,O.jsx)(T,{label:`Регион по тексту`,description:`Сценарий segment.selectText: наружу возвращаются текстовые значения, а не коды.`,model:{...v,codeKey:`REGION`},segment:{placeholder:`Регион`,selectText:!0},initialValue:[_.regionText]})},N={name:`Зависимость от региона`,render:()=>(0,O.jsx)(T,{label:`Подразделение c зависимостью`,description:`Фильтрация подразделений по уже выбранному региону через props.dependencies.`,model:{...v,codeKey:`BRANCH`},segment:{placeholder:`Подразделение`},dependencies:{REGION:[_.region]},initialValue:[_.branch]})},P={name:`Связанная цепочка фильтров`,render:()=>(0,O.jsx)(E,{})},F={name:`Состояние загрузки`,parameters:{odataMockMode:`loading`},render:()=>(0,O.jsx)(T,{odata:h.loading,label:`Команда`,description:`Mock с задержкой ответа, чтобы проверить loading-state и skeleton.`,model:{...v,codeKey:`TEAM`},segment:{placeholder:`Команда`}})},I={name:`Ошибка metadata`,parameters:{odataMockMode:`metadataError`},render:()=>(0,O.jsx)(T,{odata:h.metadataError,label:`Регион`,description:`Сервис возвращает ошибку metadata. Полезно для проверки поведения хука useODataEntity.`,model:{...v,codeKey:`REGION`},segment:{placeholder:`Регион`}})},L={name:`Деградация при ошибке коллекции`,parameters:{odataMockMode:`collectionError`},render:()=>(0,O.jsx)(T,{odata:h.collectionError,label:`Ответственный`,description:`Transport возвращает 500, а текущий API-контракт безопасно показывает пустой список.`,model:{...v,codeKey:`OWNER`},segment:{placeholder:`Ответственный`}})},A.parameters={...A.parameters,docs:{...A.parameters?.docs,source:{originalSource:`{
1
+ import{n as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{t as n}from"./react-C21x__mS.js";import{n as r}from"./iframe-DaN-XFub.js";import{r as i,s as a}from"./odata-BtfB5Aje.js";import{n as o,r as s,t as c}from"./useODataSelectBase-DlbeGYUP.js";import{n as l,t as u}from"./MultiSelect-B-wX6JPo.js";import{a as d,i as f,l as p,n as m,o as h,r as g,s as _,t as v}from"./odataStoryFixtures-CDDaJZKW.js";function y({odata:e,segment:t,model:n,value:r,dependencies:i,onChange:a}){let c=s({odata:e,segment:t,model:n,value:r,dependencies:i}),l=e=>{a(o(e,c.selectionKey))};return{...c,handleChange:l}}function b(){return(b=e((()=>{c()})))()}var x,S;function C(){return(C=e((()=>{n(),a(),b(),l(),x=r(),S=({odata:e,segment:t,model:n,label:r,description:a,disabled:o,value:s,dependencies:c,onChange:l,size:d})=>{let f=y({odata:e,segment:t,model:i(n),value:s,dependencies:c,onChange:l});return(0,x.jsx)(u,{label:r,description:a,size:d,codeKey:f.codeKey,textKey:f.textKey,hideCode:t.hideCode??e.hideCode,items:f.filteredItems,value:f.selectedItems,onChange:f.handleChange,onQuery:f.setQuery,query:f.query,defaultFilter:!1,highlightQuery:f.debouncedQuery,disabled:o||f.isLoading,placeholder:f.placeholder,error:f.isError?`Ошибка загрузки`:void 0})},S.__docgenInfo={description:``,methods:[],displayName:`ODataMultiSelect`}})))()}var w=t({BasicDivision:()=>A,CollectionError:()=>L,HideCode:()=>j,LinkedFilters:()=>P,LoadingState:()=>F,MetadataError:()=>I,SelectTextValue:()=>M,StaticDependency:()=>N,__namedExportsOrder:()=>R,default:()=>k});function T({initialValue:e=[],odata:t=m,model:n=v,segment:r=g,dependencies:i,label:a=`OData MultiSelect`,description:o}){let[s,c]=(0,D.useState)(e);return(0,O.jsxs)(`div`,{style:{display:`grid`,gap:12,maxWidth:520},children:[(0,O.jsx)(S,{label:a,description:o,odata:t,model:n,segment:r,value:s,dependencies:i,onChange:c}),(0,O.jsxs)(`div`,{style:{fontSize:`var(--font-size-sm)`,color:`var(--content-1)`},children:[`Текущее значение: `,s.length?s.join(`, `):`пусто`]})]})}function E(){let[e,t]=(0,D.useState)([_.region]),[n,r]=(0,D.useState)([_.branch,_.branchAlt]),[i,a]=(0,D.useState)([_.team]),[o,s]=(0,D.useState)([_.owner,_.ownerAlt]),c=e.length?{REGION:e}:void 0,l=e.length&&n.length?{REGION:e,BRANCH:n}:c,u=e.length&&n.length&&i.length?{REGION:e,BRANCH:n,TEAM:i}:l;return(0,O.jsxs)(`div`,{style:{display:`grid`,gap:16,maxWidth:720},children:[(0,O.jsx)(S,{label:`Регион`,description:`Корневой фильтр для цепочки. После смены значения downstream-фильтры сбрасываются.`,odata:m,model:{...v,codeKey:`REGION`},segment:{placeholder:`Регион`},value:e,onChange:e=>{t(e),r([]),a([]),s([])}}),(0,O.jsx)(S,{label:`Подразделение`,description:`Выбор нескольких подразделений внутри выбранных регионов.`,odata:m,model:{...v,codeKey:`BRANCH`},segment:{placeholder:`Подразделение`},dependencies:c,value:n,onChange:e=>{r(e),a([]),s([])}}),(0,O.jsx)(S,{label:`Команда`,description:`Третий уровень зависит от текущего набора подразделений.`,odata:m,model:{...v,codeKey:`TEAM`},segment:{placeholder:`Команда`},dependencies:l,value:i,onChange:e=>{a(e),s([])}}),(0,O.jsx)(S,{label:`Ответственный`,description:`Leaf-уровень для выбранных команд.`,odata:m,model:{...v,codeKey:`OWNER`},segment:{placeholder:`Ответственный`},dependencies:u,value:o,onChange:s}),(0,O.jsxs)(`div`,{style:{display:`grid`,gap:4,fontSize:`var(--font-size-sm)`,color:`var(--content-1)`},children:[(0,O.jsxs)(`div`,{children:[`Регион: `,e.length?e.join(`, `):`пусто`]}),(0,O.jsxs)(`div`,{children:[`Подразделение: `,n.length?n.join(`, `):`пусто`]}),(0,O.jsxs)(`div`,{children:[`Команда: `,i.length?i.join(`, `):`пусто`]}),(0,O.jsxs)(`div`,{children:[`Ответственный: `,o.length?o.join(`, `):`пусто`]})]})]})}var D,O,k,A,j,M,N,P,F,I,L,R;function z(){return(z=e((()=>{D=n(),f(),C(),O=r(),k={title:`Shared/UI/ODataMultiSelect`,component:S,decorators:[p],beforeEach:d,parameters:{atomicCanvas:!0,layout:`padded`,odataMockMode:`success`},args:{label:`Регион`,description:`Пример OData MultiSelect на основе конфигурации ui control.`,odata:m,model:v,segment:g,value:[],onChange:()=>{}},argTypes:{onChange:{control:!1},value:{control:!1},dependencies:{control:!1}}},A={name:`Базовый регион`,render:()=>(0,O.jsx)(T,{label:`Регион`,description:`Базовая настройка из multiSelectConfig: выбор кодов REGION с текстовым отображением.`,model:{...v,codeKey:`REGION`},segment:{placeholder:`Регион`},initialValue:[_.region]})},j={name:`Скрытый код`,render:()=>(0,O.jsx)(T,{label:`Подразделение`,description:`Сценарий segment.hideCode: в списке и токене показывается только текст без кода.`,model:{...v,codeKey:`BRANCH`},segment:{placeholder:`Подразделение`,hideCode:!0},initialValue:[_.branch,_.branchAlt]})},M={name:`Выбор текста вместо кода`,render:()=>(0,O.jsx)(T,{label:`Регион по тексту`,description:`Сценарий segment.selectText: наружу возвращаются текстовые значения, а не коды.`,model:{...v,codeKey:`REGION`},segment:{placeholder:`Регион`,selectText:!0},initialValue:[_.regionText]})},N={name:`Зависимость от региона`,render:()=>(0,O.jsx)(T,{label:`Подразделение c зависимостью`,description:`Фильтрация подразделений по уже выбранному региону через props.dependencies.`,model:{...v,codeKey:`BRANCH`},segment:{placeholder:`Подразделение`},dependencies:{REGION:[_.region]},initialValue:[_.branch]})},P={name:`Связанная цепочка фильтров`,render:()=>(0,O.jsx)(E,{})},F={name:`Состояние загрузки`,parameters:{odataMockMode:`loading`},render:()=>(0,O.jsx)(T,{odata:h.loading,label:`Команда`,description:`Mock с задержкой ответа, чтобы проверить loading-state и skeleton.`,model:{...v,codeKey:`TEAM`},segment:{placeholder:`Команда`}})},I={name:`Ошибка metadata`,parameters:{odataMockMode:`metadataError`},render:()=>(0,O.jsx)(T,{odata:h.metadataError,label:`Регион`,description:`Сервис возвращает ошибку metadata. Полезно для проверки поведения хука useODataEntity.`,model:{...v,codeKey:`REGION`},segment:{placeholder:`Регион`}})},L={name:`Деградация при ошибке коллекции`,parameters:{odataMockMode:`collectionError`},render:()=>(0,O.jsx)(T,{odata:h.collectionError,label:`Ответственный`,description:`Transport возвращает 500, а текущий API-контракт безопасно показывает пустой список.`,model:{...v,codeKey:`OWNER`},segment:{placeholder:`Ответственный`}})},A.parameters={...A.parameters,docs:{...A.parameters?.docs,source:{originalSource:`{
2
2
  name: "Базовый регион",
3
3
  render: () => <StatefulODataMultiSelect label="Регион" description="Базовая настройка из multiSelectConfig: выбор кодов REGION с текстовым отображением." model={{
4
4
  ...baseModel,
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-CrnMVMTc.js";import{i as n,r}from"./react-qN2cStNd.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-Dz3dJBcm.js";import{a as p,c as m,i as h,l as g,n as _,o as v,r as y,s as b,t as x,u as S}from"./ODataSelect.stories-DTv31Rkv.js";function C(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(s,{of:b,parameters:{docs:{toc:!0}}}),`
1
+ import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-DaN-XFub.js";import{i as n,r}from"./react-qN2cStNd.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-BiaKjftm.js";import{a as p,c as m,i as h,l as g,n as _,o as v,r as y,s as b,t as x,u as S}from"./ODataSelect.stories-DLi7Rwzk.js";function C(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(s,{of:b,parameters:{docs:{toc:!0}}}),`
2
2
  `,(0,T.jsx)(u,{children:`ODataSelect`}),`
3
3
  `,(0,T.jsx)(o,{children:`Single-select с загрузкой OData-справочника, поиском и зависимостями от внешних фильтров`}),`
4
4
  `,(0,T.jsx)(t.p,{children:`ODataSelect уже имеет живые stories, а эта страница собирает их в структурированную документацию с краткими рекомендациями, примерами подключения и API.
@@ -1,4 +1,4 @@
1
- import{n as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{t as n}from"./react-C21x__mS.js";import{n as r}from"./iframe-CrnMVMTc.js";import{r as i,s as a}from"./odata-BaxgzNGj.js";import{n as o,t as s}from"./SelectOptionContent-DhtCMwz6.js";import{c,s as l}from"./Input-DtOsW7ur.js";import{n as u,t as d}from"./Select-BiOxxy0y.js";import{r as f,t as p}from"./useODataSelectBase-WnxdcAM4.js";import{a as m,i as h,l as g,n as _,o as v,r as y,s as b,t as x}from"./odataStoryFixtures-BbswaX_5.js";function S({odata:e,segment:t,model:n,value:r,dependencies:i,onChange:a}){let o=f({odata:e,segment:t,model:n,value:r?[r]:[],dependencies:i}),s=o.selectedItems[0],c=(0,C.useMemo)(()=>s?[s,...o.filteredItems]:o.filteredItems,[o.filteredItems,s]),l=e=>{a(e?.[o.selectionKey])};return{...o,selectedItem:s,options:c,handleChange:l}}var C;function w(){return(w=e((()=>{C=n(),p()})))()}function T(e,t,n){return e?t||Object.keys(e).find(e=>e!==n)||n:t||n}var E,D;function O(){return(O=e((()=>{n(),a(),c(),w(),u(),o(),E=r(),D=({odata:e,segment:t,model:n,size:r,label:a,description:o,disabled:c,value:u,dependencies:f,onChange:p,clearable:m})=>{let h=S({odata:e,segment:t,model:i(n),value:u,dependencies:f,onChange:p});if(h.isLoading)return(0,E.jsx)(l,{size:r,label:a,description:o});let g=t.hideCode??e.hideCode,_=T(h.selectedItem??h.options[0],h.textKey,h.codeKey);return(0,E.jsx)(d,{size:r,label:a,description:o,options:h.options,value:h.selectedItem,onChange:h.handleChange,getOptionKey:e=>e[h.codeKey],getOptionLabel:e=>e[_],getOptionCode:g?void 0:e=>e[h.codeKey],getOptionAriaLabel:e=>g||e[_]===e[h.codeKey]?String(e[_]):`${e[_]} ${e[h.codeKey]}`,renderValue:e=>(0,E.jsx)(s,{label:e[_],code:g?void 0:e[h.codeKey]}),renderOption:e=>(0,E.jsx)(s,{label:e[_],code:g?void 0:e[h.codeKey],highlight:h.debouncedQuery}),searchable:!0,query:h.query,onQuery:h.setQuery,defaultFilter:!1,disabled:c||h.isLoading,placeholder:h.placeholder,loadingState:`Загрузка...`,errorState:h.isError?`Ошибка загрузки`:void 0,emptyState:!h.isLoading&&!h.isError?`Нет данных`:void 0,clearable:m})},D.__docgenInfo={description:``,methods:[],displayName:`ODataSelect`,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:``},clearable:{required:!1,tsType:{name:`boolean`},description:``}}}})))()}var k=t({BasicDivision:()=>F,CollectionError:()=>H,HideCode:()=>I,LinkedFilters:()=>z,LoadingState:()=>B,MetadataError:()=>V,SelectTextValue:()=>L,StaticDependency:()=>R,__namedExportsOrder:()=>U,default:()=>P});function A({initialValue:e,odata:t=_,model:n=x,segment:r=y,dependencies:i,label:a=`OData Select`,description:o}){let[s,c]=(0,M.useState)(e);return(0,N.jsxs)(`div`,{style:{display:`grid`,gap:12,maxWidth:520},children:[(0,N.jsx)(D,{label:a,description:o,odata:t,model:n,segment:r,value:s,dependencies:i,onChange:c}),(0,N.jsxs)(`div`,{style:{fontSize:`var(--font-size-sm)`,color:`var(--content-1)`},children:[`Текущее значение: `,s||`пусто`]})]})}function j(){let[e,t]=(0,M.useState)(b.region),[n,r]=(0,M.useState)(b.branch),[i,a]=(0,M.useState)(b.team),[o,s]=(0,M.useState)(b.owner),c=e?{REGION:[e]}:void 0,l=e&&n?{REGION:[e],BRANCH:[n]}:c,u=e&&n&&i?{REGION:[e],BRANCH:[n],TEAM:[i]}:l;return(0,N.jsxs)(`div`,{style:{display:`grid`,gap:16,maxWidth:720},children:[(0,N.jsx)(D,{label:`Регион`,description:`Первый фильтр в цепочке. Меняет доступный набор подразделений.`,odata:_,model:{...x,codeKey:`REGION`},segment:{placeholder:`Регион`},value:e,onChange:e=>{t(e),r(void 0),a(void 0),s(void 0)}}),(0,N.jsx)(D,{label:`Подразделение`,description:`Второй фильтр зависит от выбранного региона.`,odata:_,model:{...x,codeKey:`BRANCH`},segment:{placeholder:`Подразделение`},dependencies:c,value:n,onChange:e=>{r(e),a(void 0),s(void 0)}}),(0,N.jsx)(D,{label:`Команда`,description:`Третий фильтр зависит от сочетания региона и подразделения.`,odata:_,model:{...x,codeKey:`TEAM`},segment:{placeholder:`Команда`},dependencies:l,value:i,onChange:e=>{a(e),s(void 0)}}),(0,N.jsx)(D,{label:`Ответственный`,description:`Последний фильтр показывает leaf-узлы для выбранного пути.`,odata:_,model:{...x,codeKey:`OWNER`},segment:{placeholder:`Ответственный`},dependencies:u,value:o,onChange:s}),(0,N.jsxs)(`div`,{style:{display:`grid`,gap:4,fontSize:`var(--font-size-sm)`,color:`var(--content-1)`},children:[(0,N.jsxs)(`div`,{children:[`Регион: `,e||`пусто`]}),(0,N.jsxs)(`div`,{children:[`Подразделение: `,n||`пусто`]}),(0,N.jsxs)(`div`,{children:[`Команда: `,i||`пусто`]}),(0,N.jsxs)(`div`,{children:[`Ответственный: `,o||`пусто`]})]})]})}var M,N,P,F,I,L,R,z,B,V,H,U;function W(){return(W=e((()=>{M=n(),O(),h(),N=r(),P={title:`Shared/UI/ODataSelect`,component:D,decorators:[g],beforeEach:m,parameters:{atomicCanvas:!0,layout:`padded`,odataMockMode:`success`},args:{label:`Регион`,description:`Пример OData Select на основе конфигурации ui control.`,odata:_,model:x,segment:y,value:void 0,onChange:()=>{}},argTypes:{onChange:{control:!1},value:{control:!1},dependencies:{control:!1}}},F={name:`Базовый регион`,render:()=>(0,N.jsx)(A,{label:`Регион`,description:`Базовая настройка single-select для выбора кода REGION.`,model:{...x,codeKey:`REGION`},segment:{placeholder:`Регион`},initialValue:b.region})},I={name:`Скрытый код`,render:()=>(0,N.jsx)(A,{label:`Подразделение`,description:`Код скрыт и в выпадающем списке, и в выбранном значении.`,model:{...x,codeKey:`BRANCH`},segment:{placeholder:`Подразделение`,hideCode:!0},initialValue:b.branch})},L={name:`Выбор текста вместо кода`,render:()=>(0,N.jsx)(A,{label:`Регион по тексту`,description:`Снаружи хранится текстовое значение, а не код.`,model:{...x,codeKey:`REGION`},segment:{placeholder:`Регион`,selectText:!0},initialValue:b.regionText})},R={name:`Зависимость от региона`,render:()=>(0,N.jsx)(A,{label:`Подразделение c зависимостью`,description:`Фильтрация подразделений по уже выбранному региону через props.dependencies.`,model:{...x,codeKey:`BRANCH`},segment:{placeholder:`Подразделение`},dependencies:{REGION:[b.region]},initialValue:b.branch})},z={name:`Связанная цепочка фильтров`,render:()=>(0,N.jsx)(j,{})},B={name:`Состояние загрузки`,parameters:{odataMockMode:`loading`},render:()=>(0,N.jsx)(A,{odata:v.loading,label:`Команда`,description:`Mock с задержкой ответа, чтобы проверить loading-state.`,model:{...x,codeKey:`TEAM`},segment:{placeholder:`Команда`}})},V={name:`Ошибка metadata`,parameters:{odataMockMode:`metadataError`},render:()=>(0,N.jsx)(A,{odata:v.metadataError,label:`Регион`,description:`Сервис возвращает ошибку metadata.`,model:{...x,codeKey:`REGION`},segment:{placeholder:`Регион`}})},H={name:`Деградация при ошибке коллекции`,parameters:{odataMockMode:`collectionError`},render:()=>(0,N.jsx)(A,{odata:v.collectionError,label:`Ответственный`,description:`Transport возвращает 500, а текущий API-контракт безопасно показывает пустой список.`,model:{...x,codeKey:`OWNER`},segment:{placeholder:`Ответственный`}})},F.parameters={...F.parameters,docs:{...F.parameters?.docs,source:{originalSource:`{
1
+ import{n as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{t as n}from"./react-C21x__mS.js";import{n as r}from"./iframe-DaN-XFub.js";import{r as i,s as a}from"./odata-BtfB5Aje.js";import{n as o,t as s}from"./SelectOptionContent-RAmgWCOm.js";import{c,s as l}from"./Input-Co--DMHY.js";import{n as u,t as d}from"./Select-X_O4M8Hi.js";import{r as f,t as p}from"./useODataSelectBase-DlbeGYUP.js";import{a as m,i as h,l as g,n as _,o as v,r as y,s as b,t as x}from"./odataStoryFixtures-CDDaJZKW.js";function S({odata:e,segment:t,model:n,value:r,dependencies:i,onChange:a}){let o=f({odata:e,segment:t,model:n,value:r?[r]:[],dependencies:i}),s=o.selectedItems[0],c=(0,C.useMemo)(()=>s?[s,...o.filteredItems]:o.filteredItems,[o.filteredItems,s]),l=e=>{a(e?.[o.selectionKey])};return{...o,selectedItem:s,options:c,handleChange:l}}var C;function w(){return(w=e((()=>{C=n(),p()})))()}function T(e,t,n){return e?t||Object.keys(e).find(e=>e!==n)||n:t||n}var E,D;function O(){return(O=e((()=>{n(),a(),c(),w(),u(),o(),E=r(),D=({odata:e,segment:t,model:n,size:r,label:a,description:o,disabled:c,value:u,dependencies:f,onChange:p,clearable:m})=>{let h=S({odata:e,segment:t,model:i(n),value:u,dependencies:f,onChange:p});if(h.isLoading)return(0,E.jsx)(l,{size:r,label:a,description:o});let g=t.hideCode??e.hideCode,_=T(h.selectedItem??h.options[0],h.textKey,h.codeKey);return(0,E.jsx)(d,{size:r,label:a,description:o,options:h.options,value:h.selectedItem,onChange:h.handleChange,getOptionKey:e=>e[h.codeKey],getOptionLabel:e=>e[_],getOptionCode:g?void 0:e=>e[h.codeKey],getOptionAriaLabel:e=>g||e[_]===e[h.codeKey]?String(e[_]):`${e[_]} ${e[h.codeKey]}`,renderValue:e=>(0,E.jsx)(s,{label:e[_],code:g?void 0:e[h.codeKey]}),renderOption:e=>(0,E.jsx)(s,{label:e[_],code:g?void 0:e[h.codeKey],highlight:h.debouncedQuery}),searchable:!0,query:h.query,onQuery:h.setQuery,defaultFilter:!1,disabled:c||h.isLoading,placeholder:h.placeholder,loadingState:`Загрузка...`,errorState:h.isError?`Ошибка загрузки`:void 0,emptyState:!h.isLoading&&!h.isError?`Нет данных`:void 0,clearable:m})},D.__docgenInfo={description:``,methods:[],displayName:`ODataSelect`,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:``},clearable:{required:!1,tsType:{name:`boolean`},description:``}}}})))()}var k=t({BasicDivision:()=>F,CollectionError:()=>H,HideCode:()=>I,LinkedFilters:()=>z,LoadingState:()=>B,MetadataError:()=>V,SelectTextValue:()=>L,StaticDependency:()=>R,__namedExportsOrder:()=>U,default:()=>P});function A({initialValue:e,odata:t=_,model:n=x,segment:r=y,dependencies:i,label:a=`OData Select`,description:o}){let[s,c]=(0,M.useState)(e);return(0,N.jsxs)(`div`,{style:{display:`grid`,gap:12,maxWidth:520},children:[(0,N.jsx)(D,{label:a,description:o,odata:t,model:n,segment:r,value:s,dependencies:i,onChange:c}),(0,N.jsxs)(`div`,{style:{fontSize:`var(--font-size-sm)`,color:`var(--content-1)`},children:[`Текущее значение: `,s||`пусто`]})]})}function j(){let[e,t]=(0,M.useState)(b.region),[n,r]=(0,M.useState)(b.branch),[i,a]=(0,M.useState)(b.team),[o,s]=(0,M.useState)(b.owner),c=e?{REGION:[e]}:void 0,l=e&&n?{REGION:[e],BRANCH:[n]}:c,u=e&&n&&i?{REGION:[e],BRANCH:[n],TEAM:[i]}:l;return(0,N.jsxs)(`div`,{style:{display:`grid`,gap:16,maxWidth:720},children:[(0,N.jsx)(D,{label:`Регион`,description:`Первый фильтр в цепочке. Меняет доступный набор подразделений.`,odata:_,model:{...x,codeKey:`REGION`},segment:{placeholder:`Регион`},value:e,onChange:e=>{t(e),r(void 0),a(void 0),s(void 0)}}),(0,N.jsx)(D,{label:`Подразделение`,description:`Второй фильтр зависит от выбранного региона.`,odata:_,model:{...x,codeKey:`BRANCH`},segment:{placeholder:`Подразделение`},dependencies:c,value:n,onChange:e=>{r(e),a(void 0),s(void 0)}}),(0,N.jsx)(D,{label:`Команда`,description:`Третий фильтр зависит от сочетания региона и подразделения.`,odata:_,model:{...x,codeKey:`TEAM`},segment:{placeholder:`Команда`},dependencies:l,value:i,onChange:e=>{a(e),s(void 0)}}),(0,N.jsx)(D,{label:`Ответственный`,description:`Последний фильтр показывает leaf-узлы для выбранного пути.`,odata:_,model:{...x,codeKey:`OWNER`},segment:{placeholder:`Ответственный`},dependencies:u,value:o,onChange:s}),(0,N.jsxs)(`div`,{style:{display:`grid`,gap:4,fontSize:`var(--font-size-sm)`,color:`var(--content-1)`},children:[(0,N.jsxs)(`div`,{children:[`Регион: `,e||`пусто`]}),(0,N.jsxs)(`div`,{children:[`Подразделение: `,n||`пусто`]}),(0,N.jsxs)(`div`,{children:[`Команда: `,i||`пусто`]}),(0,N.jsxs)(`div`,{children:[`Ответственный: `,o||`пусто`]})]})]})}var M,N,P,F,I,L,R,z,B,V,H,U;function W(){return(W=e((()=>{M=n(),O(),h(),N=r(),P={title:`Shared/UI/ODataSelect`,component:D,decorators:[g],beforeEach:m,parameters:{atomicCanvas:!0,layout:`padded`,odataMockMode:`success`},args:{label:`Регион`,description:`Пример OData Select на основе конфигурации ui control.`,odata:_,model:x,segment:y,value:void 0,onChange:()=>{}},argTypes:{onChange:{control:!1},value:{control:!1},dependencies:{control:!1}}},F={name:`Базовый регион`,render:()=>(0,N.jsx)(A,{label:`Регион`,description:`Базовая настройка single-select для выбора кода REGION.`,model:{...x,codeKey:`REGION`},segment:{placeholder:`Регион`},initialValue:b.region})},I={name:`Скрытый код`,render:()=>(0,N.jsx)(A,{label:`Подразделение`,description:`Код скрыт и в выпадающем списке, и в выбранном значении.`,model:{...x,codeKey:`BRANCH`},segment:{placeholder:`Подразделение`,hideCode:!0},initialValue:b.branch})},L={name:`Выбор текста вместо кода`,render:()=>(0,N.jsx)(A,{label:`Регион по тексту`,description:`Снаружи хранится текстовое значение, а не код.`,model:{...x,codeKey:`REGION`},segment:{placeholder:`Регион`,selectText:!0},initialValue:b.regionText})},R={name:`Зависимость от региона`,render:()=>(0,N.jsx)(A,{label:`Подразделение c зависимостью`,description:`Фильтрация подразделений по уже выбранному региону через props.dependencies.`,model:{...x,codeKey:`BRANCH`},segment:{placeholder:`Подразделение`},dependencies:{REGION:[b.region]},initialValue:b.branch})},z={name:`Связанная цепочка фильтров`,render:()=>(0,N.jsx)(j,{})},B={name:`Состояние загрузки`,parameters:{odataMockMode:`loading`},render:()=>(0,N.jsx)(A,{odata:v.loading,label:`Команда`,description:`Mock с задержкой ответа, чтобы проверить loading-state.`,model:{...x,codeKey:`TEAM`},segment:{placeholder:`Команда`}})},V={name:`Ошибка metadata`,parameters:{odataMockMode:`metadataError`},render:()=>(0,N.jsx)(A,{odata:v.metadataError,label:`Регион`,description:`Сервис возвращает ошибку metadata.`,model:{...x,codeKey:`REGION`},segment:{placeholder:`Регион`}})},H={name:`Деградация при ошибке коллекции`,parameters:{odataMockMode:`collectionError`},render:()=>(0,N.jsx)(A,{odata:v.collectionError,label:`Ответственный`,description:`Transport возвращает 500, а текущий API-контракт безопасно показывает пустой список.`,model:{...x,codeKey:`OWNER`},segment:{placeholder:`Ответственный`}})},F.parameters={...F.parameters,docs:{...F.parameters?.docs,source:{originalSource:`{
2
2
  name: "Базовый регион",
3
3
  render: () => <StatefulODataSelect label="Регион" description="Базовая настройка single-select для выбора кода REGION." model={{
4
4
  ...baseModel,
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-CrnMVMTc.js";import{i as n,r}from"./react-qN2cStNd.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-Dz3dJBcm.js";import{a as p,c as m,i as h,l as g,n as _,o as v,r as y,s as b,t as x}from"./ODataTreeMultiSelect.stories-CM8QjG8r.js";function S(e){let t={code:`code`,h2:`h2`,p:`p`,...n(),...e.components};return(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(s,{of:b,parameters:{docs:{toc:!0}}}),`
1
+ import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-DaN-XFub.js";import{i as n,r}from"./react-qN2cStNd.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-BiaKjftm.js";import{a as p,c as m,i as h,l as g,n as _,o as v,r as y,s as b,t as x}from"./ODataTreeMultiSelect.stories-H42q78xI.js";function S(e){let t={code:`code`,h2:`h2`,p:`p`,...n(),...e.components};return(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(s,{of:b,parameters:{docs:{toc:!0}}}),`
2
2
  `,(0,w.jsx)(u,{children:`ODataTreeMultiSelect`}),`
3
3
  `,(0,w.jsx)(o,{children:`Мультивыбор по одной OData-цепочке в виде дерева`}),`
4
4
  `,(0,w.jsxs)(t.p,{children:[(0,w.jsx)(t.code,{children:`ODataTreeMultiSelect`}),` строит дерево из одной OData-цепочки и отдает наружу канонизированный выбор в формате `,(0,w.jsx)(t.code,{children:`Record<string, string[]>`}),`.`]}),`
@@ -1,4 +1,4 @@
1
- import{n as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{t as n}from"./react-C21x__mS.js";import{n as r}from"./iframe-CrnMVMTc.js";import{a as i,c as a,i as o,l as s,n as c,o as l,s as u}from"./odataStoryFixtures-BbswaX_5.js";import{n as d,t as f}from"./useODataTreeData-C7L5TOjl.js";import{n as p,t as m}from"./TreeMultiSelect-CtDZ1cXU.js";function h({label:e,description:t,disabled:n,size:r,placeholder:i,query:a,defaultQuery:o,onQuery:s,optionsLayout:c,value:l,onChange:u,odata:f,segments:p,model:h,defaultExpandedCodeKeys:_}){let v=d({odata:f,segments:p,model:h});return(0,g.jsx)(m,{label:e,description:t,disabled:n||v.isLoading,size:r,placeholder:i??v.placeholder,nodes:v.nodes,value:l,onChange:u,query:a,defaultQuery:o,onQuery:s,optionsLayout:c,defaultExpandedCodeKeys:_,isLoading:v.isLoading,error:v.isError?`Ошибка загрузки`:void 0})}var g;function _(){return(_=e((()=>{f(),p(),g=r(),h.__docgenInfo={description:``,methods:[],displayName:`ODataTreeMultiSelect`,props:{model:{required:!1,tsType:{name:`ODataDependentBaseProps["model"]`,raw:`ODataDependentBaseProps["model"]`},description:``},placeholder:{required:!1,tsType:{name:`string`},description:``},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:``},optionsLayout:{required:!1,tsType:{name:`union`,raw:`"tree" | "columns"`,elements:[{name:`literal`,value:`"tree"`},{name:`literal`,value:`"columns"`}]},description:`Переключает способ показа загруженного OData-дерева, не меняя формат value и запросов.`},defaultExpandedCodeKeys:{required:!1,tsType:{name:`unknown`},description:"Ключи OData-уровней, раскрываемых после появления загруженных узлов.\nВ режиме `columns` дерево по-прежнему отображается полностью раскрытым."}},composes:[`Omit`]}})))()}var v=t({BalancedColumns:()=>D,Basic:()=>w,ErrorState:()=>A,LargeRootGroupsColumns:()=>O,LoadingState:()=>k,MixedSelection:()=>E,ParentCompression:()=>T,__namedExportsOrder:()=>j,default:()=>C});function y({initialValue:e={},odata:t=c,segments:n=a,label:r=`ODataTreeMultiSelect`,description:i,optionsLayout:o=`tree`,defaultExpandedCodeKeys:s}){let[l,u]=(0,b.useState)(e);return(0,x.jsxs)(`div`,{style:{display:`grid`,gap:12,maxWidth:520},children:[(0,x.jsx)(h,{label:r,description:i,odata:t,segments:n,value:l,onChange:u,optionsLayout:o,defaultExpandedCodeKeys:s}),(0,x.jsxs)(`div`,{style:{fontSize:`var(--font-size-sm)`,color:`var(--content-1)`},children:[`Текущее значение: `,JSON.stringify(l)]})]})}var b,x,S,C,w,T,E,D,O,k,A,j;function M(){return(M=e((()=>{b=n(),o(),_(),x=r(),S={REGION:a.REGION,OWNER:a.OWNER},C={title:`Shared/UI/ODataTreeMultiSelect`,component:h,decorators:[s],beforeEach:i,parameters:{atomicCanvas:!0,layout:`padded`,odataMockMode:`success`},args:{label:`OData дерево`,description:`Multi-select поверх одной OData-цепочки.`,odata:c,segments:a,value:{},onChange:()=>{}},argTypes:{segments:{control:!1},value:{control:!1},onChange:{control:!1}}},w={render:()=>(0,x.jsx)(y,{initialValue:{OWNER:[u.owner]}})},T={render:()=>(0,x.jsx)(y,{label:`Компрессия subtree`,description:`Пример, когда наружу уходит узел верхнего уровня вместо полного списка потомков.`,initialValue:{REGION:[u.region]}})},E={render:()=>(0,x.jsx)(y,{label:`Смешанный выбор`,description:`Смешанный frontier по соседним уровням в OData-дереве.`,initialValue:{BRANCH:[u.branch],OWNER:[u.ownerAlt]}})},D={render:()=>(0,x.jsx)(y,{label:`OData tree в столбцах`,description:`Режим columns открывает все уровни независимо от пустой настройки defaultExpandedCodeKeys.`,optionsLayout:`columns`,defaultExpandedCodeKeys:[],initialValue:{BRANCH:[u.branch]}})},O={render:()=>(0,x.jsx)(y,{label:`Крупные OData-группы`,description:`Сокращённая цепочка REGION → OWNER создаёт несколько root-групп для проверки порога из трёх строк.`,optionsLayout:`columns`,segments:S})},k={parameters:{odataMockMode:`loading`},render:()=>(0,x.jsx)(y,{odata:l.loading,description:`Сценарий загрузки дерева.`})},A={parameters:{odataMockMode:`metadataError`},render:()=>(0,x.jsx)(y,{odata:l.metadataError,description:`Сценарий ошибки metadata дерева.`})},w.parameters={...w.parameters,docs:{...w.parameters?.docs,source:{originalSource:`{
1
+ import{n as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{t as n}from"./react-C21x__mS.js";import{n as r}from"./iframe-DaN-XFub.js";import{a as i,c as a,i as o,l as s,n as c,o as l,s as u}from"./odataStoryFixtures-CDDaJZKW.js";import{n as d,t as f}from"./useODataTreeData-CvsoLfiG.js";import{n as p,t as m}from"./TreeMultiSelect-BC_n1Wb-.js";function h({label:e,description:t,disabled:n,size:r,placeholder:i,query:a,defaultQuery:o,onQuery:s,optionsLayout:c,value:l,onChange:u,odata:f,segments:p,model:h,defaultExpandedCodeKeys:_}){let v=d({odata:f,segments:p,model:h});return(0,g.jsx)(m,{label:e,description:t,disabled:n||v.isLoading,size:r,placeholder:i??v.placeholder,nodes:v.nodes,value:l,onChange:u,query:a,defaultQuery:o,onQuery:s,optionsLayout:c,defaultExpandedCodeKeys:_,isLoading:v.isLoading,error:v.isError?`Ошибка загрузки`:void 0})}var g;function _(){return(_=e((()=>{f(),p(),g=r(),h.__docgenInfo={description:``,methods:[],displayName:`ODataTreeMultiSelect`,props:{model:{required:!1,tsType:{name:`ODataDependentBaseProps["model"]`,raw:`ODataDependentBaseProps["model"]`},description:``},placeholder:{required:!1,tsType:{name:`string`},description:``},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:``},optionsLayout:{required:!1,tsType:{name:`union`,raw:`"tree" | "columns"`,elements:[{name:`literal`,value:`"tree"`},{name:`literal`,value:`"columns"`}]},description:`Переключает способ показа загруженного OData-дерева, не меняя формат value и запросов.`},defaultExpandedCodeKeys:{required:!1,tsType:{name:`unknown`},description:"Ключи OData-уровней, раскрываемых после появления загруженных узлов.\nВ режиме `columns` дерево по-прежнему отображается полностью раскрытым."}},composes:[`Omit`]}})))()}var v=t({BalancedColumns:()=>D,Basic:()=>w,ErrorState:()=>A,LargeRootGroupsColumns:()=>O,LoadingState:()=>k,MixedSelection:()=>E,ParentCompression:()=>T,__namedExportsOrder:()=>j,default:()=>C});function y({initialValue:e={},odata:t=c,segments:n=a,label:r=`ODataTreeMultiSelect`,description:i,optionsLayout:o=`tree`,defaultExpandedCodeKeys:s}){let[l,u]=(0,b.useState)(e);return(0,x.jsxs)(`div`,{style:{display:`grid`,gap:12,maxWidth:520},children:[(0,x.jsx)(h,{label:r,description:i,odata:t,segments:n,value:l,onChange:u,optionsLayout:o,defaultExpandedCodeKeys:s}),(0,x.jsxs)(`div`,{style:{fontSize:`var(--font-size-sm)`,color:`var(--content-1)`},children:[`Текущее значение: `,JSON.stringify(l)]})]})}var b,x,S,C,w,T,E,D,O,k,A,j;function M(){return(M=e((()=>{b=n(),o(),_(),x=r(),S={REGION:a.REGION,OWNER:a.OWNER},C={title:`Shared/UI/ODataTreeMultiSelect`,component:h,decorators:[s],beforeEach:i,parameters:{atomicCanvas:!0,layout:`padded`,odataMockMode:`success`},args:{label:`OData дерево`,description:`Multi-select поверх одной OData-цепочки.`,odata:c,segments:a,value:{},onChange:()=>{}},argTypes:{segments:{control:!1},value:{control:!1},onChange:{control:!1}}},w={render:()=>(0,x.jsx)(y,{initialValue:{OWNER:[u.owner]}})},T={render:()=>(0,x.jsx)(y,{label:`Компрессия subtree`,description:`Пример, когда наружу уходит узел верхнего уровня вместо полного списка потомков.`,initialValue:{REGION:[u.region]}})},E={render:()=>(0,x.jsx)(y,{label:`Смешанный выбор`,description:`Смешанный frontier по соседним уровням в OData-дереве.`,initialValue:{BRANCH:[u.branch],OWNER:[u.ownerAlt]}})},D={render:()=>(0,x.jsx)(y,{label:`OData tree в столбцах`,description:`Режим columns открывает все уровни независимо от пустой настройки defaultExpandedCodeKeys.`,optionsLayout:`columns`,defaultExpandedCodeKeys:[],initialValue:{BRANCH:[u.branch]}})},O={render:()=>(0,x.jsx)(y,{label:`Крупные OData-группы`,description:`Сокращённая цепочка REGION → OWNER создаёт несколько root-групп для проверки порога из трёх строк.`,optionsLayout:`columns`,segments:S})},k={parameters:{odataMockMode:`loading`},render:()=>(0,x.jsx)(y,{odata:l.loading,description:`Сценарий загрузки дерева.`})},A={parameters:{odataMockMode:`metadataError`},render:()=>(0,x.jsx)(y,{odata:l.metadataError,description:`Сценарий ошибки metadata дерева.`})},w.parameters={...w.parameters,docs:{...w.parameters?.docs,source:{originalSource:`{
2
2
  render: () => <StatefulODataTreeMultiSelect initialValue={{
3
3
  OWNER: [storyValues.owner]
4
4
  }} />
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-CrnMVMTc.js";import{i as n,r}from"./react-qN2cStNd.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-Dz3dJBcm.js";import{a as p,i as m,n as h,o as g,r as _,s as v,t as y}from"./ODataTreeSelect.stories-2UkFTnbE.js";function b(e){let t={code:`code`,h2:`h2`,p:`p`,...n(),...e.components};return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(s,{of:m,parameters:{docs:{toc:!0}}}),`
1
+ import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-DaN-XFub.js";import{i as n,r}from"./react-qN2cStNd.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-BiaKjftm.js";import{a as p,i as m,n as h,o as g,r as _,s as v,t as y}from"./ODataTreeSelect.stories-MOILmtfY.js";function b(e){let t={code:`code`,h2:`h2`,p:`p`,...n(),...e.components};return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(s,{of:m,parameters:{docs:{toc:!0}}}),`
2
2
  `,(0,S.jsx)(u,{children:`ODataTreeSelect`}),`
3
3
  `,(0,S.jsx)(o,{children:`Single-select по одной OData-цепочке в виде дерева`}),`
4
4
  `,(0,S.jsxs)(t.p,{children:[(0,S.jsx)(t.code,{children:`ODataTreeSelect`}),` загружает одну OData-коллекцию, строит дерево по цепочке codeKey и позволяет выбрать любой узел.`]}),`
@@ -1,4 +1,4 @@
1
- import{n as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{t as n}from"./react-C21x__mS.js";import{n as r}from"./iframe-CrnMVMTc.js";import{a as i,c as a,i as o,l as s,n as c,o as l,s as u}from"./odataStoryFixtures-BbswaX_5.js";import{n as d,t as f}from"./useODataTreeData-C7L5TOjl.js";import{n as p,t as m}from"./TreeSelect-BNuJBo9x.js";function h({label:e,description:t,disabled:n,size:r,placeholder:i,query:a,defaultQuery:o,onQuery:s,value:c,onChange:l,odata:u,segments:f,model:p,clearable:h,defaultExpandedCodeKeys:_}){let v=d({odata:u,segments:f,model:p});return(0,g.jsx)(m,{label:e,description:t,disabled:n||v.isLoading,size:r,placeholder:i??v.placeholder,nodes:v.nodes,value:c,onChange:l,query:a,defaultQuery:o,onQuery:s,defaultExpandedCodeKeys:_,isLoading:v.isLoading,error:v.isError?`Ошибка загрузки`:void 0,clearable:h})}var g;function _(){return(_=e((()=>{f(),p(),g=r(),h.__docgenInfo={description:``,methods:[],displayName:`ODataTreeSelect`,props:{model:{required:!1,tsType:{name:`ODataDependentBaseProps["model"]`,raw:`ODataDependentBaseProps["model"]`},description:``},placeholder:{required:!1,tsType:{name:`string`},description:``},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:``},clearable:{required:!1,tsType:{name:`boolean`},description:``},defaultExpandedCodeKeys:{required:!1,tsType:{name:`unknown`},description:`Ключи OData-уровней, раскрываемых после появления загруженных узлов.
1
+ import{n as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{t as n}from"./react-C21x__mS.js";import{n as r}from"./iframe-DaN-XFub.js";import{a as i,c as a,i as o,l as s,n as c,o as l,s as u}from"./odataStoryFixtures-CDDaJZKW.js";import{n as d,t as f}from"./useODataTreeData-CvsoLfiG.js";import{n as p,t as m}from"./TreeSelect-CDecTnag.js";function h({label:e,description:t,disabled:n,size:r,placeholder:i,query:a,defaultQuery:o,onQuery:s,value:c,onChange:l,odata:u,segments:f,model:p,clearable:h,defaultExpandedCodeKeys:_}){let v=d({odata:u,segments:f,model:p});return(0,g.jsx)(m,{label:e,description:t,disabled:n||v.isLoading,size:r,placeholder:i??v.placeholder,nodes:v.nodes,value:c,onChange:l,query:a,defaultQuery:o,onQuery:s,defaultExpandedCodeKeys:_,isLoading:v.isLoading,error:v.isError?`Ошибка загрузки`:void 0,clearable:h})}var g;function _(){return(_=e((()=>{f(),p(),g=r(),h.__docgenInfo={description:``,methods:[],displayName:`ODataTreeSelect`,props:{model:{required:!1,tsType:{name:`ODataDependentBaseProps["model"]`,raw:`ODataDependentBaseProps["model"]`},description:``},placeholder:{required:!1,tsType:{name:`string`},description:``},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:``},clearable:{required:!1,tsType:{name:`boolean`},description:``},defaultExpandedCodeKeys:{required:!1,tsType:{name:`unknown`},description:`Ключи OData-уровней, раскрываемых после появления загруженных узлов.
2
2
  Настройка влияет только на представление и не изменяет OData-запросы.`}},composes:[`Omit`]}})))()}var v=t({Basic:()=>C,ErrorState:()=>D,LoadingState:()=>E,OnlySecondLevelExpanded:()=>T,SelectParent:()=>w,__namedExportsOrder:()=>O,default:()=>S});function y({initialValue:e,odata:t=c,segments:n=a,label:r=`ODataTreeSelect`,description:i,defaultExpandedCodeKeys:o}){let[s,l]=(0,b.useState)(e);return(0,x.jsxs)(`div`,{style:{display:`grid`,gap:12,maxWidth:520},children:[(0,x.jsx)(h,{label:r,description:i,odata:t,segments:n,value:s,onChange:l,defaultExpandedCodeKeys:o}),(0,x.jsxs)(`div`,{style:{fontSize:`var(--font-size-sm)`,color:`var(--content-1)`},children:[`Текущее значение: `,s?`${s.codeKey}=${s.value}`:`пусто`]})]})}var b,x,S,C,w,T,E,D,O;function k(){return(k=e((()=>{b=n(),o(),_(),x=r(),S={title:`Shared/UI/ODataTreeSelect`,component:h,decorators:[s],beforeEach:i,parameters:{atomicCanvas:!0,layout:`padded`,odataMockMode:`success`},args:{label:`OData дерево`,description:`Single-select поверх одной OData-цепочки.`,odata:c,segments:a,value:void 0,onChange:()=>{}},argTypes:{segments:{control:!1},value:{control:!1},onChange:{control:!1}}},C={render:()=>(0,x.jsx)(y,{initialValue:{codeKey:`OWNER`,value:u.owner}})},w={render:()=>(0,x.jsx)(y,{label:`Выбор родителя`,description:`Проверка выбора узла верхнего уровня из OData-дерева.`,initialValue:{codeKey:`REGION`,value:u.region}})},T={render:()=>(0,x.jsx)(y,{label:`Раскрывается только второй уровень`,description:`REGION остаётся закрытым. После его ручного открытия узлы BRANCH уже раскрыты по умолчанию.`,defaultExpandedCodeKeys:[`BRANCH`]})},E={parameters:{odataMockMode:`loading`},render:()=>(0,x.jsx)(y,{odata:l.loading,description:`Сценарий загрузки дерева.`})},D={parameters:{odataMockMode:`metadataError`},render:()=>(0,x.jsx)(y,{odata:l.metadataError,description:`Сценарий ошибки metadata дерева.`})},C.parameters={...C.parameters,docs:{...C.parameters?.docs,source:{originalSource:`{
3
3
  render: () => <StatefulODataTreeSelect initialValue={{
4
4
  codeKey: "OWNER",
@@ -1,4 +1,4 @@
1
- import{n as e,o as t}from"./rolldown-runtime-C0FnF6B9.js";import{t as n}from"./react-C21x__mS.js";import{n as r,t as i}from"./chevron-left-BoVuWD4h.js";import{n as a,t as o}from"./chevron-right-DS62_o_9.js";import{n as s}from"./iframe-CrnMVMTc.js";import{a as c,i as l}from"./utils-DUM89eIj.js";var u,d,f,p,m;function h(){return(h=e((()=>{u=`_7xUQBN`,d=`AonLqg`,f=`j-5yFn`,p=`pOIq63`,m={oneStepScroller:u,ossViewport:d,ossScroller:f,ossButton:p}})))()}function g(e){return Math.max(0,e.scrollWidth-e.clientWidth)}var _,v,y,b;function x(){return(x=e((()=>{_=t(n(),1),l(),r(),a(),h(),v=s(),y=1,b=({children:e,className:t,itemSelector:n,scrollPadding:r=6,smooth:a=!0})=>{let s=(0,_.useRef)(null),l=(0,_.useRef)(null),[u,d]=(0,_.useState)(!1),[f,p]=(0,_.useState)(!1),h=(0,_.useCallback)(()=>{let e=s.current;return e?n?Array.from(e.querySelectorAll(n)):Array.from(e.children).filter(e=>e instanceof HTMLElement):[]},[n]),b=(0,_.useCallback)(e=>{let t=s.current;if(!t)return null;if(n){let r=e.closest(n);return r&&t.contains(r)?r:null}let r=e;for(;r&&r.parentElement&&r.parentElement!==t;)r=r.parentElement;return r&&r.parentElement===t?r:null},[n]),x=(0,_.useCallback)(()=>{let e=s.current;if(!e){d(!1),p(!1);return}let t=Math.max(0,e.scrollWidth-e.clientWidth),n=Math.max(0,Math.min(e.scrollLeft,t)),r=n>y,i=n<t-y;d(e=>e===r?e:r),p(e=>e===i?e:i)},[]),S=(0,_.useCallback)(()=>{l.current===null&&(l.current=requestAnimationFrame(()=>{l.current=null,x()}))},[x]),C=(0,_.useCallback)(e=>{let t=s.current;if(!t)return;let n=h()[0];if(!n)return;let r=n.getBoundingClientRect().width;if(!r)return;let i=Math.round(e*r),o=Math.max(0,t.scrollWidth-t.clientWidth),c=Math.max(0,Math.min(t.scrollLeft+i,o));t.scrollTo({left:c,behavior:a?`smooth`:`auto`})},[h,a]),w=(0,_.useCallback)(e=>{let t=s.current;if(!t)return;let n=t.getBoundingClientRect(),i=e.getBoundingClientRect(),o=i.left-n.left+t.scrollLeft,c=o+i.width,l=t.scrollLeft,u=t.scrollLeft+t.clientWidth;if(o>=l+y&&c<=u-y)return;let d=t.scrollLeft;o<l?d=Math.max(0,o-r):c>u&&(d=Math.min(g(t),c-t.clientWidth+r)),t.scrollTo({left:Math.round(d),behavior:a?`smooth`:`auto`})},[r,a]);(0,_.useEffect)(()=>{let e=s.current;if(!e)return;let t=e=>{let t=e.target;if(!(t instanceof HTMLElement))return;let n=b(t);n&&w(n)};return e.addEventListener(`focusin`,t),()=>e.removeEventListener(`focusin`,t)},[w,b]),(0,_.useEffect)(()=>{let e=s.current;if(!e)return;let t=()=>S();e.addEventListener(`scroll`,t,{passive:!0});let n=null;typeof ResizeObserver<`u`&&(n=new ResizeObserver(S),n.observe(e));let r=null;return typeof MutationObserver<`u`&&(r=new MutationObserver(S),r.observe(e,{childList:!0,subtree:!1})),S(),()=>{e.removeEventListener(`scroll`,t),n?.disconnect(),r?.disconnect(),l.current!==null&&(cancelAnimationFrame(l.current),l.current=null)}},[S]),(0,_.useEffect)(()=>{S()},[e,S]);let T=()=>C(-1),E=()=>C(1),D=e=>{e.key===`ArrowLeft`?(e.preventDefault(),T()):e.key===`ArrowRight`&&(e.preventDefault(),E())},O=u||f;return(0,v.jsxs)(`div`,{className:c(m.oneStepScroller,t),style:{position:`relative`},children:[O&&(0,v.jsx)(`button`,{type:`button`,"aria-label":`Прокрутить шаг влево`,className:m.ossButton,onClick:T,disabled:!u,children:(0,v.jsx)(i,{})}),(0,v.jsx)(`div`,{className:m.ossViewport,onKeyDown:D,role:`group`,"aria-label":`Элементы прокрутки`,children:(0,v.jsx)(`div`,{className:m.ossScroller,ref:s,"aria-live":`polite`,children:e})}),O&&(0,v.jsx)(`button`,{type:`button`,"aria-label":`Прокрутить шаг вправо`,className:m.ossButton,onClick:E,disabled:!f,children:(0,v.jsx)(o,{})})]})},b.__docgenInfo={description:`Горизонтальный скроллер "по одному элементу".
1
+ import{n as e,o as t}from"./rolldown-runtime-C0FnF6B9.js";import{t as n}from"./react-C21x__mS.js";import{n as r,t as i}from"./chevron-left-DjbyJeHO.js";import{n as a,t as o}from"./chevron-right-D29uf09I.js";import{n as s}from"./iframe-DaN-XFub.js";import{a as c,i as l}from"./utils-DUM89eIj.js";var u,d,f,p,m;function h(){return(h=e((()=>{u=`_7xUQBN`,d=`AonLqg`,f=`j-5yFn`,p=`pOIq63`,m={oneStepScroller:u,ossViewport:d,ossScroller:f,ossButton:p}})))()}function g(e){return Math.max(0,e.scrollWidth-e.clientWidth)}var _,v,y,b;function x(){return(x=e((()=>{_=t(n(),1),l(),r(),a(),h(),v=s(),y=1,b=({children:e,className:t,itemSelector:n,scrollPadding:r=6,smooth:a=!0})=>{let s=(0,_.useRef)(null),l=(0,_.useRef)(null),[u,d]=(0,_.useState)(!1),[f,p]=(0,_.useState)(!1),h=(0,_.useCallback)(()=>{let e=s.current;return e?n?Array.from(e.querySelectorAll(n)):Array.from(e.children).filter(e=>e instanceof HTMLElement):[]},[n]),b=(0,_.useCallback)(e=>{let t=s.current;if(!t)return null;if(n){let r=e.closest(n);return r&&t.contains(r)?r:null}let r=e;for(;r&&r.parentElement&&r.parentElement!==t;)r=r.parentElement;return r&&r.parentElement===t?r:null},[n]),x=(0,_.useCallback)(()=>{let e=s.current;if(!e){d(!1),p(!1);return}let t=Math.max(0,e.scrollWidth-e.clientWidth),n=Math.max(0,Math.min(e.scrollLeft,t)),r=n>y,i=n<t-y;d(e=>e===r?e:r),p(e=>e===i?e:i)},[]),S=(0,_.useCallback)(()=>{l.current===null&&(l.current=requestAnimationFrame(()=>{l.current=null,x()}))},[x]),C=(0,_.useCallback)(e=>{let t=s.current;if(!t)return;let n=h()[0];if(!n)return;let r=n.getBoundingClientRect().width;if(!r)return;let i=Math.round(e*r),o=Math.max(0,t.scrollWidth-t.clientWidth),c=Math.max(0,Math.min(t.scrollLeft+i,o));t.scrollTo({left:c,behavior:a?`smooth`:`auto`})},[h,a]),w=(0,_.useCallback)(e=>{let t=s.current;if(!t)return;let n=t.getBoundingClientRect(),i=e.getBoundingClientRect(),o=i.left-n.left+t.scrollLeft,c=o+i.width,l=t.scrollLeft,u=t.scrollLeft+t.clientWidth;if(o>=l+y&&c<=u-y)return;let d=t.scrollLeft;o<l?d=Math.max(0,o-r):c>u&&(d=Math.min(g(t),c-t.clientWidth+r)),t.scrollTo({left:Math.round(d),behavior:a?`smooth`:`auto`})},[r,a]);(0,_.useEffect)(()=>{let e=s.current;if(!e)return;let t=e=>{let t=e.target;if(!(t instanceof HTMLElement))return;let n=b(t);n&&w(n)};return e.addEventListener(`focusin`,t),()=>e.removeEventListener(`focusin`,t)},[w,b]),(0,_.useEffect)(()=>{let e=s.current;if(!e)return;let t=()=>S();e.addEventListener(`scroll`,t,{passive:!0});let n=null;typeof ResizeObserver<`u`&&(n=new ResizeObserver(S),n.observe(e));let r=null;return typeof MutationObserver<`u`&&(r=new MutationObserver(S),r.observe(e,{childList:!0,subtree:!1})),S(),()=>{e.removeEventListener(`scroll`,t),n?.disconnect(),r?.disconnect(),l.current!==null&&(cancelAnimationFrame(l.current),l.current=null)}},[S]),(0,_.useEffect)(()=>{S()},[e,S]);let T=()=>C(-1),E=()=>C(1),D=e=>{e.key===`ArrowLeft`?(e.preventDefault(),T()):e.key===`ArrowRight`&&(e.preventDefault(),E())},O=u||f;return(0,v.jsxs)(`div`,{className:c(m.oneStepScroller,t),style:{position:`relative`},children:[O&&(0,v.jsx)(`button`,{type:`button`,"aria-label":`Прокрутить шаг влево`,className:m.ossButton,onClick:T,disabled:!u,children:(0,v.jsx)(i,{})}),(0,v.jsx)(`div`,{className:m.ossViewport,onKeyDown:D,role:`group`,"aria-label":`Элементы прокрутки`,children:(0,v.jsx)(`div`,{className:m.ossScroller,ref:s,"aria-live":`polite`,children:e})}),O&&(0,v.jsx)(`button`,{type:`button`,"aria-label":`Прокрутить шаг вправо`,className:m.ossButton,onClick:E,disabled:!f,children:(0,v.jsx)(o,{})})]})},b.__docgenInfo={description:`Горизонтальный скроллер "по одному элементу".
2
2
 
3
3
  Ожидает элементы фиксированной ширины (или близкой к фиксированной),
4
4
  чтобы шаг скролла соответствовал ширине одного элемента.`,methods:[],displayName:`OneStepScroller`,props:{children:{required:!0,tsType:{name:`ReactReactNode`,raw:`React.ReactNode`},description:``},className:{required:!1,tsType:{name:`string`},description:``},itemSelector:{required:!1,tsType:{name:`string`},description:`CSS-селектор элементов, которые считаются "шагами" скролла.
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-CrnMVMTc.js";import{i as n,r}from"./react-qN2cStNd.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-Dz3dJBcm.js";import{a as p,c as m,i as h,n as g,o as _,r as v,s as y,t as b}from"./PeriodSelect.stories-BH8I5Wmg.js";function x(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(s,{of:y,parameters:{docs:{toc:!0}}}),`
1
+ import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-DaN-XFub.js";import{i as n,r}from"./react-qN2cStNd.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-BiaKjftm.js";import{a as p,c as m,i as h,n as g,o as _,r as v,s as y,t as b}from"./PeriodSelect.stories-BIYx4_Yy.js";function x(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(s,{of:y,parameters:{docs:{toc:!0}}}),`
2
2
  `,(0,C.jsx)(u,{children:`PeriodSelect`}),`
3
3
  `,(0,C.jsx)(o,{children:`Выбор периода детализации дат с ограничением вариантов по связанному диапазону`}),`
4
4
  `,(0,C.jsxs)(t.p,{children:[`PeriodSelect используется для выбора уровня детализации: `,(0,C.jsx)(t.code,{children:`day`}),`, `,(0,C.jsx)(t.code,{children:`week`}),`, `,(0,C.jsx)(t.code,{children:`month`}),` или `,(0,C.jsx)(t.code,{children:`year`}),`. Компонент хранит только id выбранного периода, а недоступность вариантов вычисляет по переданному `,(0,C.jsx)(t.code,{children:`dateRange`}),` и порогам `,(0,C.jsx)(t.code,{children:`maxDayRangeDays`}),` / `,(0,C.jsx)(t.code,{children:`maxWeekRangeWeeks`}),`.`]}),`
@@ -1,4 +1,4 @@
1
- import{n as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{t as n}from"./react-C21x__mS.js";import{n as r}from"./iframe-CrnMVMTc.js";import{n as i,t as a}from"./Text-cVBcGheg.js";import{l as o,s}from"./odata-service-DnPlNGpU-Bpd4Zh9L.js";import{a as c,g as l,h as u}from"./formatters--mhLir82-v41eaI4a.js";import{r as d,t as f}from"./DateInput-DBwgBhFj.js";import{n as p,t as m}from"./GridContainer-qDguE1HS.js";import{n as h,o as g,r as _,t as v}from"./PresetSelect-9zitP0-V.js";function y(e){return typeof e==`string`&&D.has(e)}function b(e,t=E){let n=_(e,y,t),r=n.length>0?n:E,i=new Set(r);return E.filter(e=>i.has(e))}function x(e,t=T){return g(e,t)}function S({maxDayRangeDays:e,maxWeekRangeWeeks:t,labels:n}={}){let r=o(e),i=o(t);return T.map(e=>{let t={...e,label:n?.[e.id]??e.label};return e.id===`day`&&r!==void 0?{...t,maxRangeDays:r}:e.id===`week`&&i!==void 0?{...t,maxRangeDays:i*7}:t})}function C(e,t){let n=o(e.maxRangeDays);if(n===void 0||t===void 0)return!1;let r=l(t);return r!==null&&r>n}function w(e,t,n){if(t.length===0)return;let r=e===void 0?-1:t.findIndex(t=>t.id===e),i=r>=0?t[r]:void 0;return i&&!C(i,n)?i.id:(r>=0?t.slice(r+1):t).find(e=>!C(e,n))?.id??t.find(e=>!C(e,n))?.id}var T,E,D;function O(){return(O=e((()=>{u(),s(),T=Object.freeze([{id:`day`,label:`по дням`},{id:`week`,label:`по неделям`},{id:`month`,label:`по месяцам`},{id:`year`,label:`по годам`}]),E=Object.freeze([`day`,`week`,`month`,`year`]),D=new Set(T.map(e=>e.id))})))()}function k({value:e,onChange:t,options:n,labels:r,presetIds:i,dateRange:a,maxDayRangeDays:o,maxWeekRangeWeeks:s,...c}){let l=(0,A.useMemo)(()=>n??x(b(i),S({maxDayRangeDays:o,maxWeekRangeWeeks:s,labels:r})),[r,o,s,n,i]),u=(0,A.useMemo)(()=>w(e,l,a),[a,l,e]),d=(0,A.useRef)(null),f=(0,A.useEffectEvent)(()=>{if(u===void 0||u===e){d.current=null;return}let n=d.current;n&&n.value===e&&n.availableValue===u||(d.current={value:e,availableValue:u},t(u))});return(0,A.useEffect)(()=>{f()},[u,e]),(0,j.jsx)(v,{...c,options:l,value:u,onChange:t,getOptionDisabled:e=>C(e,a)})}var A,j;function M(){return(M=e((()=>{A=n(),h(),O(),j=r(),k.__docgenInfo={description:`Select периода детализации, который может ограничивать доступные варианты по диапазону дат.`,methods:[],displayName:`PeriodSelect`,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:``},options:{required:!1,tsType:{name:`unknown`},description:"Полный список custom options с высшим приоритетом. При его передаче\nвстроенные `presetIds`, `labels` и пороги диапазона не применяются."},labels:{required:!1,tsType:{name:`Partial`,elements:[{name:`Readonly`,elements:[{name:`Record`,elements:[{name:`union`,raw:`"day" | "week" | "month" | "year"`,elements:[{name:`literal`,value:`"day"`},{name:`literal`,value:`"week"`},{name:`literal`,value:`"month"`},{name:`literal`,value:`"year"`}]},{name:`string`}],raw:`Record<PeriodSelectPresetId, string>`}],raw:`Readonly<Record<PeriodSelectPresetId, string>>`}],raw:`Partial<PeriodSelectLabels>`},description:`Частично заменяет подписи встроенных вариантов, не изменяя их id,
1
+ import{n as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{t as n}from"./react-C21x__mS.js";import{n as r}from"./iframe-DaN-XFub.js";import{n as i,t as a}from"./Text-BPlJUr3R.js";import{l as o,s}from"./odata-service-DnPlNGpU-Bpd4Zh9L.js";import{a as c,g as l,h as u}from"./formatters--mhLir82-v41eaI4a.js";import{r as d,t as f}from"./DateInput-D8_Oleoy.js";import{n as p,t as m}from"./GridContainer-qDguE1HS.js";import{n as h,o as g,r as _,t as v}from"./PresetSelect-C8uIYhPJ.js";function y(e){return typeof e==`string`&&D.has(e)}function b(e,t=E){let n=_(e,y,t),r=n.length>0?n:E,i=new Set(r);return E.filter(e=>i.has(e))}function x(e,t=T){return g(e,t)}function S({maxDayRangeDays:e,maxWeekRangeWeeks:t,labels:n}={}){let r=o(e),i=o(t);return T.map(e=>{let t={...e,label:n?.[e.id]??e.label};return e.id===`day`&&r!==void 0?{...t,maxRangeDays:r}:e.id===`week`&&i!==void 0?{...t,maxRangeDays:i*7}:t})}function C(e,t){let n=o(e.maxRangeDays);if(n===void 0||t===void 0)return!1;let r=l(t);return r!==null&&r>n}function w(e,t,n){if(t.length===0)return;let r=e===void 0?-1:t.findIndex(t=>t.id===e),i=r>=0?t[r]:void 0;return i&&!C(i,n)?i.id:(r>=0?t.slice(r+1):t).find(e=>!C(e,n))?.id??t.find(e=>!C(e,n))?.id}var T,E,D;function O(){return(O=e((()=>{u(),s(),T=Object.freeze([{id:`day`,label:`по дням`},{id:`week`,label:`по неделям`},{id:`month`,label:`по месяцам`},{id:`year`,label:`по годам`}]),E=Object.freeze([`day`,`week`,`month`,`year`]),D=new Set(T.map(e=>e.id))})))()}function k({value:e,onChange:t,options:n,labels:r,presetIds:i,dateRange:a,maxDayRangeDays:o,maxWeekRangeWeeks:s,...c}){let l=(0,A.useMemo)(()=>n??x(b(i),S({maxDayRangeDays:o,maxWeekRangeWeeks:s,labels:r})),[r,o,s,n,i]),u=(0,A.useMemo)(()=>w(e,l,a),[a,l,e]),d=(0,A.useRef)(null),f=(0,A.useEffectEvent)(()=>{if(u===void 0||u===e){d.current=null;return}let n=d.current;n&&n.value===e&&n.availableValue===u||(d.current={value:e,availableValue:u},t(u))});return(0,A.useEffect)(()=>{f()},[u,e]),(0,j.jsx)(v,{...c,options:l,value:u,onChange:t,getOptionDisabled:e=>C(e,a)})}var A,j;function M(){return(M=e((()=>{A=n(),h(),O(),j=r(),k.__docgenInfo={description:`Select периода детализации, который может ограничивать доступные варианты по диапазону дат.`,methods:[],displayName:`PeriodSelect`,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:``},options:{required:!1,tsType:{name:`unknown`},description:"Полный список custom options с высшим приоритетом. При его передаче\nвстроенные `presetIds`, `labels` и пороги диапазона не применяются."},labels:{required:!1,tsType:{name:`Partial`,elements:[{name:`Readonly`,elements:[{name:`Record`,elements:[{name:`union`,raw:`"day" | "week" | "month" | "year"`,elements:[{name:`literal`,value:`"day"`},{name:`literal`,value:`"week"`},{name:`literal`,value:`"month"`},{name:`literal`,value:`"year"`}]},{name:`string`}],raw:`Record<PeriodSelectPresetId, string>`}],raw:`Readonly<Record<PeriodSelectPresetId, string>>`}],raw:`Partial<PeriodSelectLabels>`},description:`Частично заменяет подписи встроенных вариантов, не изменяя их id,
2
2
  канонический порядок и правила доступности.
3
3
  Не применяется, когда передан собственный \`options\`.`},presetIds:{required:!1,tsType:{name:`unknown`},description:`Разрешенные встроенные варианты периода. Значение нормализуется в канонический
4
4
  порядок, а пустой либо невалидный список безопасно заменяется полным набором.
@@ -1,2 +1,2 @@
1
- import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-CrnMVMTc.js";import{n,t as r}from"./Grid-BCzygAqy.js";import{d as i,f as a}from"./usePickerTriggerController-BRXUlggw.js";function o({onSelectAll:e,onDeselectAll:t,selectAllButtonRef:n}){return(0,s.jsxs)(r.Container,{gap:`xs`,templateColumns:`1fr 1fr`,children:[(0,s.jsx)(`button`,{ref:n,type:`button`,className:i.selectionActionButton,onClick:e,"data-ui":`picker-select-all`,"data-action":`select-all`,children:`Выбрать все`}),(0,s.jsx)(`button`,{type:`button`,className:i.selectionActionButton,onClick:t,"data-ui":`picker-deselect-all`,"data-action":`deselect-all`,children:`Снять выбор`})]})}var s;function c(){return(c=e((()=>{n(),a(),s=t(),o.__docgenInfo={description:`Общая панель массовых действий для picker-компонентов с множественным выбором.
1
+ import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-DaN-XFub.js";import{n,t as r}from"./Grid-BCzygAqy.js";import{d as i,f as a}from"./usePickerTriggerController-BHBjSLtn.js";function o({onSelectAll:e,onDeselectAll:t,selectAllButtonRef:n}){return(0,s.jsxs)(r.Container,{gap:`xs`,templateColumns:`1fr 1fr`,children:[(0,s.jsx)(`button`,{ref:n,type:`button`,className:i.selectionActionButton,onClick:e,"data-ui":`picker-select-all`,"data-action":`select-all`,children:`Выбрать все`}),(0,s.jsx)(`button`,{type:`button`,className:i.selectionActionButton,onClick:t,"data-ui":`picker-deselect-all`,"data-action":`deselect-all`,children:`Снять выбор`})]})}var s;function c(){return(c=e((()=>{n(),a(),s=t(),o.__docgenInfo={description:`Общая панель массовых действий для picker-компонентов с множественным выбором.
2
2
  Компонент не знает формат значения и делегирует изменение владельцу selection-модели.`,methods:[],displayName:`PickerSelectionToolbar`,props:{onSelectAll:{required:!0,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},onDeselectAll:{required:!0,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},selectAllButtonRef:{required:!1,tsType:{name:`Ref`,elements:[{name:`HTMLButtonElement`}],raw:`Ref<HTMLButtonElement>`},description:``}}}})))()}export{c as n,o as t};
@@ -1 +1 @@
1
- import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t,t as n}from"./chevron-down-QDFtnGcg.js";import{n as r}from"./iframe-CrnMVMTc.js";import{a as i,i as a}from"./utils-DUM89eIj.js";import{n as o,t as s}from"./ui.module-DoMIk8Oc.js";function c({open:e,disabled:t,children:r,onToggleMouseDown:a,onToggleClick:s,openAriaLabel:c=`Открыть список`,closeAriaLabel:u=`Закрыть список`}){return(0,l.jsxs)(`div`,{className:o.uiToggleButtonContainer,"data-disabled":t||void 0,children:[r,(0,l.jsx)(`div`,{className:o.uiButtonSeparator}),(0,l.jsx)(`button`,{type:`button`,"aria-label":e?u:c,className:o.uiToggleButton,onMouseDown:a,onClick:s,children:(0,l.jsx)(n,{className:i(o.uiToggleIcon,e&&o.uiToggleIconOpen)})})]})}var l;function u(){return(u=e((()=>{a(),t(),s(),l=r(),c.__docgenInfo={description:``,methods:[],displayName:`PickerTriggerActions`,props:{open:{required:!0,tsType:{name:`boolean`},description:``},disabled:{required:!1,tsType:{name:`boolean`},description:``},children:{required:!1,tsType:{name:`ReactNode`},description:``},onToggleMouseDown:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(event: MouseEvent<HTMLButtonElement>) => void`,signature:{arguments:[{type:{name:`MouseEvent`,elements:[{name:`HTMLButtonElement`}],raw:`MouseEvent<HTMLButtonElement>`},name:`event`}],return:{name:`void`}}},description:``},onToggleClick:{required:!0,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},openAriaLabel:{required:!1,tsType:{name:`string`},description:``,defaultValue:{value:`"Открыть список"`,computed:!1}},closeAriaLabel:{required:!1,tsType:{name:`string`},description:``,defaultValue:{value:`"Закрыть список"`,computed:!1}}}}})))()}export{u as n,c as t};
1
+ import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t,t as n}from"./chevron-down-B9GH0QvB.js";import{n as r}from"./iframe-DaN-XFub.js";import{a as i,i as a}from"./utils-DUM89eIj.js";import{n as o,t as s}from"./ui.module-DoMIk8Oc.js";function c({open:e,disabled:t,children:r,onToggleMouseDown:a,onToggleClick:s,openAriaLabel:c=`Открыть список`,closeAriaLabel:u=`Закрыть список`}){return(0,l.jsxs)(`div`,{className:o.uiToggleButtonContainer,"data-disabled":t||void 0,children:[r,(0,l.jsx)(`div`,{className:o.uiButtonSeparator}),(0,l.jsx)(`button`,{type:`button`,"aria-label":e?u:c,className:o.uiToggleButton,onMouseDown:a,onClick:s,children:(0,l.jsx)(n,{className:i(o.uiToggleIcon,e&&o.uiToggleIconOpen)})})]})}var l;function u(){return(u=e((()=>{a(),t(),s(),l=r(),c.__docgenInfo={description:``,methods:[],displayName:`PickerTriggerActions`,props:{open:{required:!0,tsType:{name:`boolean`},description:``},disabled:{required:!1,tsType:{name:`boolean`},description:``},children:{required:!1,tsType:{name:`ReactNode`},description:``},onToggleMouseDown:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(event: MouseEvent<HTMLButtonElement>) => void`,signature:{arguments:[{type:{name:`MouseEvent`,elements:[{name:`HTMLButtonElement`}],raw:`MouseEvent<HTMLButtonElement>`},name:`event`}],return:{name:`void`}}},description:``},onToggleClick:{required:!0,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},openAriaLabel:{required:!1,tsType:{name:`string`},description:``,defaultValue:{value:`"Открыть список"`,computed:!1}},closeAriaLabel:{required:!1,tsType:{name:`string`},description:``,defaultValue:{value:`"Закрыть список"`,computed:!1}}}}})))()}export{u as n,c as t};
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-CrnMVMTc.js";import{i as n,r}from"./react-qN2cStNd.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-Dz3dJBcm.js";import{a as p,i as m,n as h,o as g,r as _,t as v}from"./Popover.stories-Bask2I1I.js";function y(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(s,{of:m,parameters:{docs:{toc:!0}}}),`
1
+ import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-DaN-XFub.js";import{i as n,r}from"./react-qN2cStNd.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-BiaKjftm.js";import{a as p,i as m,n as h,o as g,r as _,t as v}from"./Popover.stories-DM69Ztws.js";function y(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(s,{of:m,parameters:{docs:{toc:!0}}}),`
2
2
  `,(0,x.jsx)(u,{children:`Popover`}),`
3
3
  `,(0,x.jsx)(o,{children:`Всплывающий контейнер, привязанный к trigger-элементу и поддерживающий управляемое открытие`}),`
4
4
  `,(0,x.jsx)(t.p,{children:`Popover уже имеет живые stories, а эта страница собирает их в структурированную документацию с краткими рекомендациями, примерами подключения и API.
@@ -1,2 +1,2 @@
1
- import{n as e,o as t}from"./rolldown-runtime-C0FnF6B9.js";import{t as n}from"./react-C21x__mS.js";import{n as r}from"./iframe-CrnMVMTc.js";import{a as i,i as a}from"./utils-DUM89eIj.js";import{a as o,d as s,g as c,l,m as u,n as d,p as f,r as p}from"./floating-ui.react-PN45KvBS.js";import{a as m,i as h,n as g,r as _}from"./dom-B3G_GtJw.js";import{i as v,r as y}from"./FloatingPopover-CPLOruAY.js";import{n as b}from"./error-BZrNlEUO.js";var x,S,C,w;function T(){return(T=e((()=>{x=`JK2Y7t`,S=`_5QtpCJ`,C=`hZuysP`,w={popover:x,primary:S,secondary:C}})))()}function E(){let e=(0,D.useContext)(O);if(!e)throw b({hookName:`usePopoverContext`,providerName:`Popover`});return e}var D,O;function k(){return(k=e((()=>{D=n(),O=(0,D.createContext)(null)})))()}var A,j,M;function N(){return(N=e((()=>{A=t(n(),1),p(),_(),a(),v(),T(),k(),j=r(),M=({children:e,onClose:t,closeOnOutside:n=!0,closeOnEscape:r=!0,disableOutsideClick:a=!1,background:o=`secondary`})=>{let{open:s,setOpen:c,refs:l,floatingStyles:u,middlewareData:f,placement:p,arrowRef:_}=E(),v=(0,A.useRef)(null),b=(0,A.useCallback)(e=>{v.current=e,l.setFloating(e)},[l]),x=m({active:s,initialFocus:`container`,restoreFocus:!0,containerRef:v}),S=(0,A.useCallback)(()=>{s&&(c(!1),t?.())},[c,t,s]);g({active:s,enabled:r,onDismiss:S,containerRef:x});let C=(0,A.useCallback)(()=>{!s||a||n&&S()},[s,a,n,S]);return h([l.floating,l.reference],C),s?(0,j.jsx)(d,{children:(0,j.jsxs)(`div`,{ref:b,style:u,className:i(w.popover,w[o]),role:`dialog`,"aria-modal":`true`,tabIndex:-1,children:[typeof e==`function`?e({setClose:S}):e,(0,j.jsx)(y,{ref:_,placement:p,middlewareData:f})]})}):null},M.__docgenInfo={description:`Содержимое Popover, отображаемое в портале.`,methods:[],displayName:`PopoverContent`,props:{children:{required:!0,tsType:{name:`union`,raw:`React.ReactNode | ((ctx: { setClose: () => void }) => React.ReactNode)`,elements:[{name:`ReactReactNode`,raw:`React.ReactNode`},{name:`unknown`}]},description:``},onClose:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},closeOnOutside:{required:!1,tsType:{name:`boolean`},description:``,defaultValue:{value:`true`,computed:!1}},closeOnEscape:{required:!1,tsType:{name:`boolean`},description:``,defaultValue:{value:`true`,computed:!1}},disableOutsideClick:{required:!1,tsType:{name:`boolean`},description:``,defaultValue:{value:`false`,computed:!1}},background:{required:!1,tsType:{name:`union`,raw:`"primary" | "secondary"`,elements:[{name:`literal`,value:`"primary"`},{name:`literal`,value:`"secondary"`}]},description:``,defaultValue:{value:`"secondary"`,computed:!1}}}}})))()}var P,F;function I(){return(I=e((()=>{P=n(),k(),F=({passive:e,children:t})=>{let{open:n,setOpen:r,refs:i}=E(),a=(0,P.useCallback)(n=>{t.props.onClick&&t.props.onClick(n),!n.defaultPrevented&&(n.preventDefault(),n.stopPropagation(),!e&&r(e=>!e))},[t,r,e]);return(0,P.cloneElement)(t,{ref:i.setReference,"aria-expanded":n,onClick:a})},F.__docgenInfo={description:``,methods:[],displayName:`PopoverTrigger`,props:{passive:{required:!1,tsType:{name:`literal`,value:`true`},description:``},children:{required:!0,tsType:{name:`ReactReactElement`,raw:`React.ReactElement<React.HTMLAttributes<Element> & { ref?: React.Ref<Element> }>`,elements:[{name:`intersection`,raw:`React.HTMLAttributes<Element> & { ref?: React.Ref<Element> }`,elements:[{name:`ReactHTMLAttributes`,raw:`React.HTMLAttributes<Element>`,elements:[{name:`Element`}]},{name:`signature`,type:`object`,raw:`{ ref?: React.Ref<Element> }`,signature:{properties:[{key:`ref`,value:{name:`ReactRef`,raw:`React.Ref<Element>`,elements:[{name:`Element`}],required:!1}}]}}]}]},description:``}}}})))()}var L,R,z,B;function V(){return(V=e((()=>{L=t(n(),1),p(),N(),k(),I(),R=r(),z=({children:e,open:t,defaultOpen:n,onOpenChange:r,placement:i=`bottom`})=>{let[a,d]=(0,L.useState)(n??!1),p=t!==void 0,m=p?t:a,h=(0,L.useCallback)(e=>{let t=typeof e==`function`?e(m):e;p||d(t),r?.(t)},[p,r,m]),g=(0,L.useRef)(null),{refs:_,floatingStyles:v,middlewareData:y,placement:b}=o({open:m,onOpenChange:h,placement:i,middleware:[f(8),s(),u({padding:16}),l({element:g.current})],whileElementsMounted:c});return(0,R.jsx)(O.Provider,{value:{open:m,setOpen:h,refs:_,floatingStyles:v,placement:b,middlewareData:y,arrowRef:g},children:e})},B=Object.assign(z,{Trigger:F,Content:M}),z.__docgenInfo={description:`Контролируемый Popover.
1
+ import{n as e,o as t}from"./rolldown-runtime-C0FnF6B9.js";import{t as n}from"./react-C21x__mS.js";import{n as r}from"./iframe-DaN-XFub.js";import{a as i,i as a}from"./utils-DUM89eIj.js";import{a as o,d as s,g as c,l,m as u,n as d,p as f,r as p}from"./floating-ui.react-DZ8IyUV4.js";import{a as m,i as h,n as g,r as _}from"./dom-B3G_GtJw.js";import{i as v,r as y}from"./FloatingPopover-D4h-c24R.js";import{n as b}from"./error-BZrNlEUO.js";var x,S,C,w;function T(){return(T=e((()=>{x=`JK2Y7t`,S=`_5QtpCJ`,C=`hZuysP`,w={popover:x,primary:S,secondary:C}})))()}function E(){let e=(0,D.useContext)(O);if(!e)throw b({hookName:`usePopoverContext`,providerName:`Popover`});return e}var D,O;function k(){return(k=e((()=>{D=n(),O=(0,D.createContext)(null)})))()}var A,j,M;function N(){return(N=e((()=>{A=t(n(),1),p(),_(),a(),v(),T(),k(),j=r(),M=({children:e,onClose:t,closeOnOutside:n=!0,closeOnEscape:r=!0,disableOutsideClick:a=!1,background:o=`secondary`})=>{let{open:s,setOpen:c,refs:l,floatingStyles:u,middlewareData:f,placement:p,arrowRef:_}=E(),v=(0,A.useRef)(null),b=(0,A.useCallback)(e=>{v.current=e,l.setFloating(e)},[l]),x=m({active:s,initialFocus:`container`,restoreFocus:!0,containerRef:v}),S=(0,A.useCallback)(()=>{s&&(c(!1),t?.())},[c,t,s]);g({active:s,enabled:r,onDismiss:S,containerRef:x});let C=(0,A.useCallback)(()=>{!s||a||n&&S()},[s,a,n,S]);return h([l.floating,l.reference],C),s?(0,j.jsx)(d,{children:(0,j.jsxs)(`div`,{ref:b,style:u,className:i(w.popover,w[o]),role:`dialog`,"aria-modal":`true`,tabIndex:-1,children:[typeof e==`function`?e({setClose:S}):e,(0,j.jsx)(y,{ref:_,placement:p,middlewareData:f})]})}):null},M.__docgenInfo={description:`Содержимое Popover, отображаемое в портале.`,methods:[],displayName:`PopoverContent`,props:{children:{required:!0,tsType:{name:`union`,raw:`React.ReactNode | ((ctx: { setClose: () => void }) => React.ReactNode)`,elements:[{name:`ReactReactNode`,raw:`React.ReactNode`},{name:`unknown`}]},description:``},onClose:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},closeOnOutside:{required:!1,tsType:{name:`boolean`},description:``,defaultValue:{value:`true`,computed:!1}},closeOnEscape:{required:!1,tsType:{name:`boolean`},description:``,defaultValue:{value:`true`,computed:!1}},disableOutsideClick:{required:!1,tsType:{name:`boolean`},description:``,defaultValue:{value:`false`,computed:!1}},background:{required:!1,tsType:{name:`union`,raw:`"primary" | "secondary"`,elements:[{name:`literal`,value:`"primary"`},{name:`literal`,value:`"secondary"`}]},description:``,defaultValue:{value:`"secondary"`,computed:!1}}}}})))()}var P,F;function I(){return(I=e((()=>{P=n(),k(),F=({passive:e,children:t})=>{let{open:n,setOpen:r,refs:i}=E(),a=(0,P.useCallback)(n=>{t.props.onClick&&t.props.onClick(n),!n.defaultPrevented&&(n.preventDefault(),n.stopPropagation(),!e&&r(e=>!e))},[t,r,e]);return(0,P.cloneElement)(t,{ref:i.setReference,"aria-expanded":n,onClick:a})},F.__docgenInfo={description:``,methods:[],displayName:`PopoverTrigger`,props:{passive:{required:!1,tsType:{name:`literal`,value:`true`},description:``},children:{required:!0,tsType:{name:`ReactReactElement`,raw:`React.ReactElement<React.HTMLAttributes<Element> & { ref?: React.Ref<Element> }>`,elements:[{name:`intersection`,raw:`React.HTMLAttributes<Element> & { ref?: React.Ref<Element> }`,elements:[{name:`ReactHTMLAttributes`,raw:`React.HTMLAttributes<Element>`,elements:[{name:`Element`}]},{name:`signature`,type:`object`,raw:`{ ref?: React.Ref<Element> }`,signature:{properties:[{key:`ref`,value:{name:`ReactRef`,raw:`React.Ref<Element>`,elements:[{name:`Element`}],required:!1}}]}}]}]},description:``}}}})))()}var L,R,z,B;function V(){return(V=e((()=>{L=t(n(),1),p(),N(),k(),I(),R=r(),z=({children:e,open:t,defaultOpen:n,onOpenChange:r,placement:i=`bottom`})=>{let[a,d]=(0,L.useState)(n??!1),p=t!==void 0,m=p?t:a,h=(0,L.useCallback)(e=>{let t=typeof e==`function`?e(m):e;p||d(t),r?.(t)},[p,r,m]),g=(0,L.useRef)(null),{refs:_,floatingStyles:v,middlewareData:y,placement:b}=o({open:m,onOpenChange:h,placement:i,middleware:[f(8),s(),u({padding:16}),l({element:g.current})],whileElementsMounted:c});return(0,R.jsx)(O.Provider,{value:{open:m,setOpen:h,refs:_,floatingStyles:v,placement:b,middlewareData:y,arrowRef:g},children:e})},B=Object.assign(z,{Trigger:F,Content:M}),z.__docgenInfo={description:`Контролируемый Popover.
2
2
  Используется в связке с Popover.Trigger и Popover.Content.`,methods:[],displayName:`PopoverRoot`,props:{children:{required:!0,tsType:{name:`ReactReactNode`,raw:`React.ReactNode`},description:``},placement:{required:!1,tsType:{name:`Placement`},description:``,defaultValue:{value:`"bottom"`,computed:!1}},open:{required:!1,tsType:{name:`boolean`},description:``},defaultOpen:{required:!1,tsType:{name:`boolean`},description:``},onOpenChange:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(open: boolean) => void`,signature:{arguments:[{type:{name:`boolean`},name:`open`}],return:{name:`void`}}},description:``}}}})))()}export{V as n,B as t};
@@ -1,4 +1,4 @@
1
- import{n as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{t as n}from"./react-C21x__mS.js";import{n as r}from"./iframe-CrnMVMTc.js";import{n as i,t as a}from"./Popover-Djns7yXR.js";import{n as o,t as s}from"./Button-VdPdxcvG.js";import{c,t as l}from"./Input-DtOsW7ur.js";var u=t({AnchorPlacement:()=>g,Controlled:()=>h,Default:()=>m,WithInteractiveContent:()=>_,__namedExportsOrder:()=>v,default:()=>p}),d,f,p,m,h,g,_,v;function y(){return(y=e((()=>{d=n(),o(),c(),i(),f=r(),p={title:`Shared/UI/Popover`,component:a,parameters:{atomicCanvas:!0,layout:`centered`}},m={render:()=>(0,f.jsxs)(a,{children:[(0,f.jsx)(a.Trigger,{children:(0,f.jsx)(`button`,{children:`Открыть`})}),(0,f.jsx)(a.Content,{children:e=>(0,f.jsxs)(`div`,{style:{padding:12,maxWidth:160},children:[(0,f.jsx)(`p`,{children:`Пример простого поповера`}),(0,f.jsx)(`button`,{onClick:e.setClose,children:`Закрыть`})]})})]})},h={render:()=>{let[e,t]=(0,d.useState)(!1);return(0,f.jsxs)(a,{open:e,onOpenChange:t,children:[(0,f.jsx)(a.Trigger,{children:(0,f.jsx)(`button`,{children:e?`Закрыть`:`Открыть`})}),(0,f.jsx)(a.Content,{children:(0,f.jsx)(`div`,{style:{padding:12},children:`Контролируемый режим`})})]})}},g={render:()=>(0,f.jsx)(`div`,{style:{display:`flex`,gap:32,flexWrap:`wrap`,justifyContent:`center`},children:[`top`,`bottom`,`left`,`right`,`top-start`,`bottom-end`].map(e=>(0,f.jsxs)(a,{placement:e,children:[(0,f.jsx)(a.Trigger,{children:(0,f.jsx)(`button`,{children:e})}),(0,f.jsx)(a.Content,{children:(0,f.jsx)(`div`,{style:{padding:8},children:e})})]},e))})},_={render:()=>(0,f.jsxs)(a,{children:[(0,f.jsx)(a.Trigger,{children:(0,f.jsx)(`button`,{children:`Форма`})}),(0,f.jsx)(a.Content,{children:e=>(0,f.jsxs)(`form`,{onSubmit:t=>{t.preventDefault(),e.setClose()},style:{display:`flex`,flexDirection:`column`,gap:8,padding:12,width:180},children:[(0,f.jsx)(l,{label:`Имя`,placeholder:`Введите имя`,value:``,onChange:()=>{}}),(0,f.jsx)(s,{children:`Отправить`})]})})]})},m.parameters={...m.parameters,docs:{...m.parameters?.docs,source:{originalSource:`{
1
+ import{n as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{t as n}from"./react-C21x__mS.js";import{n as r}from"./iframe-DaN-XFub.js";import{n as i,t as a}from"./Popover-D6gSyjaW.js";import{n as o,t as s}from"./Button-mjF9HSg0.js";import{c,t as l}from"./Input-Co--DMHY.js";var u=t({AnchorPlacement:()=>g,Controlled:()=>h,Default:()=>m,WithInteractiveContent:()=>_,__namedExportsOrder:()=>v,default:()=>p}),d,f,p,m,h,g,_,v;function y(){return(y=e((()=>{d=n(),o(),c(),i(),f=r(),p={title:`Shared/UI/Popover`,component:a,parameters:{atomicCanvas:!0,layout:`centered`}},m={render:()=>(0,f.jsxs)(a,{children:[(0,f.jsx)(a.Trigger,{children:(0,f.jsx)(`button`,{children:`Открыть`})}),(0,f.jsx)(a.Content,{children:e=>(0,f.jsxs)(`div`,{style:{padding:12,maxWidth:160},children:[(0,f.jsx)(`p`,{children:`Пример простого поповера`}),(0,f.jsx)(`button`,{onClick:e.setClose,children:`Закрыть`})]})})]})},h={render:()=>{let[e,t]=(0,d.useState)(!1);return(0,f.jsxs)(a,{open:e,onOpenChange:t,children:[(0,f.jsx)(a.Trigger,{children:(0,f.jsx)(`button`,{children:e?`Закрыть`:`Открыть`})}),(0,f.jsx)(a.Content,{children:(0,f.jsx)(`div`,{style:{padding:12},children:`Контролируемый режим`})})]})}},g={render:()=>(0,f.jsx)(`div`,{style:{display:`flex`,gap:32,flexWrap:`wrap`,justifyContent:`center`},children:[`top`,`bottom`,`left`,`right`,`top-start`,`bottom-end`].map(e=>(0,f.jsxs)(a,{placement:e,children:[(0,f.jsx)(a.Trigger,{children:(0,f.jsx)(`button`,{children:e})}),(0,f.jsx)(a.Content,{children:(0,f.jsx)(`div`,{style:{padding:8},children:e})})]},e))})},_={render:()=>(0,f.jsxs)(a,{children:[(0,f.jsx)(a.Trigger,{children:(0,f.jsx)(`button`,{children:`Форма`})}),(0,f.jsx)(a.Content,{children:e=>(0,f.jsxs)(`form`,{onSubmit:t=>{t.preventDefault(),e.setClose()},style:{display:`flex`,flexDirection:`column`,gap:8,padding:12,width:180},children:[(0,f.jsx)(l,{label:`Имя`,placeholder:`Введите имя`,value:``,onChange:()=>{}}),(0,f.jsx)(s,{children:`Отправить`})]})})]})},m.parameters={...m.parameters,docs:{...m.parameters?.docs,source:{originalSource:`{
2
2
  render: () => <Popover>
3
3
  <Popover.Trigger>
4
4
  <button>Открыть</button>
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-CrnMVMTc.js";import{i as n,r}from"./react-qN2cStNd.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-Dz3dJBcm.js";import{n as p,r as m,t as h}from"./PresetRangeDateInput.stories-BNfOUWgp.js";function g(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(s,{of:p,parameters:{docs:{toc:!0}}}),`
1
+ import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-DaN-XFub.js";import{i as n,r}from"./react-qN2cStNd.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-BiaKjftm.js";import{n as p,r as m,t as h}from"./PresetRangeDateInput.stories-Cqd4eb0N.js";function g(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(s,{of:p,parameters:{docs:{toc:!0}}}),`
2
2
  `,(0,v.jsx)(u,{children:`PresetRangeDateInput`}),`
3
3
  `,(0,v.jsx)(o,{children:`Составной контрол диапазона дат с синхронизацией ручного ввода и готовых пресетов`}),`
4
4
  `,(0,v.jsx)(t.p,{children:`PresetRangeDateInput уже имеет живые stories, а эта страница собирает их в структурированную документацию с краткими рекомендациями, примерами подключения и API.
@@ -1,4 +1,4 @@
1
- import{n as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{t as n}from"./react-C21x__mS.js";import{n as r}from"./iframe-CrnMVMTc.js";import{n as i,t as a}from"./Text-cVBcGheg.js";import{n as o,t as s}from"./FlexContainer-LmZIdhq2.js";import{r as c,t as l}from"./DateInput-DBwgBhFj.js";import{a as u,c as d,i as f,n as p,o as m,r as h,s as g,t as _}from"./DateRangePresetSelect-DXYYFJJn.js";function v(e){return e??`__empty__`}function y({value:e,onChange:t,presetId:n,onPresetIdChange:r,referenceDate:i,presetIds:a,presetOptions:o,presetLabel:c,presetDescription:f,presetPlaceholder:p=`Выберите пресет диапазона`,presetDisabled:y,...S}){let[C]=(0,b.useState)(()=>new Date),w=i??C,T=(0,b.useMemo)(()=>o??g(u(a,h)),[a,o]),E=e??null,D=(0,b.useMemo)(()=>m(E,w,T),[E,T,w]),O=n??D??void 0,k=(0,b.useRef)(``),A=(0,b.useCallback)(e=>{if(!r)return;let t=v(e);t!==k.current&&(k.current=t,r(e))},[r]),j=e=>{let n=d(e,w,T);if(!n){A(null);return}A(n.id),t(n.range)},M=e=>{t(e),A(m(e,w,T))};return(0,x.jsxs)(s,{gap:`sm`,align:`end`,children:[(0,x.jsx)(_,{size:`md`,label:c,description:f,placeholder:p,disabled:y??S.disabled,value:O,onChange:j,options:T,referenceDate:w}),(0,x.jsx)(l,{...S,size:`md`,value:E,onChange:M})]})}var b,x;function S(){return(S=e((()=>{b=n(),c(),p(),f(),o(),x=r(),y.__docgenInfo={description:`Составной компонент выбора диапазона дат через пресет или ручной ввод.`,methods:[],displayName:`PresetRangeDateInput`,props:{presetId:{required:!1,tsType:{name:`union`,raw:`DateRangePresetOption["id"] | null`,elements:[{name:`DateRangePresetOption["id"]`,raw:`DateRangePresetOption["id"]`},{name:`null`}]},description:``},onPresetIdChange:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(presetId: DateRangePresetOption["id"] | null) => void`,signature:{arguments:[{type:{name:`union`,raw:`DateRangePresetOption["id"] | null`,elements:[{name:`DateRangePresetOption["id"]`,raw:`DateRangePresetOption["id"]`},{name:`null`}]},name:`presetId`}],return:{name:`void`}}},description:``},referenceDate:{required:!1,tsType:{name:`Date`},description:``},presetIds:{required:!1,tsType:{name:`unknown`},description:``},presetOptions:{required:!1,tsType:{name:`unknown`},description:``},presetLabel:{required:!1,tsType:{name:`ReactNode`},description:``},presetDescription:{required:!1,tsType:{name:`string`},description:``},presetPlaceholder:{required:!1,tsType:{name:`string`},description:``,defaultValue:{value:`"Выберите пресет диапазона"`,computed:!1}},presetDisabled:{required:!1,tsType:{name:`boolean`},description:``}},composes:[`Omit`]}})))()}var C=t({Default:()=>D,__namedExportsOrder:()=>O,default:()=>E}),w,T,E,D,O;function k(){return(k=e((()=>{w=n(),o(),i(),S(),T=r(),E={title:`Shared/UI/PresetRangeDateInput`,component:y,args:{value:null,onChange:()=>{}},parameters:{atomicCanvas:!0,layout:`padded`}},D={render:()=>{let[e,t]=(0,w.useState)([new Date(2026,2,10,0,0,0),new Date(2026,2,10,23,59,59)]),[n,r]=(0,w.useState)(`today`);return(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(s,{gap:`sm`,align:`end`,children:(0,T.jsx)(y,{value:e,onChange:t,presetId:n,onPresetIdChange:r,referenceDate:new Date(2026,2,10,12,0,0),presetLabel:`Быстрый диапазон`,size:`md`})}),(0,T.jsxs)(a,{as:`p`,className:`marginBlockSm`,children:[`Активный presetId: `,(0,T.jsx)(a,{as:`code`,children:n??`null`})]})]})}},D.parameters={...D.parameters,docs:{...D.parameters?.docs,source:{originalSource:`{
1
+ import{n as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{t as n}from"./react-C21x__mS.js";import{n as r}from"./iframe-DaN-XFub.js";import{n as i,t as a}from"./Text-BPlJUr3R.js";import{n as o,t as s}from"./FlexContainer-LmZIdhq2.js";import{r as c,t as l}from"./DateInput-D8_Oleoy.js";import{a as u,c as d,i as f,n as p,o as m,r as h,s as g,t as _}from"./DateRangePresetSelect-Bfx-d5qg.js";function v(e){return e??`__empty__`}function y({value:e,onChange:t,presetId:n,onPresetIdChange:r,referenceDate:i,presetIds:a,presetOptions:o,presetLabel:c,presetDescription:f,presetPlaceholder:p=`Выберите пресет диапазона`,presetDisabled:y,...S}){let[C]=(0,b.useState)(()=>new Date),w=i??C,T=(0,b.useMemo)(()=>o??g(u(a,h)),[a,o]),E=e??null,D=(0,b.useMemo)(()=>m(E,w,T),[E,T,w]),O=n??D??void 0,k=(0,b.useRef)(``),A=(0,b.useCallback)(e=>{if(!r)return;let t=v(e);t!==k.current&&(k.current=t,r(e))},[r]),j=e=>{let n=d(e,w,T);if(!n){A(null);return}A(n.id),t(n.range)},M=e=>{t(e),A(m(e,w,T))};return(0,x.jsxs)(s,{gap:`sm`,align:`end`,children:[(0,x.jsx)(_,{size:`md`,label:c,description:f,placeholder:p,disabled:y??S.disabled,value:O,onChange:j,options:T,referenceDate:w}),(0,x.jsx)(l,{...S,size:`md`,value:E,onChange:M})]})}var b,x;function S(){return(S=e((()=>{b=n(),c(),p(),f(),o(),x=r(),y.__docgenInfo={description:`Составной компонент выбора диапазона дат через пресет или ручной ввод.`,methods:[],displayName:`PresetRangeDateInput`,props:{presetId:{required:!1,tsType:{name:`union`,raw:`DateRangePresetOption["id"] | null`,elements:[{name:`DateRangePresetOption["id"]`,raw:`DateRangePresetOption["id"]`},{name:`null`}]},description:``},onPresetIdChange:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(presetId: DateRangePresetOption["id"] | null) => void`,signature:{arguments:[{type:{name:`union`,raw:`DateRangePresetOption["id"] | null`,elements:[{name:`DateRangePresetOption["id"]`,raw:`DateRangePresetOption["id"]`},{name:`null`}]},name:`presetId`}],return:{name:`void`}}},description:``},referenceDate:{required:!1,tsType:{name:`Date`},description:``},presetIds:{required:!1,tsType:{name:`unknown`},description:``},presetOptions:{required:!1,tsType:{name:`unknown`},description:``},presetLabel:{required:!1,tsType:{name:`ReactNode`},description:``},presetDescription:{required:!1,tsType:{name:`string`},description:``},presetPlaceholder:{required:!1,tsType:{name:`string`},description:``,defaultValue:{value:`"Выберите пресет диапазона"`,computed:!1}},presetDisabled:{required:!1,tsType:{name:`boolean`},description:``}},composes:[`Omit`]}})))()}var C=t({Default:()=>D,__namedExportsOrder:()=>O,default:()=>E}),w,T,E,D,O;function k(){return(k=e((()=>{w=n(),o(),i(),S(),T=r(),E={title:`Shared/UI/PresetRangeDateInput`,component:y,args:{value:null,onChange:()=>{}},parameters:{atomicCanvas:!0,layout:`padded`}},D={render:()=>{let[e,t]=(0,w.useState)([new Date(2026,2,10,0,0,0),new Date(2026,2,10,23,59,59)]),[n,r]=(0,w.useState)(`today`);return(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(s,{gap:`sm`,align:`end`,children:(0,T.jsx)(y,{value:e,onChange:t,presetId:n,onPresetIdChange:r,referenceDate:new Date(2026,2,10,12,0,0),presetLabel:`Быстрый диапазон`,size:`md`})}),(0,T.jsxs)(a,{as:`p`,className:`marginBlockSm`,children:[`Активный presetId: `,(0,T.jsx)(a,{as:`code`,children:n??`null`})]})]})}},D.parameters={...D.parameters,docs:{...D.parameters?.docs,source:{originalSource:`{
2
2
  render: () => {
3
3
  const [value, setValue] = useState<NullableDateRange | null>([new Date(2026, 2, 10, 0, 0, 0), new Date(2026, 2, 10, 23, 59, 59)]);
4
4
  const [presetId, setPresetId] = useState<string | null>("today");
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-CrnMVMTc.js";import{n,t as r}from"./Select-BiOxxy0y.js";function i(e,t,n=[]){if(!Array.isArray(e))return[...n];let r=[];for(let n of e)!t(n)||r.includes(n)||r.push(n);return r}function a(e,t){let n=new Map(t.map(e=>[e.id,e])),r=[],i=new Set;for(let t of e){if(i.has(t))continue;let e=n.get(t);e&&(r.push(e),i.add(t))}return r}function o(e,t){return e?t.find(t=>t.id===e)??null:null}function s(){return(s=e((()=>{})))()}function c({options:e,value:t,onChange:n,getOptionDisabled:i,getOptionCode:a,getOptionAriaLabel:s,renderOption:c,renderValue:u,className:d,buttonClassName:f,optionsClassName:p,clearable:m,...h}){let g=o(t,e)??void 0;return(0,l.jsx)(r,{...h,options:e,value:g,onChange:e=>n(e?.id),getOptionKey:e=>e.id,getOptionLabel:e=>e.label,getOptionCode:a,getOptionDisabled:i,getOptionAriaLabel:s,renderOption:c,renderValue:u,className:d,buttonClassName:f,optionsClassName:p,clearable:m})}var l;function u(){return(u=e((()=>{n(),l=t(),c.__docgenInfo={description:"Базовый Select для пресетов с контрактом `id/label`.",methods:[],displayName:`PresetSelect`,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:``},options:{required:!0,tsType:{name:`unknown`},description:``},getOptionDisabled:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(option: TOption) => boolean`,signature:{arguments:[{type:{name:`TOption`},name:`option`}],return:{name:`boolean`}}},description:``},getOptionCode:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(option: TOption) => ReactNode`,signature:{arguments:[{type:{name:`TOption`},name:`option`}],return:{name:`ReactNode`}}},description:``},getOptionAriaLabel:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(option: TOption) => string`,signature:{arguments:[{type:{name:`TOption`},name:`option`}],return:{name:`string`}}},description:``},renderOption:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(option: TOption, state: SelectOptionState) => ReactNode`,signature:{arguments:[{type:{name:`TOption`},name:`option`},{type:{name:`signature`,type:`object`,raw:`{
1
+ import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-DaN-XFub.js";import{n,t as r}from"./Select-X_O4M8Hi.js";function i(e,t,n=[]){if(!Array.isArray(e))return[...n];let r=[];for(let n of e)!t(n)||r.includes(n)||r.push(n);return r}function a(e,t){let n=new Map(t.map(e=>[e.id,e])),r=[],i=new Set;for(let t of e){if(i.has(t))continue;let e=n.get(t);e&&(r.push(e),i.add(t))}return r}function o(e,t){return e?t.find(t=>t.id===e)??null:null}function s(){return(s=e((()=>{})))()}function c({options:e,value:t,onChange:n,getOptionDisabled:i,getOptionCode:a,getOptionAriaLabel:s,renderOption:c,renderValue:u,className:d,buttonClassName:f,optionsClassName:p,clearable:m,...h}){let g=o(t,e)??void 0;return(0,l.jsx)(r,{...h,options:e,value:g,onChange:e=>n(e?.id),getOptionKey:e=>e.id,getOptionLabel:e=>e.label,getOptionCode:a,getOptionDisabled:i,getOptionAriaLabel:s,renderOption:c,renderValue:u,className:d,buttonClassName:f,optionsClassName:p,clearable:m})}var l;function u(){return(u=e((()=>{n(),l=t(),c.__docgenInfo={description:"Базовый Select для пресетов с контрактом `id/label`.",methods:[],displayName:`PresetSelect`,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:``},options:{required:!0,tsType:{name:`unknown`},description:``},getOptionDisabled:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(option: TOption) => boolean`,signature:{arguments:[{type:{name:`TOption`},name:`option`}],return:{name:`boolean`}}},description:``},getOptionCode:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(option: TOption) => ReactNode`,signature:{arguments:[{type:{name:`TOption`},name:`option`}],return:{name:`ReactNode`}}},description:``},getOptionAriaLabel:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(option: TOption) => string`,signature:{arguments:[{type:{name:`TOption`},name:`option`}],return:{name:`string`}}},description:``},renderOption:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(option: TOption, state: SelectOptionState) => ReactNode`,signature:{arguments:[{type:{name:`TOption`},name:`option`},{type:{name:`signature`,type:`object`,raw:`{
2
2
  active: boolean;
3
3
  selected: boolean;
4
4
  disabled: boolean;