@ryuzaki13/react-foundation-ui 1.5.14 → 1.5.16

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 (275) hide show
  1. package/dist/advanced-search/index.js +5 -5
  2. package/dist/chunks/{TextEditorLexicalClient-B084kVzu.js → TextEditorLexicalClient-ChVeb3f3.js} +2 -2
  3. package/dist/chunks/{TextEditorLexicalClient-B084kVzu.js.map → TextEditorLexicalClient-ChVeb3f3.js.map} +1 -1
  4. package/dist/chunks/{date-input-9T8AoG5U.js → date-input-QRwRTMmy.js} +2 -2
  5. package/dist/chunks/{date-input-9T8AoG5U.js.map → date-input-QRwRTMmy.js.map} +1 -1
  6. package/dist/chunks/{input-VC8jEoTa.js → input-D3u9BYWD.js} +31 -28
  7. package/dist/chunks/input-D3u9BYWD.js.map +1 -0
  8. package/dist/chunks/{input-files-CoMjadk7.js → input-files-D7iu_1n5.js} +5 -5
  9. package/dist/chunks/{input-files-CoMjadk7.js.map → input-files-D7iu_1n5.js.map} +1 -1
  10. package/dist/chunks/{input-search-Bs_9SxT0.js → input-search-4841icgL.js} +2 -2
  11. package/dist/chunks/{input-search-Bs_9SxT0.js.map → input-search-4841icgL.js.map} +1 -1
  12. package/dist/chunks/modal-LHkNxBko.js.map +1 -1
  13. package/dist/chunks/{multi-select-BJ6Lst1E.js → multi-select-BDvaRbUc.js} +8 -7
  14. package/dist/chunks/multi-select-BDvaRbUc.js.map +1 -0
  15. package/dist/chunks/{picker-DLnfOgZj.js → picker-lpH_xp14.js} +87 -87
  16. package/dist/chunks/picker-lpH_xp14.js.map +1 -0
  17. package/dist/chunks/{select-CysiIrej.js → select-3KLv_evq.js} +6 -6
  18. package/dist/chunks/select-3KLv_evq.js.map +1 -0
  19. package/dist/date-input/index.js +1 -1
  20. package/dist/date-time-input/index.js +4 -4
  21. package/dist/drop-zone/index.js +1 -1
  22. package/dist/image/index.js +2 -2
  23. package/dist/input/Input.d.ts +1 -0
  24. package/dist/input/Input.d.ts.map +1 -1
  25. package/dist/input/index.js +2 -2
  26. package/dist/input-date-time/index.js +4 -4
  27. package/dist/input-file/index.js +4 -4
  28. package/dist/input-files/index.js +1 -1
  29. package/dist/input-image/index.js +4 -4
  30. package/dist/input-search/index.js +1 -1
  31. package/dist/layout-picker/index.js +1 -1
  32. package/dist/multi-select/index.js +1 -1
  33. package/dist/multi-select/ui/MultiSelect.d.ts.map +1 -1
  34. package/dist/multi-select/ui/ODataMultiSelect.d.ts.map +1 -1
  35. package/dist/picker/PickerStatus.d.ts +1 -2
  36. package/dist/picker/PickerStatus.d.ts.map +1 -1
  37. package/dist/picker/PickerTriggerInput.d.ts +1 -0
  38. package/dist/picker/PickerTriggerInput.d.ts.map +1 -1
  39. package/dist/picker/index.js +1 -1
  40. package/dist/preset-range-date-input/index.js +1 -1
  41. package/dist/preset-select/index.js +1 -1
  42. package/dist/select/Select.d.ts +1 -1
  43. package/dist/select/Select.d.ts.map +1 -1
  44. package/dist/select/index.js +1 -1
  45. package/dist/slider/index.js +8 -8
  46. package/dist/state-select/index.js +1 -1
  47. package/dist/styles.css +1 -1
  48. package/dist/tag-input/index.js +3 -3
  49. package/dist/text-editor/index.js +1 -1
  50. package/dist/textarea/index.js +3 -3
  51. package/dist/tree-select/TreePickerBase.d.ts.map +1 -1
  52. package/dist/tree-select/index.js +5 -5
  53. package/dist/tree-select/index.js.map +1 -1
  54. package/package.json +1 -1
  55. package/storybook-static/assets/{Badge-CD1woSdo.js → Badge-CBt_HPPh.js} +1 -1
  56. package/storybook-static/assets/{Badge.stories-DPunJSrK.js → Badge.stories-DHlp7od6.js} +1 -1
  57. package/storybook-static/assets/{BadgeList-Baj24Y_J.js → BadgeList-BT0W6FTi.js} +1 -1
  58. package/storybook-static/assets/{Button-mnXUdKCZ.js → Button-C0C_itZJ.js} +1 -1
  59. package/storybook-static/assets/{Button-CGuqXzCc.js → Button-CGe-WQzy.js} +1 -1
  60. package/storybook-static/assets/{Button.stories-Dr67FbTg.js → Button.stories-Ca1LvLDL.js} +1 -1
  61. package/storybook-static/assets/{CalendarView-vw1o_xNM.js → CalendarView-b-XJA739.js} +1 -1
  62. package/storybook-static/assets/{CheckBox-BJL2UykG.js → CheckBox-BL5Dbx7D.js} +1 -1
  63. package/storybook-static/assets/{CheckBox-QV3ntveq.js → CheckBox-CEMmNi6o.js} +1 -1
  64. package/storybook-static/assets/{CheckBox.stories-DRQcsnNN.js → CheckBox.stories-BlmETOtm.js} +1 -1
  65. package/storybook-static/assets/{Color-6AOWCN3U-Bun7MdUD.js → Color-6AOWCN3U-Rs90waq6.js} +1 -1
  66. package/storybook-static/assets/{ContextMenu-CNxPWPTI.js → ContextMenu-StOWAKzK.js} +1 -1
  67. package/storybook-static/assets/{ContextMenu-C0ZNiHZl.js → ContextMenu-ifntlTtL.js} +1 -1
  68. package/storybook-static/assets/{ContextMenu.stories-BkZ0l4Tb.js → ContextMenu.stories-Cyd6SOTp.js} +1 -1
  69. package/storybook-static/assets/{DateInput-mz_D_J5f.js → DateInput-BZwlrsJE.js} +1 -1
  70. package/storybook-static/assets/DateInput-Ccfirs_5.js +1 -0
  71. package/storybook-static/assets/{DateInput.stories-BleJdbF3.js → DateInput.stories-DuAcnLrF.js} +1 -1
  72. package/storybook-static/assets/{DateRangePresetSelect-D-8_Suqc.js → DateRangePresetSelect-B656ZC5n.js} +1 -1
  73. package/storybook-static/assets/{DateRangePresetSelect-DXJu8742.js → DateRangePresetSelect-iyLfUWrk.js} +1 -1
  74. package/storybook-static/assets/{DateRangePresetSelect.stories-COMQj6gH.js → DateRangePresetSelect.stories-C5jaj4AU.js} +1 -1
  75. package/storybook-static/assets/{Detail-CJChG-7Q.js → Detail-eDKQEd3h.js} +1 -1
  76. package/storybook-static/assets/{Detail.stories-CX19zPog.js → Detail.stories-DOR0R1ae.js} +1 -1
  77. package/storybook-static/assets/{Dialog-a4GV2ZQ0.js → Dialog-B0MVfYY5.js} +1 -1
  78. package/storybook-static/assets/{Dialog-FuIbCMO-.js → Dialog-i9mgH9Cb.js} +1 -1
  79. package/storybook-static/assets/{Dialog.stories-D1JgXIdZ.js → Dialog.stories-A7-9xaGT.js} +1 -1
  80. package/storybook-static/assets/{Disclosure-BSazy5rN.js → Disclosure-B6hdBRNS.js} +1 -1
  81. package/storybook-static/assets/{Disclosure.stories-CES0qFr3.js → Disclosure.stories-j6zDvBJo.js} +1 -1
  82. package/storybook-static/assets/{DisclosureGroup-zBtzBoZj.js → DisclosureGroup-DVwpZwnT.js} +1 -1
  83. package/storybook-static/assets/{DocsRenderer-JROSPFPF-P9L3PVGp.js → DocsRenderer-JROSPFPF-zZ4ZLuXF.js} +1 -1
  84. package/storybook-static/assets/{DropZone-jynwO9zp.js → DropZone-53wdVvSw.js} +1 -1
  85. package/storybook-static/assets/{DropZone-DDByDKii.js → DropZone-CxohBLs1.js} +1 -1
  86. package/storybook-static/assets/{DropZone.stories-ChV6kmPA.js → DropZone.stories-Ivz53spD.js} +1 -1
  87. package/storybook-static/assets/{DropdownMenu-DEekn_iq.js → DropdownMenu-DjTxZ9mG.js} +1 -1
  88. package/storybook-static/assets/{ExpandableActionPanel-B9KEphZt.js → ExpandableActionPanel-C7dhAmzv.js} +1 -1
  89. package/storybook-static/assets/{ExpandableActionPanel.stories-hJSbWdEi.js → ExpandableActionPanel.stories-bbNSWlHO.js} +1 -1
  90. package/storybook-static/assets/{Flex-DGw71nVa.js → Flex-CnGuvcet.js} +1 -1
  91. package/storybook-static/assets/{Flex.stories-CisdWxc2.js → Flex.stories-CO0Tcbqc.js} +1 -1
  92. package/storybook-static/assets/{FloatingPopover-BgSpMYSa.js → FloatingPopover-DVUsWDK1.js} +1 -1
  93. package/storybook-static/assets/{FormattedTableCell-DqGAaLSH.js → FormattedTableCell-DzyFt8pN.js} +1 -1
  94. package/storybook-static/assets/{Grid-DqrdfRPP.js → Grid-BQoZRx-K.js} +1 -1
  95. package/storybook-static/assets/{Grid.stories-VUK1fVo1.js → Grid.stories-fe72neum.js} +1 -1
  96. package/storybook-static/assets/{ImageCropper.stories-C8tsdj0y.js → ImageCropper.stories-DOQKRGCf.js} +1 -1
  97. package/storybook-static/assets/{ImageRenderer-y_yPk15t.js → ImageRenderer-DRgxKh9o.js} +1 -1
  98. package/storybook-static/assets/{ImageRenderer.stories-CdfTCmEM.js → ImageRenderer.stories-Fm1-VzDZ.js} +1 -1
  99. package/storybook-static/assets/{ImageView.stories-BpJA3U7W.js → ImageView.stories-D9t9ssXk.js} +1 -1
  100. package/storybook-static/assets/{ImageViewer.stories-joUGbNuk.js → ImageViewer.stories-B4lP003M.js} +2 -2
  101. package/storybook-static/assets/{ImageViewerRuntime-Bd6bwD2G.js → ImageViewerRuntime-RvxYiNtK.js} +1 -1
  102. package/storybook-static/assets/Input-BF_XmTD5.js +3 -0
  103. package/storybook-static/assets/{Input-BqHQ13Py.js → Input-PxfHDJhW.js} +1 -1
  104. package/storybook-static/assets/{Input.stories-D5_EehUE.js → Input.stories-BKFhCCxi.js} +1 -1
  105. package/storybook-static/assets/{InputDateTime-DMUf2anh.js → InputDateTime-B8HY40cQ.js} +1 -1
  106. package/storybook-static/assets/InputDateTime.stories-CDzR-1c_.js +38 -0
  107. package/storybook-static/assets/InputFile-D2f3Ncf_.js +1 -0
  108. package/storybook-static/assets/{InputFile-Bb28M0Jz.js → InputFile-DSbHQfK1.js} +1 -1
  109. package/storybook-static/assets/{InputFile.stories-BcmVjUTx.js → InputFile.stories-DVml-Ggy.js} +1 -1
  110. package/storybook-static/assets/InputFiles-BJFRLocJ.js +1 -0
  111. package/storybook-static/assets/{InputFiles-DGD8b7Ou.js → InputFiles-DlWJOX3x.js} +1 -1
  112. package/storybook-static/assets/{InputFiles.stories-CEI2y9jM.js → InputFiles.stories-Cts55TkV.js} +1 -1
  113. package/storybook-static/assets/{InputFilesList-BP0hLe6p.js → InputFilesList-CWFXc9yC.js} +1 -1
  114. package/storybook-static/assets/{InputImage-CNW2H1oW.js → InputImage-CFX4So-R.js} +1 -1
  115. package/storybook-static/assets/{InputImage-DGuYPBQF.js → InputImage-DaDh0VF5.js} +1 -1
  116. package/storybook-static/assets/{InputImage.stories-BRqt3EaX.js → InputImage.stories-B7-OlA23.js} +1 -1
  117. package/storybook-static/assets/{InteractiveComponents-BDlt0WQb.js → InteractiveComponents-DnY_0afg.js} +1 -1
  118. package/storybook-static/assets/{InteractiveComponents.stories-CCwZe0gu.js → InteractiveComponents.stories-BHWoPtk_.js} +1 -1
  119. package/storybook-static/assets/{LayoutPicker-mhDjtSHC.js → LayoutPicker-CYjHcE76.js} +1 -1
  120. package/storybook-static/assets/{LayoutPicker-NTQugPXW.js → LayoutPicker-DeWoPdBP.js} +1 -1
  121. package/storybook-static/assets/{LayoutPicker.stories-B7pmo36I.js → LayoutPicker.stories-hldgix1i.js} +1 -1
  122. package/storybook-static/assets/{Listbox-CX66_FoN.js → Listbox-D1ItX7hG.js} +1 -1
  123. package/storybook-static/assets/{Listbox-CgzrQDwl.js → Listbox-D9NmwlkU.js} +1 -1
  124. package/storybook-static/assets/{Listbox.stories-BuvQeQ0-.js → Listbox.stories-BuDPOiYR.js} +1 -1
  125. package/storybook-static/assets/{Modal-yA7tk-MI.js → Modal-BnaBQ4Qt.js} +1 -1
  126. package/storybook-static/assets/{Modal.stories-fUsmoWsB.js → Modal.stories-D5O8faO2.js} +1 -1
  127. package/storybook-static/assets/{ModalManagerProvider-CpW75Za1.js → ModalManagerProvider-BuKjD141.js} +1 -1
  128. package/storybook-static/assets/{ModalManagerProvider-CjPErFqW.css → ModalManagerProvider-m1su6j5b.css} +1 -1
  129. package/storybook-static/assets/MultiSelect-CQ7xkfZh.js +2 -0
  130. package/storybook-static/assets/{MultiSelect-CAK64RnT.js → MultiSelect-WTvYgy5x.js} +1 -1
  131. package/storybook-static/assets/{MultiSelect.stories-BnOcEsh0.js → MultiSelect.stories-Ce-VHDDo.js} +1 -1
  132. package/storybook-static/assets/{NoData-BLbA-zp6.js → NoData-CGZ7NNhA.js} +1 -1
  133. package/storybook-static/assets/{NotificationsHost-JM9SHcK4.js → NotificationsHost-FE0ZlQzb.js} +1 -1
  134. package/storybook-static/assets/{NotificationsHost.stories-Cq6KBUGr.js → NotificationsHost.stories-Do2Jt2f-.js} +1 -1
  135. package/storybook-static/assets/{ODataMultiSelect-C000rYJO.js → ODataMultiSelect-DI6TVs9F.js} +1 -1
  136. package/storybook-static/assets/ODataMultiSelect.stories-Bp9jLCrr.js +137 -0
  137. package/storybook-static/assets/{ODataSelect-D_bcFAMN.js → ODataSelect-Dw8rMmoG.js} +1 -1
  138. package/storybook-static/assets/ODataSelect.stories-Bo9uRfkb.js +207 -0
  139. package/storybook-static/assets/{ODataTreeMultiSelect-yatLDsY7.js → ODataTreeMultiSelect-CTr2VlAP.js} +1 -1
  140. package/storybook-static/assets/{ODataTreeMultiSelect.stories-DeTaeKuH.js → ODataTreeMultiSelect.stories-ofkDgSQA.js} +1 -1
  141. package/storybook-static/assets/{ODataTreeSelect-DbxkcIOC.js → ODataTreeSelect-BpPakh-O.js} +1 -1
  142. package/storybook-static/assets/{ODataTreeSelect.stories-BiL0Ew_l.js → ODataTreeSelect.stories-vcZvnFkU.js} +1 -1
  143. package/storybook-static/assets/{OneStepScroller-CVMtNkB8.js → OneStepScroller-CeDwkCiM.js} +1 -1
  144. package/storybook-static/assets/{PeriodSelect-CvIh7s4o.js → PeriodSelect-B9d9aqSR.js} +1 -1
  145. package/storybook-static/assets/{PeriodSelect-BxUpa6Ti.js → PeriodSelect-C4_mlRu3.js} +1 -1
  146. package/storybook-static/assets/{PeriodSelect.stories-9UkxLt3c.js → PeriodSelect.stories-DpZH3_ru.js} +1 -1
  147. package/storybook-static/assets/{PickerSelectionToolbar-DCyKqj4d.js → PickerSelectionToolbar-DwDO46st.js} +1 -1
  148. package/storybook-static/assets/{PickerTriggerActions-C2ml1dHu.js → PickerTriggerActions-BTN8qrVG.js} +1 -1
  149. package/storybook-static/assets/{Popover-lL1gFyV9.js → Popover-BReYcTul.js} +1 -1
  150. package/storybook-static/assets/{Popover-CIkFX8KE.js → Popover-DfFAGnWn.js} +1 -1
  151. package/storybook-static/assets/{Popover.stories-qdEo-ssX.js → Popover.stories-COTX6f9w.js} +1 -1
  152. package/storybook-static/assets/{PresetRangeDateInput-BnjHtxAq.js → PresetRangeDateInput-BKGdbGOT.js} +1 -1
  153. package/storybook-static/assets/{PresetRangeDateInput-CJMd3--R.js → PresetRangeDateInput-XsH5e5kz.js} +1 -1
  154. package/storybook-static/assets/{PresetRangeDateInput.stories-CAeR9ZbD.js → PresetRangeDateInput.stories-CkSmf5pq.js} +1 -1
  155. package/storybook-static/assets/{PresetSelect-DsWB0UAO.js → PresetSelect-CQA8gZre.js} +1 -1
  156. package/storybook-static/assets/{RadioButton-BoHDe82U.js → RadioButton-40N9EaaH.js} +1 -1
  157. package/storybook-static/assets/{RadioButton-D8vPj5e8.js → RadioButton-D_PeMLg4.js} +1 -1
  158. package/storybook-static/assets/{RadioButton.stories-CUj8nWsY.js → RadioButton.stories-BfFScj_T.js} +1 -1
  159. package/storybook-static/assets/{RadioGroup-BdV4BEd8.js → RadioGroup-CRl56GFu.js} +1 -1
  160. package/storybook-static/assets/{RadioGroup-Ut9gYgVv.js → RadioGroup-DhLjiTKO.js} +1 -1
  161. package/storybook-static/assets/{RadioGroup.stories-CqDdGawq.js → RadioGroup.stories-CdeSVsK9.js} +1 -1
  162. package/storybook-static/assets/{Scrollable-CYqKWV-X.js → Scrollable-DHZdiFvF.js} +1 -1
  163. package/storybook-static/assets/{Select-CiCBBpv5.js → Select-8UXq3Ejh.js} +1 -1
  164. package/storybook-static/assets/Select-Ckfg31rf.js +12 -0
  165. package/storybook-static/assets/{Select.stories-LhZxxpT7.js → Select.stories-DRrQtm7s.js} +1 -1
  166. package/storybook-static/assets/{SelectOptionContent-BzRajXPC.js → SelectOptionContent-wpQP6S3r.js} +1 -1
  167. package/storybook-static/assets/{SerializableSelect-Cy7gs4jX.js → SerializableSelect-BvyTXo5D.js} +1 -1
  168. package/storybook-static/assets/{SerializableSelect.stories-C2_ryaWY.js → SerializableSelect.stories-DWPjlLbR.js} +1 -1
  169. package/storybook-static/assets/{SingleDateTimeInput-Dva2NFrn.js → SingleDateTimeInput-CHgHSsId.js} +1 -1
  170. package/storybook-static/assets/{SingleDateTimeInput-B_UBXx82.js → SingleDateTimeInput-DuwxX1HD.js} +1 -1
  171. package/storybook-static/assets/{SingleDateTimeInput.stories-DYt31IoM.js → SingleDateTimeInput.stories-BzqU7rVe.js} +1 -1
  172. package/storybook-static/assets/{Slider-Cbcdmx97.js → Slider-BcSXtopQ.js} +1 -1
  173. package/storybook-static/assets/Slider-Cl2Jr6sd.js +1 -0
  174. package/storybook-static/assets/{Slider.stories-CP_gKjK0.js → Slider.stories-0MMIhCqj.js} +1 -1
  175. package/storybook-static/assets/{SliderInput-paqtqhAm.js → SliderInput-CZMNd0TB.js} +1 -1
  176. package/storybook-static/assets/SliderInput-DV9ueVG9.js +2 -0
  177. package/storybook-static/assets/{SliderInput.stories-W1GTuM_C.js → SliderInput.stories-B2KZAO5D.js} +1 -1
  178. package/storybook-static/assets/{Sortable-CT4fVwTv.js → Sortable-DTWkApJk.js} +1 -1
  179. package/storybook-static/assets/{Sortable.stories-nKc7Upc2.js → Sortable.stories-DiqGQKPe.js} +1 -1
  180. package/storybook-static/assets/{Splitter-N9erAT3u.js → Splitter-DWf33XLC.js} +1 -1
  181. package/storybook-static/assets/{Splitter.stories-CK-GKi--.js → Splitter.stories-uFHf1nfJ.js} +1 -1
  182. package/storybook-static/assets/{StateSelect-CIPFB33b.js → StateSelect-CdENvgkn.js} +1 -1
  183. package/storybook-static/assets/{StateSelect-Dojqy1hR.js → StateSelect-CwOoR86z.js} +1 -1
  184. package/storybook-static/assets/{StateSelect.stories-C4On1tk0.js → StateSelect.stories-D5M09b8u.js} +1 -1
  185. package/storybook-static/assets/{StringToggle.stories-BetJnFMH.js → StringToggle.stories-Dxh6sCfr.js} +1 -1
  186. package/storybook-static/assets/{Switch-DUCOjbqF.js → Switch-CM2jIFGP.js} +1 -1
  187. package/storybook-static/assets/{Switch-D2p3kwTC.js → Switch-FRPZ-ReS.js} +1 -1
  188. package/storybook-static/assets/{Switch.stories-Blqtc2Hq.js → Switch.stories-Cj1LQm5P.js} +1 -1
  189. package/storybook-static/assets/{Table-h5VqBZQC.js → Table-ByftPZxi.js} +1 -1
  190. package/storybook-static/assets/{Table.stories-DVNQ0tWI.js → Table.stories-DzyKCG6d.js} +1 -1
  191. package/storybook-static/assets/{Tabs-oJ3wBcAV.js → Tabs-CMzrNw_P.js} +1 -1
  192. package/storybook-static/assets/{Tabs.stories-CBh5mcQQ.js → Tabs.stories-DNI4KEtv.js} +1 -1
  193. package/storybook-static/assets/{TabsBox-B9LCP1S7.js → TabsBox-DIjNPeJB.js} +1 -1
  194. package/storybook-static/assets/{TagInput-DxR2Bj-i.js → TagInput-D9ojPL7c.js} +1 -1
  195. package/storybook-static/assets/{TagInput.stories-0NpZyaKp.js → TagInput.stories-C64vaQL9.js} +1 -1
  196. package/storybook-static/assets/{Text-DlyoUTZs.js → Text-Bpc1gm4P.js} +1 -1
  197. package/storybook-static/assets/{Textarea-CvpgjBoz.js → Textarea-BJM1kx2f.js} +1 -1
  198. package/storybook-static/assets/{Textarea--e-7GpNS.js → Textarea-BMJs3RAy.js} +1 -1
  199. package/storybook-static/assets/{Textarea.stories-CLl8p2g4.js → Textarea.stories-CKFksN5-.js} +1 -1
  200. package/storybook-static/assets/{TimePanel-Fn9pUQDM.js → TimePanel-gzfs_qAF.js} +1 -1
  201. package/storybook-static/assets/{TimePanel.stories-BHUoKMY9.js → TimePanel.stories-Zk6UwTcc.js} +1 -1
  202. package/storybook-static/assets/{Toggle-B6twXbRN.js → Toggle-CHNJu3Rb.js} +1 -1
  203. package/storybook-static/assets/{Toggle-j_swU_h-.js → Toggle-kRuVWZLM.js} +1 -1
  204. package/storybook-static/assets/{Toggle.stories-BkRbPfci.js → Toggle.stories-BntFw_sr.js} +1 -1
  205. package/storybook-static/assets/{TreeMultiSelect-86pFYMuR.js → TreeMultiSelect-Bsvih7Fk.js} +1 -1
  206. package/storybook-static/assets/{TreeMultiSelect-6SlJwvvJ.js → TreeMultiSelect-CRbUNgSf.js} +1 -1
  207. package/storybook-static/assets/{TreeMultiSelect.stories-Dvfg-_tX.js → TreeMultiSelect.stories-DX7pu6Hx.js} +1 -1
  208. package/storybook-static/assets/{TreePickerBase-B-C8g39p.js → TreePickerBase-B9fScxG2.js} +2 -2
  209. package/storybook-static/assets/{TreeSelect-B-rvlWXe.js → TreeSelect-BioGZRGj.js} +1 -1
  210. package/storybook-static/assets/{TreeSelect-BsvnuuDK.js → TreeSelect-f1fCl3zs.js} +1 -1
  211. package/storybook-static/assets/{TreeSelect.stories-Bd7RvBSv.js → TreeSelect.stories-C9CLIEIk.js} +1 -1
  212. package/storybook-static/assets/{TreeTable-hKPiLJbk.js → TreeTable-DemHDx4t.js} +1 -1
  213. package/storybook-static/assets/{TreeTable.stories-DW8-8XIt.js → TreeTable.stories-DafLiUNY.js} +1 -1
  214. package/storybook-static/assets/{async-ClBTLJJf.js → async-Cwy6hvUj.js} +1 -1
  215. package/storybook-static/assets/{blocks-BAkpxLLq.js → blocks-Ex02VobV.js} +3 -3
  216. package/storybook-static/assets/{browserAndReact-CVEbp_eh.js → browserAndReact-DAR0dTR7.js} +1 -1
  217. package/storybook-static/assets/{check-BI1SJVLE.js → check-DB2dx1__.js} +1 -1
  218. package/storybook-static/assets/{chevron-down-C8Jy-MyE.js → chevron-down-DSy2QeCK.js} +1 -1
  219. package/storybook-static/assets/{chevron-left-BY47fHoH.js → chevron-left-zPhnQ8nb.js} +1 -1
  220. package/storybook-static/assets/{chevron-right-Uoc3pHM2.js → chevron-right-DQF4WgdT.js} +1 -1
  221. package/storybook-static/assets/{chunk-W22LQPXL-CL5_k7w9.js → chunk-W22LQPXL-gWdtxN3R.js} +1 -1
  222. package/storybook-static/assets/{circle-alert-DmeiIhJa.js → circle-alert-Bm0pcxg_.js} +1 -1
  223. package/storybook-static/assets/{circle-check-DiYKn1po.js → circle-check-BXNavyDm.js} +1 -1
  224. package/storybook-static/assets/{components-CvASwB3y.js → components-R0Y5aIKj.js} +3 -3
  225. package/storybook-static/assets/{contextMenu-CnFw0q-x.js → contextMenu-BrF8gHPb.js} +1 -1
  226. package/storybook-static/assets/{defaultRenderers-BvRfeq-t.js → defaultRenderers-nQ9PVA83.js} +1 -1
  227. package/storybook-static/assets/{download-9zZQxSfv.js → download-CY-7FliB.js} +1 -1
  228. package/storybook-static/assets/{filesAndExcel-BEg-oUnG.js → filesAndExcel-T2xNLh0p.js} +1 -1
  229. package/storybook-static/assets/{floating-ui.react-1JhRQUPm.js → floating-ui.react-3jbDwBbN.js} +1 -1
  230. package/storybook-static/assets/{formatters-CXfVcFH6.js → formatters-OgtpL0WT.js} +1 -1
  231. package/storybook-static/assets/{formatters-runtime-BUROwHGI.js → formatters-runtime-CCyIDqAX.js} +1 -1
  232. package/storybook-static/assets/{foundationLib-BIERdAtE.js → foundationLib-BlfXpyHp.js} +1 -1
  233. package/storybook-static/assets/{hooks-CU6FIrkU.js → hooks-qkJCxEJH.js} +1 -1
  234. package/storybook-static/assets/{iframe-CyRHAH4o.js → iframe-BO6kl_y3.js} +5 -5
  235. package/storybook-static/assets/iframe-pryCWx5K.js +1 -0
  236. package/storybook-static/assets/{info-vRwdpcvs.js → info-C5aTIbEu.js} +1 -1
  237. package/storybook-static/assets/{odata-BeK1NpdX.js → odata-COOgM2PK.js} +1 -1
  238. package/storybook-static/assets/{odataAndTables-BsGyKbV-.js → odataAndTables-ple0ELV4.js} +1 -1
  239. package/storybook-static/assets/{odataFetchFn-CBB59F7H.js → odataFetchFn-D9NfuOw8.js} +1 -1
  240. package/storybook-static/assets/{odataStoryFixtures-D7UlbX90.js → odataStoryFixtures-VBBNP3xX.js} +1 -1
  241. package/storybook-static/assets/{persisted-C-zkxkWy.js → persisted-B5kzQ2KY.js} +1 -1
  242. package/storybook-static/assets/{pureUtilities-BhlI4P36.js → pureUtilities-o8gYunmq.js} +1 -1
  243. package/storybook-static/assets/{react-4VaPHlD7.js → react-PykdVEaW.js} +1 -1
  244. package/storybook-static/assets/{refresh-cw-koABHMz2.js → refresh-cw-DcaQJ7Aq.js} +1 -1
  245. package/storybook-static/assets/{runtimeAndState-DCiPKg2b.js → runtimeAndState-BS_JmAbi.js} +1 -1
  246. package/storybook-static/assets/{settings-2-B-UnKmoE.js → settings-2-BVQ9p9iA.js} +1 -1
  247. package/storybook-static/assets/{sortable-Cof-YMaC.js → sortable-NjDAyqXb.js} +1 -1
  248. package/storybook-static/assets/{syntaxhighlighter-T5IQBZDB-C1dGYx2A.js → syntaxhighlighter-T5IQBZDB-xdXrMx1c.js} +1 -1
  249. package/storybook-static/assets/{trash-2-DIKrAYpi.js → trash-2-CGN211Q_.js} +1 -1
  250. package/storybook-static/assets/{triangle-alert-3L0K5wrt.js → triangle-alert-DjU47Rlc.js} +1 -1
  251. package/storybook-static/assets/{useODataSelectBase-Cn7uL1Y6.js → useODataSelectBase-5dL7ASZj.js} +1 -1
  252. package/storybook-static/assets/{useODataTreeData-MmRan049.js → useODataTreeData-B_QL77b4.js} +1 -1
  253. package/storybook-static/assets/usePickerQuery-Ce5sMvUH.js +1 -0
  254. package/storybook-static/assets/usePickerTriggerController-BHf38AIA.js +1 -0
  255. package/storybook-static/assets/{x-CI99aKu3.js → x-BCIJOW1D.js} +1 -1
  256. package/storybook-static/iframe.html +2 -2
  257. package/storybook-static/project.json +1 -1
  258. package/dist/chunks/input-VC8jEoTa.js.map +0 -1
  259. package/dist/chunks/multi-select-BJ6Lst1E.js.map +0 -1
  260. package/dist/chunks/picker-DLnfOgZj.js.map +0 -1
  261. package/dist/chunks/select-CysiIrej.js.map +0 -1
  262. package/storybook-static/assets/DateInput-BdjPpQBb.js +0 -1
  263. package/storybook-static/assets/Input-B9yXA1bX.js +0 -3
  264. package/storybook-static/assets/InputDateTime.stories-CSCBZZSt.js +0 -38
  265. package/storybook-static/assets/InputFile--7YNcXk1.js +0 -1
  266. package/storybook-static/assets/InputFiles-BCk2pk9f.js +0 -1
  267. package/storybook-static/assets/MultiSelect-CoqGVsBf.js +0 -2
  268. package/storybook-static/assets/ODataMultiSelect.stories-D1JrPXno.js +0 -137
  269. package/storybook-static/assets/ODataSelect.stories-k0nZfp60.js +0 -207
  270. package/storybook-static/assets/Select-RbjV8dmi.js +0 -12
  271. package/storybook-static/assets/Slider-1ymlsxh9.js +0 -1
  272. package/storybook-static/assets/SliderInput-XHYB3r06.js +0 -2
  273. package/storybook-static/assets/iframe-DMUTCGyI.js +0 -1
  274. package/storybook-static/assets/usePickerQuery-Dso-ufUa.js +0 -1
  275. package/storybook-static/assets/usePickerTriggerController-B-FKRrNu.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"modal-LHkNxBko.js","names":[],"sources":["../../src/modal/Modal.module.scss","../../src/modal/modalMotion.ts","../../src/modal/useModalManager.ts","../../src/modal/Modal.tsx","../../src/modal/ModalManagerProvider.tsx"],"sourcesContent":["@use \"@/styles/mixins\" as *;\n\n.modal {\n\tdisplay: grid;\n\tgrid-auto-rows: auto 1fr;\n\n\tposition: fixed;\n\tinset: 0;\n\tmargin: auto;\n\tz-index: var(--z-modal);\n\twidth: 90%;\n\theight: fit-content;\n\tmax-height: calc(100dvh - var(--space-lg));\n\tborder: var(--border);\n\tborder-radius: var(--radius-md);\n\tbackground-color: var(--surface-0);\n\tbox-shadow: var(--shadow-lg);\n\n\t&:not(:last-child) {\n\t\tpointer-events: none;\n\t\tfilter: grayscale(0.5) opacity(0.75);\n\t\t// opacity: 0.5;\n\t}\n\n\t&.sm {\n\t\tmax-width: min(30em, 93dvw);\n\t}\n\n\t&.md {\n\t\tmax-width: min(50em, 93dvw);\n\t}\n\n\t&.lg {\n\t\tmax-width: min(70em, 93dvw);\n\t}\n\n\t&.xl {\n\t\tmax-width: min(80em, 93dvw);\n\t}\n\n\t&.xxl {\n\t\twidth: 95dvw;\n\t\theight: 92dvh;\n\t\tmax-width: none;\n\t\tmax-height: none;\n\t}\n\n\t&.inside {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tmax-width: none;\n\t\tmax-height: none;\n\n\t\t.header,\n\t\t.body {\n\t\t\tborder-radius: 0;\n\t\t}\n\t}\n}\n\n.header {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tbackground-color: var(--surface-2);\n\tborder-top-left-radius: var(--radius-md);\n\tborder-top-right-radius: var(--radius-md);\n}\n\n.headerText {\n\tmargin: 0;\n\tpadding-inline: var(--space-md);\n\tfont-size: var(--font-size-md);\n\tfont-variation-settings: \"wght\" 600;\n}\n\n.headerButton {\n\tmargin-block: var(--space-xs);\n\tmargin-inline: var(--space-sm);\n\tflex: 0;\n}\n\n.body {\n\toverflow: hidden;\n\tborder-bottom-left-radius: var(--radius-md);\n\tborder-bottom-right-radius: var(--radius-md);\n}\n","import { type Transition, type Variants } from \"motion/react\";\n\n/**\n * Варианты задают единый спокойный переход для появления и удаления modal-панели.\n * Конфигурация приватна для primitive: потребители управляют только состоянием `isOpen`.\n */\nexport const modalMotionVariants = {\n\thidden: {\n\t\topacity: 0,\n\t\tscale: 0.96,\n\t\ty: 12\n\t},\n\tvisible: {\n\t\topacity: 1,\n\t\tscale: 1,\n\t\ty: 0\n\t}\n} satisfies Variants;\n\n/** Переход сохраняет отзывчивое открытие и дает exit-анимации завершиться до удаления portal content. */\nexport const modalMotionTransition = {\n\tduration: 0.18,\n\tease: [0.22, 1, 0.36, 1]\n} satisfies Transition;\n\n/** При системном reduced-motion остается только мгновенная смена видимости без пространственного движения. */\nexport const reducedModalMotionTransition = {\n\tduration: 0\n} satisfies Transition;\n","import { createContext, useContext } from \"react\";\n\nexport const ModalManagerContext = createContext<{\n\tmodals: string[];\n\topenModal: (id: string) => void;\n\tcloseModal: (id: string) => void;\n\tisTopModal: (id: string) => boolean;\n}>({\n\tmodals: [],\n\topenModal: () => {},\n\tcloseModal: () => {},\n\tisTopModal: () => false\n});\n\nexport const useModalManager = () => useContext(ModalManagerContext);\n","import React, { Children, useEffect, useId, useRef } from \"react\";\n\nimport { getOrCreatePortalRoot, useEscapeDismiss, useOverlayFocus } from \"@ryuzaki13/react-foundation-lib/dom\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { X } from \"lucide-react\";\nimport { AnimatePresence, motion, useReducedMotion } from \"motion/react\";\nimport { createPortal } from \"react-dom\";\n\nimport { Button } from \"../button\";\nimport { FlexContainer } from \"../flex\";\nimport { GridContainer } from \"../grid\";\nimport { Scrollable } from \"../misc\";\n\nimport styles from \"./Modal.module.scss\";\nimport { modalMotionTransition, modalMotionVariants, reducedModalMotionTransition } from \"./modalMotion\";\nimport { ModalSize } from \"./types\";\nimport { useModalManager } from \"./useModalManager\";\n\n// Подкомпоненты\nexport interface ModalCompositionProps {\n\tchildren: React.ReactNode;\n\tclassName?: string;\n}\n\nexport const ModalToolbar: React.FC<ModalCompositionProps> = ({ children, className }) => {\n\treturn <div className={cn(\"surface2 paddingMd borderBottom\", className)}>{children}</div>;\n};\nModalToolbar.displayName = \"Modal.Toolbar\";\n\nexport const ModalContent: React.FC<ModalCompositionProps & { scrollable?: boolean }> = ({ children, className, scrollable }) => {\n\treturn (\n\t\t<div className={cn(\"paddingMd h100 overflowHidden\", className)}>\n\t\t\t{scrollable ? <Scrollable className=\"h100\">{children}</Scrollable> : children}\n\t\t</div>\n\t);\n};\nModalContent.displayName = \"Modal.Content\";\n\nexport const ModalFooter: React.FC<ModalCompositionProps> = ({ children, className }) => {\n\treturn (\n\t\t<div className={cn(\"surface2 borderTop paddingMd\", className)}>\n\t\t\t<FlexContainer gap=\"sm\" align=\"center\" justify=\"end\">\n\t\t\t\t{children}\n\t\t\t</FlexContainer>\n\t\t</div>\n\t);\n};\nModalFooter.displayName = \"Modal.Footer\";\n\ntype ToolbarElement = React.ReactElement<ModalCompositionProps, typeof ModalToolbar>;\ntype ContentElement = React.ReactElement<ModalCompositionProps, typeof ModalContent>;\ntype FooterElement = React.ReactElement<ModalCompositionProps, typeof ModalFooter>;\n\ntype ModalChildren =\n\t[ToolbarElement, ContentElement, FooterElement] | [ToolbarElement, ContentElement] | [ContentElement, FooterElement] | ContentElement;\n\nexport interface ModalProps {\n\t/** Открыто ли модальное окно */\n\tisOpen?: boolean;\n\t/** Заголовок */\n\ttitle?: string;\n\t/** Размер модального окна */\n\tsize?: keyof typeof ModalSize;\n\theight?: string;\n\t/** Обработчик закрытия */\n\tonClose: () => void;\n\tchildren: ModalChildren;\n}\n\nexport const Modal: React.FC<ModalProps> = ({ isOpen, title, size = \"sm\", height, onClose, children }) => {\n\tconst modalId = useId();\n\tconst titleId = useId();\n\n\tconst { modals, openModal, closeModal, isTopModal } = useModalManager();\n\tconst shouldReduceMotion = useReducedMotion();\n\tconst restoreFocusTargetRef = useRef<HTMLElement | null>(null);\n\tconst restoreFocusAnimationFrameRef = useRef(0);\n\n\t/**\n\t * Если provider менеджера не подключен, считаем одиночную модалку активной,\n\t * иначе логика Escape/focus trap никогда не включится.\n\t */\n\tconst isActive = isOpen && (modals.length === 0 || isTopModal(modalId));\n\n\tuseEffect(() => {\n\t\tif (isOpen) {\n\t\t\trestoreFocusTargetRef.current = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n\t\t}\n\t}, [isOpen]);\n\n\tconst modalRef = useOverlayFocus<HTMLDivElement>({ active: isOpen || false, trapFocus: true, restoreFocus: false });\n\n\tuseEscapeDismiss({\n\t\tactive: isActive || false,\n\t\tonDismiss: onClose,\n\t\tcontainerRef: modalRef\n\t});\n\n\tuseEffect(() => {\n\t\tif (isOpen) {\n\t\t\topenModal(modalId);\n\t\t}\n\t}, [isOpen, modalId, openModal]);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\twindow.cancelAnimationFrame(restoreFocusAnimationFrameRef.current);\n\t\t\tcloseModal(modalId);\n\t\t};\n\t}, [closeModal, modalId]);\n\n\tfunction handleExitComplete() {\n\t\tcloseModal(modalId);\n\t\tconst restoreFocusTarget = restoreFocusTargetRef.current;\n\n\t\t/**\n\t\t * Менеджер снимает inert в passive effect после обновления стека.\n\t\t * Следующий animation frame гарантирует, что trigger снова доступен для фокуса.\n\t\t */\n\t\trestoreFocusAnimationFrameRef.current = window.requestAnimationFrame(() => {\n\t\t\tif (restoreFocusTarget?.isConnected) {\n\t\t\t\trestoreFocusTarget.focus();\n\t\t\t}\n\t\t\trestoreFocusTargetRef.current = null;\n\t\t});\n\t}\n\n\tconst modalRoot = getOrCreatePortalRoot(\"modal-root\");\n\n\tif (!modalRoot) {\n\t\treturn null;\n\t}\n\n\tlet toolbar: React.ReactNode = null;\n\tlet content: React.ReactNode = null;\n\tlet footer: React.ReactNode = null;\n\n\tconst childArray = Children.toArray(children) as (ToolbarElement | ContentElement | FooterElement)[];\n\n\tfor (const child of childArray) {\n\t\tconst typeName = child.type.displayName;\n\n\t\tswitch (typeName) {\n\t\t\tcase ModalToolbar.displayName:\n\t\t\t\tif (toolbar) throw new Error(\"Modal: duplicate <Toolbar> found\");\n\t\t\t\ttoolbar = child; //.props.children;\n\t\t\t\tbreak;\n\t\t\tcase ModalFooter.displayName:\n\t\t\t\tif (footer) throw new Error(\"Modal: duplicate <Footer> found\");\n\t\t\t\tfooter = child; //props.children;\n\t\t\t\tbreak;\n\t\t\tcase ModalContent.displayName:\n\t\t\t\tif (content) throw new Error(\"Modal: duplicate <Content> found\");\n\t\t\t\tcontent = child; //.props.children;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn createPortal(\n\t\t<AnimatePresence onExitComplete={handleExitComplete}>\n\t\t\t{isOpen ? (\n\t\t\t\t<motion.div\n\t\t\t\t\tref={modalRef}\n\t\t\t\t\tclassName={cn(styles.modal, styles[size])}\n\t\t\t\t\tstyle={{ height }}\n\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\taria-labelledby={titleId}\n\t\t\t\t\taria-describedby={`${titleId}-content`}\n\t\t\t\t\tinitial=\"hidden\"\n\t\t\t\t\tanimate=\"visible\"\n\t\t\t\t\texit=\"hidden\"\n\t\t\t\t\tvariants={modalMotionVariants}\n\t\t\t\t\ttransition={shouldReduceMotion ? reducedModalMotionTransition : modalMotionTransition}>\n\t\t\t\t\t<div className={cn(styles.header, toolbar ? \"\" : \"borderBottom\")}>\n\t\t\t\t\t\t<h3 className={styles.headerText} id={titleId}>\n\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ticon={<X />}\n\t\t\t\t\t\t\tclassName={styles.headerButton}\n\t\t\t\t\t\t\tvariant={\"ghost\"}\n\t\t\t\t\t\t\taria-label={\"Закрыть модальное окно\"}\n\t\t\t\t\t\t\tonClick={onClose}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<GridContainer\n\t\t\t\t\t\tid={`${titleId}-content`}\n\t\t\t\t\t\ttemplateRows={`${toolbar ? \"auto\" : \"\"} 1fr ${footer ? \"auto\" : \"\"}`.trim()}\n\t\t\t\t\t\t// gap=\"md\"\n\t\t\t\t\t\tclassName={styles.body}>\n\t\t\t\t\t\t{toolbar}\n\t\t\t\t\t\t{content}\n\t\t\t\t\t\t{footer}\n\t\t\t\t\t</GridContainer>\n\t\t\t\t</motion.div>\n\t\t\t) : null}\n\t\t</AnimatePresence>,\n\t\tmodalRoot\n\t);\n};\n","// ModalManagerContext.tsx\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\n\nimport { ModalManagerContext } from \"./useModalManager\";\n\nexport interface ModalManagerProviderProps {\n\tchildren: React.ReactNode;\n\t/** Компенсирует исчезновение скроллбара правым padding у body. */\n\tcompensateScrollbar?: boolean;\n}\n\n/**\n * Провайдер для централизованного управления стеком модальных окон. Дает вложенным компонентам доступ к открытию и закрытию модалок через контекст.\n */\nexport function ModalManagerProvider({ children, compensateScrollbar = false }: ModalManagerProviderProps) {\n\tconst [modals, setModals] = useState<string[]>([]);\n\tconst prevModalsLength = useRef(0);\n\tconst scrollbarWidth = useRef(0);\n\tconst bodyPaddingRight = useRef(\"\");\n\tconst isScrollbarCompensated = useRef(false);\n\n\tconst openModal = useCallback((id: string) => {\n\t\tsetModals((prev) => [...prev, id]);\n\t}, []);\n\n\tconst closeModal = useCallback((id: string) => {\n\t\tsetModals((prev) => prev.filter((mid) => mid !== id));\n\t}, []);\n\n\tconst isTopModal = useCallback(\n\t\t(id: string) => {\n\t\t\treturn modals[modals.length - 1] === id;\n\t\t},\n\t\t[modals]\n\t);\n\n\tuseEffect(() => {\n\t\tconst wasEmpty = prevModalsLength.current === 0;\n\n\t\tif (wasEmpty && modals.length > 0) {\n\t\t\t// первая модалка открыта — ставим стили\n\t\t\tconst scrollY = window.scrollY;\n\t\t\tconst appRoot = document.querySelector(\"#app-root\");\n\t\t\tscrollbarWidth.current = Math.max(0, window.innerWidth - document.documentElement.clientWidth);\n\t\t\tbodyPaddingRight.current = document.body.style.paddingRight;\n\n\t\t\tdocument.body.style.position = \"fixed\";\n\t\t\tdocument.body.style.top = `-${scrollY}px`;\n\t\t\tdocument.body.style.width = \"100%\";\n\n\t\t\tif (compensateScrollbar) {\n\t\t\t\tdocument.body.style.paddingRight = `${scrollbarWidth.current}px`;\n\t\t\t\tisScrollbarCompensated.current = true;\n\t\t\t}\n\n\t\t\tappRoot?.setAttribute(\"inert\", \"true\");\n\n\t\t\tprevModalsLength.current = modals.length;\n\t\t\treturn;\n\t\t}\n\n\t\tif (!wasEmpty && modals.length > 0 && compensateScrollbar !== isScrollbarCompensated.current) {\n\t\t\tdocument.body.style.paddingRight = compensateScrollbar ? `${scrollbarWidth.current}px` : bodyPaddingRight.current;\n\t\t\tisScrollbarCompensated.current = compensateScrollbar;\n\t\t}\n\n\t\tif (!wasEmpty && modals.length === 0) {\n\t\t\t// последняя модалка закрыта — снимаем стили\n\t\t\tconst appRoot = document.querySelector(\"#app-root\");\n\t\t\tconst scrollY = parseInt(document.body.style.top || \"0\") * -1;\n\n\t\t\tdocument.body.style.position = \"\";\n\t\t\tdocument.body.style.top = \"\";\n\t\t\tdocument.body.style.width = \"\";\n\n\t\t\tif (isScrollbarCompensated.current) {\n\t\t\t\tdocument.body.style.paddingRight = bodyPaddingRight.current;\n\t\t\t\tisScrollbarCompensated.current = false;\n\t\t\t}\n\n\t\t\tappRoot?.removeAttribute(\"inert\");\n\n\t\t\twindow.scrollTo({ top: scrollY, left: 0, behavior: \"instant\" });\n\t\t}\n\n\t\tprevModalsLength.current = modals.length;\n\t}, [compensateScrollbar, modals.length]);\n\n\treturn <ModalManagerContext.Provider value={{ modals, openModal, closeModal, isTopModal }}>{children}</ModalManagerContext.Provider>;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"modal-LHkNxBko.js","names":[],"sources":["../../src/modal/Modal.module.scss","../../src/modal/modalMotion.ts","../../src/modal/useModalManager.ts","../../src/modal/Modal.tsx","../../src/modal/ModalManagerProvider.tsx"],"sourcesContent":["@use \"@/styles/mixins\" as *;\n\n.modal {\n\tdisplay: grid;\n\tgrid-auto-rows: auto 1fr;\n\n\tposition: fixed;\n\tinset: 0;\n\tmargin: auto;\n\tz-index: var(--z-modal);\n\twidth: 90%;\n\theight: fit-content;\n\tmax-height: calc(100dvh - var(--space-lg));\n\tborder: var(--border);\n\tborder-radius: var(--radius-md);\n\tbackground-color: var(--surface-1);\n\tbox-shadow: var(--shadow-lg);\n\n\t&:not(:last-child) {\n\t\tpointer-events: none;\n\t\tfilter: grayscale(0.5) opacity(0.75);\n\t\t// opacity: 0.5;\n\t}\n\n\t&.sm {\n\t\tmax-width: min(30em, 93dvw);\n\t}\n\n\t&.md {\n\t\tmax-width: min(50em, 93dvw);\n\t}\n\n\t&.lg {\n\t\tmax-width: min(70em, 93dvw);\n\t}\n\n\t&.xl {\n\t\tmax-width: min(80em, 93dvw);\n\t}\n\n\t&.xxl {\n\t\twidth: 95dvw;\n\t\theight: 92dvh;\n\t\tmax-width: none;\n\t\tmax-height: none;\n\t}\n\n\t&.inside {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tmax-width: none;\n\t\tmax-height: none;\n\n\t\t.header,\n\t\t.body {\n\t\t\tborder-radius: 0;\n\t\t}\n\t}\n}\n\n.header {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tbackground-color: var(--surface-2);\n\tborder-top-left-radius: var(--radius-md);\n\tborder-top-right-radius: var(--radius-md);\n}\n\n.headerText {\n\tmargin: 0;\n\tpadding-inline: var(--space-md);\n\tfont-size: var(--font-size-md);\n\tfont-variation-settings: \"wght\" 600;\n}\n\n.headerButton {\n\tmargin-block: var(--space-xs);\n\tmargin-inline: var(--space-sm);\n\tflex: 0;\n}\n\n.body {\n\toverflow: hidden;\n\tborder-bottom-left-radius: var(--radius-md);\n\tborder-bottom-right-radius: var(--radius-md);\n}\n","import { type Transition, type Variants } from \"motion/react\";\n\n/**\n * Варианты задают единый спокойный переход для появления и удаления modal-панели.\n * Конфигурация приватна для primitive: потребители управляют только состоянием `isOpen`.\n */\nexport const modalMotionVariants = {\n\thidden: {\n\t\topacity: 0,\n\t\tscale: 0.96,\n\t\ty: 12\n\t},\n\tvisible: {\n\t\topacity: 1,\n\t\tscale: 1,\n\t\ty: 0\n\t}\n} satisfies Variants;\n\n/** Переход сохраняет отзывчивое открытие и дает exit-анимации завершиться до удаления portal content. */\nexport const modalMotionTransition = {\n\tduration: 0.18,\n\tease: [0.22, 1, 0.36, 1]\n} satisfies Transition;\n\n/** При системном reduced-motion остается только мгновенная смена видимости без пространственного движения. */\nexport const reducedModalMotionTransition = {\n\tduration: 0\n} satisfies Transition;\n","import { createContext, useContext } from \"react\";\n\nexport const ModalManagerContext = createContext<{\n\tmodals: string[];\n\topenModal: (id: string) => void;\n\tcloseModal: (id: string) => void;\n\tisTopModal: (id: string) => boolean;\n}>({\n\tmodals: [],\n\topenModal: () => {},\n\tcloseModal: () => {},\n\tisTopModal: () => false\n});\n\nexport const useModalManager = () => useContext(ModalManagerContext);\n","import React, { Children, useEffect, useId, useRef } from \"react\";\n\nimport { getOrCreatePortalRoot, useEscapeDismiss, useOverlayFocus } from \"@ryuzaki13/react-foundation-lib/dom\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { X } from \"lucide-react\";\nimport { AnimatePresence, motion, useReducedMotion } from \"motion/react\";\nimport { createPortal } from \"react-dom\";\n\nimport { Button } from \"../button\";\nimport { FlexContainer } from \"../flex\";\nimport { GridContainer } from \"../grid\";\nimport { Scrollable } from \"../misc\";\n\nimport styles from \"./Modal.module.scss\";\nimport { modalMotionTransition, modalMotionVariants, reducedModalMotionTransition } from \"./modalMotion\";\nimport { ModalSize } from \"./types\";\nimport { useModalManager } from \"./useModalManager\";\n\n// Подкомпоненты\nexport interface ModalCompositionProps {\n\tchildren: React.ReactNode;\n\tclassName?: string;\n}\n\nexport const ModalToolbar: React.FC<ModalCompositionProps> = ({ children, className }) => {\n\treturn <div className={cn(\"surface2 paddingMd borderBottom\", className)}>{children}</div>;\n};\nModalToolbar.displayName = \"Modal.Toolbar\";\n\nexport const ModalContent: React.FC<ModalCompositionProps & { scrollable?: boolean }> = ({ children, className, scrollable }) => {\n\treturn (\n\t\t<div className={cn(\"paddingMd h100 overflowHidden\", className)}>\n\t\t\t{scrollable ? <Scrollable className=\"h100\">{children}</Scrollable> : children}\n\t\t</div>\n\t);\n};\nModalContent.displayName = \"Modal.Content\";\n\nexport const ModalFooter: React.FC<ModalCompositionProps> = ({ children, className }) => {\n\treturn (\n\t\t<div className={cn(\"surface2 borderTop paddingMd\", className)}>\n\t\t\t<FlexContainer gap=\"sm\" align=\"center\" justify=\"end\">\n\t\t\t\t{children}\n\t\t\t</FlexContainer>\n\t\t</div>\n\t);\n};\nModalFooter.displayName = \"Modal.Footer\";\n\ntype ToolbarElement = React.ReactElement<ModalCompositionProps, typeof ModalToolbar>;\ntype ContentElement = React.ReactElement<ModalCompositionProps, typeof ModalContent>;\ntype FooterElement = React.ReactElement<ModalCompositionProps, typeof ModalFooter>;\n\ntype ModalChildren =\n\t[ToolbarElement, ContentElement, FooterElement] | [ToolbarElement, ContentElement] | [ContentElement, FooterElement] | ContentElement;\n\nexport interface ModalProps {\n\t/** Открыто ли модальное окно */\n\tisOpen?: boolean;\n\t/** Заголовок */\n\ttitle?: string;\n\t/** Размер модального окна */\n\tsize?: keyof typeof ModalSize;\n\theight?: string;\n\t/** Обработчик закрытия */\n\tonClose: () => void;\n\tchildren: ModalChildren;\n}\n\nexport const Modal: React.FC<ModalProps> = ({ isOpen, title, size = \"sm\", height, onClose, children }) => {\n\tconst modalId = useId();\n\tconst titleId = useId();\n\n\tconst { modals, openModal, closeModal, isTopModal } = useModalManager();\n\tconst shouldReduceMotion = useReducedMotion();\n\tconst restoreFocusTargetRef = useRef<HTMLElement | null>(null);\n\tconst restoreFocusAnimationFrameRef = useRef(0);\n\n\t/**\n\t * Если provider менеджера не подключен, считаем одиночную модалку активной,\n\t * иначе логика Escape/focus trap никогда не включится.\n\t */\n\tconst isActive = isOpen && (modals.length === 0 || isTopModal(modalId));\n\n\tuseEffect(() => {\n\t\tif (isOpen) {\n\t\t\trestoreFocusTargetRef.current = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n\t\t}\n\t}, [isOpen]);\n\n\tconst modalRef = useOverlayFocus<HTMLDivElement>({ active: isOpen || false, trapFocus: true, restoreFocus: false });\n\n\tuseEscapeDismiss({\n\t\tactive: isActive || false,\n\t\tonDismiss: onClose,\n\t\tcontainerRef: modalRef\n\t});\n\n\tuseEffect(() => {\n\t\tif (isOpen) {\n\t\t\topenModal(modalId);\n\t\t}\n\t}, [isOpen, modalId, openModal]);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\twindow.cancelAnimationFrame(restoreFocusAnimationFrameRef.current);\n\t\t\tcloseModal(modalId);\n\t\t};\n\t}, [closeModal, modalId]);\n\n\tfunction handleExitComplete() {\n\t\tcloseModal(modalId);\n\t\tconst restoreFocusTarget = restoreFocusTargetRef.current;\n\n\t\t/**\n\t\t * Менеджер снимает inert в passive effect после обновления стека.\n\t\t * Следующий animation frame гарантирует, что trigger снова доступен для фокуса.\n\t\t */\n\t\trestoreFocusAnimationFrameRef.current = window.requestAnimationFrame(() => {\n\t\t\tif (restoreFocusTarget?.isConnected) {\n\t\t\t\trestoreFocusTarget.focus();\n\t\t\t}\n\t\t\trestoreFocusTargetRef.current = null;\n\t\t});\n\t}\n\n\tconst modalRoot = getOrCreatePortalRoot(\"modal-root\");\n\n\tif (!modalRoot) {\n\t\treturn null;\n\t}\n\n\tlet toolbar: React.ReactNode = null;\n\tlet content: React.ReactNode = null;\n\tlet footer: React.ReactNode = null;\n\n\tconst childArray = Children.toArray(children) as (ToolbarElement | ContentElement | FooterElement)[];\n\n\tfor (const child of childArray) {\n\t\tconst typeName = child.type.displayName;\n\n\t\tswitch (typeName) {\n\t\t\tcase ModalToolbar.displayName:\n\t\t\t\tif (toolbar) throw new Error(\"Modal: duplicate <Toolbar> found\");\n\t\t\t\ttoolbar = child; //.props.children;\n\t\t\t\tbreak;\n\t\t\tcase ModalFooter.displayName:\n\t\t\t\tif (footer) throw new Error(\"Modal: duplicate <Footer> found\");\n\t\t\t\tfooter = child; //props.children;\n\t\t\t\tbreak;\n\t\t\tcase ModalContent.displayName:\n\t\t\t\tif (content) throw new Error(\"Modal: duplicate <Content> found\");\n\t\t\t\tcontent = child; //.props.children;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn createPortal(\n\t\t<AnimatePresence onExitComplete={handleExitComplete}>\n\t\t\t{isOpen ? (\n\t\t\t\t<motion.div\n\t\t\t\t\tref={modalRef}\n\t\t\t\t\tclassName={cn(styles.modal, styles[size])}\n\t\t\t\t\tstyle={{ height }}\n\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\taria-labelledby={titleId}\n\t\t\t\t\taria-describedby={`${titleId}-content`}\n\t\t\t\t\tinitial=\"hidden\"\n\t\t\t\t\tanimate=\"visible\"\n\t\t\t\t\texit=\"hidden\"\n\t\t\t\t\tvariants={modalMotionVariants}\n\t\t\t\t\ttransition={shouldReduceMotion ? reducedModalMotionTransition : modalMotionTransition}>\n\t\t\t\t\t<div className={cn(styles.header, toolbar ? \"\" : \"borderBottom\")}>\n\t\t\t\t\t\t<h3 className={styles.headerText} id={titleId}>\n\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ticon={<X />}\n\t\t\t\t\t\t\tclassName={styles.headerButton}\n\t\t\t\t\t\t\tvariant={\"ghost\"}\n\t\t\t\t\t\t\taria-label={\"Закрыть модальное окно\"}\n\t\t\t\t\t\t\tonClick={onClose}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<GridContainer\n\t\t\t\t\t\tid={`${titleId}-content`}\n\t\t\t\t\t\ttemplateRows={`${toolbar ? \"auto\" : \"\"} 1fr ${footer ? \"auto\" : \"\"}`.trim()}\n\t\t\t\t\t\t// gap=\"md\"\n\t\t\t\t\t\tclassName={styles.body}>\n\t\t\t\t\t\t{toolbar}\n\t\t\t\t\t\t{content}\n\t\t\t\t\t\t{footer}\n\t\t\t\t\t</GridContainer>\n\t\t\t\t</motion.div>\n\t\t\t) : null}\n\t\t</AnimatePresence>,\n\t\tmodalRoot\n\t);\n};\n","// ModalManagerContext.tsx\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\n\nimport { ModalManagerContext } from \"./useModalManager\";\n\nexport interface ModalManagerProviderProps {\n\tchildren: React.ReactNode;\n\t/** Компенсирует исчезновение скроллбара правым padding у body. */\n\tcompensateScrollbar?: boolean;\n}\n\n/**\n * Провайдер для централизованного управления стеком модальных окон. Дает вложенным компонентам доступ к открытию и закрытию модалок через контекст.\n */\nexport function ModalManagerProvider({ children, compensateScrollbar = false }: ModalManagerProviderProps) {\n\tconst [modals, setModals] = useState<string[]>([]);\n\tconst prevModalsLength = useRef(0);\n\tconst scrollbarWidth = useRef(0);\n\tconst bodyPaddingRight = useRef(\"\");\n\tconst isScrollbarCompensated = useRef(false);\n\n\tconst openModal = useCallback((id: string) => {\n\t\tsetModals((prev) => [...prev, id]);\n\t}, []);\n\n\tconst closeModal = useCallback((id: string) => {\n\t\tsetModals((prev) => prev.filter((mid) => mid !== id));\n\t}, []);\n\n\tconst isTopModal = useCallback(\n\t\t(id: string) => {\n\t\t\treturn modals[modals.length - 1] === id;\n\t\t},\n\t\t[modals]\n\t);\n\n\tuseEffect(() => {\n\t\tconst wasEmpty = prevModalsLength.current === 0;\n\n\t\tif (wasEmpty && modals.length > 0) {\n\t\t\t// первая модалка открыта — ставим стили\n\t\t\tconst scrollY = window.scrollY;\n\t\t\tconst appRoot = document.querySelector(\"#app-root\");\n\t\t\tscrollbarWidth.current = Math.max(0, window.innerWidth - document.documentElement.clientWidth);\n\t\t\tbodyPaddingRight.current = document.body.style.paddingRight;\n\n\t\t\tdocument.body.style.position = \"fixed\";\n\t\t\tdocument.body.style.top = `-${scrollY}px`;\n\t\t\tdocument.body.style.width = \"100%\";\n\n\t\t\tif (compensateScrollbar) {\n\t\t\t\tdocument.body.style.paddingRight = `${scrollbarWidth.current}px`;\n\t\t\t\tisScrollbarCompensated.current = true;\n\t\t\t}\n\n\t\t\tappRoot?.setAttribute(\"inert\", \"true\");\n\n\t\t\tprevModalsLength.current = modals.length;\n\t\t\treturn;\n\t\t}\n\n\t\tif (!wasEmpty && modals.length > 0 && compensateScrollbar !== isScrollbarCompensated.current) {\n\t\t\tdocument.body.style.paddingRight = compensateScrollbar ? `${scrollbarWidth.current}px` : bodyPaddingRight.current;\n\t\t\tisScrollbarCompensated.current = compensateScrollbar;\n\t\t}\n\n\t\tif (!wasEmpty && modals.length === 0) {\n\t\t\t// последняя модалка закрыта — снимаем стили\n\t\t\tconst appRoot = document.querySelector(\"#app-root\");\n\t\t\tconst scrollY = parseInt(document.body.style.top || \"0\") * -1;\n\n\t\t\tdocument.body.style.position = \"\";\n\t\t\tdocument.body.style.top = \"\";\n\t\t\tdocument.body.style.width = \"\";\n\n\t\t\tif (isScrollbarCompensated.current) {\n\t\t\t\tdocument.body.style.paddingRight = bodyPaddingRight.current;\n\t\t\t\tisScrollbarCompensated.current = false;\n\t\t\t}\n\n\t\t\tappRoot?.removeAttribute(\"inert\");\n\n\t\t\twindow.scrollTo({ top: scrollY, left: 0, behavior: \"instant\" });\n\t\t}\n\n\t\tprevModalsLength.current = modals.length;\n\t}, [compensateScrollbar, modals.length]);\n\n\treturn <ModalManagerContext.Provider value={{ modals, openModal, closeModal, isTopModal }}>{children}</ModalManagerContext.Provider>;\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { t as e } from "./ui.module-DHVTOqZ0.js";
2
2
  import { Text as t } from "../text/index.js";
3
3
  import { t as n } from "./check-box-sfGjYczQ.js";
4
- import { a as r, c as i, d as a, f as o, i as s, l as c, n as l, p as u, r as d, t as f, u as p } from "./picker-DLnfOgZj.js";
4
+ import { a as r, c as i, d as a, f as o, i as s, l as c, n as l, p as u, r as d, t as f, u as p } from "./picker-lpH_xp14.js";
5
5
  import { t as ee } from "./separator-B72Aq-6a.js";
6
6
  import { n as m, r as h, t as g } from "./useODataSelectBase-Bq36Wp1U.js";
7
7
  import { forwardRef as _, useCallback as te, useMemo as v, useRef as ne, useState as y } from "react";
@@ -90,11 +90,11 @@ function D({ text: n, isError: r }) {
90
90
  }
91
91
  //#endregion
92
92
  //#region src/multi-select/ui/MultiSelect.tsx
93
- function me({ isNoData: e, isLoading: t, error: n, children: r }) {
94
- return e ? /* @__PURE__ */ b(p, { emptyState: /* @__PURE__ */ b(D, { text: "Нет данных" }) }) : t ? /* @__PURE__ */ b(p, { loadingState: /* @__PURE__ */ b(D, { text: "Загрузка..." }) }) : n ? /* @__PURE__ */ b(p, { errorState: /* @__PURE__ */ b(D, {
93
+ function me({ isNoData: e, error: t, children: n }) {
94
+ return e ? /* @__PURE__ */ b(p, { emptyState: /* @__PURE__ */ b(D, { text: "Нет данных" }) }) : t ? /* @__PURE__ */ b(p, { errorState: /* @__PURE__ */ b(D, {
95
95
  isError: !0,
96
96
  text: "Ошибка загрузки"
97
- }) }) : /* @__PURE__ */ b(oe, { children: r });
97
+ }) }) : /* @__PURE__ */ b(oe, { children: n });
98
98
  }
99
99
  var he = [];
100
100
  function O(e, t) {
@@ -288,6 +288,7 @@ var k = _(({ codeKey: t, textKey: n, hideCode: a, items: p, value: m, onChange:
288
288
  type: "text",
289
289
  role: "combobox",
290
290
  autoComplete: "off",
291
+ isLoading: j,
291
292
  disabled: k,
292
293
  value: V,
293
294
  placeholder: Z ? void 0 : `${re ?? g ?? "Выберите значения"} <${p.length}>`,
@@ -358,7 +359,6 @@ var k = _(({ codeKey: t, textKey: n, hideCode: a, items: p, value: m, onChange:
358
359
  header: et,
359
360
  children: /* @__PURE__ */ b(me, {
360
361
  isNoData: nt,
361
- isLoading: j,
362
362
  error: A,
363
363
  children: /* @__PURE__ */ x("div", {
364
364
  className: "scrollable h100",
@@ -444,7 +444,8 @@ var j = ({ odata: e, segment: t, model: n, label: r, description: i, disabled: a
444
444
  query: u.query,
445
445
  defaultFilter: !1,
446
446
  highlightQuery: u.debouncedQuery,
447
- disabled: a || u.isLoading,
447
+ isLoading: u.isLoading,
448
+ disabled: a,
448
449
  placeholder: u.placeholder,
449
450
  error: u.isError ? "Ошибка загрузки" : void 0
450
451
  });
@@ -523,4 +524,4 @@ function I({ label: e, description: t, disabled: n, placeholder: r, size: i, opt
523
524
  //#endregion
524
525
  export { k as a, j as i, N as n, T as o, M as r, C as s, I as t };
525
526
 
526
- //# sourceMappingURL=multi-select-BJ6Lst1E.js.map
527
+ //# sourceMappingURL=multi-select-BDvaRbUc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-select-BDvaRbUc.js","names":[],"sources":["../../src/multi-select/ui/MultiSelectOption.tsx","../../src/multi-select/ui/MultiSelect.module.scss","../../src/multi-select/ui/MultiSelectToken.tsx","../../src/multi-select/ui/defaultRenderers.tsx","../../src/multi-select/ui/MultiSelectOptionSkeleton.tsx","../../src/multi-select/ui/MultiSelect.tsx","../../src/multi-select/model/useODataMultiSelect.ts","../../src/multi-select/ui/ODataMultiSelect.tsx","../../src/multi-select/ui/ODataDependentSegmentMultiSelect.tsx","../../src/multi-select/ui/ODataDependentMultiSelect.tsx","../../src/multi-select/ui/SerializableMultiSelect.tsx"],"sourcesContent":["import { CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata\";\n\nimport { SelectOptionContent } from \"../../select/SelectOptionContent\";\n\ninterface MultiSelectOptionProps {\n\titem: CollectionItem;\n\ttextKey: string;\n\tcodeKey?: string;\n\thighlight?: string;\n\tselected: boolean;\n}\n\n/**\n * Отдельная опция внутри `MultiSelect`. Отрисовывает состояние выбора и подсветку текста для найденных совпадений.\n */\nexport function MultiSelectOption({ item, textKey, codeKey, highlight }: MultiSelectOptionProps) {\n\treturn <SelectOptionContent label={item[textKey]} code={codeKey && item[codeKey]} highlight={highlight} />;\n}\n","@use \"@/styles/mixins\" as *;\n\n.multiSelect {\n\t// Общий контейнер\n\tpadding: 0;\n}\n\n.multiSelectTokens {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: flex-end;\n\n\tposition: absolute;\n\tinset: 0 calc(var(--control-height) * 2) 0 var(--space-md);\n\n\tpointer-events: none;\n\toverflow: hidden;\n\n\t&:empty {\n\t\tdisplay: none;\n\t}\n}\n\n.multiSelectToken {\n\tfont-size: var(--font-size-sm);\n\tfont-weight: 300;\n\tfont-variation-settings: \"wght\" 300;\n\n\t// flex: 1 1 0%;\n\t// min-width: 0;\n\tmax-width: 100%;\n\n\toverflow: hidden;\n\twhite-space: nowrap;\n\tword-break: normal;\n\ttext-overflow: ellipsis;\n\n\tpointer-events: none;\n}\n","import styles from \"./MultiSelect.module.scss\";\n\ninterface MultiSelectTokenProps {\n\tvalue: string | undefined;\n}\n\n/**\n * Токен выбранного значения в `MultiSelect`. Показывает выбранный элемент и кнопку его удаления из текущего набора.\n */\nexport function MultiSelectToken({ value }: MultiSelectTokenProps) {\n\tif (!value) return null;\n\n\treturn (\n\t\t<div className={styles.multiSelectTokens}>\n\t\t\t<div className={styles.multiSelectToken}>{value}</div>\n\t\t</div>\n\t);\n}\n","import { formatRussianPlural, type RussianPluralForms } from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport { CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata\";\n\nimport { PickerSelectionToolbar } from \"../../picker\";\n\nimport { type MultiSelectItemState, type MultiSelectRenderContext } from \"./MultiSelect\";\nimport { MultiSelectOption } from \"./MultiSelectOption\";\nimport { MultiSelectToken } from \"./MultiSelectToken\";\n\ninterface MultiSelectRendererConfig {\n\tcodeKey: string;\n\ttextKey?: string;\n\thideCode?: boolean;\n}\n\nconst ELEMENT_FORMS: RussianPluralForms = {\n\tone: \"элемент\",\n\tfew: \"элемента\",\n\tmany: \"элементов\"\n};\n\nexport function formatOptionCount(count: number) {\n\treturn formatRussianPlural(count, ELEMENT_FORMS);\n}\n\nexport function resolveMultiSelectTextKey(items: CollectionItem[], codeKey: string, textKey?: string) {\n\tif (textKey) {\n\t\treturn textKey;\n\t}\n\n\tconst sampleItem = items[0];\n\n\tif (!sampleItem) {\n\t\treturn codeKey;\n\t}\n\n\treturn Object.keys(sampleItem).find((key) => key !== codeKey) ?? codeKey;\n}\n\nexport function getDefaultMultiSelectTokenValue(items: CollectionItem[], codeKey: string, textKey?: string) {\n\tif (items.length === 0) {\n\t\treturn undefined;\n\t}\n\n\tif (items.length > 1) {\n\t\treturn formatOptionCount(items.length);\n\t}\n\n\tconst resolvedTextKey = resolveMultiSelectTextKey(items, codeKey, textKey);\n\treturn items[0]?.[resolvedTextKey] ?? items[0]?.[codeKey];\n}\n\nexport function createDefaultMultiSelectTokenRenderer(config: MultiSelectRendererConfig) {\n\treturn function renderDefaultToken(context: MultiSelectRenderContext) {\n\t\treturn <MultiSelectToken value={getDefaultMultiSelectTokenValue(context.selectedItems, config.codeKey, config.textKey)} />;\n\t};\n}\n\nexport function renderDefaultMultiSelectToolbar(context: MultiSelectRenderContext) {\n\treturn <PickerSelectionToolbar onSelectAll={context.selectAll} onDeselectAll={context.deselectAll} />;\n}\n\nexport function createDefaultMultiSelectItemRenderer(config: MultiSelectRendererConfig) {\n\treturn function renderDefaultItem(item: CollectionItem, state: MultiSelectItemState) {\n\t\treturn (\n\t\t\t<MultiSelectOption\n\t\t\t\titem={item}\n\t\t\t\tselected={state.selected}\n\t\t\t\thighlight={state.highlightQuery}\n\t\t\t\ttextKey={resolveMultiSelectTextKey([item], config.codeKey, config.textKey)}\n\t\t\t\tcodeKey={config.hideCode ? undefined : config.codeKey}\n\t\t\t/>\n\t\t);\n\t};\n}\n","import { Text } from \"../../text\";\nimport uiStyles from \"../../ui.module.scss\";\n\ninterface MultiSelectOptionSkeletonProps {\n\ttext: string;\n\tisError?: boolean;\n}\n\n/**\n * Скелетон строки опции для `MultiSelect`. Используется во время загрузки или при отображении ошибок получения списка.\n */\nexport function MultiSelectOptionSkeleton({ text, isError }: MultiSelectOptionSkeletonProps) {\n\treturn (\n\t\t<div className={uiStyles.uiPopupOption}>\n\t\t\t<span className={uiStyles.uiPopupOptionIcon}></span>\n\t\t\t<Text color={isError ? \"error\" : \"primary\"}>{text}</Text>\n\t\t</div>\n\t);\n}\n","import React, { forwardRef, type PropsWithChildren, useCallback, useMemo, useRef, useState } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { XIcon } from \"lucide-react\";\n\nimport { CheckBox } from \"../../check-box\";\nimport {\n\tPickerField,\n\tPickerPopup,\n\tPickerStatus,\n\tPickerTriggerActions,\n\tPickerTriggerInput,\n\tusePickerDefaultFilter,\n\tusePickerFloatingListbox,\n\tusePickerQuery,\n\tusePickerSelectionLifecycle,\n\tusePickerTriggerController\n} from \"../../picker\";\nimport { Separator } from \"../../separator\";\nimport { type UiBaseProps } from \"../../types\";\nimport uiStyles from \"../../ui.module.scss\";\n\nimport {\n\tcreateDefaultMultiSelectItemRenderer,\n\tcreateDefaultMultiSelectTokenRenderer,\n\trenderDefaultMultiSelectToolbar,\n\tresolveMultiSelectTextKey\n} from \"./defaultRenderers\";\nimport styles from \"./MultiSelect.module.scss\";\nimport { MultiSelectOptionSkeleton } from \"./MultiSelectOptionSkeleton\";\n\nimport type { CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata\";\n\ninterface MultiSelectOptionsProps extends PropsWithChildren {\n\tisNoData?: boolean;\n\t// isLoading?: boolean;\n\terror?: string;\n}\n\nfunction MultiSelectOptionsWrapper({ isNoData, error, children }: MultiSelectOptionsProps) {\n\tif (isNoData) return <PickerStatus emptyState={<MultiSelectOptionSkeleton text=\"Нет данных\" />} />;\n\t// if (isLoading) return <PickerStatus loadingState={<MultiSelectOptionSkeleton text=\"Загрузка...\" />} />;\n\tif (error) return <PickerStatus errorState={<MultiSelectOptionSkeleton isError text=\"Ошибка загрузки\" />} />;\n\n\treturn <>{children}</>;\n}\n\nexport interface MultiSelectItemState {\n\tselected: boolean;\n\tactive: boolean;\n\tdisabled: boolean;\n\tquery: string;\n\thighlightQuery: string;\n}\n\nexport interface MultiSelectRenderContext {\n\tselectedItems: CollectionItem[];\n\tcommittedSelectedItems: CollectionItem[];\n\tavailableItems: CollectionItem[];\n\tquery: string;\n\topen: boolean;\n\tclearSelection: () => void;\n\tselectAll: () => void;\n\tdeselectAll: () => void;\n}\n\nexport interface MultiSelectOptionDisableContext {\n\tselectedItems: CollectionItem[];\n\tcommittedSelectedItems: CollectionItem[];\n\tselectedKeys: ReadonlySet<string>;\n\topen: boolean;\n}\n\ntype MultiSelectOptionalRenderer<TContext> = ((context: TContext) => React.ReactNode) | null | false;\n\ninterface MultiSelectRenderers {\n\trenderToken?: MultiSelectOptionalRenderer<MultiSelectRenderContext>;\n\trenderToolbar?: MultiSelectOptionalRenderer<MultiSelectRenderContext>;\n\trenderItem?: (item: CollectionItem, state: MultiSelectItemState) => React.ReactNode;\n}\n\nexport interface MultiSelectProps<TOption extends Record<string, string> = CollectionItem>\n\textends MultiSelectRenderers, UiBaseProps<TOption[]> {\n\tcodeKey: string;\n\ttextKey?: string;\n\thideCode?: boolean;\n\tquery?: string;\n\tdefaultQuery?: string;\n\thighlightQuery?: string;\n\tonQuery?: (value: string) => void;\n\tdefaultFilter?: boolean;\n\titems: TOption[];\n\tgetOptionDisabled?: (item: TOption, context: MultiSelectOptionDisableContext) => boolean;\n\tonOpen?: () => void;\n\tonClose?: (value: TOption[]) => void;\n\terror?: string;\n\tisLoading?: boolean;\n}\n\nconst fallback: CollectionItem[] = [];\n\nfunction getItemKey(item: CollectionItem, codeKey: string) {\n\treturn item[codeKey];\n}\n\nfunction getItemSearchParts(item: CollectionItem, codeKey: string, textKey: string) {\n\treturn Array.from(new Set([item[textKey], item[codeKey], ...Object.values(item)]));\n}\n\nfunction areSelectionsEqual(left: CollectionItem[], right: CollectionItem[], codeKey: string) {\n\tif (left.length !== right.length) {\n\t\treturn false;\n\t}\n\n\tconst rightKeys = new Set(right.map((item) => getItemKey(item, codeKey)));\n\n\treturn left.every((item) => rightKeys.has(getItemKey(item, codeKey)));\n}\n\ninterface MultiSelectOptionEntry {\n\titem: CollectionItem;\n\tindex: number;\n}\n\ninterface MultiSelectOptionGroupProps {\n\tentries: MultiSelectOptionEntry[];\n\tlistId: string;\n\tactiveIndex: number;\n\tselectedKeys: Set<string>;\n\tcodeKey: string;\n\tquery: string;\n\thighlightQuery: string;\n\tgetOptionDisabled?: (item: CollectionItem) => boolean;\n\tgetOptionId: (listId: string, index: number) => string;\n\tsetOptionRef: (index: number, node: HTMLElement | null) => void;\n\ttoggleOption: (item: CollectionItem) => void;\n\tselectOnlyOption: (item: CollectionItem) => void;\n\trenderItem: (item: CollectionItem, state: MultiSelectItemState) => React.ReactNode;\n}\n\nfunction MultiSelectOptionGroup({\n\tentries,\n\tlistId,\n\tactiveIndex,\n\tselectedKeys,\n\tcodeKey,\n\tquery,\n\thighlightQuery,\n\tgetOptionDisabled,\n\tgetOptionId,\n\tsetOptionRef,\n\ttoggleOption,\n\tselectOnlyOption,\n\trenderItem\n}: MultiSelectOptionGroupProps) {\n\treturn entries.map(({ item, index }) => {\n\t\tconst active = index === activeIndex;\n\t\tconst selected = selectedKeys.has(getItemKey(item, codeKey));\n\t\tconst optionDisabled = getOptionDisabled?.(item) ?? false;\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tkey={`${getItemKey(item, codeKey)}-${index}`}\n\t\t\t\tid={getOptionId(listId, index)}\n\t\t\t\tref={(node) => setOptionRef(index, node)}\n\t\t\t\trole=\"option\"\n\t\t\t\taria-selected={selected}\n\t\t\t\taria-disabled={optionDisabled || undefined}\n\t\t\t\tclassName={cn(\n\t\t\t\t\tuiStyles.uiSelectOption,\n\t\t\t\t\toptionDisabled && uiStyles.disabled,\n\t\t\t\t\tselected && uiStyles.selected,\n\t\t\t\t\tactive && uiStyles.uiPopupOptionActive\n\t\t\t\t)}\n\t\t\t\tonMouseDown={(event) => {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}}>\n\t\t\t\t<div\n\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}}>\n\t\t\t\t\t<CheckBox\n\t\t\t\t\t\tvalue={selected}\n\t\t\t\t\t\tdisabled={optionDisabled}\n\t\t\t\t\t\tonChange={() => {\n\t\t\t\t\t\t\tif (!optionDisabled) {\n\t\t\t\t\t\t\t\ttoggleOption(item);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonMouseDown={(event) => {\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"overflowHidden\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tif (!optionDisabled) {\n\t\t\t\t\t\t\tselectOnlyOption(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t}}>\n\t\t\t\t\t{renderItem(item, { selected, active, disabled: optionDisabled, query, highlightQuery })}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t});\n}\n\n/**\n * Поле множественного выбора с внутренним черновиком значений и подтверждением выбора при закрытии списка.\n * Подходит как для самостоятельного использования, так и как базовый слой для OData-оберток.\n */\nexport const MultiSelect = forwardRef<HTMLInputElement, MultiSelectProps>(\n\t(\n\t\t{\n\t\t\tcodeKey,\n\t\t\ttextKey,\n\t\t\thideCode,\n\t\t\titems,\n\t\t\tvalue,\n\t\t\tonChange,\n\t\t\tlabel,\n\t\t\tdescription,\n\t\t\tplaceholder,\n\t\t\tsize,\n\t\t\tquery,\n\t\t\tdefaultQuery,\n\t\t\thighlightQuery,\n\t\t\tonQuery,\n\t\t\tdefaultFilter = true,\n\t\t\tonOpen,\n\t\t\tonClose,\n\t\t\tgetOptionDisabled,\n\t\t\tdisabled,\n\t\t\terror,\n\t\t\tisLoading,\n\t\t\trenderToken,\n\t\t\trenderToolbar,\n\t\t\trenderItem\n\t\t},\n\t\tref\n\t) => {\n\t\tconst inputRef = useRef<HTMLInputElement | null>(null);\n\t\tconst [open, setOpen] = useState(false);\n\t\tconst triggerMode = \"search-multi\";\n\t\tconst committedSelectedItems = value ?? fallback;\n\t\tconst committedSelectedKeys = useMemo(\n\t\t\t() => new Set(committedSelectedItems.map((item) => getItemKey(item, codeKey))),\n\t\t\t[codeKey, committedSelectedItems]\n\t\t);\n\t\tconst availableItems = useMemo(\n\t\t\t() => items.filter((item) => !committedSelectedKeys.has(getItemKey(item, codeKey))),\n\t\t\t[codeKey, committedSelectedKeys, items]\n\t\t);\n\t\tconst resolvedTextKey = useMemo(\n\t\t\t() => resolveMultiSelectTextKey([...committedSelectedItems, ...items], codeKey, textKey),\n\t\t\t[codeKey, committedSelectedItems, items, textKey]\n\t\t);\n\t\tconst {\n\t\t\tquery: currentQuery,\n\t\t\tsetQuery,\n\t\t\tresetQueryOnClose\n\t\t} = usePickerQuery({\n\t\t\tquery,\n\t\t\tdefaultQuery,\n\t\t\tonQuery,\n\t\t\ttriggerMode\n\t\t});\n\t\tconst handleOpenChange = (nextOpen: boolean) => {\n\t\t\tif (open && !nextOpen && resetQueryOnClose) {\n\t\t\t\tsetQuery(\"\");\n\t\t\t}\n\n\t\t\tsetOpen(nextOpen);\n\t\t};\n\t\tconst filteredCommittedSelectedItems = usePickerDefaultFilter({\n\t\t\toptions: committedSelectedItems,\n\t\t\tquery: currentQuery,\n\t\t\tenabled: defaultFilter,\n\t\t\tgetSearchText: (item) => getItemSearchParts(item, codeKey, resolvedTextKey)\n\t\t});\n\t\tconst filteredAvailableItems = usePickerDefaultFilter({\n\t\t\toptions: availableItems,\n\t\t\tquery: currentQuery,\n\t\t\tenabled: defaultFilter,\n\t\t\tgetSearchText: (item) => getItemSearchParts(item, codeKey, resolvedTextKey)\n\t\t});\n\t\tconst visibleOptions = useMemo(\n\t\t\t() => [...filteredCommittedSelectedItems, ...filteredAvailableItems],\n\t\t\t[filteredAvailableItems, filteredCommittedSelectedItems]\n\t\t);\n\t\tconst selectedIndex = filteredCommittedSelectedItems.length > 0 ? 0 : -1;\n\t\tconst {\n\t\t\tdraftValue: draftSelectedItems,\n\t\t\tsetDraftValue: setDraftSelectedItems,\n\t\t\tprepareOpen\n\t\t} = usePickerSelectionLifecycle({\n\t\t\tvalue: committedSelectedItems,\n\t\t\topen,\n\t\t\tonCommit: onChange,\n\t\t\tonOpen,\n\t\t\tonClose,\n\t\t\tisEqual: (left, right) => areSelectionsEqual(left, right, codeKey)\n\t\t});\n\t\tconst selectedKeys = useMemo(\n\t\t\t() => new Set(draftSelectedItems.map((item) => getItemKey(item, codeKey))),\n\t\t\t[codeKey, draftSelectedItems]\n\t\t);\n\t\tconst optionDisableContext = useMemo<MultiSelectOptionDisableContext>(\n\t\t\t() => ({\n\t\t\t\tselectedItems: draftSelectedItems,\n\t\t\t\tcommittedSelectedItems,\n\t\t\t\tselectedKeys,\n\t\t\t\topen\n\t\t\t}),\n\t\t\t[committedSelectedItems, draftSelectedItems, open, selectedKeys]\n\t\t);\n\t\tconst isOptionDisabled = useCallback(\n\t\t\t(item: CollectionItem) => getOptionDisabled?.(item, optionDisableContext) ?? false,\n\t\t\t[getOptionDisabled, optionDisableContext]\n\t\t);\n\t\tconst {\n\t\t\tactiveIndex,\n\t\t\tcontext,\n\t\t\tfloatingStyles,\n\t\t\tgetFloatingProps,\n\t\t\tsetReference,\n\t\t\tsetFloating,\n\t\t\tsetOptionRef,\n\t\t\tclose,\n\t\t\topenList,\n\t\t\ttoggleOpen,\n\t\t\tselectActiveOption,\n\t\t\thandleReferenceKeyDown,\n\t\t\thandleFloatingKeyDown,\n\t\t\tgetOptionId,\n\t\t\tgetActiveOptionId\n\t\t} = usePickerFloatingListbox({\n\t\t\toptions: visibleOptions,\n\t\t\tselectedIndex,\n\t\t\topen,\n\t\t\tonOpenChange: handleOpenChange,\n\t\t\tonSelect: undefined,\n\t\t\tdisabled,\n\t\t\tgetOptionDisabled: isOptionDisabled,\n\t\t\tcloseOnSelect: false,\n\t\t\tallowOpenWithoutOptions: true,\n\t\t\ttriggerMode\n\t\t});\n\n\t\tconst currentHighlightQuery = highlightQuery ?? currentQuery;\n\t\tconst toggleDraftSelection = (item: CollectionItem) => {\n\t\t\tconst itemKey = getItemKey(item, codeKey);\n\n\t\t\tsetDraftSelectedItems((currentItems) => {\n\t\t\t\tconst isSelected = currentItems.some((selectedItem) => getItemKey(selectedItem, codeKey) === itemKey);\n\n\t\t\t\tif (isSelected) {\n\t\t\t\t\treturn currentItems.filter((selectedItem) => getItemKey(selectedItem, codeKey) !== itemKey);\n\t\t\t\t}\n\n\t\t\t\tif (isOptionDisabled(item)) {\n\t\t\t\t\treturn currentItems;\n\t\t\t\t}\n\n\t\t\t\treturn [...currentItems, item];\n\t\t\t});\n\t\t};\n\n\t\tconst setInputNode = (node: HTMLInputElement | null) => {\n\t\t\tinputRef.current = node;\n\n\t\t\tif (typeof ref === \"function\") {\n\t\t\t\tref(node);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (ref) {\n\t\t\t\tref.current = node;\n\t\t\t}\n\t\t};\n\n\t\tconst clearSelection = () => {\n\t\t\tsetDraftSelectedItems([]);\n\n\t\t\tif (!open) {\n\t\t\t\tonChange([]);\n\t\t\t}\n\t\t};\n\n\t\tconst selectAll = () => {\n\t\t\tsetDraftSelectedItems((currentItems) => {\n\t\t\t\tconst nextItems = [...currentItems];\n\t\t\t\tconst selectedKeys = new Set(currentItems.map((item) => getItemKey(item, codeKey)));\n\n\t\t\t\tfor (const item of visibleOptions) {\n\t\t\t\t\tconst itemKey = getItemKey(item, codeKey);\n\n\t\t\t\t\tif (!selectedKeys.has(itemKey) && !isOptionDisabled(item)) {\n\t\t\t\t\t\tselectedKeys.add(itemKey);\n\t\t\t\t\t\tnextItems.push(item);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn nextItems;\n\t\t\t});\n\t\t};\n\n\t\tconst deselectAll = () => {\n\t\t\tsetDraftSelectedItems([]);\n\t\t};\n\n\t\tconst selectOnlyOption = (item: CollectionItem) => {\n\t\t\tif (isOptionDisabled(item)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetDraftSelectedItems([item]);\n\t\t\tclose();\n\t\t};\n\n\t\tconst currentSelectedItems = open ? draftSelectedItems : committedSelectedItems;\n\t\tconst hasSelectedItems = currentSelectedItems.length > 0;\n\t\tconst renderContext: MultiSelectRenderContext = {\n\t\t\tselectedItems: currentSelectedItems,\n\t\t\tcommittedSelectedItems,\n\t\t\tavailableItems: filteredAvailableItems,\n\t\t\tquery: currentQuery,\n\t\t\topen,\n\t\t\tclearSelection,\n\t\t\tselectAll,\n\t\t\tdeselectAll\n\t\t};\n\t\tconst tokenRenderer =\n\t\t\trenderToken === undefined ? createDefaultMultiSelectTokenRenderer({ codeKey, textKey: resolvedTextKey }) : renderToken;\n\t\tconst toolbarRenderer = renderToolbar === undefined ? renderDefaultMultiSelectToolbar : renderToolbar;\n\t\tconst itemRenderer =\n\t\t\trenderItem ??\n\t\t\tcreateDefaultMultiSelectItemRenderer({\n\t\t\t\tcodeKey,\n\t\t\t\ttextKey: resolvedTextKey,\n\t\t\t\thideCode\n\t\t\t});\n\t\tconst tokenNode = typeof tokenRenderer === \"function\" ? tokenRenderer(renderContext) : null;\n\t\tconst toolbarNode = typeof toolbarRenderer === \"function\" ? toolbarRenderer(renderContext) : null;\n\t\t// const hasToken = tokenNode !== null && tokenNode !== undefined;\n\t\tconst selectedEntries = filteredCommittedSelectedItems.map((item, index) => ({ item, index }));\n\t\tconst itemEntries = filteredAvailableItems.map((item, index) => ({ item, index: index + selectedEntries.length }));\n\t\tconst isNoData = !isLoading && !error && visibleOptions.length === 0;\n\t\tconst triggerController = usePickerTriggerController({\n\t\t\tmode: triggerMode,\n\t\t\topen,\n\t\t\tcurrentQuery,\n\t\t\thasDisplayValue: false,\n\t\t\tinputRef,\n\t\t\tsetQuery,\n\t\t\topenList,\n\t\t\tclose,\n\t\t\ttoggleOpen,\n\t\t\tonBeforeOpen: () => {\n\t\t\t\tif (!open) {\n\t\t\t\t\tprepareOpen();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn (\n\t\t\t<PickerField label={label} description={description} disabled={disabled} size={size} className={styles.multiSelect}>\n\t\t\t\t{({ controlId, labelId, describedBy }) => {\n\t\t\t\t\tconst listId = `${controlId}-listbox`;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<PickerTriggerInput\n\t\t\t\t\t\t\t\tref={setInputNode}\n\t\t\t\t\t\t\t\trootRef={setReference}\n\t\t\t\t\t\t\t\tid={controlId}\n\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\tvalue={currentQuery}\n\t\t\t\t\t\t\t\tplaceholder={\n\t\t\t\t\t\t\t\t\thasSelectedItems ? undefined : `${placeholder ?? label ?? \"Выберите значения\"} <${items.length}>`\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\taria-labelledby={labelId}\n\t\t\t\t\t\t\t\taria-describedby={describedBy}\n\t\t\t\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t\t\t\t\taria-expanded={open}\n\t\t\t\t\t\t\t\taria-controls={open ? listId : undefined}\n\t\t\t\t\t\t\t\taria-autocomplete=\"list\"\n\t\t\t\t\t\t\t\taria-activedescendant={open ? getActiveOptionId(listId) : undefined}\n\t\t\t\t\t\t\t\trootClassName=\"flex alignItemsCenter\"\n\t\t\t\t\t\t\t\tendAdornment={\n\t\t\t\t\t\t\t\t\t<PickerTriggerActions\n\t\t\t\t\t\t\t\t\t\topen={open}\n\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\t\tonToggleMouseDown={triggerController.handleToggleMouseDown}\n\t\t\t\t\t\t\t\t\t\tonToggleClick={triggerController.handleToggleClick}>\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tdisabled={!hasSelectedItems}\n\t\t\t\t\t\t\t\t\t\t\tclassName={uiStyles.uiClearButton}\n\t\t\t\t\t\t\t\t\t\t\tdata-ui=\"multi-select-clear-button\"\n\t\t\t\t\t\t\t\t\t\t\tdata-action=\"clear-multi-select\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={clearSelection}\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Очистить все\">\n\t\t\t\t\t\t\t\t\t\t\t<XIcon />\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t</PickerTriggerActions>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\toverlay={tokenNode}\n\t\t\t\t\t\t\t\tonChange={(event) => {\n\t\t\t\t\t\t\t\t\ttriggerController.handleTriggerInputChange(event.target.value);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonClick={triggerController.handleTriggerClick}\n\t\t\t\t\t\t\t\tonFocus={(event) => {\n\t\t\t\t\t\t\t\t\ttriggerController.handleTriggerFocus(event.currentTarget);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonKeyDown={(event) => {\n\t\t\t\t\t\t\t\t\thandleReferenceKeyDown(event);\n\n\t\t\t\t\t\t\t\t\tif (event.defaultPrevented) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\ttriggerController.handleTriggerKeyDown({\n\t\t\t\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t\t\t\tonActivateWhenOpen: () => {\n\t\t\t\t\t\t\t\t\t\t\tif (activeIndex >= 0) {\n\t\t\t\t\t\t\t\t\t\t\t\tconst activeItem = visibleOptions[activeIndex];\n\t\t\t\t\t\t\t\t\t\t\t\tif (activeItem) {\n\t\t\t\t\t\t\t\t\t\t\t\t\ttoggleDraftSelection(activeItem);\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tselectActiveOption();\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tenableClosedArrowDownOpen: true,\n\t\t\t\t\t\t\t\t\t\tsuppressClosedArrowUp: true\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t<PickerPopup\n\t\t\t\t\t\t\t\topen={open}\n\t\t\t\t\t\t\t\tcontext={context}\n\t\t\t\t\t\t\t\tfloatingStyles={floatingStyles}\n\t\t\t\t\t\t\t\tlistId={listId}\n\t\t\t\t\t\t\t\tlabelId={labelId}\n\t\t\t\t\t\t\t\tdescriptionId={describedBy}\n\t\t\t\t\t\t\t\tactiveOptionId={open ? getActiveOptionId(listId) : undefined}\n\t\t\t\t\t\t\t\tsetFloating={setFloating}\n\t\t\t\t\t\t\t\tgetFloatingProps={getFloatingProps}\n\t\t\t\t\t\t\t\tonKeyDown={handleFloatingKeyDown}\n\t\t\t\t\t\t\t\tinitialFocus={-1}\n\t\t\t\t\t\t\t\treturnFocus={false}\n\t\t\t\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\t\t\t\tclassName={uiStyles.uiPopupOptions}\n\t\t\t\t\t\t\t\theader={toolbarNode}>\n\t\t\t\t\t\t\t\t<MultiSelectOptionsWrapper isNoData={isNoData} error={error}>\n\t\t\t\t\t\t\t\t\t<div className=\"scrollable h100\">\n\t\t\t\t\t\t\t\t\t\t<MultiSelectOptionGroup\n\t\t\t\t\t\t\t\t\t\t\tentries={selectedEntries}\n\t\t\t\t\t\t\t\t\t\t\tlistId={listId}\n\t\t\t\t\t\t\t\t\t\t\tactiveIndex={activeIndex}\n\t\t\t\t\t\t\t\t\t\t\tselectedKeys={selectedKeys}\n\t\t\t\t\t\t\t\t\t\t\tcodeKey={codeKey}\n\t\t\t\t\t\t\t\t\t\t\tquery={currentQuery}\n\t\t\t\t\t\t\t\t\t\t\thighlightQuery={currentHighlightQuery}\n\t\t\t\t\t\t\t\t\t\t\tgetOptionDisabled={isOptionDisabled}\n\t\t\t\t\t\t\t\t\t\t\tgetOptionId={getOptionId}\n\t\t\t\t\t\t\t\t\t\t\tsetOptionRef={setOptionRef}\n\t\t\t\t\t\t\t\t\t\t\ttoggleOption={toggleDraftSelection}\n\t\t\t\t\t\t\t\t\t\t\tselectOnlyOption={selectOnlyOption}\n\t\t\t\t\t\t\t\t\t\t\trenderItem={itemRenderer}\n\t\t\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t\t\t{selectedEntries.length > 0 && availableItems.length > 0 && <Separator className=\"marginBlockSm\" />}\n\n\t\t\t\t\t\t\t\t\t\t<MultiSelectOptionGroup\n\t\t\t\t\t\t\t\t\t\t\tentries={itemEntries}\n\t\t\t\t\t\t\t\t\t\t\tlistId={listId}\n\t\t\t\t\t\t\t\t\t\t\tactiveIndex={activeIndex}\n\t\t\t\t\t\t\t\t\t\t\tselectedKeys={selectedKeys}\n\t\t\t\t\t\t\t\t\t\t\tcodeKey={codeKey}\n\t\t\t\t\t\t\t\t\t\t\tquery={currentQuery}\n\t\t\t\t\t\t\t\t\t\t\thighlightQuery={currentHighlightQuery}\n\t\t\t\t\t\t\t\t\t\t\tgetOptionDisabled={isOptionDisabled}\n\t\t\t\t\t\t\t\t\t\t\tgetOptionId={getOptionId}\n\t\t\t\t\t\t\t\t\t\t\tsetOptionRef={setOptionRef}\n\t\t\t\t\t\t\t\t\t\t\ttoggleOption={toggleDraftSelection}\n\t\t\t\t\t\t\t\t\t\t\tselectOnlyOption={selectOnlyOption}\n\t\t\t\t\t\t\t\t\t\t\trenderItem={itemRenderer}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</MultiSelectOptionsWrapper>\n\t\t\t\t\t\t\t</PickerPopup>\n\t\t\t\t\t\t</>\n\t\t\t\t\t);\n\t\t\t\t}}\n\t\t\t</PickerField>\n\t\t);\n\t}\n);\n\nMultiSelect.displayName = \"MultiSelect\";\n","import { ODataCollectionModel, ODataSelectBaseProps } from \"@ryuzaki13/react-foundation-api/odata\";\nimport { CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata\";\n\nimport { mapSelectedItemsToValues, useODataSelectBase } from \"../../select/model/useODataSelectBase\";\n\ninterface UseODataMultiSelectOptions extends Omit<ODataSelectBaseProps, \"model\"> {\n\tmodel: Required<ODataCollectionModel>;\n\tonChange: (keys: string[]) => void;\n}\n\nexport function useODataMultiSelect({ odata, segment, model, value, dependencies, onChange }: UseODataMultiSelectOptions) {\n\tconst odataModel = useODataSelectBase({\n\t\todata,\n\t\tsegment,\n\t\tmodel,\n\t\tvalue,\n\t\tdependencies\n\t});\n\n\tconst handleChange = (items: CollectionItem[]) => {\n\t\tonChange(mapSelectedItemsToValues(items, odataModel.selectionKey));\n\t};\n\n\treturn {\n\t\t...odataModel,\n\t\thandleChange\n\t};\n}\n","import React from \"react\";\n\nimport { ODataSelectBaseProps, useODataCollectionModel } from \"@ryuzaki13/react-foundation-api/odata\";\n\nimport { UiBaseProps } from \"../../types\";\nimport { useODataMultiSelect } from \"../model/useODataMultiSelect\";\n\nimport { MultiSelect } from \"./MultiSelect\";\n\ntype ODataMultiSelectProps = ODataSelectBaseProps & Omit<UiBaseProps<string[]>, \"placeholder\"> & {};\n\nexport const ODataMultiSelect: React.FC<ODataMultiSelectProps> = ({\n\todata,\n\tsegment,\n\tmodel: initialModel,\n\tlabel,\n\tdescription,\n\tdisabled,\n\tvalue,\n\tdependencies,\n\tonChange,\n\tsize\n}) => {\n\tconst model = useODataCollectionModel(initialModel);\n\tconst odataModel = useODataMultiSelect({\n\t\todata,\n\t\tsegment,\n\t\tmodel,\n\t\tvalue,\n\t\tdependencies,\n\t\tonChange\n\t});\n\n\treturn (\n\t\t<MultiSelect\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\tsize={size}\n\t\t\tcodeKey={odataModel.codeKey}\n\t\t\ttextKey={odataModel.textKey}\n\t\t\thideCode={segment.hideCode ?? odata.hideCode}\n\t\t\titems={odataModel.filteredItems}\n\t\t\tvalue={odataModel.selectedItems}\n\t\t\tonChange={odataModel.handleChange}\n\t\t\tonQuery={odataModel.setQuery}\n\t\t\tquery={odataModel.query}\n\t\t\tdefaultFilter={false}\n\t\t\thighlightQuery={odataModel.debouncedQuery}\n\t\t\tisLoading={odataModel.isLoading}\n\t\t\tdisabled={disabled}\n\t\t\tplaceholder={odataModel.placeholder}\n\t\t\terror={odataModel.isError ? \"Ошибка загрузки\" : undefined}\n\t\t/>\n\t);\n};\n","import { useCallback, useState } from \"react\";\n\nimport { ODataMultiSelect } from \"./ODataMultiSelect\";\n\nimport type { ODataDependentSegmentItem } from \"@ryuzaki13/react-foundation-api/odata\";\n\ninterface ODataDependentSegmentMultiSelectProps {\n\titem: ODataDependentSegmentItem;\n\t/**\n\t * Выбранные значения (управляемый компонент)\n\t */\n\tvalues?: Record<string, string[]>;\n\t/**\n\t * Обработчик изменения выбранных значений\n\t */\n\tonChange?: (selected: Record<string, string[]>) => void;\n\t/**\n\t * Ширина одного элемента в `em` единицах.\n\t *\n\t * @default 15\n\t */\n\twidth?: number;\n}\n\nexport const ODataDependentSegmentMultiSelect: React.FC<ODataDependentSegmentMultiSelectProps> = ({\n\titem,\n\tvalues,\n\tonChange,\n\twidth = 15\n}) => {\n\tconst [internalSelectedValues, setInternalSelectedValues] = useState<Record<string, string[]>>({});\n\tconst selectedValues = values ?? internalSelectedValues;\n\tconst widthStyle = `calc(${width}em + var(--width-add))`;\n\n\tconst handleSelectionChange = useCallback(\n\t\t(keys: string[]) => {\n\t\t\tconst nextSelectedValues = {\n\t\t\t\t...selectedValues,\n\t\t\t\t[item.id]: keys\n\t\t\t};\n\n\t\t\tif (!values) {\n\t\t\t\tsetInternalSelectedValues(nextSelectedValues);\n\t\t\t}\n\n\t\t\tonChange?.(nextSelectedValues);\n\t\t},\n\t\t[item.id, onChange, selectedValues, values]\n\t);\n\n\treturn (\n\t\t<div style={{ maxWidth: widthStyle, minWidth: widthStyle }}>\n\t\t\t<ODataMultiSelect\n\t\t\t\todata={item.odata}\n\t\t\t\tsegment={item.segment}\n\t\t\t\tmodel={item.model}\n\t\t\t\tdependencies={selectedValues}\n\t\t\t\tvalue={selectedValues[item.id]}\n\t\t\t\tonChange={handleSelectionChange}\n\t\t\t/>\n\t\t</div>\n\t);\n};\n","import { useState } from \"react\";\n\nimport { flattenODataDependentServices, ODataDependentBaseProps } from \"@ryuzaki13/react-foundation-api/odata\";\n\nimport { ODataDependentSegmentMultiSelect } from \"./ODataDependentSegmentMultiSelect\";\n\ninterface ODataDependentMultiSelectProps extends ODataDependentBaseProps {\n\t/**\n\t * Выбранные значения (управляемый компонент)\n\t */\n\tvalues?: Record<string, string[]>;\n\n\t/**\n\t * Обработчик изменения выбранных значений\n\t */\n\tonChange?: (selected: Record<string, string[]>) => void;\n\n\t/**\n\t * Ширина одного элемента в `em` единицах.\n\t *\n\t * @default 15\n\t */\n\twidth?: number;\n}\n\nexport const ODataDependentMultiSelect: React.FC<ODataDependentMultiSelectProps> = ({\n\twidth = 15,\n\todata,\n\tsegments,\n\tmodel,\n\tvalues,\n\tonChange\n}) => {\n\tconst [internalSelectedValues, setInternalSelectedValues] = useState<Record<string, string[]>>({});\n\tconst selectedValues = values ?? internalSelectedValues;\n\tconst items = flattenODataDependentServices([\n\t\t{\n\t\t\todata,\n\t\t\tsegments,\n\t\t\tmodel\n\t\t}\n\t]);\n\n\treturn items.map((item) => (\n\t\t<ODataDependentSegmentMultiSelect\n\t\t\tkey={item.id}\n\t\t\titem={item}\n\t\t\tvalues={selectedValues}\n\t\t\tonChange={(nextSelectedValues) => {\n\t\t\t\tif (!values) {\n\t\t\t\t\tsetInternalSelectedValues(nextSelectedValues);\n\t\t\t\t}\n\n\t\t\t\tonChange?.(nextSelectedValues);\n\t\t\t}}\n\t\t\twidth={width}\n\t\t/>\n\t));\n};\n","import { MultiSelect } from \"./MultiSelect\";\n\nimport type { UiBaseProps } from \"../../types\";\nimport type { CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata\";\n\ntype SerializableOptionRecord = Record<string, unknown>;\n\ntype SerializableOptionKeyField<TOption extends SerializableOptionRecord> = {\n\t[K in keyof TOption]: Extract<TOption[K], string> extends never ? never : K;\n}[keyof TOption];\n\nexport interface SerializableMultiSelectProps<\n\tTOption extends SerializableOptionRecord,\n\tTOptionKey extends SerializableOptionKeyField<TOption>,\n\tTOptionLabel extends keyof TOption\n> extends UiBaseProps<Extract<TOption[TOptionKey], string>[]> {\n\toptions: readonly TOption[];\n\toptionKey: TOptionKey;\n\toptionLabel: TOptionLabel;\n\trenderCode?: true;\n}\n\nfunction getSerializableOptionKey<TOption extends SerializableOptionRecord, TOptionKey extends SerializableOptionKeyField<TOption>>(\n\toption: TOption,\n\toptionKey: TOptionKey\n): Extract<TOption[TOptionKey], string> {\n\treturn option[optionKey] as Extract<TOption[TOptionKey], string>;\n}\n\nfunction getSerializableOptionLabel<\n\tTOption extends SerializableOptionRecord,\n\tTOptionKey extends SerializableOptionKeyField<TOption>,\n\tTOptionLabel extends keyof TOption\n>(option: TOption, optionLabel: TOptionLabel, optionKey: TOptionKey): string {\n\tconst label = option[optionLabel];\n\n\tif (typeof label === \"string\") {\n\t\treturn label;\n\t}\n\n\tconst key = getSerializableOptionKey(option, optionKey);\n\treturn typeof key === \"string\" ? key : String(key);\n}\n\nexport function SerializableMultiSelect<\n\tTOption extends SerializableOptionRecord,\n\tTOptionKey extends SerializableOptionKeyField<TOption>,\n\tTOptionLabel extends keyof TOption\n>({\n\tlabel,\n\tdescription,\n\tdisabled,\n\tplaceholder,\n\tsize,\n\toptions,\n\tvalue,\n\tonChange,\n\toptionKey,\n\toptionLabel,\n\trenderCode\n}: SerializableMultiSelectProps<TOption, TOptionKey, TOptionLabel>) {\n\t// Как будто можно не мемоизировать, нет смысла\n\tconst items = options.map<CollectionItem>((option) => ({\n\t\tkey: String(getSerializableOptionKey(option, optionKey)),\n\t\ttext: getSerializableOptionLabel(option, optionLabel, optionKey)\n\t}));\n\tconst selectedKeys = new Set((value ?? []).map((item) => String(item)));\n\tconst selectedItems = items.filter((item) => selectedKeys.has(item.key));\n\n\treturn (\n\t\t<MultiSelect\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\tdisabled={disabled}\n\t\t\tplaceholder={placeholder}\n\t\t\tsize={size}\n\t\t\titems={items}\n\t\t\tcodeKey=\"key\"\n\t\t\ttextKey=\"text\"\n\t\t\thideCode={renderCode ? undefined : true}\n\t\t\tvalue={selectedItems}\n\t\t\tonChange={(nextItems) => onChange(nextItems.map((item) => item.key) as Extract<TOption[TOptionKey], string>[])}\n\t\t/>\n\t);\n}\n"],"mappings":"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"}
@@ -1,27 +1,27 @@
1
1
  import { t as e } from "./ui.module-DHVTOqZ0.js";
2
2
  import { t } from "./grid-dI94AAbi.js";
3
- import { i as n, l as r, s as i } from "./input-VC8jEoTa.js";
4
- import { t as a } from "./separator-B72Aq-6a.js";
5
- import { forwardRef as o, useEffect as s, useMemo as c, useRef as l, useState as u } from "react";
6
- import { cn as d } from "@ryuzaki13/react-foundation-lib/utils";
7
- import { FloatingFocusManager as f, FloatingPortal as p } from "@floating-ui/react";
8
- import { jsx as m, jsxs as h } from "react/jsx-runtime";
9
- import { ChevronDownIcon as g } from "lucide-react";
10
- import { useFloatingListbox as _ } from "@ryuzaki13/react-foundation-lib/hooks";
11
- import { normalizeTextToLower as v } from "@ryuzaki13/react-foundation-lib/formatters";
12
- import { AnimatePresence as y, motion as b } from "motion/react";
3
+ import { a as n, c as r, i, u as a } from "./input-D3u9BYWD.js";
4
+ import { t as o } from "./separator-B72Aq-6a.js";
5
+ import { forwardRef as s, useEffect as c, useMemo as l, useRef as u, useState as d } from "react";
6
+ import { cn as f } from "@ryuzaki13/react-foundation-lib/utils";
7
+ import { FloatingFocusManager as p, FloatingPortal as m } from "@floating-ui/react";
8
+ import { Fragment as h, jsx as g, jsxs as _ } from "react/jsx-runtime";
9
+ import { ChevronDownIcon as v } from "lucide-react";
10
+ import { useFloatingListbox as y } from "@ryuzaki13/react-foundation-lib/hooks";
11
+ import { normalizeTextToLower as b } from "@ryuzaki13/react-foundation-lib/formatters";
12
+ import { AnimatePresence as x, motion as S } from "motion/react";
13
13
  //#region src/picker/PickerField.tsx
14
- function x({ id: e, label: t, description: n, disabled: a, size: o, className: s, error: c, children: l }) {
15
- let { controlId: u, labelId: d, descriptionId: f, errorId: p, describedBy: h } = r({
14
+ function C({ id: e, label: t, description: n, disabled: i, size: o, className: s, error: c, children: l }) {
15
+ let { controlId: u, labelId: d, descriptionId: f, errorId: p, describedBy: m } = a({
16
16
  id: e,
17
17
  hasLabel: t != null,
18
18
  hasDescription: !!n,
19
19
  hasError: !!c
20
20
  });
21
- return /* @__PURE__ */ m(i, {
21
+ return /* @__PURE__ */ g(r, {
22
22
  label: t,
23
23
  description: n,
24
- disabled: a,
24
+ disabled: i,
25
25
  size: o,
26
26
  className: s,
27
27
  error: c,
@@ -34,11 +34,11 @@ function x({ id: e, label: t, description: n, disabled: a, size: o, className: s
34
34
  labelId: d,
35
35
  descriptionId: f,
36
36
  errorId: p,
37
- describedBy: h
37
+ describedBy: m
38
38
  })
39
39
  });
40
40
  }
41
- var S = {
41
+ var w = {
42
42
  popupLayout: "DRJ4hy",
43
43
  popupBody: "U4CULi",
44
44
  status: "bupTWA",
@@ -48,17 +48,17 @@ var S = {
48
48
  };
49
49
  //#endregion
50
50
  //#region src/picker/PickerPopup.tsx
51
- function C(e) {
51
+ function T(e) {
52
52
  e.stopPropagation();
53
53
  }
54
- function w({ open: e, context: t, floatingStyles: n, listId: r, labelId: i, popupAriaLabel: o, descriptionId: s, activeOptionId: c, ariaMultiselectable: l, popupRole: u = "listbox", setFloating: g, getFloatingProps: _, onKeyDown: v, initialFocus: x = -1, returnFocus: w = !1, tabIndex: T = 0, className: E, maxWidth: D, layoutClassName: O, headerClassName: k, bodyClassName: A, header: j, children: M }) {
55
- return /* @__PURE__ */ m(y, { children: e && /* @__PURE__ */ m(p, { children: /* @__PURE__ */ m(f, {
54
+ function E({ open: e, context: t, floatingStyles: n, listId: r, labelId: i, popupAriaLabel: a, descriptionId: s, activeOptionId: c, ariaMultiselectable: l, popupRole: u = "listbox", setFloating: d, getFloatingProps: h, onKeyDown: v, initialFocus: y = -1, returnFocus: b = !1, tabIndex: C = 0, className: E, maxWidth: D, layoutClassName: O, headerClassName: k, bodyClassName: A, header: j, children: M }) {
55
+ return /* @__PURE__ */ g(x, { children: e && /* @__PURE__ */ g(m, { children: /* @__PURE__ */ g(p, {
56
56
  context: t,
57
57
  modal: !1,
58
- initialFocus: x,
59
- returnFocus: w,
60
- children: /* @__PURE__ */ m(b.div, {
61
- ref: g,
58
+ initialFocus: y,
59
+ returnFocus: b,
60
+ children: /* @__PURE__ */ g(S.div, {
61
+ ref: d,
62
62
  style: {
63
63
  ...n,
64
64
  maxWidth: D
@@ -75,26 +75,26 @@ function w({ open: e, context: t, floatingStyles: n, listId: r, labelId: i, popu
75
75
  opacity: 0,
76
76
  scale: .95
77
77
  },
78
- ..._({
78
+ ...h({
79
79
  id: r,
80
80
  role: u,
81
- tabIndex: T,
81
+ tabIndex: C,
82
82
  "aria-labelledby": i,
83
- "aria-label": i ? void 0 : o,
83
+ "aria-label": i ? void 0 : a,
84
84
  "aria-describedby": s,
85
85
  "aria-activedescendant": c,
86
86
  "aria-multiselectable": l || void 0,
87
- onMouseDown: C,
87
+ onMouseDown: T,
88
88
  onKeyDown: v,
89
89
  className: E
90
90
  }),
91
- children: /* @__PURE__ */ h("div", {
92
- className: d(S.popupLayout, O),
93
- children: [j ? /* @__PURE__ */ h("div", {
91
+ children: /* @__PURE__ */ _("div", {
92
+ className: f(w.popupLayout, O),
93
+ children: [j ? /* @__PURE__ */ _("div", {
94
94
  className: k,
95
- children: [j, /* @__PURE__ */ m(a, { className: "marginBlockSm" })]
96
- }) : /* @__PURE__ */ m("div", {}), /* @__PURE__ */ m("div", {
97
- className: d(S.popupBody, A),
95
+ children: [j, /* @__PURE__ */ g(o, { className: "marginBlockSm" })]
96
+ }) : /* @__PURE__ */ g("div", {}), /* @__PURE__ */ g("div", {
97
+ className: f(w.popupBody, A),
98
98
  children: M
99
99
  })]
100
100
  })
@@ -103,21 +103,21 @@ function w({ open: e, context: t, floatingStyles: n, listId: r, labelId: i, popu
103
103
  }
104
104
  //#endregion
105
105
  //#region src/picker/PickerSelectionToolbar.tsx
106
- function T({ onSelectAll: e, onDeselectAll: n, selectAllButtonRef: r }) {
107
- return /* @__PURE__ */ h(t.Container, {
106
+ function D({ onSelectAll: e, onDeselectAll: n, selectAllButtonRef: r }) {
107
+ return /* @__PURE__ */ _(t.Container, {
108
108
  gap: "xs",
109
109
  templateColumns: "1fr 1fr",
110
- children: [/* @__PURE__ */ m("button", {
110
+ children: [/* @__PURE__ */ g("button", {
111
111
  ref: r,
112
112
  type: "button",
113
- className: S.selectionActionButton,
113
+ className: w.selectionActionButton,
114
114
  onClick: e,
115
115
  "data-ui": "picker-select-all",
116
116
  "data-action": "select-all",
117
117
  children: "Выбрать все"
118
- }), /* @__PURE__ */ m("button", {
118
+ }), /* @__PURE__ */ g("button", {
119
119
  type: "button",
120
- className: S.selectionActionButton,
120
+ className: w.selectionActionButton,
121
121
  onClick: n,
122
122
  "data-ui": "picker-deselect-all",
123
123
  "data-action": "deselect-all",
@@ -127,52 +127,52 @@ function T({ onSelectAll: e, onDeselectAll: n, selectAllButtonRef: r }) {
127
127
  }
128
128
  //#endregion
129
129
  //#region src/picker/PickerStatus.tsx
130
- function E({ emptyState: t, loadingState: n, errorState: r }) {
131
- let i = r ?? n ?? t;
132
- return i == null ? null : /* @__PURE__ */ m("div", {
133
- className: d(e.uiPopupOption, S.status, r !== void 0 && S.statusError),
130
+ function O({ emptyState: t, errorState: n }) {
131
+ let r = n ?? t;
132
+ return r == null ? null : /* @__PURE__ */ g("div", {
133
+ className: f(e.uiPopupOption, w.status, n !== void 0 && w.statusError),
134
134
  "aria-disabled": !0,
135
- children: i
135
+ children: r
136
136
  });
137
137
  }
138
138
  //#endregion
139
139
  //#region src/picker/PickerTriggerActions.tsx
140
- function D({ open: t, disabled: n, children: r, onToggleMouseDown: i, onToggleClick: a, openAriaLabel: o = "Открыть список", closeAriaLabel: s = "Закрыть список" }) {
141
- return /* @__PURE__ */ h("div", {
140
+ function k({ open: t, disabled: n, children: r, onToggleMouseDown: i, onToggleClick: a, openAriaLabel: o = "Открыть список", closeAriaLabel: s = "Закрыть список" }) {
141
+ return /* @__PURE__ */ _("div", {
142
142
  className: e.uiToggleButtonContainer,
143
143
  "data-disabled": n || void 0,
144
144
  children: [
145
145
  r,
146
- /* @__PURE__ */ m("div", { className: e.uiButtonSeparator }),
147
- /* @__PURE__ */ m("button", {
146
+ /* @__PURE__ */ g("div", { className: e.uiButtonSeparator }),
147
+ /* @__PURE__ */ g("button", {
148
148
  type: "button",
149
149
  "aria-label": t ? s : o,
150
150
  className: e.uiToggleButton,
151
151
  onMouseDown: i,
152
152
  onClick: a,
153
- children: /* @__PURE__ */ m(g, { className: d(e.uiToggleIcon, t && e.uiToggleIconOpen) })
153
+ children: /* @__PURE__ */ g(v, { className: f(e.uiToggleIcon, t && e.uiToggleIconOpen) })
154
154
  })
155
155
  ]
156
156
  });
157
157
  }
158
158
  //#endregion
159
159
  //#region src/picker/PickerTriggerInput.tsx
160
- var O = o(({ rootRef: t, endAdornment: r, overlay: i, rootClassName: a, inputClassName: o, ...s }, c) => /* @__PURE__ */ h("div", {
160
+ var A = s(({ rootRef: t, endAdornment: r, overlay: a, rootClassName: o, inputClassName: s, isLoading: c, ...l }, u) => /* @__PURE__ */ g("div", {
161
161
  ref: t,
162
- className: d(e.uiInputContainer, S.triggerContainer, a),
163
- children: [/* @__PURE__ */ m(n, {
162
+ className: f(e.uiInputContainer, w.triggerContainer, o),
163
+ children: c ? /* @__PURE__ */ g(n, {}) : /* @__PURE__ */ _(h, { children: [/* @__PURE__ */ g(i, {
164
164
  endAdornment: r,
165
- children: ({ controlClassName: t }) => /* @__PURE__ */ m("input", {
166
- ...s,
167
- ref: c,
168
- className: d(e.uiInputWithToggle, t, o)
165
+ children: ({ controlClassName: t }) => /* @__PURE__ */ g("input", {
166
+ ...l,
167
+ ref: u,
168
+ className: f(e.uiInputWithToggle, t, s)
169
169
  })
170
- }), i]
170
+ }), a] })
171
171
  }));
172
- O.displayName = "PickerTriggerInput";
172
+ A.displayName = "PickerTriggerInput";
173
173
  //#endregion
174
174
  //#region src/picker/model/createPickerTriggerPolicy.ts
175
- function k(e) {
175
+ function j(e) {
176
176
  switch (e) {
177
177
  case "search-single": return {
178
178
  focusFloatingOnOpen: !1,
@@ -205,21 +205,21 @@ function k(e) {
205
205
  }
206
206
  //#endregion
207
207
  //#region src/picker/model/extractPickerTextContent.ts
208
- function A(e) {
208
+ function M(e) {
209
209
  if (typeof e == "string" || typeof e == "number") return String(e);
210
210
  if (Array.isArray(e)) {
211
- let t = e.map(A).filter((e) => !!e);
211
+ let t = e.map(M).filter((e) => !!e);
212
212
  return t.length ? t.join(" ") : void 0;
213
213
  }
214
214
  }
215
215
  //#endregion
216
216
  //#region src/picker/model/usePickerDefaultFilter.ts
217
- function j(e) {
218
- return v((Array.isArray(e) ? e : [e]).filter(Boolean).join(" "));
217
+ function N(e) {
218
+ return b((Array.isArray(e) ? e : [e]).filter(Boolean).join(" "));
219
219
  }
220
- function M({ options: e, query: t, enabled: n = !0, getSearchText: r }) {
221
- let i = v(t);
222
- return c(() => !n || !i ? [...e] : e.filter((e) => j(r(e)).includes(i)), [
220
+ function P({ options: e, query: t, enabled: n = !0, getSearchText: r }) {
221
+ let i = b(t);
222
+ return l(() => !n || !i ? [...e] : e.filter((e) => N(r(e)).includes(i)), [
223
223
  n,
224
224
  r,
225
225
  i,
@@ -228,9 +228,9 @@ function M({ options: e, query: t, enabled: n = !0, getSearchText: r }) {
228
228
  }
229
229
  //#endregion
230
230
  //#region src/picker/model/usePickerFloatingListbox.ts
231
- function N(e) {
232
- let t = e.triggerMode ? k(e.triggerMode) : void 0;
233
- return _({
231
+ function F(e) {
232
+ let t = e.triggerMode ? j(e.triggerMode) : void 0;
233
+ return y({
234
234
  ...e,
235
235
  focusFloatingOnOpen: e.focusFloatingOnOpen ?? t?.focusFloatingOnOpen,
236
236
  restoreFocusOnClose: e.restoreFocusOnClose ?? t?.restoreFocusOnClose
@@ -238,47 +238,47 @@ function N(e) {
238
238
  }
239
239
  //#endregion
240
240
  //#region src/picker/model/usePickerQuery.ts
241
- function P({ query: e, defaultQuery: t, onQuery: n, resetOnClose: r, triggerMode: i }) {
242
- let a = e !== void 0, [o, s] = u(t ?? ""), c = a ? e ?? "" : o, l = r ?? (!i || k(i).resetQueryOnClose), d = (e) => {
241
+ function I({ query: e, defaultQuery: t, onQuery: n, resetOnClose: r, triggerMode: i }) {
242
+ let a = e !== void 0, [o, s] = d(t ?? ""), c = a ? e ?? "" : o, l = r ?? (!i || j(i).resetQueryOnClose), u = (e) => {
243
243
  a || s(e), n?.(e);
244
244
  };
245
245
  return {
246
246
  query: c,
247
- setQuery: d,
248
- clearQuery: () => d(""),
247
+ setQuery: u,
248
+ clearQuery: () => u(""),
249
249
  resetQueryOnClose: l
250
250
  };
251
251
  }
252
252
  //#endregion
253
253
  //#region src/picker/model/usePickerSelectionLifecycle.ts
254
- function F({ value: e, open: t, onCommit: n, onOpen: r, onClose: i, isEqual: a }) {
255
- let o = l(!1), [c, d] = u(e);
256
- return s(() => {
257
- o.current && !t && (a(c, e) || n(c), i?.(c)), o.current = t;
254
+ function L({ value: e, open: t, onCommit: n, onOpen: r, onClose: i, isEqual: a }) {
255
+ let o = u(!1), [s, l] = d(e);
256
+ return c(() => {
257
+ o.current && !t && (a(s, e) || n(s), i?.(s)), o.current = t;
258
258
  }, [
259
- c,
259
+ s,
260
260
  a,
261
261
  i,
262
262
  n,
263
263
  t,
264
264
  e
265
265
  ]), {
266
- draftValue: c,
267
- setDraftValue: d,
266
+ draftValue: s,
267
+ setDraftValue: l,
268
268
  prepareOpen: () => {
269
- d(e), r?.();
269
+ l(e), r?.();
270
270
  }
271
271
  };
272
272
  }
273
273
  //#endregion
274
274
  //#region src/picker/model/usePickerTriggerController.ts
275
- function I(e) {
275
+ function R(e) {
276
276
  requestAnimationFrame(() => {
277
277
  e.current?.focus();
278
278
  });
279
279
  }
280
- function L({ mode: e, open: t, currentQuery: n, hasDisplayValue: r, inputRef: i, setQuery: a, openList: o, close: s, toggleOpen: c, onBeforeOpen: l }) {
281
- let u = k(e), d = () => {
280
+ function z({ mode: e, open: t, currentQuery: n, hasDisplayValue: r, inputRef: i, setQuery: a, openList: o, close: s, toggleOpen: c, onBeforeOpen: l }) {
281
+ let u = j(e), d = () => {
282
282
  if (l?.(), o) {
283
283
  o();
284
284
  return;
@@ -291,7 +291,7 @@ function L({ mode: e, open: t, currentQuery: n, hasDisplayValue: r, inputRef: i,
291
291
  }
292
292
  c?.();
293
293
  }, p = () => {
294
- t ? f() : d(), u.shouldFocusReferenceOnToggle(t) && I(i);
294
+ t ? f() : d(), u.shouldFocusReferenceOnToggle(t) && R(i);
295
295
  };
296
296
  return {
297
297
  policy: u,
@@ -335,6 +335,6 @@ function L({ mode: e, open: t, currentQuery: n, hasDisplayValue: r, inputRef: i,
335
335
  };
336
336
  }
337
337
  //#endregion
338
- export { M as a, O as c, T as d, w as f, N as i, D as l, F as n, A as o, x as p, P as r, k as s, L as t, E as u };
338
+ export { P as a, A as c, D as d, E as f, F as i, k as l, L as n, M as o, C as p, I as r, j as s, z as t, O as u };
339
339
 
340
- //# sourceMappingURL=picker-DLnfOgZj.js.map
340
+ //# sourceMappingURL=picker-lpH_xp14.js.map