@ryuzaki13/react-foundation-ui 1.5.13 → 1.5.15

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 (274) 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/{multi-select-BJ6Lst1E.js → multi-select-BDvaRbUc.js} +8 -7
  13. package/dist/chunks/multi-select-BDvaRbUc.js.map +1 -0
  14. package/dist/chunks/{picker-DLnfOgZj.js → picker-lpH_xp14.js} +87 -87
  15. package/dist/chunks/picker-lpH_xp14.js.map +1 -0
  16. package/dist/chunks/{select-CysiIrej.js → select-3KLv_evq.js} +6 -6
  17. package/dist/chunks/select-3KLv_evq.js.map +1 -0
  18. package/dist/date-input/index.js +1 -1
  19. package/dist/date-time-input/index.js +4 -4
  20. package/dist/drop-zone/index.js +1 -1
  21. package/dist/image/index.js +2 -2
  22. package/dist/input/Input.d.ts +1 -0
  23. package/dist/input/Input.d.ts.map +1 -1
  24. package/dist/input/index.js +2 -2
  25. package/dist/input-date-time/index.js +4 -4
  26. package/dist/input-file/index.js +4 -4
  27. package/dist/input-files/index.js +1 -1
  28. package/dist/input-image/index.js +4 -4
  29. package/dist/input-search/index.js +1 -1
  30. package/dist/layout-picker/index.js +1 -1
  31. package/dist/listbox/index.js +1 -1
  32. package/dist/listbox/index.js.map +1 -1
  33. package/dist/multi-select/index.js +1 -1
  34. package/dist/multi-select/ui/MultiSelect.d.ts.map +1 -1
  35. package/dist/multi-select/ui/ODataMultiSelect.d.ts.map +1 -1
  36. package/dist/picker/PickerStatus.d.ts +1 -2
  37. package/dist/picker/PickerStatus.d.ts.map +1 -1
  38. package/dist/picker/PickerTriggerInput.d.ts +1 -0
  39. package/dist/picker/PickerTriggerInput.d.ts.map +1 -1
  40. package/dist/picker/index.js +1 -1
  41. package/dist/preset-range-date-input/index.js +1 -1
  42. package/dist/preset-select/index.js +1 -1
  43. package/dist/select/Select.d.ts +1 -1
  44. package/dist/select/Select.d.ts.map +1 -1
  45. package/dist/select/index.js +1 -1
  46. package/dist/slider/index.js +8 -8
  47. package/dist/state-select/index.js +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-Cz9gcxIU.js → Badge-DldwMP5d.js} +1 -1
  56. package/storybook-static/assets/{Badge.stories-PV88uXCB.js → Badge.stories-CB4lGRxY.js} +1 -1
  57. package/storybook-static/assets/{BadgeList-BMO51PtO.js → BadgeList-DP-72loV.js} +1 -1
  58. package/storybook-static/assets/{Button-DQxw6N8K.js → Button-BHscU-z3.js} +1 -1
  59. package/storybook-static/assets/{Button-BfLxUIid.js → Button-Bve0Lsd9.js} +1 -1
  60. package/storybook-static/assets/{Button.stories-NlwBLVkf.js → Button.stories-CQSct8PY.js} +1 -1
  61. package/storybook-static/assets/{CalendarView-C_i7clUL.js → CalendarView-MNrakgtl.js} +1 -1
  62. package/storybook-static/assets/{CheckBox-3WpAVlwd.js → CheckBox-BFPm58c_.js} +1 -1
  63. package/storybook-static/assets/{CheckBox-Drc-88GM.js → CheckBox-Czrn4-bF.js} +1 -1
  64. package/storybook-static/assets/{CheckBox.stories-D4IsLr4P.js → CheckBox.stories-aZatr3pc.js} +1 -1
  65. package/storybook-static/assets/{Color-6AOWCN3U-CPY8DhM_.js → Color-6AOWCN3U-CiSKW9je.js} +1 -1
  66. package/storybook-static/assets/{ContextMenu-BjBW8_sr.js → ContextMenu-BgqQQbbY.js} +1 -1
  67. package/storybook-static/assets/{ContextMenu-D2--kuIS.js → ContextMenu-CD9NSiLw.js} +1 -1
  68. package/storybook-static/assets/{ContextMenu.stories-yGhy89Pi.js → ContextMenu.stories-hdAAEtrI.js} +1 -1
  69. package/storybook-static/assets/DateInput-BNOPi8tv.js +1 -0
  70. package/storybook-static/assets/{DateInput-G4c2mjqq.js → DateInput-BfSiBIl7.js} +1 -1
  71. package/storybook-static/assets/{DateInput.stories-5ciPhgGf.js → DateInput.stories-DH6ku3Rc.js} +1 -1
  72. package/storybook-static/assets/{DateRangePresetSelect-C9M3c98a.js → DateRangePresetSelect-DG_q8icb.js} +1 -1
  73. package/storybook-static/assets/{DateRangePresetSelect-DJ4HV2xU.js → DateRangePresetSelect-yrKx1bkL.js} +1 -1
  74. package/storybook-static/assets/{DateRangePresetSelect.stories-C8Ohsfia.js → DateRangePresetSelect.stories-BZvZ3f2V.js} +1 -1
  75. package/storybook-static/assets/{Detail-CSPYsUEC.js → Detail-BDVQnuaF.js} +1 -1
  76. package/storybook-static/assets/{Detail.stories-LsOTK5pf.js → Detail.stories-CYmQh0uU.js} +1 -1
  77. package/storybook-static/assets/{Dialog-C8i0iW4a.js → Dialog-BZyurJz4.js} +1 -1
  78. package/storybook-static/assets/{Dialog-BjEcdbGi.js → Dialog-BwrMFaxL.js} +1 -1
  79. package/storybook-static/assets/{Dialog.stories-BnmqXDWO.js → Dialog.stories-DVSdUxZ7.js} +1 -1
  80. package/storybook-static/assets/{Disclosure-Cvsl0gPE.js → Disclosure-BMSmmUiw.js} +1 -1
  81. package/storybook-static/assets/{Disclosure.stories-CFfYWULd.js → Disclosure.stories-CbJ9Es-C.js} +1 -1
  82. package/storybook-static/assets/{DisclosureGroup-ZnY0phsi.js → DisclosureGroup-EDWONIdc.js} +1 -1
  83. package/storybook-static/assets/{DocsRenderer-JROSPFPF-8jGqLFb9.js → DocsRenderer-JROSPFPF-DSQiqbJZ.js} +1 -1
  84. package/storybook-static/assets/{DropZone-DFqqqipb.js → DropZone-CDZMeILF.js} +1 -1
  85. package/storybook-static/assets/{DropZone-DvuKp6tN.js → DropZone-DeAXD85q.js} +1 -1
  86. package/storybook-static/assets/{DropZone.stories-B1xdFmz3.js → DropZone.stories-BqoW_3wP.js} +1 -1
  87. package/storybook-static/assets/{DropdownMenu-BrgLHYbc.js → DropdownMenu-BzlgFl8n.js} +1 -1
  88. package/storybook-static/assets/{ExpandableActionPanel-CBOJ7TTT.js → ExpandableActionPanel-C5uzOOG0.js} +1 -1
  89. package/storybook-static/assets/{ExpandableActionPanel.stories-ColZw5gd.js → ExpandableActionPanel.stories-i_SklR9s.js} +1 -1
  90. package/storybook-static/assets/{Flex-BT_QGMVX.js → Flex-DpQ24IHJ.js} +1 -1
  91. package/storybook-static/assets/{Flex.stories-CEgggepS.js → Flex.stories-bHyNTNg1.js} +1 -1
  92. package/storybook-static/assets/{FloatingPopover-ClEj7JDK.js → FloatingPopover-STiijh_P.js} +1 -1
  93. package/storybook-static/assets/{FormattedTableCell-Cwt_acDE.js → FormattedTableCell-D6bBTkaG.js} +1 -1
  94. package/storybook-static/assets/{Grid-CfILre0m.js → Grid-Bphykxdg.js} +1 -1
  95. package/storybook-static/assets/{Grid.stories-wQ7jvA5X.js → Grid.stories-D8IvHZzt.js} +1 -1
  96. package/storybook-static/assets/{ImageCropper.stories-BMJDf8-2.js → ImageCropper.stories-CBKBFppK.js} +1 -1
  97. package/storybook-static/assets/{ImageRenderer-COuwgno_.js → ImageRenderer-BLyK861z.js} +1 -1
  98. package/storybook-static/assets/{ImageRenderer.stories-DsdXyXKD.js → ImageRenderer.stories-ffdIT08r.js} +1 -1
  99. package/storybook-static/assets/{ImageView.stories-iNAQGgcZ.js → ImageView.stories-CNUlVM8s.js} +1 -1
  100. package/storybook-static/assets/{ImageViewer.stories-BYAuiSK7.js → ImageViewer.stories-Ms-ALdLt.js} +2 -2
  101. package/storybook-static/assets/{ImageViewerRuntime-DVlrAVlM.js → ImageViewerRuntime-DpJELdy_.js} +1 -1
  102. package/storybook-static/assets/Input-DBiChvMe.js +3 -0
  103. package/storybook-static/assets/{Input-BhXx34oj.js → Input-yBrifTXs.js} +1 -1
  104. package/storybook-static/assets/{Input.stories-cYqQabmU.js → Input.stories-CjcpHWcs.js} +1 -1
  105. package/storybook-static/assets/{InputDateTime-BqmrEg_Q.js → InputDateTime-B_jDcTqs.js} +1 -1
  106. package/storybook-static/assets/InputDateTime.stories-CAQzQH3t.js +38 -0
  107. package/storybook-static/assets/{InputFile-BCZ1O6Id.js → InputFile-D5VmcZpC.js} +1 -1
  108. package/storybook-static/assets/InputFile-fNgIzpGf.js +1 -0
  109. package/storybook-static/assets/{InputFile.stories-Cn9z-0xo.js → InputFile.stories-BNnT9A9v.js} +1 -1
  110. package/storybook-static/assets/InputFiles-BlkbLv47.js +1 -0
  111. package/storybook-static/assets/{InputFiles-c9zsOv2D.js → InputFiles-CtQKNcCo.js} +1 -1
  112. package/storybook-static/assets/{InputFiles.stories-m9aTBp1E.js → InputFiles.stories-BJn-YsDa.js} +1 -1
  113. package/storybook-static/assets/{InputFilesList-CokmKz6s.js → InputFilesList-lWrwPimQ.js} +1 -1
  114. package/storybook-static/assets/{InputImage-ONEbMmSy.js → InputImage-DBhS-3SD.js} +1 -1
  115. package/storybook-static/assets/{InputImage-hzPQOP_G.js → InputImage-DjIsVDMm.js} +1 -1
  116. package/storybook-static/assets/{InputImage.stories-DtmL7qrl.js → InputImage.stories-uS8YZ8OU.js} +1 -1
  117. package/storybook-static/assets/{InteractiveComponents-D9I5JYap.js → InteractiveComponents-CSDnze29.js} +1 -1
  118. package/storybook-static/assets/{InteractiveComponents.stories-Rkp13MQ5.js → InteractiveComponents.stories-C-qWn4VL.js} +1 -1
  119. package/storybook-static/assets/{LayoutPicker-Dy9IvK0b.js → LayoutPicker-FRNg3HmE.js} +1 -1
  120. package/storybook-static/assets/{LayoutPicker-BodO442K.js → LayoutPicker-bi0eHID1.js} +1 -1
  121. package/storybook-static/assets/{LayoutPicker.stories-exb5TXXF.js → LayoutPicker.stories-CY9pmqLs.js} +1 -1
  122. package/storybook-static/assets/{Listbox-CQ80dSOo.js → Listbox-CemgFVhQ.js} +1 -1
  123. package/storybook-static/assets/{Listbox-CZ1FQQ5X.js → Listbox-f89xR3TU.js} +1 -1
  124. package/storybook-static/assets/{Listbox.stories-Nfzs72Yd.js → Listbox.stories-CgL3tWpH.js} +1 -1
  125. package/storybook-static/assets/{Modal--uBl58UW.js → Modal-hBFJVwb4.js} +1 -1
  126. package/storybook-static/assets/{Modal.stories-D77rBBBh.js → Modal.stories-ChrBZSkG.js} +1 -1
  127. package/storybook-static/assets/{ModalManagerProvider-Dwn7kE4K.js → ModalManagerProvider-CCHfccow.js} +1 -1
  128. package/storybook-static/assets/{MultiSelect-BlTby36f.js → MultiSelect-BK12v3Cq.js} +1 -1
  129. package/storybook-static/assets/MultiSelect-Dr5CQeIO.js +2 -0
  130. package/storybook-static/assets/{MultiSelect.stories-BEHlAAJJ.js → MultiSelect.stories-DsSw6woy.js} +1 -1
  131. package/storybook-static/assets/{NoData-DLuw3XVk.js → NoData-DmgbBfVW.js} +1 -1
  132. package/storybook-static/assets/{NotificationsHost-BB5Np8PK.js → NotificationsHost-BAIpEqnM.js} +1 -1
  133. package/storybook-static/assets/{NotificationsHost.stories-DDadi6Mw.js → NotificationsHost.stories-NayVs4Pk.js} +1 -1
  134. package/storybook-static/assets/{ODataMultiSelect-XFTdhfCe.js → ODataMultiSelect-jNIRRDb2.js} +1 -1
  135. package/storybook-static/assets/ODataMultiSelect.stories-CWj51Zvd.js +137 -0
  136. package/storybook-static/assets/{ODataSelect-C01W8jth.js → ODataSelect-DQ31vwaX.js} +1 -1
  137. package/storybook-static/assets/ODataSelect.stories-DPrdwHyr.js +207 -0
  138. package/storybook-static/assets/{ODataTreeMultiSelect-sGEW_iPs.js → ODataTreeMultiSelect-BUHLV3tv.js} +1 -1
  139. package/storybook-static/assets/{ODataTreeMultiSelect.stories-CKN_SvQU.js → ODataTreeMultiSelect.stories-BVQaJtdc.js} +1 -1
  140. package/storybook-static/assets/{ODataTreeSelect-1hCNPZNo.js → ODataTreeSelect-CjlD8Or9.js} +1 -1
  141. package/storybook-static/assets/{ODataTreeSelect.stories-GDmyjoWv.js → ODataTreeSelect.stories-Blu9kCg4.js} +1 -1
  142. package/storybook-static/assets/{OneStepScroller-dsU38i0h.js → OneStepScroller-ddh_nRgx.js} +1 -1
  143. package/storybook-static/assets/{PeriodSelect-B5IQUCox.js → PeriodSelect-BNYzz5bI.js} +1 -1
  144. package/storybook-static/assets/{PeriodSelect-Dar6tgT-.js → PeriodSelect-Bpn0Gwht.js} +1 -1
  145. package/storybook-static/assets/{PeriodSelect.stories-s4UcTVBB.js → PeriodSelect.stories-Daj7UH8v.js} +1 -1
  146. package/storybook-static/assets/{PickerSelectionToolbar-BrUGVuF4.js → PickerSelectionToolbar-DOusOxuB.js} +1 -1
  147. package/storybook-static/assets/{PickerTriggerActions-CiB7RNtz.js → PickerTriggerActions-DcLFOMBR.js} +1 -1
  148. package/storybook-static/assets/{Popover-BUpM2SdA.js → Popover-DOSQByLv.js} +1 -1
  149. package/storybook-static/assets/{Popover-CElnnd4d.js → Popover-Dp1WZ351.js} +1 -1
  150. package/storybook-static/assets/{Popover.stories-CDPYRGg5.js → Popover.stories-C5rNeweU.js} +1 -1
  151. package/storybook-static/assets/{PresetRangeDateInput-DWsBB7Xe.js → PresetRangeDateInput-C47SD8Wh.js} +1 -1
  152. package/storybook-static/assets/{PresetRangeDateInput-DKbX277t.js → PresetRangeDateInput-D4IVr33W.js} +1 -1
  153. package/storybook-static/assets/{PresetRangeDateInput.stories-CLnxG1Su.js → PresetRangeDateInput.stories-Hils_9pa.js} +1 -1
  154. package/storybook-static/assets/{PresetSelect-TONMNVox.js → PresetSelect-DLQMUw6v.js} +1 -1
  155. package/storybook-static/assets/{RadioButton-CHp5HFET.js → RadioButton-BPnBnsQn.js} +1 -1
  156. package/storybook-static/assets/{RadioButton-C8cdy1c5.js → RadioButton-BVaLDFV8.js} +1 -1
  157. package/storybook-static/assets/{RadioButton.stories-D-wI-ysI.js → RadioButton.stories-D1N7hhYj.js} +1 -1
  158. package/storybook-static/assets/{RadioGroup-RnbEh9jf.js → RadioGroup-DRTeV91W.js} +1 -1
  159. package/storybook-static/assets/{RadioGroup-Cyzz_ISM.js → RadioGroup-DY6lfEMI.js} +1 -1
  160. package/storybook-static/assets/{RadioGroup.stories-DAocx-vl.js → RadioGroup.stories-z3pvhBDW.js} +1 -1
  161. package/storybook-static/assets/{Scrollable-BZwDWzCP.js → Scrollable-BhY4xR4v.js} +1 -1
  162. package/storybook-static/assets/Select-DQSp_Ora.js +12 -0
  163. package/storybook-static/assets/{Select-BMWvHZb0.js → Select-xjBvVsFv.js} +1 -1
  164. package/storybook-static/assets/{Select.stories-Tt0ajJXV.js → Select.stories-DrFgfM4J.js} +1 -1
  165. package/storybook-static/assets/{SelectOptionContent-DZcX0XcL.js → SelectOptionContent-B3r2MCq9.js} +1 -1
  166. package/storybook-static/assets/{SerializableSelect-Cb2eKzWt.js → SerializableSelect-BgY63lvT.js} +1 -1
  167. package/storybook-static/assets/{SerializableSelect.stories-BMGIdje_.js → SerializableSelect.stories-DQ1TOnu-.js} +1 -1
  168. package/storybook-static/assets/{SingleDateTimeInput--8TJ-hnE.js → SingleDateTimeInput-BJmIUH4L.js} +1 -1
  169. package/storybook-static/assets/{SingleDateTimeInput-ByN30Wn3.js → SingleDateTimeInput-De-QgdP1.js} +1 -1
  170. package/storybook-static/assets/{SingleDateTimeInput.stories-CrsfwMCv.js → SingleDateTimeInput.stories-CVBxjtw1.js} +1 -1
  171. package/storybook-static/assets/Slider-ChIA3nZE.js +1 -0
  172. package/storybook-static/assets/{Slider-B7Zh8pKd.js → Slider-D5T295Oy.js} +1 -1
  173. package/storybook-static/assets/{Slider.stories-2Fh_zSe4.js → Slider.stories-1PzeXIzZ.js} +1 -1
  174. package/storybook-static/assets/SliderInput-B9fPy3Cn.js +2 -0
  175. package/storybook-static/assets/{SliderInput-2r2n9oBs.js → SliderInput-XwL2-00c.js} +1 -1
  176. package/storybook-static/assets/{SliderInput.stories-RrseFw59.js → SliderInput.stories-BYk9yit5.js} +1 -1
  177. package/storybook-static/assets/{Sortable-DHi8kx5A.js → Sortable-DJGBM9Up.js} +1 -1
  178. package/storybook-static/assets/{Sortable.stories-DJoStzvM.js → Sortable.stories-DNHi2j2g.js} +1 -1
  179. package/storybook-static/assets/{Splitter-Dxol4S_V.js → Splitter-BLtIq8GC.js} +1 -1
  180. package/storybook-static/assets/{Splitter.stories-BbVOMBqo.js → Splitter.stories-DwEuHo4U.js} +1 -1
  181. package/storybook-static/assets/{StateSelect-3OnKvOr4.js → StateSelect-3bHw0Mqx.js} +1 -1
  182. package/storybook-static/assets/{StateSelect-pbm7Jf8f.js → StateSelect-Cut_GUS9.js} +1 -1
  183. package/storybook-static/assets/{StateSelect.stories-CgTE3-yP.js → StateSelect.stories-BxcettN-.js} +1 -1
  184. package/storybook-static/assets/{StringToggle.stories-BSJLw3CZ.js → StringToggle.stories-DGJLDN6l.js} +1 -1
  185. package/storybook-static/assets/{Switch-BxBEQCPT.js → Switch-DACuBBcY.js} +1 -1
  186. package/storybook-static/assets/{Switch-BdBKEluZ.js → Switch-UEGPSa7I.js} +1 -1
  187. package/storybook-static/assets/{Switch.stories-D5DDiey7.js → Switch.stories-COyEd7ll.js} +1 -1
  188. package/storybook-static/assets/{Table-tNWO7Xkx.js → Table-C3L5k62i.js} +1 -1
  189. package/storybook-static/assets/{Table.stories-Co6W6DfX.js → Table.stories-Bg8zioLm.js} +1 -1
  190. package/storybook-static/assets/{Tabs-MhG7k5kZ.js → Tabs-Mp2c4cx_.js} +1 -1
  191. package/storybook-static/assets/{Tabs.stories-6-cDteqF.js → Tabs.stories-2n-gKA13.js} +1 -1
  192. package/storybook-static/assets/{TabsBox-CbcUNOlb.js → TabsBox-BpmIGtyk.js} +1 -1
  193. package/storybook-static/assets/{TagInput-BvhI42-e.js → TagInput-Dum97AE2.js} +1 -1
  194. package/storybook-static/assets/{TagInput.stories-Bh03CP2k.js → TagInput.stories-Hs0-B_N1.js} +1 -1
  195. package/storybook-static/assets/{Text-CvyKTMrH.js → Text-Cgi6ZSLz.js} +1 -1
  196. package/storybook-static/assets/{Textarea-JurrghA5.js → Textarea-CvLQOnIp.js} +1 -1
  197. package/storybook-static/assets/{Textarea-CZORYVJ_.js → Textarea-D72BTP62.js} +1 -1
  198. package/storybook-static/assets/{Textarea.stories-BUDqqVKy.js → Textarea.stories-vjBJEVm0.js} +1 -1
  199. package/storybook-static/assets/{TimePanel-DIKKUv5f.js → TimePanel-CW_su34b.js} +1 -1
  200. package/storybook-static/assets/{TimePanel.stories-B1q_i8WF.js → TimePanel.stories-6XPNZ7zt.js} +1 -1
  201. package/storybook-static/assets/{Toggle-BGRFjquY.js → Toggle-CJu4uO-W.js} +1 -1
  202. package/storybook-static/assets/{Toggle-C3KWroQa.js → Toggle-olojCi27.js} +1 -1
  203. package/storybook-static/assets/{Toggle.stories-CqaiA6sq.js → Toggle.stories-Cgyc4d77.js} +1 -1
  204. package/storybook-static/assets/{TreeMultiSelect-BT1UYS2s.js → TreeMultiSelect-EgBDsFyR.js} +1 -1
  205. package/storybook-static/assets/{TreeMultiSelect-BJt6pYdc.js → TreeMultiSelect-Kx5mztXt.js} +1 -1
  206. package/storybook-static/assets/{TreeMultiSelect.stories-B6fswq0n.js → TreeMultiSelect.stories-Dne12S2l.js} +1 -1
  207. package/storybook-static/assets/{TreePickerBase-Ezb14TOv.js → TreePickerBase-D1Pvek1r.js} +2 -2
  208. package/storybook-static/assets/{TreeSelect-6ad8aM5F.js → TreeSelect-DNfvUsxi.js} +1 -1
  209. package/storybook-static/assets/{TreeSelect-CdxWhNPr.js → TreeSelect-D_eYI6Ou.js} +1 -1
  210. package/storybook-static/assets/{TreeSelect.stories-BMjSPnlt.js → TreeSelect.stories-Bzm61QfI.js} +1 -1
  211. package/storybook-static/assets/{TreeTable-B10lvNT_.js → TreeTable-BL144oay.js} +1 -1
  212. package/storybook-static/assets/{TreeTable.stories-BOkFmk-a.js → TreeTable.stories-CyXEHcki.js} +1 -1
  213. package/storybook-static/assets/{async-Wscr5OK0.js → async-BTZglz_X.js} +1 -1
  214. package/storybook-static/assets/{blocks-BkGgmJsC.js → blocks-DA12rSpV.js} +3 -3
  215. package/storybook-static/assets/{browserAndReact-BKmF0BgP.js → browserAndReact-D1Ykifm6.js} +1 -1
  216. package/storybook-static/assets/{check-uBaZUURY.js → check-BX6nx-3o.js} +1 -1
  217. package/storybook-static/assets/{chevron-down-DbISRZCX.js → chevron-down-DNmFEwHw.js} +1 -1
  218. package/storybook-static/assets/{chevron-left-Cb-kl5mh.js → chevron-left-D4-j0hj3.js} +1 -1
  219. package/storybook-static/assets/{chevron-right-D99XGTe7.js → chevron-right-jqFyXkAQ.js} +1 -1
  220. package/storybook-static/assets/{chunk-W22LQPXL-D3-dGAP5.js → chunk-W22LQPXL-DTI5co7U.js} +1 -1
  221. package/storybook-static/assets/{circle-alert-CxdnePpP.js → circle-alert-CPhslK47.js} +1 -1
  222. package/storybook-static/assets/{circle-check-DxbzyOrj.js → circle-check-mqeGU7uk.js} +1 -1
  223. package/storybook-static/assets/{components-NKMCS9u_.js → components-B8GmvnkL.js} +3 -3
  224. package/storybook-static/assets/{contextMenu-CrE8d-C8.js → contextMenu-KnkARJmS.js} +1 -1
  225. package/storybook-static/assets/{defaultRenderers-DLjGcYhl.js → defaultRenderers-9jhgJsUF.js} +1 -1
  226. package/storybook-static/assets/{download-B34Dyboo.js → download-2bfCyDgM.js} +1 -1
  227. package/storybook-static/assets/{filesAndExcel-D0WmBd17.js → filesAndExcel-DVSSMVHy.js} +1 -1
  228. package/storybook-static/assets/{floating-ui.react-CHmsuwKl.js → floating-ui.react-DxmRb2Qf.js} +1 -1
  229. package/storybook-static/assets/{formatters-B5IRTBCO.js → formatters-DyKYAUlo.js} +1 -1
  230. package/storybook-static/assets/{formatters-runtime-DIIzhbds.js → formatters-runtime-Bz1bSLIu.js} +1 -1
  231. package/storybook-static/assets/{foundationLib-CVhEJ6js.js → foundationLib-aysuo_oK.js} +1 -1
  232. package/storybook-static/assets/{hooks-BDibLnHt.js → hooks-pwoB_iPM.js} +1 -1
  233. package/storybook-static/assets/iframe-C6KyCBvm.js +1 -0
  234. package/storybook-static/assets/{iframe-CD1cMwos.js → iframe-cjuwJElu.js} +5 -5
  235. package/storybook-static/assets/{info-YWjqfWxe.js → info-Bo4lQd-n.js} +1 -1
  236. package/storybook-static/assets/{odata-D3YkIfXJ.js → odata-st4-eYHw.js} +1 -1
  237. package/storybook-static/assets/{odataAndTables-C2flJmi6.js → odataAndTables-F9Gtp-kk.js} +1 -1
  238. package/storybook-static/assets/{odataFetchFn-DHf6YwiM.js → odataFetchFn-CkRZZriA.js} +1 -1
  239. package/storybook-static/assets/{odataStoryFixtures-C7XqnT73.js → odataStoryFixtures-CqSeDBqF.js} +1 -1
  240. package/storybook-static/assets/{persisted-CKfZAtRr.js → persisted-CjFXaS21.js} +1 -1
  241. package/storybook-static/assets/{pureUtilities-Bwoj6fXN.js → pureUtilities-DLQdVlhe.js} +1 -1
  242. package/storybook-static/assets/{react-BONe4qKn.js → react-CjERBoLl.js} +1 -1
  243. package/storybook-static/assets/{refresh-cw-DpHq4LQP.js → refresh-cw-JWYI2x81.js} +1 -1
  244. package/storybook-static/assets/{runtimeAndState-DsHleu6Y.js → runtimeAndState-BzzV3GX-.js} +1 -1
  245. package/storybook-static/assets/{settings-2-Dz6u0Wf2.js → settings-2-DG4qROG-.js} +1 -1
  246. package/storybook-static/assets/{sortable-VOkfa1Z-.js → sortable-CWsNoMxK.js} +1 -1
  247. package/storybook-static/assets/{syntaxhighlighter-T5IQBZDB-C4OOYkZu.js → syntaxhighlighter-T5IQBZDB-1bseUYr-.js} +1 -1
  248. package/storybook-static/assets/{trash-2-DTPcXUiI.js → trash-2-DcYDgK5k.js} +1 -1
  249. package/storybook-static/assets/{triangle-alert-DUI5nsd3.js → triangle-alert-CdAbGIRd.js} +1 -1
  250. package/storybook-static/assets/{useODataSelectBase-BpntR4Iz.js → useODataSelectBase-DCi7pW6G.js} +1 -1
  251. package/storybook-static/assets/{useODataTreeData-C2vzjXPp.js → useODataTreeData-bDwoSzvJ.js} +1 -1
  252. package/storybook-static/assets/usePickerQuery-CizLKZif.js +1 -0
  253. package/storybook-static/assets/usePickerTriggerController-C6_AtdR_.js +1 -0
  254. package/storybook-static/assets/{x-B8aXMeuU.js → x-DjlJGqcw.js} +1 -1
  255. package/storybook-static/iframe.html +2 -2
  256. package/storybook-static/project.json +1 -1
  257. package/dist/chunks/input-VC8jEoTa.js.map +0 -1
  258. package/dist/chunks/multi-select-BJ6Lst1E.js.map +0 -1
  259. package/dist/chunks/picker-DLnfOgZj.js.map +0 -1
  260. package/dist/chunks/select-CysiIrej.js.map +0 -1
  261. package/storybook-static/assets/DateInput-Dex3NjVs.js +0 -1
  262. package/storybook-static/assets/Input-DCQXBGK4.js +0 -3
  263. package/storybook-static/assets/InputDateTime.stories-C3xQIS7z.js +0 -38
  264. package/storybook-static/assets/InputFile-Bth1Jhjf.js +0 -1
  265. package/storybook-static/assets/InputFiles-CURwAma0.js +0 -1
  266. package/storybook-static/assets/MultiSelect-B725mcqy.js +0 -2
  267. package/storybook-static/assets/ODataMultiSelect.stories-V1UHe_oU.js +0 -137
  268. package/storybook-static/assets/ODataSelect.stories-GBg5TBT_.js +0 -207
  269. package/storybook-static/assets/Select-QJmM58Sy.js +0 -12
  270. package/storybook-static/assets/Slider-eV8LAbRY.js +0 -1
  271. package/storybook-static/assets/SliderInput-BjWQPhW1.js +0 -2
  272. package/storybook-static/assets/iframe-CTou9CRA.js +0 -1
  273. package/storybook-static/assets/usePickerQuery-BDYoi7Rg.js +0 -1
  274. package/storybook-static/assets/usePickerTriggerController-DAUdKKpa.js +0 -1
