@ryuzaki13/react-foundation-ui 3.7.6 → 3.8.1

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 (318) hide show
  1. package/dist/chunks/formatMultiSelectOptionCount-t-e8apob.js +14 -0
  2. package/dist/chunks/formatMultiSelectOptionCount-t-e8apob.js.map +1 -0
  3. package/dist/multi-select/index.js +355 -240
  4. package/dist/multi-select/index.js.map +1 -1
  5. package/dist/multi-select/lib/adaptLegacyMultiSelectContext.d.ts +8 -0
  6. package/dist/multi-select/lib/adaptLegacyMultiSelectContext.d.ts.map +1 -0
  7. package/dist/multi-select/lib/createMultiSelectOptionSections.d.ts +15 -0
  8. package/dist/multi-select/lib/createMultiSelectOptionSections.d.ts.map +1 -0
  9. package/dist/multi-select/lib/formatMultiSelectOptionCount.d.ts +3 -0
  10. package/dist/multi-select/lib/formatMultiSelectOptionCount.d.ts.map +1 -0
  11. package/dist/multi-select/lib/materializeMultiSelectOptions.d.ts +6 -0
  12. package/dist/multi-select/lib/materializeMultiSelectOptions.d.ts.map +1 -0
  13. package/dist/multi-select/lib/multiSelectSelection.d.ts +4 -0
  14. package/dist/multi-select/lib/multiSelectSelection.d.ts.map +1 -0
  15. package/dist/multi-select/lib/resolveLegacyMultiSelectTextKey.d.ts +4 -0
  16. package/dist/multi-select/lib/resolveLegacyMultiSelectTextKey.d.ts.map +1 -0
  17. package/dist/multi-select/ui/DeprecatedMultiSelect.d.ts +41 -0
  18. package/dist/multi-select/ui/DeprecatedMultiSelect.d.ts.map +1 -0
  19. package/dist/multi-select/ui/MultiSelect.d.ts +17 -57
  20. package/dist/multi-select/ui/MultiSelect.d.ts.map +1 -1
  21. package/dist/multi-select/ui/MultiSelectCore.d.ts +13 -0
  22. package/dist/multi-select/ui/MultiSelectCore.d.ts.map +1 -0
  23. package/dist/multi-select/ui/MultiSelectOptionList.d.ts +23 -0
  24. package/dist/multi-select/ui/MultiSelectOptionList.d.ts.map +1 -0
  25. package/dist/multi-select/ui/MultiSelectOptionRow.d.ts +21 -0
  26. package/dist/multi-select/ui/MultiSelectOptionRow.d.ts.map +1 -0
  27. package/dist/multi-select/ui/MultiSelectOptionsWrapper.d.ts +9 -0
  28. package/dist/multi-select/ui/MultiSelectOptionsWrapper.d.ts.map +1 -0
  29. package/dist/multi-select/ui/SerializableMultiSelect.d.ts.map +1 -1
  30. package/dist/multi-select/ui/index.d.ts +2 -0
  31. package/dist/multi-select/ui/index.d.ts.map +1 -1
  32. package/dist/multi-select/ui/legacyMultiSelectTypes.d.ts +29 -0
  33. package/dist/multi-select/ui/legacyMultiSelectTypes.d.ts.map +1 -0
  34. package/dist/multi-select/ui/multiSelectTypes.d.ts +45 -0
  35. package/dist/multi-select/ui/multiSelectTypes.d.ts.map +1 -0
  36. package/dist/tree-select/index.js +1 -1
  37. package/dist/tree-select/index.js.map +1 -1
  38. package/package.json +2 -2
  39. package/storybook-static/assets/{Badge-eXgx9YUG.js → Badge-EK9gQx9e.js} +1 -1
  40. package/storybook-static/assets/{Badge.stories-SmirBJ64.js → Badge.stories-CtgtZ5eo.js} +1 -1
  41. package/storybook-static/assets/{BadgeList-Cwcw7Bjt.js → BadgeList-C8Szc3WZ.js} +1 -1
  42. package/storybook-static/assets/{BarcodeScannerDialog.stories-CWti20ds.js → BarcodeScannerDialog.stories-BRpvqkgE.js} +1 -1
  43. package/storybook-static/assets/{Button-pfdvT36U.js → Button-CiBLpfB4.js} +1 -1
  44. package/storybook-static/assets/{Button-Blcxu8Fi.js → Button-DaL6GfgY.js} +1 -1
  45. package/storybook-static/assets/{Button.stories-DeYzsLfz.js → Button.stories-C7LxYTQb.js} +1 -1
  46. package/storybook-static/assets/{CalendarView-CDaqtkmp.js → CalendarView-B5maPbIS.js} +1 -1
  47. package/storybook-static/assets/{CheckBox-BqdthZ_f.js → CheckBox-DXdhv4Lf.js} +1 -1
  48. package/storybook-static/assets/{CheckBox-CSW24iRW.js → CheckBox-xWQASPSK.js} +1 -1
  49. package/storybook-static/assets/{CheckBox.stories-BdzBmp2X.js → CheckBox.stories-B0TljSQ3.js} +1 -1
  50. package/storybook-static/assets/{Color-6AOWCN3U-BQEGHaZe.js → Color-6AOWCN3U-CtC_yr9J.js} +1 -1
  51. package/storybook-static/assets/{ContextMenu-CtVo71V5.js → ContextMenu-DMPKMqfn.js} +1 -1
  52. package/storybook-static/assets/{ContextMenu-D6j5s44o.js → ContextMenu-Dz3oD_WF.js} +1 -1
  53. package/storybook-static/assets/{ContextMenu.stories-BTmqEgdn.js → ContextMenu.stories-D_ozImXJ.js} +1 -1
  54. package/storybook-static/assets/{DateInput-DbsjYyUn.js → DateInput-CeLmydmh.js} +1 -1
  55. package/storybook-static/assets/{DateInput-LUBv1t6D.js → DateInput-Dm9hU8oI.js} +1 -1
  56. package/storybook-static/assets/{DateInput.stories-wBctfXX7.js → DateInput.stories-B_IZPZqF.js} +1 -1
  57. package/storybook-static/assets/{DateRangePresetSelect-DB77_9Dq.js → DateRangePresetSelect-CH7Mmtrc.js} +1 -1
  58. package/storybook-static/assets/{DateRangePresetSelect-BM-LfU65.js → DateRangePresetSelect-DTkAwI-o.js} +1 -1
  59. package/storybook-static/assets/{DateRangePresetSelect.stories-CPBrSRdY.js → DateRangePresetSelect.stories-C6gIY87L.js} +1 -1
  60. package/storybook-static/assets/DeprecatedMultiSelect-CX5U1Wb1.js +1 -0
  61. package/storybook-static/assets/{MultiSelect-CAiFS-4P.js → DeprecatedMultiSelect-EaJ_mQ1Q.js} +16 -11
  62. package/storybook-static/assets/DeprecatedMultiSelect.stories-Bo6fL6Zr.js +55 -0
  63. package/storybook-static/assets/{Detail-BNgU9f0q.js → Detail-CCh7sDpc.js} +1 -1
  64. package/storybook-static/assets/{Detail.stories-DuNFVNqy.js → Detail.stories-RskA9Xs8.js} +1 -1
  65. package/storybook-static/assets/{Dialog-CKty3o7T.js → Dialog-ChxYkiWk.js} +1 -1
  66. package/storybook-static/assets/{Dialog-DGet_JGl.js → Dialog-DKMGI2PI.js} +1 -1
  67. package/storybook-static/assets/{Dialog.stories-ByN-6686.js → Dialog.stories-CGdnARk7.js} +1 -1
  68. package/storybook-static/assets/{Disclosure-DShud4Os.js → Disclosure-CgnOdAzR.js} +1 -1
  69. package/storybook-static/assets/{Disclosure.stories-CDm6oF9a.js → Disclosure.stories-DgfVdZ8V.js} +1 -1
  70. package/storybook-static/assets/{DisclosureGroup-ax0FDj8b.js → DisclosureGroup-CjcLktuT.js} +1 -1
  71. package/storybook-static/assets/{DocsRenderer-JROSPFPF-3QEclnBT.js → DocsRenderer-JROSPFPF-CiPiMqkv.js} +1 -1
  72. package/storybook-static/assets/{DropZone-CIyryWZI.js → DropZone-Cp8Wufyw.js} +1 -1
  73. package/storybook-static/assets/{DropZone-CfLiG5V_.js → DropZone-DQ73_0Pf.js} +1 -1
  74. package/storybook-static/assets/{DropZone.stories-ChAnJpym.js → DropZone.stories-DP_hFMc_.js} +1 -1
  75. package/storybook-static/assets/{DropdownMenu-CNluzorm.js → DropdownMenu-DaXeJjTB.js} +1 -1
  76. package/storybook-static/assets/{ExpandableActionPanel-DT7f0JC6.js → ExpandableActionPanel-D6BzMChs.js} +1 -1
  77. package/storybook-static/assets/{ExpandableActionPanel.stories-DcFFpRB7.js → ExpandableActionPanel.stories-B5_ZvkZK.js} +1 -1
  78. package/storybook-static/assets/{Flex-CrktPhiJ.js → Flex-CzSeUflw.js} +1 -1
  79. package/storybook-static/assets/{Flex.stories-y4TLzuuM.js → Flex.stories-4xln9Tx7.js} +1 -1
  80. package/storybook-static/assets/{FlexContainer-D2-q1g5m.js → FlexContainer-CUkvfdhf.js} +1 -1
  81. package/storybook-static/assets/{FlexItem-DRk8xCGo.js → FlexItem-DxLk1kGw.js} +1 -1
  82. package/storybook-static/assets/{FloatingPopover-CF7JQjl3.js → FloatingPopover-BN7M-D7P.js} +1 -1
  83. package/storybook-static/assets/{FormattedTableCell--6ZFX8hz.js → FormattedTableCell-D-neZi6J.js} +1 -1
  84. package/storybook-static/assets/{Grid-DpZcpaum.js → Grid-B8BNlV5p.js} +1 -1
  85. package/storybook-static/assets/{Grid-k2M3ts2n.js → Grid-Bbyr5bon.js} +1 -1
  86. package/storybook-static/assets/{Grid.stories-NeFpTomv.js → Grid.stories-D-uV0QMB.js} +1 -1
  87. package/storybook-static/assets/{GridContainer-P0Xa7b7y.js → GridContainer-2Q2ODK51.js} +1 -1
  88. package/storybook-static/assets/{ImageCropper.stories-BRTONgH3.js → ImageCropper.stories-Dtt2FAGL.js} +1 -1
  89. package/storybook-static/assets/{ImageRenderer-BXC5Lyho.js → ImageRenderer-BjtFa8z8.js} +1 -1
  90. package/storybook-static/assets/{ImageRenderer.stories-DgkNe2_T.js → ImageRenderer.stories-BKcYCMTG.js} +1 -1
  91. package/storybook-static/assets/{ImageView.stories-CxJejTun.js → ImageView.stories-BqgrUQOD.js} +1 -1
  92. package/storybook-static/assets/{ImageViewer.stories-kR2C9tuU.js → ImageViewer.stories-CW8xG4Dn.js} +2 -2
  93. package/storybook-static/assets/{ImageViewerRuntime-D-RVa4qZ.js → ImageViewerRuntime-BouFP69S.js} +1 -1
  94. package/storybook-static/assets/{Input-DgO6bhmR.js → Input-DKfVkFor.js} +1 -1
  95. package/storybook-static/assets/{Input-DIuqMg5E.js → Input-DSoJ1bPZ.js} +1 -1
  96. package/storybook-static/assets/{Input.stories-B3EkzlNp.js → Input.stories-DzI_GHu4.js} +1 -1
  97. package/storybook-static/assets/{InputDateTime-C4QSNcXI.js → InputDateTime-F_UMqLSE.js} +1 -1
  98. package/storybook-static/assets/{InputDateTime.stories-_SdRZYuA.js → InputDateTime.stories-BZofscBL.js} +1 -1
  99. package/storybook-static/assets/{InputFile-Cnotm9qK.js → InputFile-DgDsyDsY.js} +1 -1
  100. package/storybook-static/assets/{InputFile-DJ9szKip.js → InputFile-Ducp25c4.js} +1 -1
  101. package/storybook-static/assets/{InputFile.stories-JX33t9QX.js → InputFile.stories-DlaBCWWc.js} +1 -1
  102. package/storybook-static/assets/{InputFiles-B0CqiRfB.js → InputFiles-5sqxbwqq.js} +1 -1
  103. package/storybook-static/assets/{InputFiles-nZUYt00e.js → InputFiles-E1Lv_1S-.js} +1 -1
  104. package/storybook-static/assets/{InputFiles.stories-ljvNsQNP.js → InputFiles.stories-CMWGpeMF.js} +1 -1
  105. package/storybook-static/assets/{InputFilesList-CXW0TZUT.js → InputFilesList-BhKPPY0s.js} +1 -1
  106. package/storybook-static/assets/{InputImage-DshVh1Zy.js → InputImage-Bml_XdoH.js} +1 -1
  107. package/storybook-static/assets/{InputImage-Mz0kqbxx.js → InputImage-dJAnInGG.js} +1 -1
  108. package/storybook-static/assets/{InputImage.stories-Kjsr8o5u.js → InputImage.stories-6DtkfR4R.js} +1 -1
  109. package/storybook-static/assets/{InteractiveComponents-BceuAHAO.js → InteractiveComponents-4E2d9zH2.js} +3 -3
  110. package/storybook-static/assets/{InteractiveComponents.stories-CKqVR6MM.js → InteractiveComponents.stories-BU4phFyf.js} +2 -2
  111. package/storybook-static/assets/{LayoutPicker--4e7A8IS.js → LayoutPicker-CowWslXH.js} +1 -1
  112. package/storybook-static/assets/{LayoutPicker--7uu24Ge.js → LayoutPicker-VdWtkSuS.js} +1 -1
  113. package/storybook-static/assets/{LayoutPicker.stories-HuR_jWMJ.js → LayoutPicker.stories-CixcTM0K.js} +1 -1
  114. package/storybook-static/assets/{Listbox-DjribCXB.js → Listbox-BMbMW6QU.js} +1 -1
  115. package/storybook-static/assets/{Listbox-CIXyuWAn.js → Listbox-Bdk5_SQj.js} +1 -1
  116. package/storybook-static/assets/{Listbox.stories-Bn9GVTUl.js → Listbox.stories-CICddsFG.js} +1 -1
  117. package/storybook-static/assets/{Modal-B4NqLvd-.js → Modal-BmtPDyvC.js} +1 -1
  118. package/storybook-static/assets/{Modal-BfybTEqP.js → Modal-LszfoLT0.js} +1 -1
  119. package/storybook-static/assets/{Modal.stories-BkRhMj_M.js → Modal.stories-COopXi-m.js} +1 -1
  120. package/storybook-static/assets/{ModalManagerProvider-DVbHcNLN.js → ModalManagerProvider-Dwy_KGoK.js} +1 -1
  121. package/storybook-static/assets/MultiSelect-D8OZAHlg.js +1 -0
  122. package/storybook-static/assets/MultiSelect-D9E5MjIr.js +76 -0
  123. package/storybook-static/assets/MultiSelect.stories-BNy8uqkv.js +64 -0
  124. package/storybook-static/assets/MultiSelectCore-Ds4jXHOk.js +3 -0
  125. package/storybook-static/assets/{NoData-C-f1Cevg.js → NoData-D9Sjnk2c.js} +1 -1
  126. package/storybook-static/assets/{NotificationsHost-NRdqv2QT.js → NotificationsHost-D0Pk-Yqg.js} +1 -1
  127. package/storybook-static/assets/{NotificationsHost.stories-CJqvAEJD.js → NotificationsHost.stories-CEUX8dAF.js} +1 -1
  128. package/storybook-static/assets/{ODataMultiSelect-BZkC34zI.js → ODataMultiSelect-BxNC8zss.js} +1 -1
  129. package/storybook-static/assets/{ODataMultiSelect.stories-BZIiUYSX.js → ODataMultiSelect.stories-BLourbRQ.js} +1 -1
  130. package/storybook-static/assets/{ODataSelect-jd2QMUfT.js → ODataSelect-DvZjbRtG.js} +1 -1
  131. package/storybook-static/assets/{ODataSelect.stories-tJK0ojwy.js → ODataSelect.stories-CswbeNTT.js} +1 -1
  132. package/storybook-static/assets/{ODataTreeMultiSelect-DQh0Miht.js → ODataTreeMultiSelect-DagrfWBY.js} +1 -1
  133. package/storybook-static/assets/{ODataTreeMultiSelect.stories-nGsKEFa8.js → ODataTreeMultiSelect.stories-TbWSFRbD.js} +1 -1
  134. package/storybook-static/assets/{ODataTreeSelect-DH8999xS.js → ODataTreeSelect-BLNFg44u.js} +1 -1
  135. package/storybook-static/assets/{ODataTreeSelect.stories-Crmd8QRs.js → ODataTreeSelect.stories-BKCm0DtZ.js} +1 -1
  136. package/storybook-static/assets/{OneStepScroller-wahIXJlw.js → OneStepScroller-NyCOFbAV.js} +1 -1
  137. package/storybook-static/assets/{Option-D9p9CbDx.js → Option-B82YmTfK.js} +1 -1
  138. package/storybook-static/assets/{OptionButton-DSnw34Je.js → OptionButton-CmHVNPma.js} +1 -1
  139. package/storybook-static/assets/{OptionContent-B5Fd_tXV.js → OptionContent-BG9-OWJw.js} +1 -1
  140. package/storybook-static/assets/{OptionContentContainer-DHRmFumh.js → OptionContentContainer-CU1GwCic.js} +1 -1
  141. package/storybook-static/assets/{PeriodSelect-DuWMNZ_n.js → PeriodSelect-B9MQy6oj.js} +1 -1
  142. package/storybook-static/assets/{PeriodSelect-CU1ZfQsw.js → PeriodSelect-kOE0lDjL.js} +1 -1
  143. package/storybook-static/assets/{PeriodSelect.stories-BhJ23e1c.js → PeriodSelect.stories-BTASzqE2.js} +1 -1
  144. package/storybook-static/assets/{PickerField-CH8N7Pny.js → PickerField--0kZhFr0.js} +1 -1
  145. package/storybook-static/assets/{PickerTriggerActions-CeY0rxwK.js → PickerTriggerActions-DAjE-u3Q.js} +1 -1
  146. package/storybook-static/assets/{Popover-CU6wCOiR.js → Popover-7L-pHu2i.js} +1 -1
  147. package/storybook-static/assets/{Popover-vFmaLoRU.js → Popover-BLuKIsin.js} +1 -1
  148. package/storybook-static/assets/{Popover.stories-BM5vOI4G.js → Popover.stories-DqwCkB57.js} +1 -1
  149. package/storybook-static/assets/{PresetRangeDateInput-H5QilHxu.js → PresetRangeDateInput-Ctf7L0HP.js} +1 -1
  150. package/storybook-static/assets/{PresetRangeDateInput-Cn_RWr5D.js → PresetRangeDateInput-CuE_81Mt.js} +1 -1
  151. package/storybook-static/assets/{PresetRangeDateInput.stories-CatDrFF-.js → PresetRangeDateInput.stories-D9TMoYOB.js} +1 -1
  152. package/storybook-static/assets/{PresetSelect-Cm0WuAqn.js → PresetSelect-CN0IKu0a.js} +1 -1
  153. package/storybook-static/assets/{README-YPxgsW6m.js → README-0UO2pXtj.js} +1 -1
  154. package/storybook-static/assets/{README-BFzru16L.js → README-1kX985QJ.js} +1 -1
  155. package/storybook-static/assets/{README-BXaTYkUq.js → README-8-_hu7iJ.js} +1 -1
  156. package/storybook-static/assets/{README-Cr-HMvlE.js → README-9pbSM7O_.js} +1 -1
  157. package/storybook-static/assets/{README-B9XF1vhP.js → README-B0DB8YYR.js} +1 -1
  158. package/storybook-static/assets/{README-DScgFhQi.js → README-B3aq-Sx4.js} +1 -1
  159. package/storybook-static/assets/{README-D60wEb0m.js → README-BGVEAmni.js} +1 -1
  160. package/storybook-static/assets/{README-BEM5Ied4.js → README-BGY4pbd2.js} +1 -1
  161. package/storybook-static/assets/{README-C99Y4cRU.js → README-BNAmw1CY.js} +1 -1
  162. package/storybook-static/assets/{README-CplUUfcx.js → README-BSU3d8yx.js} +1 -1
  163. package/storybook-static/assets/{README-DmmCqakO.js → README-BTJcWR49.js} +1 -1
  164. package/storybook-static/assets/{README-DemFWAF0.js → README-BbLROfhp.js} +1 -1
  165. package/storybook-static/assets/{README-CD4-yapK.js → README-Bdl63lRm.js} +1 -1
  166. package/storybook-static/assets/{README-Dt-3FZT0.js → README-BkkuU9ec.js} +1 -1
  167. package/storybook-static/assets/{README-tHE1GNUz.js → README-BlUNAvHA.js} +1 -1
  168. package/storybook-static/assets/{README-DzYUxPzL.js → README-BmyhpBE4.js} +1 -1
  169. package/storybook-static/assets/{README-BM8aEC_V.js → README-BnWc_1XT.js} +1 -1
  170. package/storybook-static/assets/{README-CzZmNRCy.js → README-BoYFqkwC.js} +1 -1
  171. package/storybook-static/assets/{README-C-zsvSCD.js → README-BsZdSPmu.js} +1 -1
  172. package/storybook-static/assets/{README-CsTCd-vj.js → README-BsuQaM1w.js} +1 -1
  173. package/storybook-static/assets/{README-C_fUHsQw.js → README-BtB9H9nN.js} +1 -1
  174. package/storybook-static/assets/{README-DqHv-X-f.js → README-BxhHDiwn.js} +1 -1
  175. package/storybook-static/assets/{README-Ba4auffg.js → README-C2PTb-8t.js} +1 -1
  176. package/storybook-static/assets/{README-3nj5ZjT-.js → README-C63rWkBl.js} +1 -1
  177. package/storybook-static/assets/{README-LdXsc1_c.js → README-C6zxVMFm.js} +1 -1
  178. package/storybook-static/assets/{README-W8Y0fSSi.js → README-CBreaBmO.js} +1 -1
  179. package/storybook-static/assets/{README-Bl2x2rCX.js → README-CFweVjlA.js} +1 -1
  180. package/storybook-static/assets/{README-D2XiubS6.js → README-CQlYzU33.js} +1 -1
  181. package/storybook-static/assets/{README-CGBxF3Z7.js → README-CTGa35Ko.js} +1 -1
  182. package/storybook-static/assets/{README-DYxS18pN.js → README-CTjO8DPy.js} +1 -1
  183. package/storybook-static/assets/{README-CIuTBygY.js → README-CVJoPV0y.js} +1 -1
  184. package/storybook-static/assets/{README-DCgubmAF.js → README-CfyDEk1-.js} +1 -1
  185. package/storybook-static/assets/{README-CMTs_Hpt.js → README-Cy3qBWwg.js} +1 -1
  186. package/storybook-static/assets/{README-B1__Nx7V.js → README-CyKQxj4u.js} +1 -1
  187. package/storybook-static/assets/{README-CE26cRxP.js → README-CzKv1E7w.js} +1 -1
  188. package/storybook-static/assets/{README-DJQcAJjL.js → README-D-yCn4_H.js} +1 -1
  189. package/storybook-static/assets/{README-boVQURYW.js → README-D2gE2Ldm.js} +1 -1
  190. package/storybook-static/assets/{README-DYa8n17S.js → README-D5w1MRjv.js} +1 -1
  191. package/storybook-static/assets/{README-DuISxu8f.js → README-D6pLREG_.js} +1 -1
  192. package/storybook-static/assets/{README-Dkvel_UU.js → README-DA2Q8qus.js} +1 -1
  193. package/storybook-static/assets/{README-BfjV3TJk.js → README-DE0HxW6s.js} +1 -1
  194. package/storybook-static/assets/{README-DMQ4dKiA.js → README-DLep-Z9_.js} +1 -1
  195. package/storybook-static/assets/{README-BrlQN0-i.js → README-DMuWFEvU.js} +1 -1
  196. package/storybook-static/assets/{README-rUP6ltDu.js → README-DaIVdhSy.js} +1 -1
  197. package/storybook-static/assets/{README-BSY8XRTo.js → README-DmwyVlUw.js} +1 -1
  198. package/storybook-static/assets/{README-xHnhUUuE.js → README-DzksXkTj.js} +1 -1
  199. package/storybook-static/assets/{README-C-J5XAre.js → README-IapRnWcI.js} +1 -1
  200. package/storybook-static/assets/{README-DptEJMsQ.js → README-RmnKu3vw.js} +1 -1
  201. package/storybook-static/assets/{README-CMzg1GVU.js → README-WH-bEvJ2.js} +1 -1
  202. package/storybook-static/assets/{README-D0xLDxx4.js → README-WztnWpwt.js} +1 -1
  203. package/storybook-static/assets/{README-Cj5w9RCM.js → README-Xfa0qaGa.js} +1 -1
  204. package/storybook-static/assets/{README-aL1X_k6m.js → README-q8mu9DD1.js} +1 -1
  205. package/storybook-static/assets/{README-SMak3XqW.js → README-rCT7dLcC.js} +1 -1
  206. package/storybook-static/assets/{RadioButton-DThPBDKH.js → RadioButton-ZsulWLed.js} +1 -1
  207. package/storybook-static/assets/{RadioButton-sg3Qc43H.js → RadioButton-dnLpCCML.js} +1 -1
  208. package/storybook-static/assets/{RadioButton.stories-B8vNAiWo.js → RadioButton.stories-CKipwhZp.js} +1 -1
  209. package/storybook-static/assets/{RadioGroup-BnNsBAHC.js → RadioGroup-DEEYma_e.js} +1 -1
  210. package/storybook-static/assets/{RadioGroup-Dod-Rum7.js → RadioGroup-u13QVsxA.js} +1 -1
  211. package/storybook-static/assets/{RadioGroup.stories-DbHuJocr.js → RadioGroup.stories-DwwO3k93.js} +1 -1
  212. package/storybook-static/assets/{Scrollable-DlzwKB_f.js → Scrollable-CUhjICar.js} +1 -1
  213. package/storybook-static/assets/{Scrollable-C3wwtJYt.js → Scrollable-Dxjen-sM.js} +1 -1
  214. package/storybook-static/assets/{Scrollable.stories-CqToe3Wz.js → Scrollable.stories-Cjcgg_Bc.js} +1 -1
  215. package/storybook-static/assets/{Select-C6CKo9z5.js → Select-COV2S25J.js} +1 -1
  216. package/storybook-static/assets/{Select-COp-Hufh.js → Select-DXRE65Ab.js} +1 -1
  217. package/storybook-static/assets/{Select.stories-slSDLdpQ.js → Select.stories-BJiP7tQH.js} +1 -1
  218. package/storybook-static/assets/{Separator-DAjvzFln.js → Separator-Bro2wWAu.js} +1 -1
  219. package/storybook-static/assets/{Separator-D37ybDoT.js → Separator-C28fV2R8.js} +1 -1
  220. package/storybook-static/assets/{Separator.stories-CgdtiXY8.js → Separator.stories-CNqUFK4v.js} +1 -1
  221. package/storybook-static/assets/{SerializableSelect-BIoJj6y7.js → SerializableSelect-d-m2CyxF.js} +1 -1
  222. package/storybook-static/assets/{SerializableSelect.stories-DYs7cn1e.js → SerializableSelect.stories-C8qJHCIJ.js} +1 -1
  223. package/storybook-static/assets/{ShimmerText-BLC59p57.js → ShimmerText-DFlPCOpX.js} +1 -1
  224. package/storybook-static/assets/{ShimmerText.stories-DCKkp0PD.js → ShimmerText.stories-wu2MXfaC.js} +1 -1
  225. package/storybook-static/assets/{SingleDateTimeInput-DAw9B2z7.js → SingleDateTimeInput-BWOF4zyN.js} +1 -1
  226. package/storybook-static/assets/{SingleDateTimeInput-Dv0wWeWq.js → SingleDateTimeInput-Dcoe14K6.js} +1 -1
  227. package/storybook-static/assets/{SingleDateTimeInput.stories-CnzMn6i6.js → SingleDateTimeInput.stories-Ck0OwzWi.js} +1 -1
  228. package/storybook-static/assets/{Slider-kAsaMRyo.js → Slider-Dqr7gPar.js} +1 -1
  229. package/storybook-static/assets/{Slider-CSIK6Oe0.js → Slider-DrpDDQaE.js} +1 -1
  230. package/storybook-static/assets/{Slider.stories-ChgA6miE.js → Slider.stories-LKfnEkw4.js} +1 -1
  231. package/storybook-static/assets/{SliderInput-Mnb_AWWK.js → SliderInput-BqyHw-PE.js} +1 -1
  232. package/storybook-static/assets/{SliderInput-OWw9wKhZ.js → SliderInput-MDuEi7Va.js} +1 -1
  233. package/storybook-static/assets/{SliderInput.stories-CYRv3pyd.js → SliderInput.stories-DOwDFBuL.js} +1 -1
  234. package/storybook-static/assets/{Sortable-P9DfHPLD.js → Sortable-iwVfz_Pp.js} +1 -1
  235. package/storybook-static/assets/{Sortable.stories-BK52081-.js → Sortable.stories-B5Y6AaC5.js} +1 -1
  236. package/storybook-static/assets/{Splitter-DQSwPDkX.js → Splitter-ORF-Ncb1.js} +1 -1
  237. package/storybook-static/assets/{Splitter.stories-Bqi8chdP.js → Splitter.stories-DQmiJCOW.js} +1 -1
  238. package/storybook-static/assets/{StateSelect-yuNlUZZx.js → StateSelect-Bb-xFYJr.js} +1 -1
  239. package/storybook-static/assets/{StateSelect-ChMzjSz1.js → StateSelect-Z_2ucbVB.js} +1 -1
  240. package/storybook-static/assets/{StateSelect.stories-BoDpNA4u.js → StateSelect.stories-4BgCeVtO.js} +1 -1
  241. package/storybook-static/assets/{StatusIndicator-DhKUP8No.js → StatusIndicator-JOpyf0X8.js} +1 -1
  242. package/storybook-static/assets/{StatusIndicator.stories-D1h0DNTp.js → StatusIndicator.stories-D3skmWV0.js} +1 -1
  243. package/storybook-static/assets/{StringToggle.stories-CrtBXi71.js → StringToggle.stories-WRtPfnkA.js} +1 -1
  244. package/storybook-static/assets/{Switch-CfNQRi1_.js → Switch-Bi6ldbAc.js} +1 -1
  245. package/storybook-static/assets/{Switch-C614IuUT.js → Switch-Cml2InwJ.js} +1 -1
  246. package/storybook-static/assets/{Switch.stories-B7xnmaXl.js → Switch.stories-NXO81irA.js} +1 -1
  247. package/storybook-static/assets/{Table-FmUCC5Fw.js → Table-CzzWl6jB.js} +1 -1
  248. package/storybook-static/assets/{Table.stories-CxljW0Kk.js → Table.stories-B6fUlbDF.js} +1 -1
  249. package/storybook-static/assets/{TableEditor.stories-BsebTzw2.js → TableEditor.stories-0X9buuFB.js} +1 -1
  250. package/storybook-static/assets/{Tabs-BrCrA-0f.js → Tabs-Dc1vW6AD.js} +1 -1
  251. package/storybook-static/assets/{Tabs.stories-CruhwQeR.js → Tabs.stories-CBVMbChq.js} +1 -1
  252. package/storybook-static/assets/{TabsBox-CYE5SUf_.js → TabsBox-Dp_XwFIC.js} +1 -1
  253. package/storybook-static/assets/{TagInput-JxJYMhxS.js → TagInput-CjIacwww.js} +1 -1
  254. package/storybook-static/assets/{TagInput.stories-BMFFIJCT.js → TagInput.stories-DTgqndkw.js} +1 -1
  255. package/storybook-static/assets/{Text-CjvvAj_-.js → Text-BZ-hxc1d.js} +1 -1
  256. package/storybook-static/assets/{Textarea-Bq2CQNp7.js → Textarea-BBHME6fw.js} +1 -1
  257. package/storybook-static/assets/{Textarea-CT5NMjdE.js → Textarea-mfo7IAA2.js} +1 -1
  258. package/storybook-static/assets/{Textarea.stories-DUGB78GX.js → Textarea.stories-AiHRDIfK.js} +1 -1
  259. package/storybook-static/assets/{TimePanel-BlbN0WRz.js → TimePanel-CHRlMett.js} +1 -1
  260. package/storybook-static/assets/{TimePanel.stories-BEEvauJT.js → TimePanel.stories-ZfKuLFkK.js} +1 -1
  261. package/storybook-static/assets/{Toggle-DjQn1PLh.js → Toggle-DsZR39by.js} +1 -1
  262. package/storybook-static/assets/{Toggle-DDuzqQb3.js → Toggle-d2cXgZGn.js} +1 -1
  263. package/storybook-static/assets/{Toggle.stories-9pec1UoF.js → Toggle.stories-D-yiUzAX.js} +1 -1
  264. package/storybook-static/assets/TreeMultiSelect-DdJPRTnS.js +1 -0
  265. package/storybook-static/assets/{TreeMultiSelect-CZl4Ww_Z.js → TreeMultiSelect-dLo-KzWu.js} +1 -1
  266. package/storybook-static/assets/{TreeMultiSelect.stories-DgE7VwAi.js → TreeMultiSelect.stories-CBZ8dhJM.js} +1 -1
  267. package/storybook-static/assets/{TreePickerBase-SxMux0yx.js → TreePickerBase-CVgiS4iD.js} +1 -1
  268. package/storybook-static/assets/{TreeSelect-DyRUiqxR.js → TreeSelect-BKrsYQTN.js} +1 -1
  269. package/storybook-static/assets/{TreeSelect-D35PKmHd.js → TreeSelect-Dp52E_73.js} +1 -1
  270. package/storybook-static/assets/{TreeSelect.stories-BuO6bn5n.js → TreeSelect.stories-B1wm8Xba.js} +1 -1
  271. package/storybook-static/assets/{TreeTable-S0-gBFcw.js → TreeTable-CPpQ6e43.js} +1 -1
  272. package/storybook-static/assets/{TreeTable.stories-CZuyyJ5X.js → TreeTable.stories-DCDLySGX.js} +1 -1
  273. package/storybook-static/assets/{blocks-C8zNjnZ6.js → blocks-za-wOwFF.js} +3 -3
  274. package/storybook-static/assets/{check-DzdD29Lk.js → check-BnCTqaAz.js} +1 -1
  275. package/storybook-static/assets/{chevron-down-ExkE372q.js → chevron-down-Vq8KbCfI.js} +1 -1
  276. package/storybook-static/assets/{chevron-left-DzR36qoc.js → chevron-left-DWH9v-JE.js} +1 -1
  277. package/storybook-static/assets/{chevron-right-iCcjS-vt.js → chevron-right-GObYqCJe.js} +1 -1
  278. package/storybook-static/assets/{chunk-W22LQPXL-CjpdFwdq.js → chunk-W22LQPXL-DffsJI6Z.js} +1 -1
  279. package/storybook-static/assets/{circle-alert-CRm1wAp4.js → circle-alert-DHzv4KpY.js} +1 -1
  280. package/storybook-static/assets/{circle-check-mdwFCS14.js → circle-check-DKd35XtT.js} +1 -1
  281. package/storybook-static/assets/{components-Bvist1VI.js → components-Ds9xsAdN.js} +3 -3
  282. package/storybook-static/assets/{contextMenu-AvFz5_pV.js → contextMenu-DxOBp2Sj.js} +1 -1
  283. package/storybook-static/assets/{download-Bf1v6jB3.js → download-BmBq6Np5.js} +1 -1
  284. package/storybook-static/assets/{floating-ui.react-C58PtzHr.js → floating-ui.react-Rf5ZEhEh.js} +1 -1
  285. package/storybook-static/assets/formatMultiSelectOptionCount-xGq1uM2H.js +1 -0
  286. package/storybook-static/assets/{foundationApi-Cz3MY46R.js → foundationApi-C2D1ZAsU.js} +1 -1
  287. package/storybook-static/assets/{foundationLib-oavyFO2p.js → foundationLib-BFg_qpNI.js} +1 -1
  288. package/storybook-static/assets/{hooks-zmJPZDaN.js → hooks-CgazONpd.js} +1 -1
  289. package/storybook-static/assets/{iframe-DwDg20S-.js → iframe--CGTMt9T.js} +4 -4
  290. package/storybook-static/assets/iframe-brnPa2qH.js +1 -0
  291. package/storybook-static/assets/{info-DFqnKJt7.js → info-B6O6v4M3.js} +1 -1
  292. package/storybook-static/assets/{odata-DcP8j5KN.js → odata-BEDULcKk.js} +1 -1
  293. package/storybook-static/assets/{odataStoryFixtures-BPBQIYhY.js → odataStoryFixtures-DHVieZR4.js} +1 -1
  294. package/storybook-static/assets/{react-CDvFRnKJ.js → react-Cp6q3rBu.js} +1 -1
  295. package/storybook-static/assets/{refresh-cw-DjWLNN0a.js → refresh-cw-B7iOgoek.js} +1 -1
  296. package/storybook-static/assets/{settings-2-BeTxYg-T.js → settings-2-DT9oEwF5.js} +1 -1
  297. package/storybook-static/assets/{sortable-DkVOf9Di.js → sortable-Cp70acZd.js} +1 -1
  298. package/storybook-static/assets/{syntaxhighlighter-QEQV7K2Y-DKn1w2o_.js → syntaxhighlighter-QEQV7K2Y-BBBKSXp2.js} +1 -1
  299. package/storybook-static/assets/{trash-2-efuPXNK-.js → trash-2-Cj8Ikfyz.js} +1 -1
  300. package/storybook-static/assets/{triangle-alert-CKsLzHWI.js → triangle-alert-DFhuVxlv.js} +1 -1
  301. package/storybook-static/assets/{useODataSelectBase-BK0Oiuzg.js → useODataSelectBase-Bm1bPs1s.js} +1 -1
  302. package/storybook-static/assets/{useODataTreeData-B2zeGA0s.js → useODataTreeData-BPDg66yj.js} +1 -1
  303. package/storybook-static/assets/{usePickerQuery-D4_w_U3T.js → usePickerQuery-B55wi-Qp.js} +1 -1
  304. package/storybook-static/assets/{usePickerTriggerController-BHcv1fBN.js → usePickerTriggerController-Det5k_cM.js} +1 -1
  305. package/storybook-static/assets/{x-Dk10oNah.js → x-BZlxy_R9.js} +1 -1
  306. package/storybook-static/iframe.html +2 -2
  307. package/storybook-static/index.json +1 -1
  308. package/storybook-static/project.json +1 -1
  309. package/dist/chunks/defaultRenderers-u_Vep6Pj.js +0 -38
  310. package/dist/chunks/defaultRenderers-u_Vep6Pj.js.map +0 -1
  311. package/dist/multi-select/ui/defaultRenderers.d.ts +0 -17
  312. package/dist/multi-select/ui/defaultRenderers.d.ts.map +0 -1
  313. package/storybook-static/assets/MultiSelect-BMEWH0cT.js +0 -2
  314. package/storybook-static/assets/MultiSelect.stories-OKS85LQr.js +0 -55
  315. package/storybook-static/assets/TreeMultiSelect-C8DC5MfL.js +0 -1
  316. package/storybook-static/assets/defaultRenderers-UxEpV_2H.js +0 -1
  317. package/storybook-static/assets/iframe-CxDzv7o9.js +0 -1
  318. /package/storybook-static/assets/{MultiSelect-SJBp1Ymv.css → MultiSelectCore-SJBp1Ymv.css} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/multi-select/ui/MultiSelect.module.scss","../../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":["@use \"@/styles/mixins\" as *;\n\n.multiSelect {\n\t// Общий контейнер\n\tpadding: 0;\n}\n\n.optionCheckBox {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tflex-shrink: 0;\n\n\t--check-box-control-size: auto;\n\tpadding-left: var(--space-sm);\n}\n\n.optionActionCell {\n\tdisplay: flex;\n\talign-self: stretch;\n\tflex: 1 1 0;\n\tmin-width: 0;\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, { type PropsWithChildren, type Ref, useCallback, useMemo, useRef, useState } from \"react\";\n\nimport { CheckBox } from \"../../check-box\";\nimport { Option, OptionButton } from \"../../option\";\nimport {\n\tPickerField,\n\tPickerPopup,\n\tPickerStatus,\n\tPickerTrigger,\n\tusePickerDefaultFilter,\n\tusePickerFloatingListbox,\n\tusePickerQuery,\n\tusePickerSelectionLifecycle,\n\tusePickerTriggerController\n} from \"../../picker\";\nimport { Separator } from \"../../separator\";\nimport { type UiBaseProps } from \"../../types\";\n\nimport { createDefaultMultiSelectItemRenderer, createDefaultMultiSelectTokenRenderer, resolveMultiSelectTextKey } from \"./defaultRenderers\";\nimport styles from \"./MultiSelect.module.scss\";\nimport { MultiSelectOptionSkeleton } from \"./MultiSelectOptionSkeleton\";\n\nimport type { CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata-service\";\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\n/**\n * Структурированное содержимое опции множественного выбора. `MultiSelect` владеет\n * интерактивной оболочкой и checkbox-слотом, а renderer отвечает только за данные\n * текстовой части, поэтому единая композиция `OptionButton` сохраняется и для\n * произвольного ReactNode.\n */\nexport interface MultiSelectOptionContent {\n\ttext: string;\n\tcode: string | undefined;\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) => MultiSelectOptionContent;\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) => MultiSelectOptionContent;\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 itemKey = getItemKey(item, codeKey);\n\t\tconst selected = selectedKeys.has(itemKey);\n\t\tconst optionDisabled = getOptionDisabled?.(item) ?? false;\n\t\tconst content = renderItem(item, { selected, active, disabled: optionDisabled, query, highlightQuery });\n\n\t\treturn (\n\t\t\t<Option\n\t\t\t\tkey={`${itemKey}-${index}`}\n\t\t\t\tid={getOptionId(listId, index)}\n\t\t\t\tref={(node) => setOptionRef(index, node)}\n\t\t\t\trole=\"row\"\n\t\t\t\taria-selected={selected}\n\t\t\t\taria-disabled={optionDisabled || undefined}\n\t\t\t\tselected={selected}\n\t\t\t\tactive={active}\n\t\t\t\tdisabled={optionDisabled}>\n\t\t\t\t<div\n\t\t\t\t\trole=\"gridcell\"\n\t\t\t\t\tclassName={styles.optionCheckBox}\n\t\t\t\t\tonMouseDown={(event) => event.stopPropagation()}\n\t\t\t\t\tonClick={(event) => event.stopPropagation()}>\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\taria-label={`${selected ? \"Убрать\" : \"Добавить\"} «${content.text}» ${selected ? \"из выбора\" : \"в выбор\"}`}\n\t\t\t\t\t\tonChange={() => toggleOption(item)}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<div role=\"gridcell\" className={styles.optionActionCell}>\n\t\t\t\t\t<OptionButton\n\t\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\t\tdisabled={optionDisabled}\n\t\t\t\t\t\taria-label={`Выбрать только «${content.text}»`}\n\t\t\t\t\t\ttext={content.text}\n\t\t\t\t\t\tcode={content.code}\n\t\t\t\t\t\tsearchText={highlightQuery}\n\t\t\t\t\t\tonMouseDown={(event) => event.preventDefault()}\n\t\t\t\t\t\tonClick={() => selectOnlyOption(item)}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</Option>\n\t\t);\n\t});\n}\n\n/**\n * Поле множественного выбора с внутренним черновиком значений и подтверждением выбора при закрытии списка.\n * Подходит как для самостоятельного использования, так и как базовый слой для OData-оберток.\n */\nexport function MultiSelect({\n\tref,\n\tcodeKey,\n\ttextKey,\n\thideCode,\n\titems,\n\tvalue,\n\tonChange,\n\tlabel,\n\tdescription,\n\tplaceholder,\n\tsize,\n\tquery,\n\tdefaultQuery,\n\thighlightQuery,\n\tonQuery,\n\tdefaultFilter = true,\n\tonOpen,\n\tonClose,\n\tgetOptionDisabled,\n\tdisabled,\n\terror,\n\tisLoading,\n\trenderToken,\n\trenderToolbar,\n\trenderItem\n}: MultiSelectProps & { ref?: Ref<HTMLInputElement> }) {\n\tconst inputRef = useRef<HTMLInputElement | null>(null);\n\tconst [open, setOpen] = useState(false);\n\tconst triggerMode = \"search-multi\";\n\tconst committedSelectedItems = value ?? fallback;\n\tconst committedSelectedKeys = useMemo(\n\t\t() => new Set(committedSelectedItems.map((item) => getItemKey(item, codeKey))),\n\t\t[codeKey, committedSelectedItems]\n\t);\n\tconst availableItems = useMemo(\n\t\t() => items.filter((item) => !committedSelectedKeys.has(getItemKey(item, codeKey))),\n\t\t[codeKey, committedSelectedKeys, items]\n\t);\n\tconst resolvedTextKey = useMemo(\n\t\t() => resolveMultiSelectTextKey([...committedSelectedItems, ...items], codeKey, textKey),\n\t\t[codeKey, committedSelectedItems, items, textKey]\n\t);\n\tconst {\n\t\tquery: currentQuery,\n\t\tsetQuery,\n\t\tresetQueryOnClose\n\t} = usePickerQuery({\n\t\tquery,\n\t\tdefaultQuery,\n\t\tonQuery,\n\t\ttriggerMode\n\t});\n\tconst handleOpenChange = (nextOpen: boolean) => {\n\t\tif (open && !nextOpen && resetQueryOnClose) {\n\t\t\tsetQuery(\"\");\n\t\t}\n\n\t\tsetOpen(nextOpen);\n\t};\n\tconst filteredCommittedSelectedItems = usePickerDefaultFilter({\n\t\toptions: committedSelectedItems,\n\t\tquery: currentQuery,\n\t\tenabled: defaultFilter,\n\t\tgetSearchText: (item) => getItemSearchParts(item, codeKey, resolvedTextKey)\n\t});\n\tconst filteredAvailableItems = usePickerDefaultFilter({\n\t\toptions: availableItems,\n\t\tquery: currentQuery,\n\t\tenabled: defaultFilter,\n\t\tgetSearchText: (item) => getItemSearchParts(item, codeKey, resolvedTextKey)\n\t});\n\tconst visibleOptions = useMemo(\n\t\t() => [...filteredCommittedSelectedItems, ...filteredAvailableItems],\n\t\t[filteredAvailableItems, filteredCommittedSelectedItems]\n\t);\n\tconst selectedIndex = filteredCommittedSelectedItems.length > 0 ? 0 : -1;\n\tconst {\n\t\tdraftValue: draftSelectedItems,\n\t\tsetDraftValue: setDraftSelectedItems,\n\t\tprepareOpen\n\t} = usePickerSelectionLifecycle({\n\t\tvalue: committedSelectedItems,\n\t\topen,\n\t\tonCommit: onChange,\n\t\tonOpen,\n\t\tonClose,\n\t\tisEqual: (left, right) => areSelectionsEqual(left, right, codeKey)\n\t});\n\tconst selectedKeys = useMemo(() => new Set(draftSelectedItems.map((item) => getItemKey(item, codeKey))), [codeKey, draftSelectedItems]);\n\tconst optionDisableContext = useMemo<MultiSelectOptionDisableContext>(\n\t\t() => ({\n\t\t\tselectedItems: draftSelectedItems,\n\t\t\tcommittedSelectedItems,\n\t\t\tselectedKeys,\n\t\t\topen\n\t\t}),\n\t\t[committedSelectedItems, draftSelectedItems, open, selectedKeys]\n\t);\n\tconst isOptionDisabled = useCallback(\n\t\t(item: CollectionItem) => getOptionDisabled?.(item, optionDisableContext) ?? false,\n\t\t[getOptionDisabled, optionDisableContext]\n\t);\n\tconst {\n\t\tactiveIndex,\n\t\tcontext,\n\t\tfloatingStyles,\n\t\tgetFloatingProps,\n\t\tsetReference,\n\t\tsetFloating,\n\t\tsetOptionRef,\n\t\tclose,\n\t\topenList,\n\t\ttoggleOpen,\n\t\thandleReferenceKeyDown,\n\t\thandleFloatingKeyDown,\n\t\tgetOptionId,\n\t\tgetActiveOptionId\n\t} = usePickerFloatingListbox({\n\t\toptions: visibleOptions,\n\t\tselectedIndex,\n\t\topen,\n\t\tonOpenChange: handleOpenChange,\n\t\tonSelect: undefined,\n\t\tdisabled,\n\t\tgetOptionDisabled: isOptionDisabled,\n\t\tcloseOnSelect: false,\n\t\tallowOpenWithoutOptions: true,\n\t\ttriggerMode\n\t});\n\n\tconst currentHighlightQuery = highlightQuery ?? currentQuery;\n\tconst toggleDraftSelection = (item: CollectionItem) => {\n\t\tconst itemKey = getItemKey(item, codeKey);\n\n\t\tsetDraftSelectedItems((currentItems) => {\n\t\t\tconst isSelected = currentItems.some((selectedItem) => getItemKey(selectedItem, codeKey) === itemKey);\n\n\t\t\tif (isSelected) {\n\t\t\t\treturn currentItems.filter((selectedItem) => getItemKey(selectedItem, codeKey) !== itemKey);\n\t\t\t}\n\n\t\t\tif (isOptionDisabled(item)) {\n\t\t\t\treturn currentItems;\n\t\t\t}\n\n\t\t\treturn [...currentItems, item];\n\t\t});\n\t};\n\n\tconst setInputNode = (node: HTMLInputElement | null) => {\n\t\tinputRef.current = node;\n\n\t\tif (typeof ref === \"function\") {\n\t\t\tref(node);\n\t\t\treturn;\n\t\t}\n\n\t\tif (ref) {\n\t\t\tref.current = node;\n\t\t}\n\t};\n\n\tconst clearSelection = () => {\n\t\tsetDraftSelectedItems([]);\n\n\t\tif (!open) {\n\t\t\tonChange([]);\n\t\t}\n\t};\n\n\tconst selectAll = () => {\n\t\tsetDraftSelectedItems((currentItems) => {\n\t\t\tconst nextItems = [...currentItems];\n\t\t\tconst selectedKeys = new Set(currentItems.map((item) => getItemKey(item, codeKey)));\n\n\t\t\tfor (const item of visibleOptions) {\n\t\t\t\tconst itemKey = getItemKey(item, codeKey);\n\n\t\t\t\tif (!selectedKeys.has(itemKey) && !isOptionDisabled(item)) {\n\t\t\t\t\tselectedKeys.add(itemKey);\n\t\t\t\t\tnextItems.push(item);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn nextItems;\n\t\t});\n\t};\n\n\tconst deselectAll = () => {\n\t\tsetDraftSelectedItems([]);\n\t};\n\n\tconst selectOnlyOption = (item: CollectionItem) => {\n\t\tif (isOptionDisabled(item)) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetDraftSelectedItems([item]);\n\t\tclose();\n\t};\n\n\tconst currentSelectedItems = open ? draftSelectedItems : committedSelectedItems;\n\tconst hasSelectedItems = currentSelectedItems.length > 0;\n\tconst renderContext: MultiSelectRenderContext = {\n\t\tselectedItems: currentSelectedItems,\n\t\tcommittedSelectedItems,\n\t\tavailableItems: filteredAvailableItems,\n\t\tquery: currentQuery,\n\t\topen,\n\t\tclearSelection,\n\t\tselectAll,\n\t\tdeselectAll\n\t};\n\tconst tokenRenderer =\n\t\trenderToken === undefined ? createDefaultMultiSelectTokenRenderer({ codeKey, textKey: resolvedTextKey }) : renderToken;\n\tconst itemRenderer =\n\t\trenderItem ??\n\t\tcreateDefaultMultiSelectItemRenderer({\n\t\t\tcodeKey,\n\t\t\ttextKey: resolvedTextKey,\n\t\t\thideCode\n\t\t});\n\tconst tokenNode = typeof tokenRenderer === \"function\" ? tokenRenderer(renderContext) : null;\n\tconst toolbarNode = typeof renderToolbar === \"function\" ? renderToolbar(renderContext) : renderToolbar;\n\tconst selectedEntries = filteredCommittedSelectedItems.map((item, index) => ({ item, index }));\n\tconst itemEntries = filteredAvailableItems.map((item, index) => ({ item, index: index + selectedEntries.length }));\n\tconst isNoData = !isLoading && !error && visibleOptions.length === 0;\n\tconst triggerController = usePickerTriggerController({\n\t\tmode: triggerMode,\n\t\topen,\n\t\tcurrentQuery,\n\t\thasDisplayValue: false,\n\t\tinputRef,\n\t\tsetQuery,\n\t\topenList,\n\t\tclose,\n\t\ttoggleOpen,\n\t\tonBeforeOpen: () => {\n\t\t\tif (!open) {\n\t\t\t\tprepareOpen();\n\t\t\t}\n\t\t}\n\t});\n\n\treturn (\n\t\t<PickerField label={label} description={description} disabled={disabled} size={size} className={styles.multiSelect}>\n\t\t\t{({ controlId, labelId, describedBy }) => {\n\t\t\t\tconst listId = `${controlId}-grid`;\n\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<PickerTrigger\n\t\t\t\t\t\t\tref={setInputNode}\n\t\t\t\t\t\t\trootRef={setReference}\n\t\t\t\t\t\t\tid={controlId}\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\topen={open}\n\t\t\t\t\t\t\toptionCount={items.length}\n\t\t\t\t\t\t\tlabel={label}\n\t\t\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t\t\tplaceholderFallback=\"Выберите значения\"\n\t\t\t\t\t\t\tvalue={currentQuery}\n\t\t\t\t\t\t\tselectedValue={tokenNode}\n\t\t\t\t\t\t\thasSelection={hasSelectedItems}\n\t\t\t\t\t\t\tshowSelectedValue={hasSelectedItems && currentQuery.length === 0}\n\t\t\t\t\t\t\tclearable\n\t\t\t\t\t\t\tonClear={clearSelection}\n\t\t\t\t\t\t\tclearAriaLabel=\"Очистить все\"\n\t\t\t\t\t\t\tonToggleMouseDown={triggerController.handleToggleMouseDown}\n\t\t\t\t\t\t\tonToggleClick={triggerController.handleToggleClick}\n\t\t\t\t\t\t\taria-labelledby={labelId}\n\t\t\t\t\t\t\taria-describedby={describedBy}\n\t\t\t\t\t\t\taria-haspopup=\"grid\"\n\t\t\t\t\t\t\taria-expanded={open}\n\t\t\t\t\t\t\taria-controls={open ? listId : undefined}\n\t\t\t\t\t\t\taria-autocomplete=\"list\"\n\t\t\t\t\t\t\taria-activedescendant={open ? getActiveOptionId(listId) : undefined}\n\t\t\t\t\t\t\trootClassName=\"flex alignItemsCenter\"\n\t\t\t\t\t\t\tonChange={(event) => {\n\t\t\t\t\t\t\t\ttriggerController.handleTriggerInputChange(event.target.value);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonClick={triggerController.handleTriggerClick}\n\t\t\t\t\t\t\tonFocus={(event) => {\n\t\t\t\t\t\t\t\ttriggerController.handleTriggerFocus(event.currentTarget);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonKeyDown={(event) => {\n\t\t\t\t\t\t\t\thandleReferenceKeyDown(event);\n\n\t\t\t\t\t\t\t\tif (event.defaultPrevented) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (open && event.ctrlKey && event.key === \" \") {\n\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\tconst activeItem = visibleOptions[activeIndex];\n\t\t\t\t\t\t\t\t\tif (activeItem) {\n\t\t\t\t\t\t\t\t\t\ttoggleDraftSelection(activeItem);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ttriggerController.handleTriggerKeyDown({\n\t\t\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t\t\tonActivateWhenOpen: () => {\n\t\t\t\t\t\t\t\t\t\tconst activeItem = visibleOptions[activeIndex];\n\t\t\t\t\t\t\t\t\t\tif (activeItem) {\n\t\t\t\t\t\t\t\t\t\t\tselectOnlyOption(activeItem);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tenableClosedArrowDownOpen: true,\n\t\t\t\t\t\t\t\t\tsuppressClosedArrowUp: true\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<PickerPopup\n\t\t\t\t\t\t\topen={open}\n\t\t\t\t\t\t\tcontext={context}\n\t\t\t\t\t\t\tfloatingStyles={floatingStyles}\n\t\t\t\t\t\t\tlistId={listId}\n\t\t\t\t\t\t\tlabelId={labelId}\n\t\t\t\t\t\t\tdescriptionId={describedBy}\n\t\t\t\t\t\t\tactiveOptionId={open ? getActiveOptionId(listId) : undefined}\n\t\t\t\t\t\t\tariaMultiselectable\n\t\t\t\t\t\t\tpopupRole=\"grid\"\n\t\t\t\t\t\t\tsetFloating={setFloating}\n\t\t\t\t\t\t\tgetFloatingProps={getFloatingProps}\n\t\t\t\t\t\t\tonKeyDown={handleFloatingKeyDown}\n\t\t\t\t\t\t\tinitialFocus={-1}\n\t\t\t\t\t\t\treturnFocus={false}\n\t\t\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\t\t\ttoolbar={toolbarNode}\n\t\t\t\t\t\t\tselectionActions={\n\t\t\t\t\t\t\t\trenderToolbar === undefined ? { onSelectAll: selectAll, onDeselectAll: deselectAll } : undefined\n\t\t\t\t\t\t\t}>\n\t\t\t\t\t\t\t<MultiSelectOptionsWrapper isNoData={isNoData} error={error}>\n\t\t\t\t\t\t\t\t<div role=\"presentation\" className=\"scrollable overscroll h100\">\n\t\t\t\t\t\t\t\t\t<MultiSelectOptionGroup\n\t\t\t\t\t\t\t\t\t\tentries={selectedEntries}\n\t\t\t\t\t\t\t\t\t\tlistId={listId}\n\t\t\t\t\t\t\t\t\t\tactiveIndex={activeIndex}\n\t\t\t\t\t\t\t\t\t\tselectedKeys={selectedKeys}\n\t\t\t\t\t\t\t\t\t\tcodeKey={codeKey}\n\t\t\t\t\t\t\t\t\t\tquery={currentQuery}\n\t\t\t\t\t\t\t\t\t\thighlightQuery={currentHighlightQuery}\n\t\t\t\t\t\t\t\t\t\tgetOptionDisabled={isOptionDisabled}\n\t\t\t\t\t\t\t\t\t\tgetOptionId={getOptionId}\n\t\t\t\t\t\t\t\t\t\tsetOptionRef={setOptionRef}\n\t\t\t\t\t\t\t\t\t\ttoggleOption={toggleDraftSelection}\n\t\t\t\t\t\t\t\t\t\tselectOnlyOption={selectOnlyOption}\n\t\t\t\t\t\t\t\t\t\trenderItem={itemRenderer}\n\t\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t\t{selectedEntries.length > 0 && availableItems.length > 0 && (\n\t\t\t\t\t\t\t\t\t\t<Separator aria-hidden=\"true\" className=\"marginBlockSm\" />\n\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t<MultiSelectOptionGroup\n\t\t\t\t\t\t\t\t\t\tentries={itemEntries}\n\t\t\t\t\t\t\t\t\t\tlistId={listId}\n\t\t\t\t\t\t\t\t\t\tactiveIndex={activeIndex}\n\t\t\t\t\t\t\t\t\t\tselectedKeys={selectedKeys}\n\t\t\t\t\t\t\t\t\t\tcodeKey={codeKey}\n\t\t\t\t\t\t\t\t\t\tquery={currentQuery}\n\t\t\t\t\t\t\t\t\t\thighlightQuery={currentHighlightQuery}\n\t\t\t\t\t\t\t\t\t\tgetOptionDisabled={isOptionDisabled}\n\t\t\t\t\t\t\t\t\t\tgetOptionId={getOptionId}\n\t\t\t\t\t\t\t\t\t\tsetOptionRef={setOptionRef}\n\t\t\t\t\t\t\t\t\t\ttoggleOption={toggleDraftSelection}\n\t\t\t\t\t\t\t\t\t\tselectOnlyOption={selectOnlyOption}\n\t\t\t\t\t\t\t\t\t\trenderItem={itemRenderer}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</MultiSelectOptionsWrapper>\n\t\t\t\t\t\t</PickerPopup>\n\t\t\t\t\t</>\n\t\t\t\t);\n\t\t\t}}\n\t\t</PickerField>\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-service\";\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 { 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 function ODataMultiSelect({\n\todata,\n\tsegment,\n\tmodel: initialModel,\n\tlabel,\n\tdescription,\n\tdisabled,\n\tvalue,\n\tdependencies,\n\tonChange,\n\tsize\n}: ODataMultiSelectProps) {\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 } from \"react\";\n\nimport { useODataDependentSelection } from \"../../odata-dependent\";\n\nimport { ODataMultiSelect } from \"./ODataMultiSelect\";\n\nimport type { ODataDependentSegmentControlProps } from \"../../odata-dependent\";\n\nexport type ODataDependentSegmentMultiSelectProps = ODataDependentSegmentControlProps;\n\nexport function ODataDependentSegmentMultiSelect(props: ODataDependentSegmentMultiSelectProps) {\n\tconst { item, disabled, label, description, size, width = 15 } = props;\n\tconst selection = useODataDependentSelection(props);\n\tconst { updateSegment } = selection;\n\tconst widthStyle = `calc(${width}em + var(--width-add))`;\n\n\tconst handleSelectionChange = useCallback(\n\t\t(keys: string[]) => {\n\t\t\tupdateSegment(item.id, keys);\n\t\t},\n\t\t[item.id, updateSegment]\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={selection.values}\n\t\t\t\tvalue={selection.values[item.id]}\n\t\t\t\tonChange={handleSelectionChange}\n\t\t\t\tdisabled={disabled || selection.isSegmentDisabled(item.id)}\n\t\t\t\tlabel={label}\n\t\t\t\tdescription={description}\n\t\t\t\tsize={size}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n","import { flattenODataDependentServices, type ODataDependentBaseProps } from \"@ryuzaki13/react-foundation-api/odata\";\n\nimport { useODataDependentSelection } from \"../../odata-dependent\";\n\nimport { ODataDependentSegmentMultiSelect } from \"./ODataDependentSegmentMultiSelect\";\n\nimport type { UseODataDependentSelectionOptions } from \"../../odata-dependent\";\n\nexport type ODataDependentMultiSelectProps = Omit<ODataDependentBaseProps, \"dependencies\" | \"value\"> &\n\tUseODataDependentSelectionOptions & {\n\t\t/**\n\t\t * Ширина одного элемента в `em` единицах.\n\t\t *\n\t\t * @default 15\n\t\t */\n\t\twidth?: number;\n\t};\n\nexport function ODataDependentMultiSelect(props: ODataDependentMultiSelectProps) {\n\tconst { width = 15, odata, segments, model, values, defaultValues, onChange, selectionMode, segmentOrder } = props;\n\tconst selection = useODataDependentSelection({ values, defaultValues, onChange });\n\tconst segmentSelectionProps =\n\t\tselectionMode === \"sequential\" ? { selectionMode: \"sequential\" as const, segmentOrder } : { selectionMode, segmentOrder };\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={selection.values}\n\t\t\tonChange={selection.updateValues}\n\t\t\t{...segmentSelectionProps}\n\t\t\twidth={width}\n\t\t/>\n\t));\n}\n","import { MultiSelect } from \"./MultiSelect\";\n\nimport type { CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata-service\";\nimport type { UiBaseProps } from \"../../types\";\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
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/multi-select/lib/materializeMultiSelectOptions.ts","../../src/multi-select/lib/adaptLegacyMultiSelectContext.ts","../../src/multi-select/lib/resolveLegacyMultiSelectTextKey.ts","../../src/multi-select/lib/multiSelectSelection.ts","../../src/multi-select/ui/MultiSelect.module.scss","../../src/multi-select/lib/createMultiSelectOptionSections.ts","../../src/multi-select/ui/MultiSelectOptionRow.tsx","../../src/multi-select/ui/MultiSelectOptionList.tsx","../../src/multi-select/ui/MultiSelectOptionSkeleton.tsx","../../src/multi-select/ui/MultiSelectOptionsWrapper.tsx","../../src/multi-select/ui/MultiSelectCore.tsx","../../src/multi-select/ui/DeprecatedMultiSelect.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":["/**\n * Создаёт mutable-снимок readonly options. Сохранение ссылки включается только\n * legacy-адаптером, чей опубликованный callback-контракт исторически mutable.\n */\nexport function materializeMultiSelectOptions<TOption>(options: readonly TOption[], preserveArrayReference = false): TOption[] {\n\tif (preserveArrayReference && Array.isArray(options)) {\n\t\treturn options;\n\t}\n\n\treturn [...options];\n}\n","import { type CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata-service\";\n\nimport { type DeprecatedMultiSelectOptionDisableContext, type DeprecatedMultiSelectRenderContext } from \"../ui/legacyMultiSelectTypes\";\nimport {\n\ttype MultiSelectOptionDisableContext,\n\ttype MultiSelectRenderContext as GenericMultiSelectRenderContext\n} from \"../ui/multiSelectTypes\";\n\nimport { materializeMultiSelectOptions } from \"./materializeMultiSelectOptions\";\n\n/** Преобразует generic render-context в опубликованный legacy-контракт. */\nexport function adaptLegacyMultiSelectRenderContext(\n\tcontext: GenericMultiSelectRenderContext<CollectionItem>\n): DeprecatedMultiSelectRenderContext {\n\treturn {\n\t\tselectedItems: materializeMultiSelectOptions(context.selectedOptions, true),\n\t\tcommittedSelectedItems: materializeMultiSelectOptions(context.committedSelectedOptions, true),\n\t\tavailableItems: materializeMultiSelectOptions(context.availableOptions, true),\n\t\tquery: context.query,\n\t\topen: context.open,\n\t\tclearSelection: context.clearSelection,\n\t\tselectAll: context.selectAll,\n\t\tdeselectAll: context.deselectAll\n\t};\n}\n\n/** Преобразует generic disable-context без изменения identity выбранных элементов. */\nexport function adaptLegacyMultiSelectOptionDisableContext(\n\tcontext: MultiSelectOptionDisableContext<CollectionItem>\n): DeprecatedMultiSelectOptionDisableContext {\n\treturn {\n\t\tselectedItems: materializeMultiSelectOptions(context.selectedOptions, true),\n\t\tcommittedSelectedItems: materializeMultiSelectOptions(context.committedSelectedOptions, true),\n\t\tselectedKeys: context.selectedKeys,\n\t\topen: context.open\n\t};\n}\n","import { type CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata-service\";\n\n/** Сохраняет исходное правило вывода textKey для legacy code/text API. */\nexport function resolveLegacyMultiSelectTextKey(items: readonly 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","import { type MultiSelectOptionKey } from \"../ui/multiSelectTypes\";\n\n/** Сравнивает наборы выбора по identity опций, не связывая их с object reference. */\nexport function areMultiSelectSelectionsEqual<TOption>(\n\tleft: readonly TOption[],\n\tright: readonly TOption[],\n\tgetOptionKey: (option: TOption) => MultiSelectOptionKey\n): boolean {\n\tif (left.length !== right.length) {\n\t\treturn false;\n\t}\n\n\tconst rightKeys = new Set(right.map(getOptionKey));\n\n\treturn left.every((option) => rightKeys.has(getOptionKey(option)));\n}\n","@use \"@/styles/mixins\" as *;\n\n.multiSelect {\n\t// Общий контейнер\n\tpadding: 0;\n}\n\n.optionCheckBox {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tflex-shrink: 0;\n\n\t--check-box-control-size: auto;\n\tpadding-left: var(--space-sm);\n}\n\n.optionActionCell {\n\tdisplay: flex;\n\talign-self: stretch;\n\tflex: 1 1 0;\n\tmin-width: 0;\n}\n","import { type MultiSelectOptionGroup } from \"../ui/multiSelectTypes\";\n\nexport type MultiSelectOptionEntry<TOption> = Readonly<{\n\toption: TOption;\n\tindex: number;\n}>;\n\nexport type MultiSelectOptionSection<TOption> = Readonly<{\n\tgroup: MultiSelectOptionGroup | undefined;\n\tentries: readonly MultiSelectOptionEntry<TOption>[];\n}>;\n\n/**\n * Группирует только соседние опции и сохраняет их глобальные индексы. Благодаря\n * этому визуальные заголовки не попадают в active-index клавиатурной навигации.\n */\nexport function createMultiSelectOptionSections<TOption>(\n\tentries: readonly MultiSelectOptionEntry<TOption>[],\n\tgetOptionGroup: (option: TOption) => MultiSelectOptionGroup | undefined\n): readonly MultiSelectOptionSection<TOption>[] {\n\tconst sections: Array<{\n\t\tgroup: MultiSelectOptionGroup | undefined;\n\t\tentries: MultiSelectOptionEntry<TOption>[];\n\t}> = [];\n\n\tfor (const entry of entries) {\n\t\tconst group = getOptionGroup(entry.option);\n\t\tconst currentSection = sections.at(-1);\n\t\tconst belongsToCurrentSection = currentSection?.group?.key === group?.key;\n\n\t\tif (currentSection && belongsToCurrentSection) {\n\t\t\tcurrentSection.entries.push(entry);\n\t\t\tcontinue;\n\t\t}\n\n\t\tsections.push({ group, entries: [entry] });\n\t}\n\n\treturn sections;\n}\n","import { CheckBox } from \"../../check-box\";\nimport { Option, OptionButton } from \"../../option\";\n\nimport styles from \"./MultiSelect.module.scss\";\nimport { type MultiSelectOptionContent, type MultiSelectOptionKey, type MultiSelectOptionState } from \"./multiSelectTypes\";\n\ntype MultiSelectOptionRowProps<TOption> = Readonly<{\n\toption: TOption;\n\tindex: number;\n\tlistId: string;\n\tactiveIndex: number;\n\tselectedKeys: ReadonlySet<MultiSelectOptionKey>;\n\tquery: string;\n\thighlightQuery: string;\n\tgetOptionKey: (option: TOption) => MultiSelectOptionKey;\n\tgetOptionDisabled?: (option: TOption) => boolean;\n\tgetOptionId: (listId: string, index: number) => string;\n\tsetOptionRef: (index: number, node: HTMLElement | null) => void;\n\ttoggleOption: (option: TOption) => void;\n\tselectOnlyOption: (option: TOption) => void;\n\trenderOption: (option: TOption, state: MultiSelectOptionState) => MultiSelectOptionContent;\n}>;\n\n/** Одна интерактивная строка grid: checkbox меняет draft, основная кнопка подтверждает только эту опцию. */\nexport function MultiSelectOptionRow<TOption>({\n\toption,\n\tindex,\n\tlistId,\n\tactiveIndex,\n\tselectedKeys,\n\tquery,\n\thighlightQuery,\n\tgetOptionKey,\n\tgetOptionDisabled,\n\tgetOptionId,\n\tsetOptionRef,\n\ttoggleOption,\n\tselectOnlyOption,\n\trenderOption\n}: MultiSelectOptionRowProps<TOption>) {\n\tconst active = index === activeIndex;\n\tconst optionKey = getOptionKey(option);\n\tconst selected = selectedKeys.has(optionKey);\n\tconst optionDisabled = getOptionDisabled?.(option) ?? false;\n\tconst content = renderOption(option, { selected, active, disabled: optionDisabled, query, highlightQuery });\n\n\treturn (\n\t\t<Option\n\t\t\tid={getOptionId(listId, index)}\n\t\t\tref={(node) => setOptionRef(index, node)}\n\t\t\trole=\"row\"\n\t\t\taria-selected={selected}\n\t\t\taria-disabled={optionDisabled || undefined}\n\t\t\tselected={selected}\n\t\t\tactive={active}\n\t\t\tdisabled={optionDisabled}>\n\t\t\t<div\n\t\t\t\trole=\"gridcell\"\n\t\t\t\tclassName={styles.optionCheckBox}\n\t\t\t\tonMouseDown={(event) => event.stopPropagation()}\n\t\t\t\tonClick={(event) => event.stopPropagation()}>\n\t\t\t\t<CheckBox\n\t\t\t\t\tvalue={selected}\n\t\t\t\t\tdisabled={optionDisabled}\n\t\t\t\t\taria-label={`${selected ? \"Убрать\" : \"Добавить\"} «${content.text}» ${selected ? \"из выбора\" : \"в выбор\"}`}\n\t\t\t\t\tonChange={() => toggleOption(option)}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div role=\"gridcell\" className={styles.optionActionCell}>\n\t\t\t\t<OptionButton\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\tdisabled={optionDisabled}\n\t\t\t\t\taria-label={`Выбрать только «${content.text}»`}\n\t\t\t\t\ttext={content.text}\n\t\t\t\t\tcode={content.code}\n\t\t\t\t\tsearchText={highlightQuery}\n\t\t\t\t\tonMouseDown={(event) => event.preventDefault()}\n\t\t\t\t\tonClick={() => selectOnlyOption(option)}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</Option>\n\t);\n}\n","import { Fragment } from \"react\";\n\nimport uiStyles from \"../../ui.module.scss\";\nimport { createMultiSelectOptionSections, type MultiSelectOptionEntry } from \"../lib/createMultiSelectOptionSections\";\n\nimport { MultiSelectOptionRow } from \"./MultiSelectOptionRow\";\nimport {\n\ttype MultiSelectOptionContent,\n\ttype MultiSelectOptionGroup,\n\ttype MultiSelectOptionKey,\n\ttype MultiSelectOptionState\n} from \"./multiSelectTypes\";\n\ntype MultiSelectOptionListProps<TOption> = Readonly<{\n\tentries: readonly MultiSelectOptionEntry<TOption>[];\n\tsectionId: string;\n\tlistId: string;\n\tactiveIndex: number;\n\tselectedKeys: ReadonlySet<MultiSelectOptionKey>;\n\tquery: string;\n\thighlightQuery: string;\n\tgetOptionKey: (option: TOption) => MultiSelectOptionKey;\n\tgetOptionGroup?: (option: TOption) => MultiSelectOptionGroup | undefined;\n\tgetOptionDisabled?: (option: TOption) => boolean;\n\tgetOptionId: (listId: string, index: number) => string;\n\tsetOptionRef: (index: number, node: HTMLElement | null) => void;\n\ttoggleOption: (option: TOption) => void;\n\tselectOnlyOption: (option: TOption) => void;\n\trenderOption: (option: TOption, state: MultiSelectOptionState) => MultiSelectOptionContent;\n}>;\n\n/** Рендерит одну selected/available-секцию, сохраняя global option indexes при группировке. */\nexport function MultiSelectOptionList<TOption>({ entries, sectionId, getOptionGroup, ...rowProps }: MultiSelectOptionListProps<TOption>) {\n\tconst sections = getOptionGroup ? createMultiSelectOptionSections(entries, getOptionGroup) : [{ group: undefined, entries }];\n\n\treturn sections.map((section, sectionIndex) => {\n\t\tconst rows = section.entries.map(({ option, index }) => (\n\t\t\t<MultiSelectOptionRow key={`${rowProps.getOptionKey(option)}-${index}`} option={option} index={index} {...rowProps} />\n\t\t));\n\n\t\tif (!section.group) {\n\t\t\treturn <Fragment key={`${sectionId}-ungrouped-${sectionIndex}`}>{rows}</Fragment>;\n\t\t}\n\n\t\tconst groupLabelId = `${sectionId}-group-${sectionIndex}`;\n\n\t\treturn (\n\t\t\t<div key={`${sectionId}-${section.group.key}-${sectionIndex}`} role=\"rowgroup\" aria-labelledby={groupLabelId}>\n\t\t\t\t<div id={groupLabelId} role=\"row\" className={uiStyles.uiPopupGroupLabel}>\n\t\t\t\t\t<div role=\"gridcell\">{section.group.label}</div>\n\t\t\t\t</div>\n\t\t\t\t{rows}\n\t\t\t</div>\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 { type PropsWithChildren } from \"react\";\n\nimport { PickerStatus } from \"../../picker\";\n\nimport { MultiSelectOptionSkeleton } from \"./MultiSelectOptionSkeleton\";\n\ntype MultiSelectOptionsWrapperProps = PropsWithChildren<{\n\tisNoData?: boolean;\n\terror?: string;\n}>;\n\n/** Выбирает одно доступное состояние тела popup, не меняя структуру самого grid. */\nexport function MultiSelectOptionsWrapper({ isNoData, error, children }: MultiSelectOptionsWrapperProps) {\n\tif (isNoData) {\n\t\treturn <PickerStatus emptyState={<MultiSelectOptionSkeleton text=\"Нет данных\" />} />;\n\t}\n\n\tif (error) {\n\t\treturn <PickerStatus errorState={<MultiSelectOptionSkeleton isError text=\"Ошибка загрузки\" />} />;\n\t}\n\n\treturn <>{children}</>;\n}\n","import { useCallback, useMemo, useRef, useState } from \"react\";\n\nimport {\n\textractPickerTextContent,\n\tPickerField,\n\tPickerPopup,\n\tPickerTrigger,\n\tusePickerDefaultFilter,\n\tusePickerFloatingListbox,\n\tusePickerQuery,\n\tusePickerSelectionLifecycle,\n\tusePickerTriggerController\n} from \"../../picker\";\nimport { Separator } from \"../../separator\";\nimport { formatMultiSelectOptionCount } from \"../lib/formatMultiSelectOptionCount\";\nimport { materializeMultiSelectOptions } from \"../lib/materializeMultiSelectOptions\";\nimport { areMultiSelectSelectionsEqual } from \"../lib/multiSelectSelection\";\n\nimport { type MultiSelectProps } from \"./MultiSelect\";\nimport styles from \"./MultiSelect.module.scss\";\nimport { MultiSelectOptionList } from \"./MultiSelectOptionList\";\nimport { MultiSelectOptionsWrapper } from \"./MultiSelectOptionsWrapper\";\nimport { type MultiSelectOptionDisableContext } from \"./multiSelectTypes\";\n\ntype MultiSelectCoreProps<TOption> = MultiSelectProps<TOption> &\n\tReadonly<{\n\t\t/** Сохраняет опубликованную ссылочную семантику только для legacy MultiSelect. */\n\t\tpreserveOptionArrayReference?: boolean;\n\t}>;\n\n/**\n * Единая generic-реализация множественного выбора. Публичные компоненты только\n * адаптируют свои контракты к этим selector-функциям, поэтому focus и a11y\n * поведение не расходятся между новым и legacy API.\n */\nexport function MultiSelectCore<TOption>({\n\tref,\n\toptions,\n\tvalue,\n\tonChange,\n\tgetOptionKey,\n\tgetOptionLabel,\n\tgetOptionCode,\n\tgetOptionGroup,\n\tgetOptionSearchText,\n\tlabel,\n\tdescription,\n\tplaceholder,\n\tsize,\n\tquery,\n\tdefaultQuery,\n\thighlightQuery,\n\tonQuery,\n\tdefaultFilter = true,\n\tonOpen,\n\tonClose,\n\tgetOptionDisabled,\n\tdisabled,\n\terror,\n\tisLoading,\n\trenderToken,\n\trenderToolbar,\n\trenderOption,\n\tpreserveOptionArrayReference = false\n}: MultiSelectCoreProps<TOption>) {\n\tconst inputRef = useRef<HTMLInputElement | null>(null);\n\tconst [open, setOpen] = useState(false);\n\tconst triggerMode = \"search-multi\";\n\tconst committedSelectedOptions = useMemo(\n\t\t() => materializeMultiSelectOptions(value, preserveOptionArrayReference),\n\t\t[preserveOptionArrayReference, value]\n\t);\n\tconst committedSelectedKeys = useMemo(\n\t\t() => new Set(committedSelectedOptions.map(getOptionKey)),\n\t\t[committedSelectedOptions, getOptionKey]\n\t);\n\tconst availableOptions = useMemo(\n\t\t() => options.filter((option) => !committedSelectedKeys.has(getOptionKey(option))),\n\t\t[committedSelectedKeys, getOptionKey, options]\n\t);\n\tconst {\n\t\tquery: currentQuery,\n\t\tsetQuery,\n\t\tresetQueryOnClose\n\t} = usePickerQuery({\n\t\tquery,\n\t\tdefaultQuery,\n\t\tonQuery,\n\t\ttriggerMode\n\t});\n\tconst handleOpenChange = (nextOpen: boolean) => {\n\t\tif (open && !nextOpen && resetQueryOnClose) {\n\t\t\tsetQuery(\"\");\n\t\t}\n\n\t\tsetOpen(nextOpen);\n\t};\n\tconst getSearchText = useCallback(\n\t\t(option: TOption) =>\n\t\t\tgetOptionSearchText?.(option) ??\n\t\t\t[getOptionLabel(option), getOptionCode?.(option), extractPickerTextContent(getOptionGroup?.(option)?.label)].filter(\n\t\t\t\t(part): part is string => Boolean(part)\n\t\t\t),\n\t\t[getOptionCode, getOptionGroup, getOptionLabel, getOptionSearchText]\n\t);\n\tconst filteredCommittedSelectedOptions = usePickerDefaultFilter({\n\t\toptions: committedSelectedOptions,\n\t\tquery: currentQuery,\n\t\tenabled: defaultFilter,\n\t\tgetSearchText\n\t});\n\tconst filteredAvailableOptions = usePickerDefaultFilter({\n\t\toptions: availableOptions,\n\t\tquery: currentQuery,\n\t\tenabled: defaultFilter,\n\t\tgetSearchText\n\t});\n\tconst visibleOptions = useMemo(\n\t\t() => [...filteredCommittedSelectedOptions, ...filteredAvailableOptions],\n\t\t[filteredAvailableOptions, filteredCommittedSelectedOptions]\n\t);\n\tconst selectedIndex = filteredCommittedSelectedOptions.length > 0 ? 0 : -1;\n\tconst compareSelections = useCallback(\n\t\t(left: TOption[], right: TOption[]) => areMultiSelectSelectionsEqual(left, right, getOptionKey),\n\t\t[getOptionKey]\n\t);\n\tconst {\n\t\tdraftValue: draftSelectedOptions,\n\t\tsetDraftValue: setDraftSelectedOptions,\n\t\tprepareOpen\n\t} = usePickerSelectionLifecycle({\n\t\tvalue: committedSelectedOptions,\n\t\topen,\n\t\tonCommit: onChange,\n\t\tonOpen,\n\t\tonClose,\n\t\tisEqual: compareSelections\n\t});\n\tconst selectedKeys = useMemo(() => new Set(draftSelectedOptions.map(getOptionKey)), [draftSelectedOptions, getOptionKey]);\n\tconst optionDisableContext = useMemo<MultiSelectOptionDisableContext<TOption>>(\n\t\t() => ({\n\t\t\tselectedOptions: draftSelectedOptions,\n\t\t\tcommittedSelectedOptions,\n\t\t\tselectedKeys,\n\t\t\topen\n\t\t}),\n\t\t[committedSelectedOptions, draftSelectedOptions, open, selectedKeys]\n\t);\n\tconst isOptionDisabled = useCallback(\n\t\t(option: TOption) => getOptionDisabled?.(option, optionDisableContext) ?? false,\n\t\t[getOptionDisabled, optionDisableContext]\n\t);\n\tconst {\n\t\tactiveIndex,\n\t\tcontext,\n\t\tfloatingStyles,\n\t\tgetFloatingProps,\n\t\tsetReference,\n\t\tsetFloating,\n\t\tsetOptionRef,\n\t\tclose,\n\t\topenList,\n\t\ttoggleOpen,\n\t\thandleReferenceKeyDown,\n\t\thandleFloatingKeyDown,\n\t\tgetOptionId,\n\t\tgetActiveOptionId\n\t} = usePickerFloatingListbox({\n\t\toptions: visibleOptions,\n\t\tselectedIndex,\n\t\topen,\n\t\tonOpenChange: handleOpenChange,\n\t\tonSelect: undefined,\n\t\tdisabled,\n\t\tgetOptionDisabled: isOptionDisabled,\n\t\tcloseOnSelect: false,\n\t\tallowOpenWithoutOptions: true,\n\t\ttriggerMode\n\t});\n\n\tconst currentHighlightQuery = highlightQuery ?? currentQuery;\n\tconst toggleDraftSelection = (option: TOption) => {\n\t\tconst optionKey = getOptionKey(option);\n\n\t\tsetDraftSelectedOptions((currentOptions) => {\n\t\t\tconst isSelected = currentOptions.some((selectedOption) => getOptionKey(selectedOption) === optionKey);\n\n\t\t\tif (isSelected) {\n\t\t\t\treturn currentOptions.filter((selectedOption) => getOptionKey(selectedOption) !== optionKey);\n\t\t\t}\n\n\t\t\tif (isOptionDisabled(option)) {\n\t\t\t\treturn currentOptions;\n\t\t\t}\n\n\t\t\treturn [...currentOptions, option];\n\t\t});\n\t};\n\n\tconst setInputNode = useCallback(\n\t\t(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\t\t[ref]\n\t);\n\n\tconst clearSelection = () => {\n\t\tsetDraftSelectedOptions([]);\n\n\t\tif (!open) {\n\t\t\tonChange([]);\n\t\t}\n\t};\n\n\tconst selectAll = () => {\n\t\tsetDraftSelectedOptions((currentOptions) => {\n\t\t\tconst nextOptions = [...currentOptions];\n\t\t\tconst nextSelectedKeys = new Set(currentOptions.map(getOptionKey));\n\n\t\t\tfor (const option of visibleOptions) {\n\t\t\t\tconst optionKey = getOptionKey(option);\n\n\t\t\t\tif (!nextSelectedKeys.has(optionKey) && !isOptionDisabled(option)) {\n\t\t\t\t\tnextSelectedKeys.add(optionKey);\n\t\t\t\t\tnextOptions.push(option);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn nextOptions;\n\t\t});\n\t};\n\n\tconst deselectAll = () => {\n\t\tsetDraftSelectedOptions([]);\n\t};\n\n\tconst selectOnlyOption = (option: TOption) => {\n\t\tif (isOptionDisabled(option)) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetDraftSelectedOptions([option]);\n\t\tclose();\n\t};\n\n\tconst currentSelectedOptions = open ? draftSelectedOptions : committedSelectedOptions;\n\tconst hasSelectedOptions = currentSelectedOptions.length > 0;\n\tconst renderContext = {\n\t\tselectedOptions: currentSelectedOptions,\n\t\tcommittedSelectedOptions,\n\t\tavailableOptions: filteredAvailableOptions,\n\t\tquery: currentQuery,\n\t\topen,\n\t\tclearSelection,\n\t\tselectAll,\n\t\tdeselectAll\n\t};\n\tconst defaultTokenNode =\n\t\tcurrentSelectedOptions.length > 1\n\t\t\t? formatMultiSelectOptionCount(currentSelectedOptions.length)\n\t\t\t: currentSelectedOptions.length === 1\n\t\t\t\t? getOptionLabel(currentSelectedOptions[0])\n\t\t\t\t: undefined;\n\tconst tokenNode = renderToken === undefined ? defaultTokenNode : typeof renderToken === \"function\" ? renderToken(renderContext) : null;\n\tconst toolbarNode = typeof renderToolbar === \"function\" ? renderToolbar(renderContext) : renderToolbar;\n\tconst renderDefaultOption = useCallback(\n\t\t(option: TOption) => ({ text: getOptionLabel(option), code: getOptionCode?.(option) }),\n\t\t[getOptionCode, getOptionLabel]\n\t);\n\tconst optionRenderer = renderOption ?? renderDefaultOption;\n\tconst selectedEntries = filteredCommittedSelectedOptions.map((option, index) => ({ option, index }));\n\tconst availableEntries = filteredAvailableOptions.map((option, index) => ({\n\t\toption,\n\t\tindex: index + selectedEntries.length\n\t}));\n\tconst isNoData = !isLoading && !error && visibleOptions.length === 0;\n\tconst triggerController = usePickerTriggerController({\n\t\tmode: triggerMode,\n\t\topen,\n\t\tcurrentQuery,\n\t\thasDisplayValue: false,\n\t\tinputRef,\n\t\tsetQuery,\n\t\topenList,\n\t\tclose,\n\t\ttoggleOpen,\n\t\tonBeforeOpen: () => {\n\t\t\tif (!open) {\n\t\t\t\tprepareOpen();\n\t\t\t}\n\t\t}\n\t});\n\n\treturn (\n\t\t<PickerField label={label} description={description} disabled={disabled} size={size} className={styles.multiSelect}>\n\t\t\t{({ controlId, labelId, describedBy }) => {\n\t\t\t\tconst listId = `${controlId}-grid`;\n\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<PickerTrigger\n\t\t\t\t\t\t\tref={setInputNode}\n\t\t\t\t\t\t\trootRef={setReference}\n\t\t\t\t\t\t\tid={controlId}\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\topen={open}\n\t\t\t\t\t\t\toptionCount={options.length}\n\t\t\t\t\t\t\tlabel={label}\n\t\t\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t\t\tplaceholderFallback=\"Выберите значения\"\n\t\t\t\t\t\t\tvalue={currentQuery}\n\t\t\t\t\t\t\tselectedValue={tokenNode}\n\t\t\t\t\t\t\thasSelection={hasSelectedOptions}\n\t\t\t\t\t\t\tshowSelectedValue={hasSelectedOptions && currentQuery.length === 0}\n\t\t\t\t\t\t\tclearable\n\t\t\t\t\t\t\tonClear={clearSelection}\n\t\t\t\t\t\t\tclearAriaLabel=\"Очистить все\"\n\t\t\t\t\t\t\tonToggleMouseDown={triggerController.handleToggleMouseDown}\n\t\t\t\t\t\t\tonToggleClick={triggerController.handleToggleClick}\n\t\t\t\t\t\t\taria-labelledby={labelId}\n\t\t\t\t\t\t\taria-describedby={describedBy}\n\t\t\t\t\t\t\taria-haspopup=\"grid\"\n\t\t\t\t\t\t\taria-expanded={open}\n\t\t\t\t\t\t\taria-controls={open ? listId : undefined}\n\t\t\t\t\t\t\taria-autocomplete=\"list\"\n\t\t\t\t\t\t\taria-activedescendant={open ? getActiveOptionId(listId) : undefined}\n\t\t\t\t\t\t\trootClassName=\"flex alignItemsCenter\"\n\t\t\t\t\t\t\tonChange={(event) => {\n\t\t\t\t\t\t\t\ttriggerController.handleTriggerInputChange(event.target.value);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonClick={triggerController.handleTriggerClick}\n\t\t\t\t\t\t\tonFocus={(event) => {\n\t\t\t\t\t\t\t\ttriggerController.handleTriggerFocus(event.currentTarget);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonKeyDown={(event) => {\n\t\t\t\t\t\t\t\thandleReferenceKeyDown(event);\n\n\t\t\t\t\t\t\t\tif (event.defaultPrevented) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (open && event.ctrlKey && event.key === \" \") {\n\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\tconst activeOption = visibleOptions[activeIndex];\n\t\t\t\t\t\t\t\t\tif (activeIndex >= 0 && activeIndex < visibleOptions.length) {\n\t\t\t\t\t\t\t\t\t\ttoggleDraftSelection(activeOption);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ttriggerController.handleTriggerKeyDown({\n\t\t\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t\t\tonActivateWhenOpen: () => {\n\t\t\t\t\t\t\t\t\t\tconst activeOption = visibleOptions[activeIndex];\n\t\t\t\t\t\t\t\t\t\tif (activeIndex >= 0 && activeIndex < visibleOptions.length) {\n\t\t\t\t\t\t\t\t\t\t\tselectOnlyOption(activeOption);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tenableClosedArrowDownOpen: true,\n\t\t\t\t\t\t\t\t\tsuppressClosedArrowUp: true\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<PickerPopup\n\t\t\t\t\t\t\topen={open}\n\t\t\t\t\t\t\tcontext={context}\n\t\t\t\t\t\t\tfloatingStyles={floatingStyles}\n\t\t\t\t\t\t\tlistId={listId}\n\t\t\t\t\t\t\tlabelId={labelId}\n\t\t\t\t\t\t\tdescriptionId={describedBy}\n\t\t\t\t\t\t\tactiveOptionId={open ? getActiveOptionId(listId) : undefined}\n\t\t\t\t\t\t\tariaMultiselectable\n\t\t\t\t\t\t\tpopupRole=\"grid\"\n\t\t\t\t\t\t\tsetFloating={setFloating}\n\t\t\t\t\t\t\tgetFloatingProps={getFloatingProps}\n\t\t\t\t\t\t\tonKeyDown={handleFloatingKeyDown}\n\t\t\t\t\t\t\tinitialFocus={-1}\n\t\t\t\t\t\t\treturnFocus={false}\n\t\t\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\t\t\ttoolbar={toolbarNode}\n\t\t\t\t\t\t\tselectionActions={\n\t\t\t\t\t\t\t\trenderToolbar === undefined ? { onSelectAll: selectAll, onDeselectAll: deselectAll } : undefined\n\t\t\t\t\t\t\t}>\n\t\t\t\t\t\t\t<MultiSelectOptionsWrapper isNoData={isNoData} error={error}>\n\t\t\t\t\t\t\t\t<div role=\"presentation\" className=\"scrollable overscroll h100\">\n\t\t\t\t\t\t\t\t\t<MultiSelectOptionList\n\t\t\t\t\t\t\t\t\t\tentries={selectedEntries}\n\t\t\t\t\t\t\t\t\t\tsectionId={`${listId}-selected`}\n\t\t\t\t\t\t\t\t\t\tlistId={listId}\n\t\t\t\t\t\t\t\t\t\tactiveIndex={activeIndex}\n\t\t\t\t\t\t\t\t\t\tselectedKeys={selectedKeys}\n\t\t\t\t\t\t\t\t\t\tquery={currentQuery}\n\t\t\t\t\t\t\t\t\t\thighlightQuery={currentHighlightQuery}\n\t\t\t\t\t\t\t\t\t\tgetOptionKey={getOptionKey}\n\t\t\t\t\t\t\t\t\t\tgetOptionGroup={getOptionGroup}\n\t\t\t\t\t\t\t\t\t\tgetOptionDisabled={isOptionDisabled}\n\t\t\t\t\t\t\t\t\t\tgetOptionId={getOptionId}\n\t\t\t\t\t\t\t\t\t\tsetOptionRef={setOptionRef}\n\t\t\t\t\t\t\t\t\t\ttoggleOption={toggleDraftSelection}\n\t\t\t\t\t\t\t\t\t\tselectOnlyOption={selectOnlyOption}\n\t\t\t\t\t\t\t\t\t\trenderOption={optionRenderer}\n\t\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t\t{selectedEntries.length > 0 && availableEntries.length > 0 && (\n\t\t\t\t\t\t\t\t\t\t<Separator aria-hidden=\"true\" className=\"marginBlockSm\" />\n\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t<MultiSelectOptionList\n\t\t\t\t\t\t\t\t\t\tentries={availableEntries}\n\t\t\t\t\t\t\t\t\t\tsectionId={`${listId}-available`}\n\t\t\t\t\t\t\t\t\t\tlistId={listId}\n\t\t\t\t\t\t\t\t\t\tactiveIndex={activeIndex}\n\t\t\t\t\t\t\t\t\t\tselectedKeys={selectedKeys}\n\t\t\t\t\t\t\t\t\t\tquery={currentQuery}\n\t\t\t\t\t\t\t\t\t\thighlightQuery={currentHighlightQuery}\n\t\t\t\t\t\t\t\t\t\tgetOptionKey={getOptionKey}\n\t\t\t\t\t\t\t\t\t\tgetOptionGroup={getOptionGroup}\n\t\t\t\t\t\t\t\t\t\tgetOptionDisabled={isOptionDisabled}\n\t\t\t\t\t\t\t\t\t\tgetOptionId={getOptionId}\n\t\t\t\t\t\t\t\t\t\tsetOptionRef={setOptionRef}\n\t\t\t\t\t\t\t\t\t\ttoggleOption={toggleDraftSelection}\n\t\t\t\t\t\t\t\t\t\tselectOnlyOption={selectOnlyOption}\n\t\t\t\t\t\t\t\t\t\trenderOption={optionRenderer}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</MultiSelectOptionsWrapper>\n\t\t\t\t\t\t</PickerPopup>\n\t\t\t\t\t</>\n\t\t\t\t);\n\t\t\t}}\n\t\t</PickerField>\n\t);\n}\n","import { type ReactNode, type Ref, useMemo } from \"react\";\n\nimport { type CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata-service\";\n\nimport { type UiBaseProps } from \"../../types\";\nimport { adaptLegacyMultiSelectOptionDisableContext, adaptLegacyMultiSelectRenderContext } from \"../lib/adaptLegacyMultiSelectContext\";\nimport { resolveLegacyMultiSelectTextKey } from \"../lib/resolveLegacyMultiSelectTextKey\";\n\nimport {\n\ttype DeprecatedMultiSelectItemState,\n\ttype DeprecatedMultiSelectOptionContent,\n\ttype DeprecatedMultiSelectOptionDisableContext,\n\ttype DeprecatedMultiSelectRenderContext\n} from \"./legacyMultiSelectTypes\";\nimport { MultiSelectCore } from \"./MultiSelectCore\";\n\ntype MultiSelectOptionalRenderer<TContext> = ((context: TContext) => ReactNode) | null | false;\n\ninterface MultiSelectRenderers {\n\trenderToken?: MultiSelectOptionalRenderer<DeprecatedMultiSelectRenderContext>;\n\trenderToolbar?: MultiSelectOptionalRenderer<DeprecatedMultiSelectRenderContext>;\n\trenderItem?: (item: CollectionItem, state: DeprecatedMultiSelectItemState) => DeprecatedMultiSelectOptionContent;\n}\n\n/** Контракт устаревшего codeKey/textKey-компонента. */\nexport interface DeprecatedMultiSelectProps<TOption extends Record<string, string> = CollectionItem>\n\textends MultiSelectRenderers, UiBaseProps<TOption[]> {\n\tref?: Ref<HTMLInputElement>;\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: DeprecatedMultiSelectOptionDisableContext) => boolean;\n\tonOpen?: () => void;\n\tonClose?: (value: TOption[]) => void;\n\terror?: string;\n\tisLoading?: boolean;\n}\n\n/**\n * Устаревший адаптер OData-подобных `codeKey`/`textKey` коллекций. Компонент\n * сохраняет прежнюю OData-семантику, пока consumers переходят на selector API\n * канонического `MultiSelect`.\n *\n * @deprecated Используйте `MultiSelect` с selector-функциями.\n */\nexport function DeprecatedMultiSelect<TOption extends Record<string, string> = CollectionItem>({\n\tref,\n\tcodeKey,\n\ttextKey,\n\thideCode,\n\titems,\n\tvalue,\n\tonChange,\n\tgetOptionDisabled,\n\tonClose,\n\trenderToken,\n\trenderToolbar,\n\trenderItem,\n\t...props\n}: DeprecatedMultiSelectProps<TOption>) {\n\tconst selectedItems = useMemo(() => value ?? [], [value]);\n\tconst resolvedTextKey = useMemo(\n\t\t() => resolveLegacyMultiSelectTextKey([...selectedItems, ...items], codeKey, textKey),\n\t\t[codeKey, items, selectedItems, textKey]\n\t);\n\tconst adaptedRenderToken =\n\t\ttypeof renderToken === \"function\"\n\t\t\t? (context: Parameters<typeof adaptLegacyMultiSelectRenderContext>[0]) =>\n\t\t\t\t\trenderToken(adaptLegacyMultiSelectRenderContext(context))\n\t\t\t: renderToken;\n\tconst adaptedRenderToolbar =\n\t\ttypeof renderToolbar === \"function\"\n\t\t\t? (context: Parameters<typeof adaptLegacyMultiSelectRenderContext>[0]) =>\n\t\t\t\t\trenderToolbar(adaptLegacyMultiSelectRenderContext(context))\n\t\t\t: renderToolbar;\n\n\treturn (\n\t\t<MultiSelectCore\n\t\t\t{...props}\n\t\t\tref={ref}\n\t\t\tpreserveOptionArrayReference\n\t\t\toptions={items}\n\t\t\tvalue={selectedItems}\n\t\t\tonChange={onChange}\n\t\t\tgetOptionKey={(item) => item[codeKey]}\n\t\t\tgetOptionLabel={(item) => item[resolvedTextKey] ?? item[codeKey] ?? \"\"}\n\t\t\tgetOptionCode={hideCode ? undefined : (item) => item[codeKey] ?? \"\"}\n\t\t\tgetOptionSearchText={(item) => Array.from(new Set([item[resolvedTextKey], item[codeKey], ...Object.values(item)]))}\n\t\t\tgetOptionDisabled={\n\t\t\t\tgetOptionDisabled\n\t\t\t\t\t? (item, context) => getOptionDisabled(item, adaptLegacyMultiSelectOptionDisableContext(context))\n\t\t\t\t\t: undefined\n\t\t\t}\n\t\t\tonClose={onClose}\n\t\t\trenderToken={adaptedRenderToken}\n\t\t\trenderToolbar={adaptedRenderToolbar}\n\t\t\trenderOption={\n\t\t\t\trenderItem\n\t\t\t\t\t? (item, state) => renderItem(item, state)\n\t\t\t\t\t: (item) => ({\n\t\t\t\t\t\t\ttext: item[resolvedTextKey] ?? \"\",\n\t\t\t\t\t\t\tcode: hideCode ? undefined : (item[codeKey] ?? \"\")\n\t\t\t\t\t\t})\n\t\t\t}\n\t\t/>\n\t);\n}\n\nDeprecatedMultiSelect.displayName = \"DeprecatedMultiSelect\";\n\nexport {\n\ttype DeprecatedMultiSelectItemState,\n\ttype DeprecatedMultiSelectOptionContent,\n\ttype DeprecatedMultiSelectOptionDisableContext,\n\ttype DeprecatedMultiSelectRenderContext\n} from \"./legacyMultiSelectTypes\";\n","import { type Ref } from \"react\";\n\nimport { type UiBaseProps } from \"../../types\";\n\nimport { MultiSelectCore } from \"./MultiSelectCore\";\nimport {\n\ttype MultiSelectOptionDisableContext,\n\ttype MultiSelectOptionGroup,\n\ttype MultiSelectOptionKey,\n\ttype MultiSelectRenderers\n} from \"./multiSelectTypes\";\n\n/**\n * Типобезопасный контракт множественного выбора. Опция остаётся в исходной\n * domain/view-model форме, а UI получает только необходимые selector-функции.\n */\nexport type MultiSelectProps<TOption> = MultiSelectRenderers<TOption> &\n\tOmit<UiBaseProps<TOption[], readonly TOption[]>, \"onChange\"> &\n\tReadonly<{\n\t\tref?: Ref<HTMLInputElement>;\n\t\toptions: readonly TOption[];\n\t\tonChange: (value: TOption[]) => void;\n\t\tgetOptionKey: (option: TOption) => MultiSelectOptionKey;\n\t\tgetOptionLabel: (option: TOption) => string;\n\t\tgetOptionCode?: (option: TOption) => string | undefined;\n\t\tgetOptionGroup?: (option: TOption) => MultiSelectOptionGroup | undefined;\n\t\tgetOptionSearchText?: (option: TOption) => string | readonly string[];\n\t\tgetOptionDisabled?: (option: TOption, context: MultiSelectOptionDisableContext<TOption>) => boolean;\n\t\tquery?: string;\n\t\tdefaultQuery?: string;\n\t\thighlightQuery?: string;\n\t\tonQuery?: (value: string) => void;\n\t\tdefaultFilter?: boolean;\n\t\tonOpen?: () => void;\n\t\tonClose?: (value: TOption[]) => void;\n\t\terror?: string;\n\t\tisLoading?: boolean;\n\t}>;\n\n/** Множественный выбор для произвольной типизированной коллекции опций. */\nexport function MultiSelect<TOption>(props: MultiSelectProps<TOption>) {\n\treturn <MultiSelectCore {...props} />;\n}\n","import { ODataCollectionModel, ODataSelectBaseProps } from \"@ryuzaki13/react-foundation-api/odata\";\nimport { CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata-service\";\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 { ODataSelectBaseProps, useODataCollectionModel } from \"@ryuzaki13/react-foundation-api/odata\";\n\nimport { UiBaseProps } from \"../../types\";\nimport { useODataMultiSelect } from \"../model/useODataMultiSelect\";\n\nimport { DeprecatedMultiSelect } from \"./DeprecatedMultiSelect\";\n\ntype ODataMultiSelectProps = ODataSelectBaseProps & Omit<UiBaseProps<string[]>, \"placeholder\"> & {};\n\nexport function ODataMultiSelect({\n\todata,\n\tsegment,\n\tmodel: initialModel,\n\tlabel,\n\tdescription,\n\tdisabled,\n\tvalue,\n\tdependencies,\n\tonChange,\n\tsize\n}: ODataMultiSelectProps) {\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<DeprecatedMultiSelect\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 } from \"react\";\n\nimport { useODataDependentSelection } from \"../../odata-dependent\";\n\nimport { ODataMultiSelect } from \"./ODataMultiSelect\";\n\nimport type { ODataDependentSegmentControlProps } from \"../../odata-dependent\";\n\nexport type ODataDependentSegmentMultiSelectProps = ODataDependentSegmentControlProps;\n\nexport function ODataDependentSegmentMultiSelect(props: ODataDependentSegmentMultiSelectProps) {\n\tconst { item, disabled, label, description, size, width = 15 } = props;\n\tconst selection = useODataDependentSelection(props);\n\tconst { updateSegment } = selection;\n\tconst widthStyle = `calc(${width}em + var(--width-add))`;\n\n\tconst handleSelectionChange = useCallback(\n\t\t(keys: string[]) => {\n\t\t\tupdateSegment(item.id, keys);\n\t\t},\n\t\t[item.id, updateSegment]\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={selection.values}\n\t\t\t\tvalue={selection.values[item.id]}\n\t\t\t\tonChange={handleSelectionChange}\n\t\t\t\tdisabled={disabled || selection.isSegmentDisabled(item.id)}\n\t\t\t\tlabel={label}\n\t\t\t\tdescription={description}\n\t\t\t\tsize={size}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n","import { flattenODataDependentServices, type ODataDependentBaseProps } from \"@ryuzaki13/react-foundation-api/odata\";\n\nimport { useODataDependentSelection } from \"../../odata-dependent\";\n\nimport { ODataDependentSegmentMultiSelect } from \"./ODataDependentSegmentMultiSelect\";\n\nimport type { UseODataDependentSelectionOptions } from \"../../odata-dependent\";\n\nexport type ODataDependentMultiSelectProps = Omit<ODataDependentBaseProps, \"dependencies\" | \"value\"> &\n\tUseODataDependentSelectionOptions & {\n\t\t/**\n\t\t * Ширина одного элемента в `em` единицах.\n\t\t *\n\t\t * @default 15\n\t\t */\n\t\twidth?: number;\n\t};\n\nexport function ODataDependentMultiSelect(props: ODataDependentMultiSelectProps) {\n\tconst { width = 15, odata, segments, model, values, defaultValues, onChange, selectionMode, segmentOrder } = props;\n\tconst selection = useODataDependentSelection({ values, defaultValues, onChange });\n\tconst segmentSelectionProps =\n\t\tselectionMode === \"sequential\" ? { selectionMode: \"sequential\" as const, segmentOrder } : { selectionMode, segmentOrder };\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={selection.values}\n\t\t\tonChange={selection.updateValues}\n\t\t\t{...segmentSelectionProps}\n\t\t\twidth={width}\n\t\t/>\n\t));\n}\n","import { DeprecatedMultiSelect } from \"./DeprecatedMultiSelect\";\n\nimport type { UiBaseProps } from \"../../types\";\nimport type { CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata-service\";\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<DeprecatedMultiSelect\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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"}
@@ -0,0 +1,8 @@
1
+ import { type CollectionItem } from "@ryuzaki13/react-foundation-lib/odata-service";
2
+ import { type DeprecatedMultiSelectOptionDisableContext, type DeprecatedMultiSelectRenderContext } from "../ui/legacyMultiSelectTypes";
3
+ import { type MultiSelectOptionDisableContext, type MultiSelectRenderContext as GenericMultiSelectRenderContext } from "../ui/multiSelectTypes";
4
+ /** Преобразует generic render-context в опубликованный legacy-контракт. */
5
+ export declare function adaptLegacyMultiSelectRenderContext(context: GenericMultiSelectRenderContext<CollectionItem>): DeprecatedMultiSelectRenderContext;
6
+ /** Преобразует generic disable-context без изменения identity выбранных элементов. */
7
+ export declare function adaptLegacyMultiSelectOptionDisableContext(context: MultiSelectOptionDisableContext<CollectionItem>): DeprecatedMultiSelectOptionDisableContext;
8
+ //# sourceMappingURL=adaptLegacyMultiSelectContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adaptLegacyMultiSelectContext.d.ts","sourceRoot":"","sources":["../../../src/multi-select/lib/adaptLegacyMultiSelectContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,KAAK,yCAAyC,EAAE,KAAK,kCAAkC,EAAE,MAAM,8BAA8B,CAAC;AACvI,OAAO,EACN,KAAK,+BAA+B,EACpC,KAAK,wBAAwB,IAAI,+BAA+B,EAChE,MAAM,wBAAwB,CAAC;AAIhC,2EAA2E;AAC3E,wBAAgB,mCAAmC,CAClD,OAAO,EAAE,+BAA+B,CAAC,cAAc,CAAC,GACtD,kCAAkC,CAWpC;AAED,sFAAsF;AACtF,wBAAgB,0CAA0C,CACzD,OAAO,EAAE,+BAA+B,CAAC,cAAc,CAAC,GACtD,yCAAyC,CAO3C"}
@@ -0,0 +1,15 @@
1
+ import { type MultiSelectOptionGroup } from "../ui/multiSelectTypes";
2
+ export type MultiSelectOptionEntry<TOption> = Readonly<{
3
+ option: TOption;
4
+ index: number;
5
+ }>;
6
+ export type MultiSelectOptionSection<TOption> = Readonly<{
7
+ group: MultiSelectOptionGroup | undefined;
8
+ entries: readonly MultiSelectOptionEntry<TOption>[];
9
+ }>;
10
+ /**
11
+ * Группирует только соседние опции и сохраняет их глобальные индексы. Благодаря
12
+ * этому визуальные заголовки не попадают в active-index клавиатурной навигации.
13
+ */
14
+ export declare function createMultiSelectOptionSections<TOption>(entries: readonly MultiSelectOptionEntry<TOption>[], getOptionGroup: (option: TOption) => MultiSelectOptionGroup | undefined): readonly MultiSelectOptionSection<TOption>[];
15
+ //# sourceMappingURL=createMultiSelectOptionSections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createMultiSelectOptionSections.d.ts","sourceRoot":"","sources":["../../../src/multi-select/lib/createMultiSelectOptionSections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAErE,MAAM,MAAM,sBAAsB,CAAC,OAAO,IAAI,QAAQ,CAAC;IACtD,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACd,CAAC,CAAC;AAEH,MAAM,MAAM,wBAAwB,CAAC,OAAO,IAAI,QAAQ,CAAC;IACxD,KAAK,EAAE,sBAAsB,GAAG,SAAS,CAAC;IAC1C,OAAO,EAAE,SAAS,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC;CACpD,CAAC,CAAC;AAEH;;;GAGG;AACH,wBAAgB,+BAA+B,CAAC,OAAO,EACtD,OAAO,EAAE,SAAS,sBAAsB,CAAC,OAAO,CAAC,EAAE,EACnD,cAAc,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,sBAAsB,GAAG,SAAS,GACrE,SAAS,wBAAwB,CAAC,OAAO,CAAC,EAAE,CAoB9C"}
@@ -0,0 +1,3 @@
1
+ /** Форматирует компактный token для множественного выбора. */
2
+ export declare function formatMultiSelectOptionCount(count: number): string;
3
+ //# sourceMappingURL=formatMultiSelectOptionCount.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatMultiSelectOptionCount.d.ts","sourceRoot":"","sources":["../../../src/multi-select/lib/formatMultiSelectOptionCount.ts"],"names":[],"mappings":"AAQA,8DAA8D;AAC9D,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElE"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Создаёт mutable-снимок readonly options. Сохранение ссылки включается только
3
+ * legacy-адаптером, чей опубликованный callback-контракт исторически mutable.
4
+ */
5
+ export declare function materializeMultiSelectOptions<TOption>(options: readonly TOption[], preserveArrayReference?: boolean): TOption[];
6
+ //# sourceMappingURL=materializeMultiSelectOptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"materializeMultiSelectOptions.d.ts","sourceRoot":"","sources":["../../../src/multi-select/lib/materializeMultiSelectOptions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,OAAO,EAAE,EAAE,sBAAsB,UAAQ,GAAG,OAAO,EAAE,CAM7H"}
@@ -0,0 +1,4 @@
1
+ import { type MultiSelectOptionKey } from "../ui/multiSelectTypes";
2
+ /** Сравнивает наборы выбора по identity опций, не связывая их с object reference. */
3
+ export declare function areMultiSelectSelectionsEqual<TOption>(left: readonly TOption[], right: readonly TOption[], getOptionKey: (option: TOption) => MultiSelectOptionKey): boolean;
4
+ //# sourceMappingURL=multiSelectSelection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiSelectSelection.d.ts","sourceRoot":"","sources":["../../../src/multi-select/lib/multiSelectSelection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAEnE,qFAAqF;AACrF,wBAAgB,6BAA6B,CAAC,OAAO,EACpD,IAAI,EAAE,SAAS,OAAO,EAAE,EACxB,KAAK,EAAE,SAAS,OAAO,EAAE,EACzB,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,oBAAoB,GACrD,OAAO,CAQT"}
@@ -0,0 +1,4 @@
1
+ import { type CollectionItem } from "@ryuzaki13/react-foundation-lib/odata-service";
2
+ /** Сохраняет исходное правило вывода textKey для legacy code/text API. */
3
+ export declare function resolveLegacyMultiSelectTextKey(items: readonly CollectionItem[], codeKey: string, textKey?: string): string;
4
+ //# sourceMappingURL=resolveLegacyMultiSelectTextKey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveLegacyMultiSelectTextKey.d.ts","sourceRoot":"","sources":["../../../src/multi-select/lib/resolveLegacyMultiSelectTextKey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,+CAA+C,CAAC;AAEpF,0EAA0E;AAC1E,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,UAYlH"}
@@ -0,0 +1,41 @@
1
+ import { type ReactNode, type Ref } from "react";
2
+ import { type CollectionItem } from "@ryuzaki13/react-foundation-lib/odata-service";
3
+ import { type UiBaseProps } from "../../types";
4
+ import { type DeprecatedMultiSelectItemState, type DeprecatedMultiSelectOptionContent, type DeprecatedMultiSelectOptionDisableContext, type DeprecatedMultiSelectRenderContext } from "./legacyMultiSelectTypes";
5
+ type MultiSelectOptionalRenderer<TContext> = ((context: TContext) => ReactNode) | null | false;
6
+ interface MultiSelectRenderers {
7
+ renderToken?: MultiSelectOptionalRenderer<DeprecatedMultiSelectRenderContext>;
8
+ renderToolbar?: MultiSelectOptionalRenderer<DeprecatedMultiSelectRenderContext>;
9
+ renderItem?: (item: CollectionItem, state: DeprecatedMultiSelectItemState) => DeprecatedMultiSelectOptionContent;
10
+ }
11
+ /** Контракт устаревшего codeKey/textKey-компонента. */
12
+ export interface DeprecatedMultiSelectProps<TOption extends Record<string, string> = CollectionItem> extends MultiSelectRenderers, UiBaseProps<TOption[]> {
13
+ ref?: Ref<HTMLInputElement>;
14
+ codeKey: string;
15
+ textKey?: string;
16
+ hideCode?: boolean;
17
+ query?: string;
18
+ defaultQuery?: string;
19
+ highlightQuery?: string;
20
+ onQuery?: (value: string) => void;
21
+ defaultFilter?: boolean;
22
+ items: TOption[];
23
+ getOptionDisabled?: (item: TOption, context: DeprecatedMultiSelectOptionDisableContext) => boolean;
24
+ onOpen?: () => void;
25
+ onClose?: (value: TOption[]) => void;
26
+ error?: string;
27
+ isLoading?: boolean;
28
+ }
29
+ /**
30
+ * Устаревший адаптер OData-подобных `codeKey`/`textKey` коллекций. Компонент
31
+ * сохраняет прежнюю OData-семантику, пока consumers переходят на selector API
32
+ * канонического `MultiSelect`.
33
+ *
34
+ * @deprecated Используйте `MultiSelect` с selector-функциями.
35
+ */
36
+ export declare function DeprecatedMultiSelect<TOption extends Record<string, string> = CollectionItem>({ ref, codeKey, textKey, hideCode, items, value, onChange, getOptionDisabled, onClose, renderToken, renderToolbar, renderItem, ...props }: DeprecatedMultiSelectProps<TOption>): import("react").JSX.Element;
37
+ export declare namespace DeprecatedMultiSelect {
38
+ var displayName: string;
39
+ }
40
+ export { type DeprecatedMultiSelectItemState, type DeprecatedMultiSelectOptionContent, type DeprecatedMultiSelectOptionDisableContext, type DeprecatedMultiSelectRenderContext } from "./legacyMultiSelectTypes";
41
+ //# sourceMappingURL=DeprecatedMultiSelect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeprecatedMultiSelect.d.ts","sourceRoot":"","sources":["../../../src/multi-select/ui/DeprecatedMultiSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,GAAG,EAAW,MAAM,OAAO,CAAC;AAE1D,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C,OAAO,EACN,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EACvC,KAAK,yCAAyC,EAC9C,KAAK,kCAAkC,EACvC,MAAM,0BAA0B,CAAC;AAGlC,KAAK,2BAA2B,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,KAAK,SAAS,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;AAE/F,UAAU,oBAAoB;IAC7B,WAAW,CAAC,EAAE,2BAA2B,CAAC,kCAAkC,CAAC,CAAC;IAC9E,aAAa,CAAC,EAAE,2BAA2B,CAAC,kCAAkC,CAAC,CAAC;IAChF,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,8BAA8B,KAAK,kCAAkC,CAAC;CACjH;AAED,uDAAuD;AACvD,MAAM,WAAW,0BAA0B,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,cAAc,CAClG,SAAQ,oBAAoB,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC;IACpD,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,yCAAyC,KAAK,OAAO,CAAC;IACnG,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,cAAc,EAAE,EAC9F,GAAG,EACH,OAAO,EACP,OAAO,EACP,QAAQ,EACR,KAAK,EACL,KAAK,EACL,QAAQ,EACR,iBAAiB,EACjB,OAAO,EACP,WAAW,EACX,aAAa,EACb,UAAU,EACV,GAAG,KAAK,EACR,EAAE,0BAA0B,CAAC,OAAO,CAAC,+BA+CrC;yBA7De,qBAAqB;;;AAiErC,OAAO,EACN,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EACvC,KAAK,yCAAyC,EAC9C,KAAK,kCAAkC,EACvC,MAAM,0BAA0B,CAAC"}
@@ -1,70 +1,30 @@
1
- import React, { type Ref } from "react";
1
+ import { type Ref } from "react";
2
2
  import { type UiBaseProps } from "../../types";