@@ -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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"picker-lpH_xp14.js","names":[],"sources":["../../src/picker/PickerField.tsx","../../src/picker/Picker.module.scss","../../src/picker/PickerPopup.tsx","../../src/picker/PickerSelectionToolbar.tsx","../../src/picker/PickerStatus.tsx","../../src/picker/PickerTriggerActions.tsx","../../src/picker/PickerTriggerInput.tsx","../../src/picker/model/createPickerTriggerPolicy.ts","../../src/picker/model/extractPickerTextContent.ts","../../src/picker/model/usePickerDefaultFilter.ts","../../src/picker/model/usePickerFloatingListbox.ts","../../src/picker/model/usePickerQuery.ts","../../src/picker/model/usePickerSelectionLifecycle.ts","../../src/picker/model/usePickerTriggerController.ts"],"sourcesContent":["import { InputType } from \"@ryuzaki13/react-foundation-lib/types\";\n\nimport { InputUI } from \"../input\";\nimport { useInputFieldIds } from \"../input/lib/useInputFieldIds\";\n\nimport { PickerFieldProps } from \"./types\";\n\nexport function PickerField<TValue extends InputType>({\n\tid,\n\tlabel,\n\tdescription,\n\tdisabled,\n\tsize,\n\tclassName,\n\terror,\n\tchildren\n}: PickerFieldProps<TValue>) {\n\tconst { controlId, labelId, descriptionId, errorId, describedBy } = useInputFieldIds({\n\t\tid,\n\t\thasLabel: label !== undefined && label !== null,\n\t\thasDescription: !!description,\n\t\thasError: !!error\n\t});\n\n\treturn (\n\t\t<InputUI\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\tdisabled={disabled}\n\t\t\tsize={size}\n\t\t\tclassName={className}\n\t\t\terror={error}\n\t\t\tcontrolId={controlId}\n\t\t\tlabelId={labelId}\n\t\t\tdescriptionId={descriptionId}\n\t\t\terrorId={errorId}>\n\t\t\t{children({ controlId, labelId, descriptionId, errorId, describedBy })}\n\t\t</InputUI>\n\t);\n}\n",".popupLayout {\n\tdisplay: grid;\n\tgrid-template-rows: auto 1fr;\n\tmin-height: 0;\n\tmax-height: 75vh;\n\toverflow: hidden;\n\n\tflex: 1 1 auto;\n}\n\n.popupBody {\n\tmin-height: 0;\n}\n\n.status {\n\tpadding: var(--space-xs) var(--space-sm);\n\tcolor: var(--content-2);\n}\n\n.statusError {\n\tcolor: var(--status-error-text);\n}\n\n.triggerContainer {\n\tposition: relative;\n}\n\n.selectionActionButton {\n\tpadding-block: var(--space-xs);\n\tborder-radius: var(--radius-sm);\n\n\t&:hover {\n\t\tbackground-color: var(--surface-2);\n\t}\n}\n","import { type CSSProperties, type KeyboardEvent, type MouseEvent, type ReactNode } from \"react\";\n\nimport { FloatingContext, FloatingFocusManager, FloatingPortal } from \"@floating-ui/react\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { AnimatePresence, motion } from \"motion/react\";\n\nimport { Separator } from \"../separator\";\n\nimport styles from \"./Picker.module.scss\";\n\ninterface PickerPopupProps {\n\topen: boolean;\n\tcontext: FloatingContext;\n\tfloatingStyles: CSSProperties;\n\tlistId: string;\n\tlabelId?: string;\n\tpopupAriaLabel?: string;\n\tdescriptionId?: string;\n\tactiveOptionId?: string;\n\tariaMultiselectable?: boolean;\n\tpopupRole?: \"listbox\" | \"dialog\";\n\tsetFloating: (node: HTMLElement | null) => void;\n\tgetFloatingProps: (userProps?: Record<string, unknown>) => Record<string, unknown>;\n\tonKeyDown: (event: KeyboardEvent<HTMLElement>) => void;\n\tinitialFocus?: number;\n\treturnFocus?: boolean;\n\ttabIndex?: number;\n\tclassName?: string;\n\tmaxWidth?: CSSProperties[\"maxWidth\"];\n\tlayoutClassName?: string;\n\theaderClassName?: string;\n\tbodyClassName?: string;\n\theader?: ReactNode;\n\tchildren: ReactNode;\n}\n\nfunction stopNestedFloatingMouseDown(event: MouseEvent<HTMLElement>): void {\n\tevent.stopPropagation();\n}\n\nexport function PickerPopup({\n\topen,\n\tcontext,\n\tfloatingStyles,\n\tlistId,\n\tlabelId,\n\tpopupAriaLabel,\n\tdescriptionId,\n\tactiveOptionId,\n\tariaMultiselectable,\n\tpopupRole = \"listbox\",\n\tsetFloating,\n\tgetFloatingProps,\n\tonKeyDown,\n\tinitialFocus = -1,\n\treturnFocus = false,\n\ttabIndex = 0,\n\tclassName,\n\tmaxWidth,\n\tlayoutClassName,\n\theaderClassName,\n\tbodyClassName,\n\theader,\n\tchildren\n}: PickerPopupProps) {\n\treturn (\n\t\t<AnimatePresence>\n\t\t\t{open && (\n\t\t\t\t<FloatingPortal>\n\t\t\t\t\t<FloatingFocusManager context={context} modal={false} initialFocus={initialFocus} returnFocus={returnFocus}>\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tref={setFloating}\n\t\t\t\t\t\t\tstyle={{ ...floatingStyles, maxWidth }}\n\t\t\t\t\t\t\tinitial={{ opacity: 0, scale: 0.95 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\t\t\t\t\texit={{ opacity: 0, scale: 0.95 }}\n\t\t\t\t\t\t\t{...getFloatingProps({\n\t\t\t\t\t\t\t\tid: listId,\n\t\t\t\t\t\t\t\trole: popupRole,\n\t\t\t\t\t\t\t\ttabIndex,\n\t\t\t\t\t\t\t\t\"aria-labelledby\": labelId,\n\t\t\t\t\t\t\t\t\"aria-label\": labelId ? undefined : popupAriaLabel,\n\t\t\t\t\t\t\t\t\"aria-describedby\": descriptionId,\n\t\t\t\t\t\t\t\t\"aria-activedescendant\": activeOptionId,\n\t\t\t\t\t\t\t\t\"aria-multiselectable\": ariaMultiselectable || undefined,\n\t\t\t\t\t\t\t\tonMouseDown: stopNestedFloatingMouseDown,\n\t\t\t\t\t\t\t\tonKeyDown,\n\t\t\t\t\t\t\t\tclassName\n\t\t\t\t\t\t\t})}>\n\t\t\t\t\t\t\t<div className={cn(styles.popupLayout, layoutClassName)}>\n\t\t\t\t\t\t\t\t{header ? (\n\t\t\t\t\t\t\t\t\t<div className={headerClassName}>\n\t\t\t\t\t\t\t\t\t\t{header}\n\t\t\t\t\t\t\t\t\t\t<Separator className=\"marginBlockSm\" />\n\t\t\t\t\t\t\t\t\t</div>\n\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)}\n\t\t\t\t\t\t\t\t<div className={cn(styles.popupBody, bodyClassName)}>{children}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t</FloatingFocusManager>\n\t\t\t\t</FloatingPortal>\n\t\t\t)}\n\t\t</AnimatePresence>\n\t);\n}\n","import { type Ref } from \"react\";\n\nimport { Grid } from \"../grid\";\n\nimport styles from \"./Picker.module.scss\";\n\ntype PickerSelectionToolbarProps = {\n\tonSelectAll: () => void;\n\tonDeselectAll: () => void;\n\tselectAllButtonRef?: Ref<HTMLButtonElement>;\n};\n\n/**\n * Общая панель массовых действий для picker-компонентов с множественным выбором.\n * Компонент не знает формат значения и делегирует изменение владельцу selection-модели.\n */\nexport function PickerSelectionToolbar({ onSelectAll, onDeselectAll, selectAllButtonRef }: PickerSelectionToolbarProps) {\n\treturn (\n\t\t<Grid.Container gap=\"xs\" templateColumns=\"1fr 1fr\">\n\t\t\t<button\n\t\t\t\tref={selectAllButtonRef}\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.selectionActionButton}\n\t\t\t\tonClick={onSelectAll}\n\t\t\t\tdata-ui=\"picker-select-all\"\n\t\t\t\tdata-action=\"select-all\">\n\t\t\t\tВыбрать все\n\t\t\t</button>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.selectionActionButton}\n\t\t\t\tonClick={onDeselectAll}\n\t\t\t\tdata-ui=\"picker-deselect-all\"\n\t\t\t\tdata-action=\"deselect-all\">\n\t\t\t\tСнять выбор\n\t\t\t</button>\n\t\t</Grid.Container>\n\t);\n}\n","import { ReactNode } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport uiStyles from \"../ui.module.scss\";\n\nimport styles from \"./Picker.module.scss\";\n\ninterface PickerStatusProps {\n\temptyState?: ReactNode;\n\t// loadingState?: ReactNode;\n\terrorState?: ReactNode;\n}\n\nexport function PickerStatus({ emptyState, errorState }: PickerStatusProps) {\n\tconst content = errorState ?? emptyState;\n\n\tif (content === undefined || content === null) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div className={cn(uiStyles.uiPopupOption, styles.status, errorState !== undefined && styles.statusError)} aria-disabled={true}>\n\t\t\t{content}\n\t\t</div>\n\t);\n}\n","import { MouseEvent, ReactNode } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { ChevronDownIcon } from \"lucide-react\";\n\nimport uiStyles from \"../ui.module.scss\";\n\ninterface PickerTriggerActionsProps {\n\topen: boolean;\n\tdisabled?: boolean;\n\tchildren?: ReactNode;\n\tonToggleMouseDown?: (event: MouseEvent<HTMLButtonElement>) => void;\n\tonToggleClick: () => void;\n\topenAriaLabel?: string;\n\tcloseAriaLabel?: string;\n}\n\nexport function PickerTriggerActions({\n\topen,\n\tdisabled,\n\tchildren,\n\tonToggleMouseDown,\n\tonToggleClick,\n\topenAriaLabel = \"Открыть список\",\n\tcloseAriaLabel = \"Закрыть список\"\n}: PickerTriggerActionsProps) {\n\treturn (\n\t\t<div className={uiStyles.uiToggleButtonContainer} data-disabled={disabled || undefined}>\n\t\t\t{children}\n\n\t\t\t<div className={uiStyles.uiButtonSeparator} />\n\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\taria-label={open ? closeAriaLabel : openAriaLabel}\n\t\t\t\tclassName={uiStyles.uiToggleButton}\n\t\t\t\tonMouseDown={onToggleMouseDown}\n\t\t\t\tonClick={onToggleClick}>\n\t\t\t\t<ChevronDownIcon className={cn(uiStyles.uiToggleIcon, open && uiStyles.uiToggleIconOpen)} />\n\t\t\t</button>\n\t\t</div>\n\t);\n}\n","import { ComponentPropsWithoutRef, forwardRef, ReactNode } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { InputControl, InputLoadingFrame } from \"../input\";\nimport uiStyles from \"../ui.module.scss\";\n\nimport styles from \"./Picker.module.scss\";\n\ninterface PickerTriggerInputProps extends Omit<ComponentPropsWithoutRef<\"input\">, \"size\"> {\n\trootRef?: (node: HTMLDivElement | null) => void;\n\tendAdornment?: ReactNode;\n\toverlay?: ReactNode;\n\trootClassName?: string;\n\tinputClassName?: string;\n\tisLoading?: boolean;\n}\n\nexport const PickerTriggerInput = forwardRef<HTMLInputElement, PickerTriggerInputProps>(\n\t({ rootRef, endAdornment, overlay, rootClassName, inputClassName, isLoading, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div ref={rootRef} className={cn(uiStyles.uiInputContainer, styles.triggerContainer, rootClassName)}>\n\t\t\t\t{isLoading ? (\n\t\t\t\t\t<InputLoadingFrame />\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<InputControl endAdornment={endAdornment}>\n\t\t\t\t\t\t\t{({ controlClassName }) => (\n\t\t\t\t\t\t\t\t<input {...props} ref={ref} className={cn(uiStyles.uiInputWithToggle, controlClassName, inputClassName)} />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</InputControl>\n\t\t\t\t\t\t{overlay}\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nPickerTriggerInput.displayName = \"PickerTriggerInput\";\n","export type PickerTriggerMode = \"display\" | \"search-single\" | \"search-multi\";\n\ninterface PickerTriggerTextFocusParams {\n\topen: boolean;\n\tcurrentQuery: string;\n\thasDisplayValue: boolean;\n}\n\nexport interface PickerTriggerPolicy {\n\tfocusFloatingOnOpen: boolean;\n\trestoreFocusOnClose: boolean;\n\tresetQueryOnClose: boolean;\n\tshouldOpenOnTriggerClick: (open: boolean) => boolean;\n\tshouldOpenOnInputChange: (open: boolean) => boolean;\n\tshouldFocusReferenceOnToggle: (open: boolean) => boolean;\n\tshouldSelectTriggerTextOnFocus: (params: PickerTriggerTextFocusParams) => boolean;\n}\n\n/**\n * Единая политика поведения trigger-input для picker-компонентов.\n * Нормализует различия между display-режимом, single-search и multi-search.\n */\nexport function createPickerTriggerPolicy(mode: PickerTriggerMode): PickerTriggerPolicy {\n\tswitch (mode) {\n\t\tcase \"search-single\":\n\t\t\treturn {\n\t\t\t\tfocusFloatingOnOpen: false,\n\t\t\t\trestoreFocusOnClose: false,\n\t\t\t\tresetQueryOnClose: true,\n\t\t\t\tshouldOpenOnTriggerClick: () => false,\n\t\t\t\tshouldOpenOnInputChange: (open) => !open,\n\t\t\t\tshouldFocusReferenceOnToggle: (open) => !open,\n\t\t\t\tshouldSelectTriggerTextOnFocus: ({ open, currentQuery, hasDisplayValue }) =>\n\t\t\t\t\t!open && currentQuery.length === 0 && hasDisplayValue\n\t\t\t};\n\t\tcase \"search-multi\":\n\t\t\treturn {\n\t\t\t\tfocusFloatingOnOpen: false,\n\t\t\t\trestoreFocusOnClose: false,\n\t\t\t\tresetQueryOnClose: true,\n\t\t\t\tshouldOpenOnTriggerClick: () => false,\n\t\t\t\tshouldOpenOnInputChange: (open) => !open,\n\t\t\t\tshouldFocusReferenceOnToggle: (open) => !open,\n\t\t\t\tshouldSelectTriggerTextOnFocus: () => false\n\t\t\t};\n\t\tcase \"display\":\n\t\tdefault:\n\t\t\treturn {\n\t\t\t\tfocusFloatingOnOpen: true,\n\t\t\t\trestoreFocusOnClose: true,\n\t\t\t\tresetQueryOnClose: false,\n\t\t\t\tshouldOpenOnTriggerClick: (open) => !open,\n\t\t\t\tshouldOpenOnInputChange: () => false,\n\t\t\t\tshouldFocusReferenceOnToggle: () => false,\n\t\t\t\tshouldSelectTriggerTextOnFocus: () => false\n\t\t\t};\n\t}\n}\n","import { ReactNode } from \"react\";\n\nexport function extractPickerTextContent(node: ReactNode): string | undefined {\n\tif (typeof node === \"string\" || typeof node === \"number\") {\n\t\treturn String(node);\n\t}\n\n\tif (Array.isArray(node)) {\n\t\tconst values = node.map(extractPickerTextContent).filter((value): value is string => Boolean(value));\n\t\treturn values.length ? values.join(\" \") : undefined;\n\t}\n\n\treturn undefined;\n}\n","import { useMemo } from \"react\";\n\nimport { normalizeTextToLower } from \"@ryuzaki13/react-foundation-lib/formatters\";\n\ninterface UsePickerDefaultFilterOptions<T> {\n\toptions: readonly T[];\n\tquery: string;\n\tenabled?: boolean;\n\tgetSearchText: (option: T) => unknown;\n}\n\nfunction normalizeSearchText(value: unknown) {\n\tconst parts = Array.isArray(value) ? value : [value];\n\n\treturn normalizeTextToLower(parts.filter(Boolean).join(\" \"));\n}\n\nexport function usePickerDefaultFilter<T>({ options, query, enabled = true, getSearchText }: UsePickerDefaultFilterOptions<T>) {\n\tconst normalizedQuery = normalizeTextToLower(query);\n\n\treturn useMemo(() => {\n\t\tif (!enabled || !normalizedQuery) {\n\t\t\treturn [...options];\n\t\t}\n\n\t\treturn options.filter((option) => normalizeSearchText(getSearchText(option)).includes(normalizedQuery));\n\t}, [enabled, getSearchText, normalizedQuery, options]);\n}\n","import { Placement } from \"@floating-ui/react\";\nimport {\n\ttype FloatingListboxPlacementStrategy,\n\ttype FloatingListboxSizeResolver,\n\tuseFloatingListbox\n} from \"@ryuzaki13/react-foundation-lib/hooks\";\n\nimport { PickerTriggerMode, createPickerTriggerPolicy } from \"./createPickerTriggerPolicy\";\n\ninterface UsePickerFloatingListboxParams<T> {\n\toptions: readonly T[];\n\tselectedIndex: number;\n\topen?: boolean;\n\tonOpenChange?: (open: boolean) => void;\n\tgetOptionDisabled?: (option: T) => boolean;\n\tonSelect?: (option: T) => void;\n\tdisabled?: boolean;\n\tplacement?: Placement;\n\tplacementStrategy?: FloatingListboxPlacementStrategy;\n\tcloseOnSelect?: boolean;\n\tfocusFloatingOnOpen?: boolean;\n\tallowOpenWithoutOptions?: boolean;\n\trestoreFocusOnClose?: boolean;\n\ttriggerMode?: PickerTriggerMode;\n\tresolveFloatingSize?: FloatingListboxSizeResolver;\n}\n\n/**\n * Единая точка входа для popup/listbox поведения во всех picker-компонентах.\n */\nexport function usePickerFloatingListbox<T>(params: UsePickerFloatingListboxParams<T>) {\n\tconst triggerPolicy = params.triggerMode ? createPickerTriggerPolicy(params.triggerMode) : undefined;\n\n\treturn useFloatingListbox({\n\t\t...params,\n\t\tfocusFloatingOnOpen: params.focusFloatingOnOpen ?? triggerPolicy?.focusFloatingOnOpen,\n\t\trestoreFocusOnClose: params.restoreFocusOnClose ?? triggerPolicy?.restoreFocusOnClose\n\t});\n}\n","import { useState } from \"react\";\n\nimport { PickerTriggerMode, createPickerTriggerPolicy } from \"./createPickerTriggerPolicy\";\n\ninterface UsePickerQueryOptions {\n\tquery?: string;\n\tdefaultQuery?: string;\n\tonQuery?: (value: string) => void;\n\tresetOnClose?: boolean;\n\ttriggerMode?: PickerTriggerMode;\n}\n\n/**\n * Управляет controlled/uncontrolled query и возвращает policy закрытия владельцу open-state.\n * Сброс выполняется самим владельцем в событии close, поэтому hook не зеркалит lifecycle через effect.\n */\nexport function usePickerQuery({ query, defaultQuery, onQuery, resetOnClose, triggerMode }: UsePickerQueryOptions) {\n\tconst isControlled = query !== undefined;\n\tconst [internalQuery, setInternalQuery] = useState(defaultQuery ?? \"\");\n\tconst currentQuery = isControlled ? (query ?? \"\") : internalQuery;\n\tconst resolvedResetOnClose = resetOnClose ?? (triggerMode ? createPickerTriggerPolicy(triggerMode).resetQueryOnClose : true);\n\n\tconst setQuery = (nextValue: string) => {\n\t\tif (!isControlled) {\n\t\t\tsetInternalQuery(nextValue);\n\t\t}\n\n\t\tonQuery?.(nextValue);\n\t};\n\n\treturn {\n\t\tquery: currentQuery,\n\t\tsetQuery,\n\t\tclearQuery: () => setQuery(\"\"),\n\t\tresetQueryOnClose: resolvedResetOnClose\n\t};\n}\n","import { useEffect, useRef, useState } from \"react\";\n\ninterface UsePickerSelectionLifecycleOptions<TValue> {\n\tvalue: TValue;\n\topen: boolean;\n\tonCommit: (value: TValue) => void;\n\tonOpen?: () => void;\n\tonClose?: (value: TValue) => void;\n\tisEqual: (left: TValue, right: TValue) => boolean;\n}\n\n/**\n * Общий жизненный цикл чернового выбора для picker-компонентов,\n * где изменения подтверждаются при закрытии popup.\n */\nexport function usePickerSelectionLifecycle<TValue>({\n\tvalue,\n\topen,\n\tonCommit,\n\tonOpen,\n\tonClose,\n\tisEqual\n}: UsePickerSelectionLifecycleOptions<TValue>) {\n\tconst previousOpenRef = useRef(false);\n\tconst [draftValue, setDraftValue] = useState(value);\n\n\tuseEffect(() => {\n\t\tif (previousOpenRef.current && !open) {\n\t\t\tif (!isEqual(draftValue, value)) {\n\t\t\t\tonCommit(draftValue);\n\t\t\t}\n\n\t\t\tonClose?.(draftValue);\n\t\t}\n\n\t\tpreviousOpenRef.current = open;\n\t}, [draftValue, isEqual, onClose, onCommit, open, value]);\n\n\tconst prepareOpen = () => {\n\t\tsetDraftValue(value);\n\t\tonOpen?.();\n\t};\n\n\treturn {\n\t\tdraftValue,\n\t\tsetDraftValue,\n\t\tprepareOpen\n\t};\n}\n","import { MouseEvent, RefObject } from \"react\";\n\nimport { PickerTriggerMode, createPickerTriggerPolicy } from \"./createPickerTriggerPolicy\";\n\ninterface UsePickerTriggerControllerOptions {\n\tmode: PickerTriggerMode;\n\topen: boolean;\n\tcurrentQuery: string;\n\thasDisplayValue: boolean;\n\tinputRef: RefObject<HTMLInputElement | null>;\n\tsetQuery?: (value: string) => void;\n\topenList?: () => void;\n\tclose?: () => void;\n\ttoggleOpen?: () => void;\n\tonBeforeOpen?: () => void;\n}\n\ninterface HandleTriggerKeyDownOptions {\n\tevent: React.KeyboardEvent<HTMLElement>;\n\tonActivateWhenOpen?: () => void;\n\tenableSpaceActivation?: boolean;\n\tenableClosedArrowDownOpen?: boolean;\n\tsuppressClosedArrowUp?: boolean;\n}\n\nfunction focusInput(inputRef: RefObject<HTMLInputElement | null>) {\n\trequestAnimationFrame(() => {\n\t\tinputRef.current?.focus();\n\t});\n}\n\n/**\n * Единый контроллер пользовательских действий на trigger-input.\n * Держит поведение display/search-single/search-multi в одном месте.\n */\nexport function usePickerTriggerController({\n\tmode,\n\topen,\n\tcurrentQuery,\n\thasDisplayValue,\n\tinputRef,\n\tsetQuery,\n\topenList,\n\tclose,\n\ttoggleOpen,\n\tonBeforeOpen\n}: UsePickerTriggerControllerOptions) {\n\tconst policy = createPickerTriggerPolicy(mode);\n\n\tconst openTrigger = () => {\n\t\tonBeforeOpen?.();\n\n\t\tif (openList) {\n\t\t\topenList();\n\t\t\treturn;\n\t\t}\n\n\t\ttoggleOpen?.();\n\t};\n\n\tconst closeTrigger = () => {\n\t\tif (close) {\n\t\t\tclose();\n\t\t\treturn;\n\t\t}\n\n\t\ttoggleOpen?.();\n\t};\n\n\tconst toggleTrigger = () => {\n\t\tif (open) {\n\t\t\tcloseTrigger();\n\t\t} else {\n\t\t\topenTrigger();\n\t\t}\n\n\t\tif (policy.shouldFocusReferenceOnToggle(open)) {\n\t\t\tfocusInput(inputRef);\n\t\t}\n\t};\n\n\treturn {\n\t\tpolicy,\n\t\thandleTriggerInputChange: (nextValue: string) => {\n\t\t\tsetQuery?.(nextValue);\n\n\t\t\tif (policy.shouldOpenOnInputChange(open)) {\n\t\t\t\topenTrigger();\n\t\t\t}\n\t\t},\n\t\thandleTriggerClick: () => {\n\t\t\tif (policy.shouldOpenOnTriggerClick(open)) {\n\t\t\t\topenTrigger();\n\t\t\t}\n\t\t},\n\t\thandleTriggerFocus: (input: HTMLInputElement) => {\n\t\t\tif (\n\t\t\t\tpolicy.shouldSelectTriggerTextOnFocus({\n\t\t\t\t\topen,\n\t\t\t\t\tcurrentQuery,\n\t\t\t\t\thasDisplayValue\n\t\t\t\t})\n\t\t\t) {\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tinput.select();\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\thandleToggleMouseDown: (event: MouseEvent<HTMLButtonElement>) => {\n\t\t\tevent.preventDefault();\n\t\t},\n\t\thandleToggleClick: () => {\n\t\t\ttoggleTrigger();\n\t\t},\n\t\thandleTriggerKeyDown: ({\n\t\t\tevent,\n\t\t\tonActivateWhenOpen,\n\t\t\tenableSpaceActivation = false,\n\t\t\tenableClosedArrowDownOpen = false,\n\t\t\tsuppressClosedArrowUp = false\n\t\t}: HandleTriggerKeyDownOptions) => {\n\t\t\tif (!open && suppressClosedArrowUp && event.key === \"ArrowUp\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!open && enableClosedArrowDownOpen && event.key === \"ArrowDown\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\ttoggleTrigger();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key === \"Enter\") {\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tif (open) {\n\t\t\t\t\tonActivateWhenOpen?.();\n\t\t\t\t} else {\n\t\t\t\t\ttoggleTrigger();\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (enableSpaceActivation && event.key === \" \") {\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tif (open) {\n\t\t\t\t\tonActivateWhenOpen?.();\n\t\t\t\t} else {\n\t\t\t\t\ttoggleTrigger();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttoggleTrigger\n\t};\n}\n"],"mappings":";;;;;;;;;;;;;AAOA,SAAgB,EAAsC,EACrD,OACA,UACA,gBACA,aACA,SACA,cACA,UACA,eAC4B;CAC5B,IAAM,EAAE,cAAW,YAAS,kBAAe,YAAS,mBAAgB,EAAiB;EACpF;EACA,UAAU,KAAiC;EAC3C,gBAAgB,CAAC,CAAC;EAClB,UAAU,CAAC,CAAC;CACb,CAAC;CAED,OACC,kBAAC,GAAD;EACQ;EACM;EACH;EACJ;EACK;EACJ;EACI;EACF;EACM;EACN;EACR,UAAA,EAAS;GAAE;GAAW;GAAS;GAAe;GAAS;EAAY,CAAC;CAC7D,CAAA;AAEX;;;;;;;;;;;AEHA,SAAS,EAA4B,GAAsC;CAC1E,EAAM,gBAAgB;AACvB;AAEA,SAAgB,EAAY,EAC3B,SACA,YACA,mBACA,WACA,YACA,mBACA,kBACA,mBACA,wBACA,eAAY,WACZ,gBACA,qBACA,cACA,kBAAe,IACf,iBAAc,IACd,cAAW,GACX,cACA,aACA,oBACA,oBACA,kBACA,WACA,eACoB;CACpB,OACC,kBAAC,GAAD,EAAA,UACE,KACA,kBAAC,GAAD,EAAA,UACC,kBAAC,GAAD;EAA+B;EAAS,OAAO;EAAqB;EAA2B;EAC9F,UAAA,kBAAC,EAAO,KAAR;GACC,KAAK;GACL,OAAO;IAAE,GAAG;IAAgB;GAAS;GACrC,SAAS;IAAE,SAAS;IAAG,OAAO;GAAK;GACnC,SAAS;IAAE,SAAS;IAAG,OAAO;GAAE;GAChC,MAAM;IAAE,SAAS;IAAG,OAAO;GAAK;GAChC,GAAI,EAAiB;IACpB,IAAI;IACJ,MAAM;IACN;IACA,mBAAmB;IACnB,cAAc,IAAU,KAAA,IAAY;IACpC,oBAAoB;IACpB,yBAAyB;IACzB,wBAAwB,KAAuB,KAAA;IAC/C,aAAa;IACb;IACA;GACD,CAAC;GACD,UAAA,kBAAC,OAAD;IAAK,WAAW,EAAG,EAAO,aAAa,CAAe;IAAtD,UAAA,CACE,IACA,kBAAC,OAAD;KAAK,WAAW;KAAhB,UAAA,CACE,GACD,kBAAC,GAAD,EAAW,WAAU,gBAAiB,CAAA,CAClC;IAEL,CAAA,IAAA,kBAAC,OAAD,CAAM,CAAA,GAEP,kBAAC,OAAD;KAAK,WAAW,EAAG,EAAO,WAAW,CAAa;KAAI;IAAc,CAAA,CAChE;;EACM,CAAA;CACS,CAAA,EACP,CAAA,EAED,CAAA;AAEnB;;;AC1FA,SAAgB,EAAuB,EAAE,gBAAa,kBAAe,yBAAmD;CACvH,OACC,kBAAC,EAAK,WAAN;EAAgB,KAAI;EAAK,iBAAgB;EAAzC,UAAA,CACC,kBAAC,UAAD;GACC,KAAK;GACL,MAAK;GACL,WAAW,EAAO;GAClB,SAAS;GACT,WAAQ;GACR,eAAY;GAAa,UAAA;EAElB,CAAA,GACR,kBAAC,UAAD;GACC,MAAK;GACL,WAAW,EAAO;GAClB,SAAS;GACT,WAAQ;GACR,eAAY;GAAe,UAAA;EAEpB,CAAA,CACO;;AAElB;;;ACxBA,SAAgB,EAAa,EAAE,eAAY,iBAAiC;CAC3E,IAAM,IAAU,KAAc;CAM9B,OAJI,KAAqC,OACjC,OAIP,kBAAC,OAAD;EAAK,WAAW,EAAG,EAAS,eAAe,EAAO,QAAQ,MAAe,KAAA,KAAa,EAAO,WAAW;EAAG,iBAAe;EACxH,UAAA;CACG,CAAA;AAEP;;;ACTA,SAAgB,EAAqB,EACpC,SACA,aACA,aACA,sBACA,kBACA,mBAAgB,kBAChB,oBAAiB,oBACY;CAC7B,OACC,kBAAC,OAAD;EAAK,WAAW,EAAS;EAAyB,iBAAe,KAAY,KAAA;EAA7E,UAAA;GACE;GAED,kBAAC,OAAD,EAAK,WAAW,EAAS,kBAAoB,CAAA;GAE7C,kBAAC,UAAD;IACC,MAAK;IACL,cAAY,IAAO,IAAiB;IACpC,WAAW,EAAS;IACpB,aAAa;IACb,SAAS;IACT,UAAA,kBAAC,GAAD,EAAiB,WAAW,EAAG,EAAS,cAAc,KAAQ,EAAS,gBAAgB,EAAI,CAAA;GACpF,CAAA;EACJ;;AAEP;;;ACxBA,IAAa,IAAqB,GAChC,EAAE,YAAS,iBAAc,YAAS,kBAAe,mBAAgB,cAAW,GAAG,KAAS,MAEvF,kBAAC,OAAD;CAAK,KAAK;CAAS,WAAW,EAAG,EAAS,kBAAkB,EAAO,kBAAkB,CAAa;CAChG,UAAA,IACA,kBAAC,GAAD,CAAoB,CAAA,IAEpB,kBAAA,GAAA,EAAA,UAAA,CACC,kBAAC,GAAD;EAA4B;EACzB,WAAA,EAAE,0BACH,kBAAC,SAAD;GAAO,GAAI;GAAY;GAAK,WAAW,EAAG,EAAS,mBAAmB,GAAkB,CAAc;EAAI,CAAA;CAE9F,CAAA,GACb,CACA,EAAA,CAAA;AAEC,CAAA,CAGR;AAEA,EAAmB,cAAc;;;ACjBjC,SAAgB,EAA0B,GAA8C;CACvF,QAAQ,GAAR;EACC,KAAK,iBACJ,OAAO;GACN,qBAAqB;GACrB,qBAAqB;GACrB,mBAAmB;GACnB,gCAAgC;GAChC,0BAA0B,MAAS,CAAC;GACpC,+BAA+B,MAAS,CAAC;GACzC,iCAAiC,EAAE,SAAM,iBAAc,yBACtD,CAAC,KAAQ,EAAa,WAAW,KAAK;EACxC;EACD,KAAK,gBACJ,OAAO;GACN,qBAAqB;GACrB,qBAAqB;GACrB,mBAAmB;GACnB,gCAAgC;GAChC,0BAA0B,MAAS,CAAC;GACpC,+BAA+B,MAAS,CAAC;GACzC,sCAAsC;EACvC;EAED,SACC,OAAO;GACN,qBAAqB;GACrB,qBAAqB;GACrB,mBAAmB;GACnB,2BAA2B,MAAS,CAAC;GACrC,+BAA+B;GAC/B,oCAAoC;GACpC,sCAAsC;EACvC;CACF;AACD;;;ACvDA,SAAgB,EAAyB,GAAqC;CAC7E,IAAI,OAAO,KAAS,YAAY,OAAO,KAAS,UAC/C,OAAO,OAAO,CAAI;CAGnB,IAAI,MAAM,QAAQ,CAAI,GAAG;EACxB,IAAM,IAAS,EAAK,IAAI,CAAwB,CAAC,CAAC,QAAQ,MAA2B,EAAQ,CAAM;EACnG,OAAO,EAAO,SAAS,EAAO,KAAK,GAAG,IAAI,KAAA;CAC3C;AAGD;;;ACFA,SAAS,EAAoB,GAAgB;CAG5C,OAAO,GAFO,MAAM,QAAQ,CAAK,IAAI,IAAQ,CAAC,CAAK,EAAA,CAEjB,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC;AAC5D;AAEA,SAAgB,EAA0B,EAAE,YAAS,UAAO,aAAU,IAAM,oBAAmD;CAC9H,IAAM,IAAkB,EAAqB,CAAK;CAElD,OAAO,QACF,CAAC,KAAW,CAAC,IACT,CAAC,GAAG,CAAO,IAGZ,EAAQ,QAAQ,MAAW,EAAoB,EAAc,CAAM,CAAC,CAAC,CAAC,SAAS,CAAe,CAAC,GACpG;EAAC;EAAS;EAAe;EAAiB;CAAO,CAAC;AACtD;;;ACGA,SAAgB,EAA4B,GAA2C;CACtF,IAAM,IAAgB,EAAO,cAAc,EAA0B,EAAO,WAAW,IAAI,KAAA;CAE3F,OAAO,EAAmB;EACzB,GAAG;EACH,qBAAqB,EAAO,uBAAuB,GAAe;EAClE,qBAAqB,EAAO,uBAAuB,GAAe;CACnE,CAAC;AACF;;;ACtBA,SAAgB,EAAe,EAAE,UAAO,iBAAc,YAAS,iBAAc,kBAAsC;CAClH,IAAM,IAAe,MAAU,KAAA,GACzB,CAAC,GAAe,KAAoB,EAAS,KAAgB,EAAE,GAC/D,IAAe,IAAgB,KAAS,KAAM,GAC9C,IAAuB,MAAiB,MAAc,EAA0B,CAAW,CAAC,CAAC,oBAE7F,KAAY,MAAsB;EAKvC,AAJK,KACJ,EAAiB,CAAS,GAG3B,IAAU,CAAS;CACpB;CAEA,OAAO;EACN,OAAO;EACP;EACA,kBAAkB,EAAS,EAAE;EAC7B,mBAAmB;CACpB;AACD;;;ACrBA,SAAgB,EAAoC,EACnD,UACA,SACA,aACA,WACA,YACA,cAC8C;CAC9C,IAAM,IAAkB,EAAO,EAAK,GAC9B,CAAC,GAAY,KAAiB,EAAS,CAAK;CAmBlD,OAjBA,QAAgB;EASf,AARI,EAAgB,WAAW,CAAC,MAC1B,EAAQ,GAAY,CAAK,KAC7B,EAAS,CAAU,GAGpB,IAAU,CAAU,IAGrB,EAAgB,UAAU;CAC3B,GAAG;EAAC;EAAY;EAAS;EAAS;EAAU;EAAM;CAAK,CAAC,GAOjD;EACN;EACA;EACA,mBARyB;GAEzB,AADA,EAAc,CAAK,GACnB,IAAS;EACV;CAMA;AACD;;;ACvBA,SAAS,EAAW,GAA8C;CACjE,4BAA4B;EAC3B,EAAS,SAAS,MAAM;CACzB,CAAC;AACF;AAMA,SAAgB,EAA2B,EAC1C,SACA,SACA,iBACA,oBACA,aACA,aACA,aACA,UACA,eACA,mBACqC;CACrC,IAAM,IAAS,EAA0B,CAAI,GAEvC,UAAoB;EAGzB,IAFA,IAAe,GAEX,GAAU;GACb,EAAS;GACT;EACD;EAEA,IAAa;CACd,GAEM,UAAqB;EAC1B,IAAI,GAAO;GACV,EAAM;GACN;EACD;EAEA,IAAa;CACd,GAEM,UAAsB;EAO3B,AANI,IACH,EAAa,IAEb,EAAY,GAGT,EAAO,6BAA6B,CAAI,KAC3C,EAAW,CAAQ;CAErB;CAEA,OAAO;EACN;EACA,2BAA2B,MAAsB;GAGhD,AAFA,IAAW,CAAS,GAEhB,EAAO,wBAAwB,CAAI,KACtC,EAAY;EAEd;EACA,0BAA0B;GACzB,AAAI,EAAO,yBAAyB,CAAI,KACvC,EAAY;EAEd;EACA,qBAAqB,MAA4B;GAChD,AACC,EAAO,+BAA+B;IACrC;IACA;IACA;GACD,CAAC,KAED,4BAA4B;IAC3B,EAAM,OAAO;GACd,CAAC;EAEH;EACA,wBAAwB,MAAyC;GAChE,EAAM,eAAe;EACtB;EACA,yBAAyB;GACxB,EAAc;EACf;EACA,uBAAuB,EACtB,UACA,uBACA,2BAAwB,IACxB,+BAA4B,IAC5B,2BAAwB,SACU;GAClC,IAAI,CAAC,KAAQ,KAAyB,EAAM,QAAQ,WAAW;IAC9D,EAAM,eAAe;IACrB;GACD;GAEA,IAAI,CAAC,KAAQ,KAA6B,EAAM,QAAQ,aAAa;IAEpE,AADA,EAAM,eAAe,GACrB,EAAc;IACd;GACD;GAEA,IAAI,EAAM,QAAQ,SAAS;IAG1B,AAFA,EAAM,eAAe,GAEjB,IACH,IAAqB,IAErB,EAAc;IAGf;GACD;GAEA,AAAI,KAAyB,EAAM,QAAQ,QAC1C,EAAM,eAAe,GAEjB,IACH,IAAqB,IAErB,EAAc;EAGjB;EACA;CACD;AACD"}
@@ -1,6 +1,6 @@
1
1
  import { t as e } from "./ui.module-DHVTOqZ0.js";