3
- import type { CollectionItem } from "@ryuzaki13/react-foundation-lib/odata-service";
4
- export interface MultiSelectItemState {
5
- selected: boolean;
6
- active: boolean;
7
- disabled: boolean;
8
- query: string;
9
- highlightQuery: string;
10
- }
3
+ import { type MultiSelectOptionDisableContext, type MultiSelectOptionGroup, type MultiSelectOptionKey, type MultiSelectRenderers } from "./multiSelectTypes";
11
4
  /**
12
- * Структурированное содержимое опции множественного выбора. `MultiSelect` владеет
13
- * интерактивной оболочкой и checkbox-слотом, а renderer отвечает только за данные
14
- * текстовой части, поэтому единая композиция `OptionButton` сохраняется и для
15
- * произвольного ReactNode.
5
+ * Типобезопасный контракт множественного выбора. Опция остаётся в исходной
6
+ * domain/view-model форме, а UI получает только необходимые selector-функции.
16
7
  */
17
- export interface MultiSelectOptionContent {
18
- text: string;
19
- code: string | undefined;
20
- }
21
- export interface MultiSelectRenderContext {
22
- selectedItems: CollectionItem[];
23
- committedSelectedItems: CollectionItem[];
24
- availableItems: CollectionItem[];
25
- query: string;
26
- open: boolean;
27
- clearSelection: () => void;
28
- selectAll: () => void;
29
- deselectAll: () => void;
30
- }
31
- export interface MultiSelectOptionDisableContext {
32
- selectedItems: CollectionItem[];
33
- committedSelectedItems: CollectionItem[];
34
- selectedKeys: ReadonlySet<string>;
35
- open: boolean;
36
- }
37
- type MultiSelectOptionalRenderer<TContext> = ((context: TContext) => React.ReactNode) | null | false;
38
- interface MultiSelectRenderers {
39
- renderToken?: MultiSelectOptionalRenderer<MultiSelectRenderContext>;
40
- renderToolbar?: MultiSelectOptionalRenderer<MultiSelectRenderContext>;
41
- renderItem?: (item: CollectionItem, state: MultiSelectItemState) => MultiSelectOptionContent;
42
- }
43
- export interface MultiSelectProps<TOption extends Record<string, string> = CollectionItem> extends MultiSelectRenderers, UiBaseProps<TOption[]> {
44
- codeKey: string;
45
- textKey?: string;
46
- hideCode?: boolean;
8
+ export type MultiSelectProps<TOption> = MultiSelectRenderers<TOption> & Omit<UiBaseProps<TOption[], readonly TOption[]>, "onChange"> & Readonly<{
9
+ ref?: Ref<HTMLInputElement>;
10
+ options: readonly TOption[];
11
+ onChange: (value: TOption[]) => void;
12
+ getOptionKey: (option: TOption) => MultiSelectOptionKey;
13
+ getOptionLabel: (option: TOption) => string;
14
+ getOptionCode?: (option: TOption) => string | undefined;
15
+ getOptionGroup?: (option: TOption) => MultiSelectOptionGroup | undefined;
16
+ getOptionSearchText?: (option: TOption) => string | readonly string[];
17
+ getOptionDisabled?: (option: TOption, context: MultiSelectOptionDisableContext<TOption>) => boolean;
47
18
  query?: string;
48
19
  defaultQuery?: string;
49
20
  highlightQuery?: string;
50
21
  onQuery?: (value: string) => void;
51
22
  defaultFilter?: boolean;
52
- items: TOption[];
53
- getOptionDisabled?: (item: TOption, context: MultiSelectOptionDisableContext) => boolean;
54
23
  onOpen?: () => void;
55
24
  onClose?: (value: TOption[]) => void;
56
25
  error?: string;
57
26
  isLoading?: boolean;
58
- }
59
- /**
60
- * Поле множественного выбора с внутренним черновиком значений и подтверждением выбора при закрытии списка.
61
- * Подходит как для самостоятельного использования, так и как базовый слой для OData-оберток.
62
- */
63
- export declare function MultiSelect({ ref, codeKey, textKey, hideCode, items, value, onChange, label, description, placeholder, size, query, defaultQuery, highlightQuery, onQuery, defaultFilter, onOpen, onClose, getOptionDisabled, disabled, error, isLoading, renderToken, renderToolbar, renderItem }: MultiSelectProps & {
64
- ref?: Ref<HTMLInputElement>;
65
- }): React.JSX.Element;
66
- export declare namespace MultiSelect {
67
- var displayName: string;
68
- }
69
- export {};
27
+ }>;
28
+ /** Множественный выбор для произвольной типизированной коллекции опций. */
29
+ export declare function MultiSelect<TOption>(props: MultiSelectProps<TOption>): import("react").JSX.Element;
70
30
  //# sourceMappingURL=MultiSelect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MultiSelect.d.ts","sourceRoot":"","sources":["../../../src/multi-select/ui/MultiSelect.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MultiSelect.d.ts","sourceRoot":"","sources":["../../../src/multi-select/ui/MultiSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,EACN,KAAK,+BAA+B,EACpC,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,MAAM,oBAAoB,CAAC;AAE5B;;;GAGG;AACH,MAAM,MAAM,gBAAgB,CAAC,OAAO,IAAI,oBAAoB,CAAC,OAAO,CAAC,GACpE,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,SAAS,OAAO,EAAE,CAAC,EAAE,UAAU,CAAC,GAC5D,QAAQ,CAAC;IACR,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC5B,OAAO,EAAE,SAAS,OAAO,EAAE,CAAC;IAC5B,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACrC,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,oBAAoB,CAAC;IACxD,cAAc,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,CAAC;IAC5C,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,CAAC;IACxD,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,sBAAsB,GAAG,SAAS,CAAC;IACzE,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACtE,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,+BAA+B,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC;IACpG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC,CAAC;AAEJ,2EAA2E;AAC3E,wBAAgB,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,+BAEpE"}