2
- import { c as t } from "./input-VC8jEoTa.js";
3
- import { a as n, c as r, f as i, i as a, l as o, o as s, p as c, r as l, t as u, u as d } from "./picker-DLnfOgZj.js";
2
+ import { l as t } from "./input-D3u9BYWD.js";
3
+ import { a as n, c as r, f as i, i as a, l as o, o as s, p as c, r as l, t as u, u as d } from "./picker-lpH_xp14.js";
4
4
  import { n as f, r as p } from "./useODataSelectBase-Bq36Wp1U.js";
5
5
  import { Fragment as m, useCallback as h, useMemo as g, useRef as ee, useState as te } from "react";
6
6
  import { useODataCollectionModel as _ } from "@ryuzaki13/react-foundation-api/odata";
@@ -66,7 +66,7 @@ var C = {
66
66
  //#endregion
67
67
  //#region src/select/Select.tsx
68
68
  function w(t) {
69
- let { label: f, description: p, disabled: _, placeholder: S, size: ae, options: w, value: T, onChange: E, getOptionKey: D, getOptionLabel: O, getOptionCode: k, getOptionDisabled: A, getOptionAriaLabel: se, getOptionGroup: j, getOptionClassName: ce, renderOption: M, renderValue: N, className: le, buttonClassName: ue, optionsClassName: de, optionsMaxWidth: fe, optionsContentClassName: pe, searchable: P = !1, defaultFilter: me = !0, query: he, defaultQuery: ge, onQuery: _e, renderPopupHeader: ve, emptyState: ye, loadingState: be, errorState: xe, placement: Se = "bottom-start", clearable: F = !1 } = t, I = E, L = ee(null), [R, Ce] = te(!1), z = P ? "search-single" : "display", B = T === void 0 ? void 0 : D(T), V = B === void 0 ? void 0 : w.find((e) => D(e) === B) ?? T, { query: H, setQuery: U, resetQueryOnClose: we } = l({
69
+ let { label: f, description: p, disabled: _, placeholder: S, size: ae, options: w, value: T, onChange: E, getOptionKey: D, getOptionLabel: O, getOptionCode: k, getOptionDisabled: A, getOptionAriaLabel: se, getOptionGroup: j, getOptionClassName: ce, renderOption: M, renderValue: N, className: le, buttonClassName: ue, optionsClassName: de, optionsMaxWidth: fe, optionsContentClassName: pe, searchable: P = !1, defaultFilter: me = !0, query: he, defaultQuery: ge, onQuery: _e, renderPopupHeader: ve, emptyState: ye, isLoading: be, errorState: xe, placement: Se = "bottom-start", clearable: F = !1 } = t, I = E, L = ee(null), [R, Ce] = te(!1), z = P ? "search-single" : "display", B = T === void 0 ? void 0 : D(T), V = B === void 0 ? void 0 : w.find((e) => D(e) === B) ?? T, { query: H, setQuery: U, resetQueryOnClose: we } = l({
70
70
  query: he,
71
71
  defaultQuery: ge,
72
72
  onQuery: _e,
@@ -156,6 +156,7 @@ function w(t) {
156
156
  readOnly: !P,
157
157
  autoComplete: "off",
158
158
  role: "combobox",
159
+ isLoading: be,
159
160
  value: Ge,
160
161
  placeholder: V === void 0 || Z ? `${S ?? f ?? ""} <${w.length}>` : void 0,
161
162
  "aria-labelledby": n,
@@ -233,7 +234,6 @@ function w(t) {
233
234
  }, `group-${String(t.group.key)}-${n}`) : /* @__PURE__ */ b(m, { children: i }, `options-${n}`);
234
235
  }) : W.map((e, t) => Je(s, e, t)) : /* @__PURE__ */ b(d, {
235
236
  emptyState: ye,
236
- loadingState: be,
237
237
  errorState: xe
238
238
  })
239
239
  })
@@ -287,7 +287,7 @@ var E = ({ odata: e, segment: n, model: r, size: i, label: a, description: o, di
287
287
  defaultFilter: !1,
288
288
  disabled: s || f.isLoading,
289
289
  placeholder: f.placeholder,
290
- loadingState: "Загрузка...",
290
+ isLoading: f.isLoading,
291
291
  errorState: f.isError ? "Ошибка загрузки" : void 0,
292
292
  emptyState: !f.isLoading && !f.isError ? "Нет данных" : void 0,
293
293
  clearable: d
@@ -325,4 +325,4 @@ function k({ label: e, description: t, disabled: n, placeholder: r, size: i, opt
325
325
  //#endregion
326
326
  export { S as i, E as n, w as r, k as t };
327
327
 
328
- //# sourceMappingURL=select-CysiIrej.js.map
328
+ //# sourceMappingURL=select-3KLv_evq.js.map