@@ -0,0 +1,13 @@
1
+ import { type MultiSelectProps } from "./MultiSelect";
2
+ type MultiSelectCoreProps<TOption> = MultiSelectProps<TOption> & Readonly<{
3
+ /** Сохраняет опубликованную ссылочную семантику только для legacy MultiSelect. */
4
+ preserveOptionArrayReference?: boolean;
5
+ }>;
6
+ /**
7
+ * Единая generic-реализация множественного выбора. Публичные компоненты только
8
+ * адаптируют свои контракты к этим selector-функциям, поэтому focus и a11y
9
+ * поведение не расходятся между новым и legacy API.
10
+ */
11
+ export declare function MultiSelectCore<TOption>({ ref, options, value, onChange, getOptionKey, getOptionLabel, getOptionCode, getOptionGroup, getOptionSearchText, label, description, placeholder, size, query, defaultQuery, highlightQuery, onQuery, defaultFilter, onOpen, onClose, getOptionDisabled, disabled, error, isLoading, renderToken, renderToolbar, renderOption, preserveOptionArrayReference }: MultiSelectCoreProps<TOption>): import("react").JSX.Element;
12
+ export {};
13
+ //# sourceMappingURL=MultiSelectCore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiSelectCore.d.ts","sourceRoot":"","sources":["../../../src/multi-select/ui/MultiSelectCore.tsx"],"names":[],"mappings":"AAkBA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAMtD,KAAK,oBAAoB,CAAC,OAAO,IAAI,gBAAgB,CAAC,OAAO,CAAC,GAC7D,QAAQ,CAAC;IACR,kFAAkF;IAClF,4BAA4B,CAAC,EAAE,OAAO,CAAC;CACvC,CAAC,CAAC;AAEJ;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,EACxC,GAAG,EACH,OAAO,EACP,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,KAAK,EACL,WAAW,EACX,WAAW,EACX,IAAI,EACJ,KAAK,EACL,YAAY,EACZ,cAAc,EACd,OAAO,EACP,aAAoB,EACpB,MAAM,EACN,OAAO,EACP,iBAAiB,EACjB,QAAQ,EACR,KAAK,EACL,SAAS,EACT,WAAW,EACX,aAAa,EACb,YAAY,EACZ,4BAAoC,EACpC,EAAE,oBAAoB,CAAC,OAAO,CAAC,+BA8X/B"}
@@ -0,0 +1,23 @@
1
+ import { type MultiSelectOptionEntry } from "../lib/createMultiSelectOptionSections";
2
+ import { type MultiSelectOptionContent, type MultiSelectOptionGroup, type MultiSelectOptionKey, type MultiSelectOptionState } from "./multiSelectTypes";
3
+ type MultiSelectOptionListProps<TOption> = Readonly<{
4
+ entries: readonly MultiSelectOptionEntry<TOption>[];
5
+ sectionId: string;
6
+ listId: string;
7
+ activeIndex: number;
8
+ selectedKeys: ReadonlySet<MultiSelectOptionKey>;
9
+ query: string;
10
+ highlightQuery: string;
11
+ getOptionKey: (option: TOption) => MultiSelectOptionKey;
12
+ getOptionGroup?: (option: TOption) => MultiSelectOptionGroup | undefined;
13
+ getOptionDisabled?: (option: TOption) => boolean;
14
+ getOptionId: (listId: string, index: number) => string;
15
+ setOptionRef: (index: number, node: HTMLElement | null) => void;
16
+ toggleOption: (option: TOption) => void;
17
+ selectOnlyOption: (option: TOption) => void;
18
+ renderOption: (option: TOption, state: MultiSelectOptionState) => MultiSelectOptionContent;
19
+ }>;
20
+ /** Рендерит одну selected/available-секцию, сохраняя global option indexes при группировке. */
21
+ export declare function MultiSelectOptionList<TOption>({ entries, sectionId, getOptionGroup, ...rowProps }: MultiSelectOptionListProps<TOption>): import("react").JSX.Element[];
22
+ export {};
23
+ //# sourceMappingURL=MultiSelectOptionList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiSelectOptionList.d.ts","sourceRoot":"","sources":["../../../src/multi-select/ui/MultiSelectOptionList.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAmC,KAAK,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAGtH,OAAO,EACN,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,MAAM,oBAAoB,CAAC;AAE5B,KAAK,0BAA0B,CAAC,OAAO,IAAI,QAAQ,CAAC;IACnD,OAAO,EAAE,SAAS,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,WAAW,CAAC,oBAAoB,CAAC,CAAC;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,oBAAoB,CAAC;IACxD,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,sBAAsB,GAAG,SAAS,CAAC;IACzE,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;IACjD,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACvD,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IAChE,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,gBAAgB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,sBAAsB,KAAK,wBAAwB,CAAC;CAC3F,CAAC,CAAC;AAEH,+FAA+F;AAC/F,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,QAAQ,EAAE,EAAE,0BAA0B,CAAC,OAAO,CAAC,iCAuBtI"}
@@ -0,0 +1,21 @@
1
+ import { type MultiSelectOptionContent, type MultiSelectOptionKey, type MultiSelectOptionState } from "./multiSelectTypes";
2
+ type MultiSelectOptionRowProps<TOption> = Readonly<{
3
+ option: TOption;
4
+ index: number;
5
+ listId: string;
6
+ activeIndex: number;
7
+ selectedKeys: ReadonlySet<MultiSelectOptionKey>;
8
+ query: string;
9
+ highlightQuery: string;
10
+ getOptionKey: (option: TOption) => MultiSelectOptionKey;
11
+ getOptionDisabled?: (option: TOption) => boolean;
12
+ getOptionId: (listId: string, index: number) => string;
13
+ setOptionRef: (index: number, node: HTMLElement | null) => void;
14
+ toggleOption: (option: TOption) => void;
15
+ selectOnlyOption: (option: TOption) => void;
16
+ renderOption: (option: TOption, state: MultiSelectOptionState) => MultiSelectOptionContent;
17
+ }>;
18
+ /** Одна интерактивная строка grid: checkbox меняет draft, основная кнопка подтверждает только эту опцию. */
19
+ export declare function MultiSelectOptionRow<TOption>({ option, index, listId, activeIndex, selectedKeys, query, highlightQuery, getOptionKey, getOptionDisabled, getOptionId, setOptionRef, toggleOption, selectOnlyOption, renderOption }: MultiSelectOptionRowProps<TOption>): import("react").JSX.Element;
20
+ export {};
21
+ //# sourceMappingURL=MultiSelectOptionRow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiSelectOptionRow.d.ts","sourceRoot":"","sources":["../../../src/multi-select/ui/MultiSelectOptionRow.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,wBAAwB,EAAE,KAAK,oBAAoB,EAAE,KAAK,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE3H,KAAK,yBAAyB,CAAC,OAAO,IAAI,QAAQ,CAAC;IAClD,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,WAAW,CAAC,oBAAoB,CAAC,CAAC;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,oBAAoB,CAAC;IACxD,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;IACjD,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACvD,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IAChE,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,gBAAgB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,sBAAsB,KAAK,wBAAwB,CAAC;CAC3F,CAAC,CAAC;AAEH,4GAA4G;AAC5G,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,EAC7C,MAAM,EACN,KAAK,EACL,MAAM,EACN,WAAW,EACX,YAAY,EACZ,KAAK,EACL,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,EAAE,yBAAyB,CAAC,OAAO,CAAC,+BA2CpC"}
@@ -0,0 +1,9 @@
1
+ import { type PropsWithChildren } from "react";
2
+ type MultiSelectOptionsWrapperProps = PropsWithChildren<{
3
+ isNoData?: boolean;
4
+ error?: string;
5
+ }>;
6
+ /** Выбирает одно доступное состояние тела popup, не меняя структуру самого grid. */
7
+ export declare function MultiSelectOptionsWrapper({ isNoData, error, children }: MultiSelectOptionsWrapperProps): import("react").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=MultiSelectOptionsWrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiSelectOptionsWrapper.d.ts","sourceRoot":"","sources":["../../../src/multi-select/ui/MultiSelectOptionsWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAM/C,KAAK,8BAA8B,GAAG,iBAAiB,CAAC;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf,CAAC,CAAC;AAEH,oFAAoF;AACpF,wBAAgB,yBAAyB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,8BAA8B,+BAUtG"}
@@ -1 +1 @@
1
- {"version":3,"file":"SerializableMultiSelect.d.ts","sourceRoot":"","sources":["../../../src/multi-select/ui/SerializableMultiSelect.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,KAAK,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAExD,KAAK,0BAA0B,CAAC,OAAO,SAAS,wBAAwB,IAAI;KAC1E,CAAC,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,KAAK,GAAG,KAAK,GAAG,CAAC;CAC3E,CAAC,MAAM,OAAO,CAAC,CAAC;AAEjB,MAAM,WAAW,4BAA4B,CAC5C,OAAO,SAAS,wBAAwB,EACxC,UAAU,SAAS,0BAA0B,CAAC,OAAO,CAAC,EACtD,YAAY,SAAS,MAAM,OAAO,CACjC,SAAQ,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;IAC5D,OAAO,EAAE,SAAS,OAAO,EAAE,CAAC;IAC5B,SAAS,EAAE,UAAU,CAAC;IACtB,WAAW,EAAE,YAAY,CAAC;IAC1B,UAAU,CAAC,EAAE,IAAI,CAAC;CAClB;AAwBD,wBAAgB,uBAAuB,CACtC,OAAO,SAAS,wBAAwB,EACxC,UAAU,SAAS,0BAA0B,CAAC,OAAO,CAAC,EACtD,YAAY,SAAS,MAAM,OAAO,EACjC,EACD,KAAK,EACL,WAAW,EACX,QAAQ,EACR,WAAW,EACX,IAAI,EACJ,OAAO,EACP,KAAK,EACL,QAAQ,EACR,SAAS,EACT,WAAW,EACX,UAAU,EACV,EAAE,4BAA4B,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,CAAC,+BAwBjE"}
1
+ {"version":3,"file":"SerializableMultiSelect.d.ts","sourceRoot":"","sources":["../../../src/multi-select/ui/SerializableMultiSelect.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,KAAK,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAExD,KAAK,0BAA0B,CAAC,OAAO,SAAS,wBAAwB,IAAI;KAC1E,CAAC,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,KAAK,GAAG,KAAK,GAAG,CAAC;CAC3E,CAAC,MAAM,OAAO,CAAC,CAAC;AAEjB,MAAM,WAAW,4BAA4B,CAC5C,OAAO,SAAS,wBAAwB,EACxC,UAAU,SAAS,0BAA0B,CAAC,OAAO,CAAC,EACtD,YAAY,SAAS,MAAM,OAAO,CACjC,SAAQ,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;IAC5D,OAAO,EAAE,SAAS,OAAO,EAAE,CAAC;IAC5B,SAAS,EAAE,UAAU,CAAC;IACtB,WAAW,EAAE,YAAY,CAAC;IAC1B,UAAU,CAAC,EAAE,IAAI,CAAC;CAClB;AAwBD,wBAAgB,uBAAuB,CACtC,OAAO,SAAS,wBAAwB,EACxC,UAAU,SAAS,0BAA0B,CAAC,OAAO,CAAC,EACtD,YAAY,SAAS,MAAM,OAAO,EACjC,EACD,KAAK,EACL,WAAW,EACX,QAAQ,EACR,WAAW,EACX,IAAI,EACJ,OAAO,EACP,KAAK,EACL,QAAQ,EACR,SAAS,EACT,WAAW,EACX,UAAU,EACV,EAAE,4BAA4B,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,CAAC,+BAwBjE"}
@@ -1,4 +1,6 @@
1
+ export * from "./DeprecatedMultiSelect";
1
2
  export * from "./MultiSelect";
3
+ export * from "./multiSelectTypes";
2
4
  export * from "./ODataDependentMultiSelect";
3
5
  export * from "./ODataDependentSegmentMultiSelect";
4
6
  export * from "./ODataMultiSelect";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/multi-select/ui/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oCAAoC,CAAC;AACnD,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/multi-select/ui/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oCAAoC,CAAC;AACnD,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC"}