@ryuzaki13/react-foundation-ui 1.6.10 → 1.6.12

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 (225) hide show
  1. package/dist/advanced-search/index.js +74 -72
  2. package/dist/advanced-search/index.js.map +1 -1
  3. package/dist/advanced-search/ui/AdvancedSearchModal.d.ts +2 -1
  4. package/dist/advanced-search/ui/AdvancedSearchModal.d.ts.map +1 -1
  5. package/dist/advanced-search/ui/AdvancedSearchModalSession.d.ts +2 -1
  6. package/dist/advanced-search/ui/AdvancedSearchModalSession.d.ts.map +1 -1
  7. package/dist/advanced-search/ui/AdvancedSearchSelect.d.ts +2 -1
  8. package/dist/advanced-search/ui/AdvancedSearchSelect.d.ts.map +1 -1
  9. package/dist/chunks/{TextEditorLexicalClient-CK9nZ-xo.js → TextEditorLexicalClient-C6b5N8AO.js} +2 -2
  10. package/dist/chunks/{TextEditorLexicalClient-CK9nZ-xo.js.map → TextEditorLexicalClient-C6b5N8AO.js.map} +1 -1
  11. package/dist/chunks/{date-input-jlNk62cO.js → date-input-C4GcKul6.js} +2 -2
  12. package/dist/chunks/{date-input-jlNk62cO.js.map → date-input-C4GcKul6.js.map} +1 -1
  13. package/dist/chunks/{radio-group-NhBL3fkD.js → radio-group-BAeJjyZ5.js} +2 -3
  14. package/dist/chunks/radio-group-BAeJjyZ5.js.map +1 -0
  15. package/dist/date-input/index.js +1 -1
  16. package/dist/preset-range-date-input/index.js +1 -1
  17. package/dist/radio-group/index.js +1 -1
  18. package/dist/styles.css +1 -1
  19. package/dist/text-editor/index.js +1 -1
  20. package/package.json +1 -1
  21. package/storybook-static/assets/{Badge-DnnIzscV.js → Badge-DcY6qhGt.js} +1 -1
  22. package/storybook-static/assets/{Badge.stories-BHoq-6Hl.js → Badge.stories-DOjr28o2.js} +1 -1
  23. package/storybook-static/assets/{BadgeList-D1yZfcj3.js → BadgeList-BVQqALTa.js} +1 -1
  24. package/storybook-static/assets/{Button-Ccjkmsfe.js → Button-CLvezOx2.js} +1 -1
  25. package/storybook-static/assets/{Button-CFY0i6K5.js → Button-DErRAg7J.js} +1 -1
  26. package/storybook-static/assets/{Button.stories-DAiDlLNe.js → Button.stories-D0rzleM2.js} +1 -1
  27. package/storybook-static/assets/{CalendarView-kmgPHiBr.js → CalendarView-BmqKDEsD.js} +1 -1
  28. package/storybook-static/assets/{CheckBox-DauEfEu9.js → CheckBox-B3F7gzaa.js} +1 -1
  29. package/storybook-static/assets/{CheckBox-D-Okklnt.js → CheckBox-BOHDpEo9.js} +1 -1
  30. package/storybook-static/assets/{CheckBox.stories-Dkiw8qFE.js → CheckBox.stories-uzWzWdBP.js} +1 -1
  31. package/storybook-static/assets/{Color-6AOWCN3U-B4AxDzH3.js → Color-6AOWCN3U-CtSlRHUs.js} +1 -1
  32. package/storybook-static/assets/{ContextMenu-DbJJ6fqN.js → ContextMenu-Cs0k4iXy.js} +1 -1
  33. package/storybook-static/assets/{ContextMenu-Di2Fs5Yl.js → ContextMenu-DY49owi0.js} +1 -1
  34. package/storybook-static/assets/{ContextMenu.stories-Cpf2GtvP.js → ContextMenu.stories-GKjmoJwq.js} +1 -1
  35. package/storybook-static/assets/{DateInput-B8ghw74S.js → DateInput-B7WxAsa1.js} +1 -1
  36. package/storybook-static/assets/{DateInput-olBEeMlo.js → DateInput-hcciPegh.js} +1 -1
  37. package/storybook-static/assets/{DateInput.stories-CkPUufbH.js → DateInput.stories-C15mR3FZ.js} +1 -1
  38. package/storybook-static/assets/{DateRangePresetSelect-CHqILMyE.js → DateRangePresetSelect-CmXwIBMW.js} +1 -1
  39. package/storybook-static/assets/{DateRangePresetSelect-Cmte_g8w.js → DateRangePresetSelect-Skj-Zapz.js} +1 -1
  40. package/storybook-static/assets/{DateRangePresetSelect.stories-CpQfW6DV.js → DateRangePresetSelect.stories-BonHaWgW.js} +1 -1
  41. package/storybook-static/assets/{Detail-BCH_ucGF.js → Detail-gdch7tvX.js} +1 -1
  42. package/storybook-static/assets/{Detail.stories-BnWXPYnV.js → Detail.stories-B7VB1iZ8.js} +1 -1
  43. package/storybook-static/assets/{Dialog-A3Gs1xTy.js → Dialog-CQdUc8lg.js} +1 -1
  44. package/storybook-static/assets/{Dialog-Bv5IPdD-.js → Dialog-DOIZeu7V.js} +1 -1
  45. package/storybook-static/assets/{Dialog.stories-DXanPD2Y.js → Dialog.stories-BxlH7I9g.js} +1 -1
  46. package/storybook-static/assets/{Disclosure-B-DUTxbB.js → Disclosure-B3Csn07F.js} +1 -1
  47. package/storybook-static/assets/{Disclosure.stories-D2OJer1r.js → Disclosure.stories-Cx8XZZw_.js} +1 -1
  48. package/storybook-static/assets/{DisclosureGroup-BqXb6GJ3.js → DisclosureGroup-DZVBqSip.js} +1 -1
  49. package/storybook-static/assets/{DocsRenderer-JROSPFPF-miyuaM_3.js → DocsRenderer-JROSPFPF-BVNC1n7w.js} +1 -1
  50. package/storybook-static/assets/{DropZone-CHjEWnwx.js → DropZone-BxcGeKE1.js} +1 -1
  51. package/storybook-static/assets/{DropZone-BMh-7-mB.js → DropZone-DH6WtgJ0.js} +1 -1
  52. package/storybook-static/assets/{DropZone.stories-Dyy0IWxa.js → DropZone.stories-DbwDQvRh.js} +1 -1
  53. package/storybook-static/assets/{DropdownMenu-BU_QX2pz.js → DropdownMenu-B6DzveQY.js} +1 -1
  54. package/storybook-static/assets/{ExpandableActionPanel-BASo0JGw.js → ExpandableActionPanel-D3inW6HP.js} +1 -1
  55. package/storybook-static/assets/{ExpandableActionPanel.stories-BbRAYtSA.js → ExpandableActionPanel.stories-9_MhTDyp.js} +1 -1
  56. package/storybook-static/assets/{Flex-mgZeAymN.js → Flex-JCm6TkNi.js} +1 -1
  57. package/storybook-static/assets/{Flex.stories-Dlggi_9g.js → Flex.stories-vEgafFFN.js} +1 -1
  58. package/storybook-static/assets/{FloatingPopover-CLP6oMZ6.js → FloatingPopover-CKJVdjqA.js} +1 -1
  59. package/storybook-static/assets/{FormattedTableCell-BSHTgPMG.js → FormattedTableCell-DyiUY_XU.js} +1 -1
  60. package/storybook-static/assets/{Grid-C1QhUZ48.js → Grid-BouDkAMn.js} +1 -1
  61. package/storybook-static/assets/{Grid.stories-CVWT3Ci0.js → Grid.stories-nwHnif7y.js} +1 -1
  62. package/storybook-static/assets/{ImageCropper.stories-B4TCmmi-.js → ImageCropper.stories-CTef1Ko1.js} +1 -1
  63. package/storybook-static/assets/{ImageRenderer-DG95Genl.js → ImageRenderer-D0T58E1p.js} +1 -1
  64. package/storybook-static/assets/{ImageRenderer.stories-CdGgwPFd.js → ImageRenderer.stories-BIBNCik1.js} +1 -1
  65. package/storybook-static/assets/{ImageView.stories-CN3pGawv.js → ImageView.stories-PBgF6i8o.js} +1 -1
  66. package/storybook-static/assets/{ImageViewer.stories-CJcY-lKw.js → ImageViewer.stories-QyAN0Jm7.js} +2 -2
  67. package/storybook-static/assets/{ImageViewerRuntime-Cq66TmOq.js → ImageViewerRuntime-BXul9lMa.js} +1 -1
  68. package/storybook-static/assets/{Input-NY67M82H.js → Input-DI_ErAU0.js} +1 -1
  69. package/storybook-static/assets/{Input-D_ZgMF5i.js → Input-DbjAQht-.js} +1 -1
  70. package/storybook-static/assets/{Input.stories-BATUG7aL.js → Input.stories-DQUDw-dZ.js} +1 -1
  71. package/storybook-static/assets/{InputDateTime-DPSeogym.js → InputDateTime-o5ZBNX8c.js} +1 -1
  72. package/storybook-static/assets/{InputDateTime.stories-DRfLZgCH.js → InputDateTime.stories-DciHI7sU.js} +1 -1
  73. package/storybook-static/assets/{InputFile-8n7UMrhQ.js → InputFile-C__aaBc0.js} +1 -1
  74. package/storybook-static/assets/{InputFile-P1CoCcBa.js → InputFile-ygnpApiy.js} +1 -1
  75. package/storybook-static/assets/{InputFile.stories-C2k4Vgkg.js → InputFile.stories-D9gn4cjK.js} +1 -1
  76. package/storybook-static/assets/{InputFiles-BaekSGF2.js → InputFiles-B-uw7HJ1.js} +1 -1
  77. package/storybook-static/assets/{InputFiles-BBni3vyF.js → InputFiles-DMaPsf1n.js} +1 -1
  78. package/storybook-static/assets/{InputFiles.stories-CTxT59Tw.js → InputFiles.stories-Brf5-0Ex.js} +1 -1
  79. package/storybook-static/assets/{InputFilesList-pMmnnjMt.js → InputFilesList-G9rSY7Ew.js} +1 -1
  80. package/storybook-static/assets/{InputImage-JlbbfGfE.js → InputImage-Bg4aW2tu.js} +1 -1
  81. package/storybook-static/assets/{InputImage-CXi6p_v_.js → InputImage-DC3ovCrm.js} +1 -1
  82. package/storybook-static/assets/{InputImage.stories-Cb_preM7.js → InputImage.stories-CjzWEMxy.js} +1 -1
  83. package/storybook-static/assets/{InteractiveComponents-Bc8Xhhjx.js → InteractiveComponents-uKrh6DG4.js} +1 -1
  84. package/storybook-static/assets/{InteractiveComponents.stories-CEQD-5ax.js → InteractiveComponents.stories-khMDo9eX.js} +1 -1
  85. package/storybook-static/assets/{LayoutPicker-DUFqKx3a.js → LayoutPicker-37AdYoXZ.js} +1 -1
  86. package/storybook-static/assets/{LayoutPicker-CzTXHZ99.js → LayoutPicker-BvXElxDT.js} +1 -1
  87. package/storybook-static/assets/{LayoutPicker.stories-CFrH1_Lp.js → LayoutPicker.stories-BiYp-g4W.js} +1 -1
  88. package/storybook-static/assets/{Listbox-BqN5IF-5.js → Listbox-DqRH-uIa.js} +1 -1
  89. package/storybook-static/assets/{Listbox-BzaFkRhh.js → Listbox-Y48zMyIW.js} +1 -1
  90. package/storybook-static/assets/{Listbox.stories-BWTPmMmD.js → Listbox.stories-C_UchIjW.js} +1 -1
  91. package/storybook-static/assets/{Modal-B4D-veXg.js → Modal-BLt2CUss.js} +1 -1
  92. package/storybook-static/assets/{Modal.stories-Cmzg1A84.js → Modal.stories-D0wRJtGa.js} +1 -1
  93. package/storybook-static/assets/{ModalManagerProvider-qUFPZmq_.js → ModalManagerProvider-DviWuOtB.js} +1 -1
  94. package/storybook-static/assets/{MultiSelect-aXpgpeWb.js → MultiSelect-CJrLmYe-.js} +1 -1
  95. package/storybook-static/assets/{MultiSelect-Dg7QHYhM.js → MultiSelect-DtGLGy8v.js} +1 -1
  96. package/storybook-static/assets/{MultiSelect.stories-BGyVF8sg.js → MultiSelect.stories-BaLHVCAU.js} +1 -1
  97. package/storybook-static/assets/{NoData-PhEXKwAq.js → NoData-BFNotopG.js} +1 -1
  98. package/storybook-static/assets/{NotificationsHost-D-vnN-hh.js → NotificationsHost-k9Hcrbbg.js} +1 -1
  99. package/storybook-static/assets/{NotificationsHost.stories-B84iG1qJ.js → NotificationsHost.stories-B07o9czA.js} +1 -1
  100. package/storybook-static/assets/{ODataMultiSelect-rAhzZ09q.js → ODataMultiSelect-BFK5rFzh.js} +1 -1
  101. package/storybook-static/assets/{ODataMultiSelect.stories-BgRLp_ST.js → ODataMultiSelect.stories-BrJFErio.js} +1 -1
  102. package/storybook-static/assets/{ODataSelect-CG54trvM.js → ODataSelect-D27nIUC-.js} +1 -1
  103. package/storybook-static/assets/{ODataSelect.stories-COep43rf.js → ODataSelect.stories-BHmhuwnU.js} +1 -1
  104. package/storybook-static/assets/{ODataTreeMultiSelect-DLf6k0wp.js → ODataTreeMultiSelect-D-XWkQ6C.js} +1 -1
  105. package/storybook-static/assets/{ODataTreeMultiSelect.stories-gy2rxVB_.js → ODataTreeMultiSelect.stories-_wPGg1TF.js} +1 -1
  106. package/storybook-static/assets/{ODataTreeSelect-Ci9LIOir.js → ODataTreeSelect-CMmOKNCb.js} +1 -1
  107. package/storybook-static/assets/{ODataTreeSelect.stories-BnvUjPcq.js → ODataTreeSelect.stories-DG5C0YQT.js} +1 -1
  108. package/storybook-static/assets/{OneStepScroller-1mihvlxv.js → OneStepScroller-DJKMVeIV.js} +1 -1
  109. package/storybook-static/assets/{PeriodSelect-CCrS6vvE.js → PeriodSelect-CfdKI-ZQ.js} +1 -1
  110. package/storybook-static/assets/{PeriodSelect-B2Hg1mxE.js → PeriodSelect-CiXkmjFn.js} +1 -1
  111. package/storybook-static/assets/{PeriodSelect.stories-7EzhEf6n.js → PeriodSelect.stories-BRIzJUwe.js} +1 -1
  112. package/storybook-static/assets/{PickerSelectionToolbar-Cnid4alk.js → PickerSelectionToolbar-VFoN-tr-.js} +1 -1
  113. package/storybook-static/assets/{PickerTriggerActions-Dzm0fGlQ.js → PickerTriggerActions-INCa0BwF.js} +1 -1
  114. package/storybook-static/assets/{Popover-DvelaPQh.js → Popover-DE_Nv3RN.js} +1 -1
  115. package/storybook-static/assets/{Popover-Ch6HySgl.js → Popover-Sy5dKqZY.js} +1 -1
  116. package/storybook-static/assets/{Popover.stories-BR5BVyoa.js → Popover.stories-BaBGQvUE.js} +1 -1
  117. package/storybook-static/assets/{PresetRangeDateInput-GplH0r6a.js → PresetRangeDateInput-BEkol3oJ.js} +1 -1
  118. package/storybook-static/assets/{PresetRangeDateInput-QHtNyYJA.js → PresetRangeDateInput-D6RSmUzP.js} +1 -1
  119. package/storybook-static/assets/{PresetRangeDateInput.stories-BVmvAtuU.js → PresetRangeDateInput.stories-C7PKRHvB.js} +1 -1
  120. package/storybook-static/assets/{PresetSelect-BXi0TbMc.js → PresetSelect-DGQ37jSc.js} +1 -1
  121. package/storybook-static/assets/{RadioButton-BLiATOSQ.js → RadioButton-4h1WrZHy.js} +1 -1
  122. package/storybook-static/assets/{RadioButton-BMiNe9MX.js → RadioButton-DTGzaVT3.js} +1 -1
  123. package/storybook-static/assets/{RadioButton.stories-DTTGcMA9.js → RadioButton.stories-BwwCGMt4.js} +1 -1
  124. package/storybook-static/assets/{RadioGroup-FhI9JeuU.css → RadioGroup-BU95Hbl0.css} +1 -1
  125. package/storybook-static/assets/{RadioGroup-D7MClwWV.js → RadioGroup-CCGPLLSR.js} +1 -1
  126. package/storybook-static/assets/{RadioGroup-C6AVoBON.js → RadioGroup-CLMlRxWD.js} +1 -1
  127. package/storybook-static/assets/{RadioGroup.stories-B3U4iHk3.js → RadioGroup.stories-DQOUSATM.js} +1 -1
  128. package/storybook-static/assets/{Scrollable-CJW4TGT-.js → Scrollable-Cen2Wssu.js} +1 -1
  129. package/storybook-static/assets/{Select-Dc3hr9Jz.js → Select-BnU_Ad9Q.js} +1 -1
  130. package/storybook-static/assets/{Select-40dnhr2I.js → Select-tPi1vIDV.js} +1 -1
  131. package/storybook-static/assets/{Select.stories-B8naPyjC.js → Select.stories-D8cCs9Su.js} +1 -1
  132. package/storybook-static/assets/{SelectOptionContent-DIGFQAWX.js → SelectOptionContent-DAbmaofN.js} +1 -1
  133. package/storybook-static/assets/{SerializableSelect-DqnkMj5o.js → SerializableSelect-CUjufEB4.js} +1 -1
  134. package/storybook-static/assets/{SerializableSelect.stories-CuRa1-Ro.js → SerializableSelect.stories-BWXxN0cF.js} +1 -1
  135. package/storybook-static/assets/{SingleDateTimeInput-CIdjXTPm.js → SingleDateTimeInput-B67d07su.js} +1 -1
  136. package/storybook-static/assets/{SingleDateTimeInput-nMQCuT7L.js → SingleDateTimeInput-DECKEQ4N.js} +1 -1
  137. package/storybook-static/assets/{SingleDateTimeInput.stories-B7cRNcF9.js → SingleDateTimeInput.stories-BOeq9K5L.js} +1 -1
  138. package/storybook-static/assets/{Slider-eYsdAZH7.js → Slider-DTj5x22j.js} +1 -1
  139. package/storybook-static/assets/{Slider-DeAmWQO_.js → Slider-RZ4WZjCM.js} +1 -1
  140. package/storybook-static/assets/{Slider.stories-Cr7MTPFV.js → Slider.stories-CeRPn_vO.js} +1 -1
  141. package/storybook-static/assets/{SliderInput-DcPYxz0m.js → SliderInput-D1MLbpp3.js} +1 -1
  142. package/storybook-static/assets/{SliderInput-B2RO08h8.js → SliderInput-f8S-alsP.js} +1 -1
  143. package/storybook-static/assets/{SliderInput.stories-Bi4W590S.js → SliderInput.stories-DIagI46P.js} +1 -1
  144. package/storybook-static/assets/{Sortable-CjF1l2MO.js → Sortable-C5J500vN.js} +1 -1
  145. package/storybook-static/assets/{Sortable.stories-D5UmA1pJ.js → Sortable.stories-BnGNB2NX.js} +1 -1
  146. package/storybook-static/assets/{Splitter-YR2rAfco.js → Splitter-DotgKdFh.js} +1 -1
  147. package/storybook-static/assets/{Splitter.stories-8jBFEiH3.js → Splitter.stories-DSAXYoF9.js} +1 -1
  148. package/storybook-static/assets/{StateSelect-CnHu_xAW.js → StateSelect-BU0_nPzW.js} +1 -1
  149. package/storybook-static/assets/{StateSelect-DmzwKn-U.js → StateSelect-DWIPmUIR.js} +1 -1
  150. package/storybook-static/assets/{StateSelect.stories-CZlHA-Fl.js → StateSelect.stories-EJLDkZ19.js} +1 -1
  151. package/storybook-static/assets/{StringToggle.stories-CVdgIzhD.js → StringToggle.stories-7JfoWBy3.js} +1 -1
  152. package/storybook-static/assets/{Switch-E68YY2rp.js → Switch-BmxucPIz.js} +1 -1
  153. package/storybook-static/assets/{Switch-CxeG787q.js → Switch-D1FTqj0u.js} +1 -1
  154. package/storybook-static/assets/{Switch.stories-DDlniUif.js → Switch.stories-DcvGm8IA.js} +1 -1
  155. package/storybook-static/assets/{Table-G4VubWji.js → Table-DIK98AeD.js} +1 -1
  156. package/storybook-static/assets/{Table.stories-D2n_Y5vc.js → Table.stories-XoMMDbM6.js} +1 -1
  157. package/storybook-static/assets/{Tabs-C2n0v5po.js → Tabs-BxvCoXdD.js} +1 -1
  158. package/storybook-static/assets/{Tabs.stories-BzrndKOk.js → Tabs.stories-DupvhpD5.js} +1 -1
  159. package/storybook-static/assets/{TabsBox-DdaJEuvL.js → TabsBox-Bw0nsRlS.js} +1 -1
  160. package/storybook-static/assets/{TagInput-CKb9ceOo.js → TagInput-BURFVYsj.js} +1 -1
  161. package/storybook-static/assets/{TagInput.stories-D_dlbmh2.js → TagInput.stories-DlQuGbIi.js} +1 -1
  162. package/storybook-static/assets/{Text-D3ywiBsZ.js → Text-CtOgHIoX.js} +1 -1
  163. package/storybook-static/assets/{Textarea-D48QOI9G.js → Textarea-DvOaBEtH.js} +1 -1
  164. package/storybook-static/assets/{Textarea-Bk4KZGKW.js → Textarea-_RQ1nFxW.js} +1 -1
  165. package/storybook-static/assets/{Textarea.stories-CGktrasz.js → Textarea.stories-CamMJOgu.js} +1 -1
  166. package/storybook-static/assets/{TimePanel-Dwdp8Rux.js → TimePanel-wB3U8Ex5.js} +1 -1
  167. package/storybook-static/assets/{TimePanel.stories-DFZS8o8M.js → TimePanel.stories-uk0ni5TB.js} +1 -1
  168. package/storybook-static/assets/{Toggle-BZSRDrip.js → Toggle-C08fKqPz.js} +1 -1
  169. package/storybook-static/assets/{Toggle-BOYRoy4d.js → Toggle-tMOrnnId.js} +1 -1
  170. package/storybook-static/assets/{Toggle.stories-BHFWDyUf.js → Toggle.stories-D5ttoNph.js} +1 -1
  171. package/storybook-static/assets/{TreeMultiSelect-CQZdepaf.js → TreeMultiSelect-CC3Ro1HW.js} +1 -1
  172. package/storybook-static/assets/{TreeMultiSelect-DvmPJ57x.js → TreeMultiSelect-Dq7UxpDI.js} +1 -1
  173. package/storybook-static/assets/{TreeMultiSelect.stories-DhICY4PY.js → TreeMultiSelect.stories-D07rkjBe.js} +1 -1
  174. package/storybook-static/assets/{TreePickerBase-BjA8T07X.js → TreePickerBase-DPVMwILr.js} +1 -1
  175. package/storybook-static/assets/{TreeSelect-Cj1pwNqe.js → TreeSelect-CvALKq7G.js} +1 -1
  176. package/storybook-static/assets/{TreeSelect-tXVS8YG0.js → TreeSelect-aSPP6LzM.js} +1 -1
  177. package/storybook-static/assets/{TreeSelect.stories-tiHcI5io.js → TreeSelect.stories-4WPDt9dG.js} +1 -1
  178. package/storybook-static/assets/{TreeTable-D_uAcnNc.js → TreeTable-DOHSGrd6.js} +1 -1
  179. package/storybook-static/assets/{TreeTable.stories-93B5XKxY.js → TreeTable.stories-CgiB525b.js} +1 -1
  180. package/storybook-static/assets/{async-DEUD6n36.js → async-DC-Cmvip.js} +1 -1
  181. package/storybook-static/assets/{blocks-BcMkLvd1.js → blocks-DkLPipTQ.js} +3 -3
  182. package/storybook-static/assets/{browserAndReact-qKlFbjJj.js → browserAndReact-h-OOL2Lo.js} +1 -1
  183. package/storybook-static/assets/{check-3-SRFJyA.js → check-DCksZOfl.js} +1 -1
  184. package/storybook-static/assets/{chevron-down-BZbfqBQh.js → chevron-down-DIYGXq1Z.js} +1 -1
  185. package/storybook-static/assets/{chevron-left-_vcKuAp5.js → chevron-left-DTt_e6yw.js} +1 -1
  186. package/storybook-static/assets/{chevron-right-BAAXYJ2E.js → chevron-right-D5pGxJNk.js} +1 -1
  187. package/storybook-static/assets/{chunk-W22LQPXL-CfL2PyUl.js → chunk-W22LQPXL-UTSazISf.js} +1 -1
  188. package/storybook-static/assets/{circle-alert-DTPBhENY.js → circle-alert-BnjKQOSC.js} +1 -1
  189. package/storybook-static/assets/{circle-check-D7b8E3mW.js → circle-check-CEAfOwEY.js} +1 -1
  190. package/storybook-static/assets/{components-BnZIwq8w.js → components-DPruit8G.js} +3 -3
  191. package/storybook-static/assets/{contextMenu-pvmuHe53.js → contextMenu-BUxHigJ4.js} +1 -1
  192. package/storybook-static/assets/{defaultRenderers-D6T6JpdW.js → defaultRenderers-Dc4yWvu_.js} +1 -1
  193. package/storybook-static/assets/{download-lwI8cHgy.js → download-DWevptnL.js} +1 -1
  194. package/storybook-static/assets/{filesAndExcel-Q-wmkH6Y.js → filesAndExcel-BB0bw-ee.js} +1 -1
  195. package/storybook-static/assets/{floating-ui.react-DLR5jnN2.js → floating-ui.react-TvNkEeW6.js} +1 -1
  196. package/storybook-static/assets/{formatters-CWktRR9z.js → formatters-BoRTr7JH.js} +1 -1
  197. package/storybook-static/assets/{formatters-runtime-D6QFFJBF.js → formatters-runtime-BGctorD8.js} +1 -1
  198. package/storybook-static/assets/{foundationLib-B7nxMYYh.js → foundationLib-UZWisr5w.js} +1 -1
  199. package/storybook-static/assets/{hooks-BWUDxzY0.js → hooks-CvLooy2_.js} +1 -1
  200. package/storybook-static/assets/iframe-BSSUJvjh.js +1 -0
  201. package/storybook-static/assets/{iframe-CIellu9v.js → iframe-GrlyTB2d.js} +3 -3
  202. package/storybook-static/assets/{info-CuoGznVe.js → info-DAnq7Q2v.js} +1 -1
  203. package/storybook-static/assets/{odata-Cq0bbI-3.js → odata-BPGjAOCV.js} +1 -1
  204. package/storybook-static/assets/{odataAndTables-C0h3xqdz.js → odataAndTables-CCaCXtgA.js} +1 -1
  205. package/storybook-static/assets/{odataFetchFn-CY1sR78d.js → odataFetchFn-svFtvGnO.js} +1 -1
  206. package/storybook-static/assets/{odataStoryFixtures-_HZ5M5fp.js → odataStoryFixtures-BH1suo55.js} +1 -1
  207. package/storybook-static/assets/{persisted-CIHYsH5h.js → persisted-DqkRjmkT.js} +1 -1
  208. package/storybook-static/assets/{pureUtilities-Dv18ql_4.js → pureUtilities-Dc4E9g04.js} +1 -1
  209. package/storybook-static/assets/{react-CLuaYg_3.js → react-aw9ULQBG.js} +1 -1
  210. package/storybook-static/assets/{refresh-cw-CFCqE9XP.js → refresh-cw-B5l8FyVQ.js} +1 -1
  211. package/storybook-static/assets/{runtimeAndState-S43KHhCI.js → runtimeAndState-CRqbhjzt.js} +1 -1
  212. package/storybook-static/assets/{settings-2-CzNtf8Lk.js → settings-2-TFL4EzMt.js} +1 -1
  213. package/storybook-static/assets/{sortable-DA9DwkQa.js → sortable-BXEc_YZy.js} +1 -1
  214. package/storybook-static/assets/{syntaxhighlighter-T5IQBZDB-C1KV56kZ.js → syntaxhighlighter-T5IQBZDB-C24SZ6Q7.js} +1 -1
  215. package/storybook-static/assets/{trash-2-D56gwmuR.js → trash-2-DTVd4Ip1.js} +1 -1
  216. package/storybook-static/assets/{triangle-alert-CgwCAcNK.js → triangle-alert-BQEKW-L1.js} +1 -1
  217. package/storybook-static/assets/{useODataSelectBase-aQn55F6I.js → useODataSelectBase-CPyzVGOz.js} +1 -1
  218. package/storybook-static/assets/{useODataTreeData-CSlbz8V8.js → useODataTreeData-BQfuMLsY.js} +1 -1
  219. package/storybook-static/assets/{usePickerQuery-C-D9DFII.js → usePickerQuery-67yOHzs_.js} +1 -1
  220. package/storybook-static/assets/{usePickerTriggerController-BlJxBmyk.js → usePickerTriggerController-DlzLjIYg.js} +1 -1
  221. package/storybook-static/assets/{x-BqKLZDBl.js → x-BkudVgxL.js} +1 -1
  222. package/storybook-static/iframe.html +2 -2
  223. package/storybook-static/project.json +1 -1
  224. package/dist/chunks/radio-group-NhBL3fkD.js.map +0 -1
  225. package/storybook-static/assets/iframe-B72v60rl.js +0 -1
@@ -164,70 +164,70 @@ function V(e, t = []) {
164
164
  }
165
165
  //#endregion
166
166
  //#region src/advanced-search/ui/AdvancedSearchModalSession.tsx
167
- function H({ onClose: e, onItemsSelect: r, config: i, initialSelectedItems: p }) {
168
- let m = y(() => i.columns.map((e) => ({
167
+ function H({ onClose: e, onItemsSelect: r, title: i, config: p, initialSelectedItems: m }) {
168
+ let b = y(() => p.columns.map((e) => ({
169
169
  id: e.key,
170
170
  accessorKey: e.key,
171
171
  header: e.label,
172
172
  meta: { width: e.width || "auto" }
173
- })), [i.columns]), { columns: b, isLoading: x } = S({
174
- service: i.odata.service,
175
- target: i.odata.target,
173
+ })), [p.columns]), { columns: x, isLoading: C } = S({
174
+ service: p.odata.service,
175
+ target: p.odata.target,
176
176
  mode: "enrich",
177
- columns: m
178
- }), { query: C, items: w, searchTerm: T, setSearch: E, clearSearch: D, filters: O, setFilters: k } = R(i), { selectedItems: A, deselect: N, replaceSelection: P } = V(i, p), F = v((e) => String(e[i.leadingKey]), [i.leadingKey]), I = y(() => A.map((e) => String(e[i.leadingKey])), [A, i.leadingKey]), L = y(() => new Set(w.map((e) => String(e[i.leadingKey]))), [w, i.leadingKey]), z = v(() => {
179
- C.hasNextPage && !C.isFetchingNextPage && C.fetchNextPage();
180
- }, [C]), B = v((e) => {
181
- let t = new Set(e.map((e) => String(e[i.leadingKey]))), n = A.filter((e) => !L.has(String(e[i.leadingKey]))), r = w.filter((e) => t.has(String(e[i.leadingKey])));
182
- P([...n, ...r]);
177
+ columns: b
178
+ }), { query: w, items: T, searchTerm: E, setSearch: D, clearSearch: O, filters: k, setFilters: A } = R(p), { selectedItems: N, deselect: P, replaceSelection: F } = V(p, m), I = v((e) => String(e[p.leadingKey]), [p.leadingKey]), L = y(() => N.map((e) => String(e[p.leadingKey])), [N, p.leadingKey]), z = y(() => new Set(T.map((e) => String(e[p.leadingKey]))), [T, p.leadingKey]), B = v(() => {
179
+ w.hasNextPage && !w.isFetchingNextPage && w.fetchNextPage();
180
+ }, [w]), H = v((e) => {
181
+ let t = new Set(e.map((e) => String(e[p.leadingKey]))), n = N.filter((e) => !z.has(String(e[p.leadingKey]))), r = T.filter((e) => t.has(String(e[p.leadingKey])));
182
+ F([...n, ...r]);
183
183
  }, [
184
- i.leadingKey,
185
- w,
186
- P,
187
- A,
188
- L
189
- ]), H = v((e) => {
190
- N(String(e[i.leadingKey]));
191
- }, [i.leadingKey, N]), U = v(() => {
192
- r(A), e();
184
+ p.leadingKey,
185
+ T,
186
+ F,
187
+ N,
188
+ z
189
+ ]), U = v((e) => {
190
+ P(String(e[p.leadingKey]));
191
+ }, [p.leadingKey, P]), W = v(() => {
192
+ r(N), e();
193
193
  }, [
194
- A,
194
+ N,
195
195
  r,
196
196
  e
197
- ]), W = y(() => {
198
- if ("segments" in i && i.segments) {
199
- let e = Object.keys(i.segments);
197
+ ]), G = y(() => {
198
+ if ("segments" in p && p.segments) {
199
+ let e = Object.keys(p.segments);
200
200
  if (e.length) return {
201
201
  odata: {
202
- ...i.odata,
202
+ ...p.odata,
203
203
  limitedKeys: e
204
204
  },
205
- segments: i.segments,
206
- model: i.model
205
+ segments: p.segments,
206
+ model: p.model
207
207
  };
208
208
  }
209
- }, [i]);
209
+ }, [p]);
210
210
  return /* @__PURE__ */ M(l, {
211
211
  isOpen: !0,
212
212
  onClose: e,
213
- title: i.title,
213
+ title: i || p.title,
214
214
  size: "lg",
215
215
  height: "min(50em, 80dvh)",
216
216
  children: [
217
217
  /* @__PURE__ */ j(s, { children: /* @__PURE__ */ M(a, {
218
218
  gap: "sm",
219
- children: [W && /* @__PURE__ */ j(g, {
220
- odata: W.odata,
221
- segments: W.segments,
222
- model: W.model,
223
- values: O,
224
- onChange: k
219
+ children: [G && /* @__PURE__ */ j(g, {
220
+ odata: G.odata,
221
+ segments: G.segments,
222
+ model: G.model,
223
+ values: k,
224
+ onChange: A
225
225
  }), /* @__PURE__ */ j(h, {
226
226
  size: "md",
227
- placeholder: i.searchLabel ?? "Введите поисковый запрос",
228
- value: T,
229
- onChange: E,
230
- onClear: D,
227
+ placeholder: p.searchLabel ?? "Введите поисковый запрос",
228
+ value: E,
229
+ onChange: D,
230
+ onClear: O,
231
231
  className: "flexGrow"
232
232
  })]
233
233
  }) }),
@@ -236,28 +236,28 @@ function H({ onClose: e, onItemsSelect: r, config: i, initialSelectedItems: p })
236
236
  templateRows: "1fr auto",
237
237
  className: "h100",
238
238
  children: [/* @__PURE__ */ j(_, {
239
- columns: b,
240
- data: w,
239
+ columns: x,
240
+ data: T,
241
241
  selectionMode: "multi",
242
- selectedRowIds: I,
243
- getRowId: F,
244
- isLoading: C.isLoading || x,
245
- isFetching: C.isFetching,
246
- onRowSelectionChange: B,
247
- onReachEnd: z,
242
+ selectedRowIds: L,
243
+ getRowId: I,
244
+ isLoading: w.isLoading || C,
245
+ isFetching: w.isFetching,
246
+ onRowSelectionChange: H,
247
+ onReachEnd: B,
248
248
  className: "w100"
249
249
  }), /* @__PURE__ */ j("div", {
250
250
  className: "marginBlockMd border",
251
251
  children: /* @__PURE__ */ j(n, {
252
252
  className: "paddingSm",
253
253
  height: "6em",
254
- children: /* @__PURE__ */ j(f, { children: A.map((e) => /* @__PURE__ */ j(d, {
254
+ children: /* @__PURE__ */ j(f, { children: N.map((e) => /* @__PURE__ */ j(d, {
255
255
  size: "md",
256
256
  tone: "info",
257
257
  appearance: "outline",
258
- onRemove: () => H(e),
259
- children: i.leadingText && e[i.leadingText] || e[i.leadingKey]
260
- }, e[i.leadingKey])) })
258
+ onRemove: () => U(e),
259
+ children: p.leadingText && e[p.leadingText] || e[p.leadingKey]
260
+ }, e[p.leadingKey])) })
261
261
  })
262
262
  })]
263
263
  }) }),
@@ -266,7 +266,7 @@ function H({ onClose: e, onItemsSelect: r, config: i, initialSelectedItems: p })
266
266
  children: "Отмена"
267
267
  }), /* @__PURE__ */ j(t, {
268
268
  variant: "successOutline",
269
- onClick: U,
269
+ onClick: W,
270
270
  children: "Выбрать"
271
271
  })] })
272
272
  ]
@@ -282,16 +282,17 @@ function U(e, t) {
282
282
  selectedIds: t.map((t) => String(t[e.leadingKey])).sort()
283
283
  });
284
284
  }
285
- function W({ onClose: e, onItemsSelect: n, initialSelection: a, config: o }) {
285
+ function W({ onClose: e, onItemsSelect: n, initialSelection: a, title: o, config: s }) {
286
286
  return a.status === "ready" ? /* @__PURE__ */ j(H, {
287
- config: o,
287
+ title: o,
288
+ config: s,
288
289
  onClose: e,
289
290
  onItemsSelect: n,
290
291
  initialSelectedItems: a.items
291
- }, U(o, a.items)) : /* @__PURE__ */ M(l, {
292
+ }, U(s, a.items)) : /* @__PURE__ */ M(l, {
292
293
  isOpen: !0,
293
294
  onClose: e,
294
- title: o.title,
295
+ title: o || s.title,
295
296
  size: "lg",
296
297
  height: "min(50em, 80dvh)",
297
298
  children: [/* @__PURE__ */ j(u, { children: a.status === "loading" ? /* @__PURE__ */ j(i, { text: "Загружаем выбранные элементы..." }) : /* @__PURE__ */ j(r, {
@@ -369,26 +370,27 @@ var G = ({ label: t, description: n, disabled: r, size: i, placeholder: o = "В
369
370
  ]
370
371
  });
371
372
  }, K = [];
372
- function q({ value: e = [], onChange: t, config: n, ...r }) {
373
- let [i, a] = b(!1), o = z(n, e), s = o.data, c = e.length === 0 ? {
373
+ function q({ value: e = [], onChange: t, title: n, config: r, ...i }) {
374
+ let [a, o] = b(!1), s = z(r, e), c = s.data, l = e.length === 0 ? {
374
375
  status: "ready",
375
376
  items: K
376
- } : s === void 0 ? o.isError ? { status: "error" } : { status: "loading" } : {
377
+ } : c === void 0 ? s.isError ? { status: "error" } : { status: "loading" } : {
377
378
  status: "ready",
378
- items: s
379
- }, l = v(() => a(!0), []), u = v(() => a(!1), []), d = v(() => t([]), [t]), f = v((e) => t(e.map((e) => String(e[n.leadingKey]))), [n.leadingKey, t]), p = v((e) => {
380
- if (e?.length) return e.length > 1 ? `Выбрано ${e.length} элем.` : `${n.leadingText && e[0][n.leadingText] || e[0][n.leadingKey]}`;
381
- }, [n.leadingKey, n.leadingText]);
379
+ items: c
380
+ }, u = v(() => o(!0), []), d = v(() => o(!1), []), f = v(() => t([]), [t]), p = v((e) => t(e.map((e) => String(e[r.leadingKey]))), [r.leadingKey, t]), m = v((e) => {
381
+ if (e?.length) return e.length > 1 ? `Выбрано ${e.length} элем.` : `${r.leadingText && e[0][r.leadingText] || e[0][r.leadingKey]}`;
382
+ }, [r.leadingKey, r.leadingText]);
382
383
  return /* @__PURE__ */ M(A, { children: [/* @__PURE__ */ j(G, {
383
- ...r,
384
- token: p(s),
385
- onOpen: l,
386
- onClear: d
387
- }), i && /* @__PURE__ */ j(W, {
388
- config: n,
389
- onClose: u,
390
- onItemsSelect: f,
391
- initialSelection: c
384
+ ...i,
385
+ token: m(c),
386
+ onOpen: u,
387
+ onClear: f
388
+ }), a && /* @__PURE__ */ j(W, {
389
+ title: n,
390
+ config: r,
391
+ onClose: d,
392
+ onItemsSelect: p,
393
+ initialSelection: l
392
394
  })] });
393
395
  }
394
396
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/advanced-search/lib/searchParts.ts","../../src/advanced-search/model/useAdvancedSearch.ts","../../src/advanced-search/model/useAdvancedSearchInitialSelected.ts","../../src/advanced-search/model/useAdvancedSearchSelection.ts","../../src/advanced-search/ui/AdvancedSearchModalSession.tsx","../../src/advanced-search/ui/AdvancedSearchModal.tsx","../../src/advanced-search/ui/AdvancedSearchSelectUI.tsx","../../src/advanced-search/ui/AdvancedSearchSelect.tsx"],"sourcesContent":["export function buildSearchParts(searchTerm: string) {\n\tconst term = searchTerm.trim();\n\tif (!term) {\n\t\treturn [];\n\t}\n\n\tconst searchParts = term\n\t\t.split(\"*\")\n\t\t.map((part) => part.trim())\n\t\t.filter((part) => part.length);\n\n\treturn searchParts;\n\n\t// const filterConditions = searchKeys.map((key) => {\n\t// \treturn searchParts.map((part) => `substringof('${part}',${String(key)})`).join(\" and \");\n\t// });\n\n\t// return `(${filterConditions.join(\" or \")})`;\n}\n\nexport function filterBySearchParts<T extends Record<string, string>>(items: T[], searchParts: string[], searchKeys: (keyof T)[]) {\n\tconst lowerSearchParts = searchParts.map((part) => part.toLowerCase());\n\n\treturn items.filter((item) => {\n\t\tfor (const key of searchKeys) {\n\t\t\tconst value = String(item[key] || \"\").toLowerCase();\n\n\t\t\tlet lastIndex = 0;\n\t\t\tlet allPartsFound = true;\n\n\t\t\t// Ищем каждую часть строго после предыдущей\n\t\t\tfor (const part of lowerSearchParts) {\n\t\t\t\tconst index = value.indexOf(part, lastIndex);\n\t\t\t\tif (index === -1) {\n\t\t\t\t\tallPartsFound = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tlastIndex = index + part.length; // следующая часть после найденной\n\t\t\t}\n\n\t\t\tif (allPartsFound) return true;\n\t\t}\n\t\treturn false;\n\t});\n\n\t// С регуляркой медленнее в 2-3 раза\n\n\t// // Паттерн: первая часть, затем любое количество символов, затем вторая часть\n\t// const searchPattern = searchParts.join(\".*?\");\n\t// const regExp = new RegExp(searchPattern, \"i\");\n\n\t// return items.filter((item) => {\n\t// \tfor (const key of searchKeys) {\n\t// \t\tif (regExp.test(item[key])) {\n\t// \t\t\treturn true;\n\t// \t\t}\n\t// \t}\n\t// \treturn false;\n\t// });\n}\n","import { useCallback, useMemo, useState } from \"react\";\n\nimport { odataQueryFn } from \"@ryuzaki13/react-foundation-api/odata\";\nimport { createFilterContains, createFilterEqual } from \"@ryuzaki13/react-foundation-lib/odata-service\";\nimport { useInfiniteQuery } from \"@tanstack/react-query\";\n\nimport { buildSearchParts, filterBySearchParts } from \"../lib\";\n\nimport { SearchConfig } from \"./types\";\n\nconst PAGE_SIZE = 50;\n\nexport function useAdvancedSearch<T extends Record<string, string>>(config: SearchConfig<T>) {\n\tconst [term, setTerm] = useState(\"\");\n\tconst [filters, setFilters] = useState<Record<string, string[]>>(() =>\n\t\tObject.keys(config.segments ?? {}).reduce(\n\t\t\t(acc, key) => {\n\t\t\t\tacc[key] = [];\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{} as Record<string, string[]>\n\t\t)\n\t);\n\n\tconst searchParts = buildSearchParts(term);\n\tconst isComplexSearch = searchParts.length > 1;\n\n\tconst top = isComplexSearch ? 5000 : PAGE_SIZE;\n\n\tconst query = useInfiniteQuery({\n\t\tqueryKey: [\"search\", config.odata.service, config.odata.target, filters, term],\n\t\tqueryFn: async ({ pageParam = 0, signal, client }) => {\n\t\t\tconst columnKeys = config.columns.map((col) => col.key);\n\n\t\t\tconst result = await odataQueryFn<T>({\n\t\t\t\todata: {\n\t\t\t\t\tservice: config.odata.service,\n\t\t\t\t\ttarget: config.odata.target\n\t\t\t\t},\n\t\t\t\toptions: {\n\t\t\t\t\ttop: top,\n\t\t\t\t\tskip: pageParam,\n\t\t\t\t\tselect: columnKeys,\n\t\t\t\t\texpression: {\n\t\t\t\t\t\tand: true,\n\t\t\t\t\t\tfilters: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tfilters: searchParts\n\t\t\t\t\t\t\t\t\t? config.searchKeys.map((key) => ({\n\t\t\t\t\t\t\t\t\t\t\tfilters: searchParts.map((part) => createFilterContains(key, part))\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tand: true,\n\t\t\t\t\t\t\t\tfilters: Object.keys(filters).map((key) => createFilterEqual(key, filters[key]))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\tsorts: [{ key: config.leadingKey }]\n\t\t\t\t}\n\t\t\t})({ signal, client });\n\n\t\t\tif (isComplexSearch) {\n\t\t\t\treturn filterBySearchParts(result.data, searchParts, config.searchKeys);\n\t\t\t}\n\n\t\t\treturn result.data;\n\t\t},\n\t\tgetNextPageParam: (lastPage, allPages) => {\n\t\t\tif (lastPage.length < top) return undefined;\n\t\t\treturn allPages.length * top;\n\t\t},\n\t\tinitialPageParam: 0\n\t});\n\n\tconst search = useCallback((term: string) => {\n\t\tsetTerm(term);\n\t}, []);\n\n\tconst clearSearch = useCallback(() => {\n\t\tsetTerm(\"\");\n\t}, []);\n\n\tconst items = useMemo(() => {\n\t\treturn query.data?.pages.flatMap((page) => page) ?? [];\n\t}, [query.data?.pages]);\n\n\treturn {\n\t\tquery,\n\t\titems,\n\t\tsearchTerm: term,\n\t\tsetSearch: search,\n\t\tclearSearch,\n\t\tfilters,\n\t\tsetFilters\n\t};\n}\n","import { odataQueryFn } from \"@ryuzaki13/react-foundation-api/odata\";\nimport { createFilterEqual, unwrapODataQueryResult } from \"@ryuzaki13/react-foundation-lib/odata-service\";\nimport { useQuery } from \"@tanstack/react-query\";\n\nimport { SearchConfig } from \"./types\";\n\n/**\n * Хук для поиска клиентов с поддержкой бесконечной прокрутки через OData\n */\nexport function useAdvancedSearchInitialSelected<T extends Record<string, string>>(\n\tconfig: SearchConfig<T>,\n\tinitialSelectedKeys: string[] = []\n) {\n\tconst query = useQuery({\n\t\tqueryKey: [\"searchSelected\", config.odata.service, config.odata.target, initialSelectedKeys],\n\t\tqueryFn: async ({ client, signal }) => {\n\t\t\tif (initialSelectedKeys.length === 0) {\n\t\t\t\treturn { data: [] as T[], totalCount: undefined };\n\t\t\t}\n\n\t\t\t// Получаем ключи колонок для select параметра\n\t\t\tconst columnKeys = config.columns.map((col) => col.key);\n\n\t\t\t// Выполняем OData запрос\n\t\t\treturn await odataQueryFn<T>({\n\t\t\t\todata: { service: config.odata.service, target: config.odata.target },\n\t\t\t\toptions: {\n\t\t\t\t\tselect: columnKeys,\n\t\t\t\t\texpression: {\n\t\t\t\t\t\tfilters: initialSelectedKeys.map((key) => createFilterEqual(config.leadingKey, key))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})({ client, signal });\n\t\t},\n\t\tenabled: initialSelectedKeys.length > 0\n\t});\n\n\treturn unwrapODataQueryResult(query);\n}\n","import { useCallback, useState } from \"react\";\n\nimport { SearchConfig } from \"./types\";\n\n/**\n * Создаёт независимый набор выбора и сохраняет последнюю строку для каждого ведущего ключа.\n * Это единая структурная граница как для initial snapshot модалки, так и для дальнейших\n * обновлений выбора из таблицы.\n */\nfunction buildAdvancedSearchSelection<T extends Record<string, string>>(items: readonly T[], leadingKey: keyof T): T[] {\n\tconst selectionById = new Map<string, T>();\n\n\tfor (const item of items) {\n\t\tselectionById.set(String(item[leadingKey]), item);\n\t}\n\n\treturn Array.from(selectionById.values());\n}\n\n/**\n * Хук для управления выбором клиентов\n */\nexport function useAdvancedSearchSelection<T extends Record<string, string>>(\n\tconfig: SearchConfig<T>,\n\tinitialSelectedItems: readonly T[] = []\n) {\n\tconst [selectedItems, setSelectedItems] = useState<T[]>(() => buildAdvancedSearchSelection(initialSelectedItems, config.leadingKey));\n\n\t/**\n\t * Сравнивает наборы выбранных элементов по ведущему ключу без учёта порядка.\n\t */\n\tconst areSelectionsEqual = useCallback(\n\t\t(left: readonly T[], right: readonly T[]) => {\n\t\t\tif (left.length !== right.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst rightIds = new Set(right.map((item) => String(item[config.leadingKey])));\n\n\t\t\treturn left.every((item) => rightIds.has(String(item[config.leadingKey])));\n\t\t},\n\t\t[config.leadingKey]\n\t);\n\n\t/**\n\t * Нормализует новый набор выбора и удаляет дубликаты по ведущему ключу.\n\t */\n\tconst replaceSelection = useCallback(\n\t\t(nextItems: readonly T[]) => {\n\t\t\tsetSelectedItems((prev) => {\n\t\t\t\tconst normalizedItems = buildAdvancedSearchSelection(nextItems, config.leadingKey);\n\n\t\t\t\treturn areSelectionsEqual(prev, normalizedItems) ? prev : normalizedItems;\n\t\t\t});\n\t\t},\n\t\t[areSelectionsEqual, config.leadingKey]\n\t);\n\n\tconst select = useCallback(\n\t\t(item: T) => {\n\t\t\tsetSelectedItems((prev) => {\n\t\t\t\t// Проверяем, не выбран ли уже этот клиент\n\t\t\t\tif (prev.some((c) => c[config.leadingKey] === item[config.leadingKey])) {\n\t\t\t\t\treturn prev;\n\t\t\t\t}\n\t\t\t\treturn [...prev, item];\n\t\t\t});\n\t\t},\n\t\t[config.leadingKey]\n\t);\n\n\tconst deselect = useCallback(\n\t\t(id: string) => {\n\t\t\tsetSelectedItems((prev) => prev.filter((item) => item[config.leadingKey] !== id));\n\t\t},\n\t\t[config.leadingKey]\n\t);\n\n\tconst clearSelection = useCallback(() => {\n\t\tsetSelectedItems([]);\n\t}, []);\n\n\tconst isSelected = useCallback(\n\t\t(id: string) => {\n\t\t\treturn selectedItems.some((item) => item[config.leadingKey] === id);\n\t\t},\n\t\t[config.leadingKey, selectedItems]\n\t);\n\n\treturn {\n\t\tselectedItems,\n\t\tselect,\n\t\tdeselect,\n\t\treplaceSelection,\n\t\tclearSelection,\n\t\tisSelected\n\t};\n}\n","import { useCallback, useMemo } from \"react\";\n\nimport { useODataTableColumns } from \"@ryuzaki13/react-foundation-api/odata\";\nimport { type TableColumnDef } from \"@ryuzaki13/react-foundation-lib/table\";\n\nimport { Badge, BadgeList } from \"../../badge\";\nimport { Button } from \"../../button\";\nimport { FlexContainer } from \"../../flex\";\nimport { GridContainer } from \"../../grid\";\nimport { InputSearch } from \"../../input-search\";\nimport { Scrollable } from \"../../misc\";\nimport { Modal, ModalContent, ModalFooter, ModalToolbar } from \"../../modal\";\nimport { ODataDependentMultiSelect } from \"../../multi-select\";\nimport { Table } from \"../../table\";\nimport { SearchConfig, useAdvancedSearch, useAdvancedSearchSelection } from \"../model\";\n\ninterface AdvancedSearchModalSessionProps<T extends Record<string, string>> {\n\tonClose: () => void;\n\tonItemsSelect: (items: T[]) => void;\n\t/** Снимок committed-выбора, с которого начинается текущая сессия модалки. */\n\tinitialSelectedItems: readonly T[];\n\tconfig: SearchConfig<T>;\n}\n\n/**\n * Интерактивная сессия расширенного поиска с собственным selection draft.\n * Компонент монтируется только после разрешения initial Query snapshot.\n */\nexport function AdvancedSearchModalSession<T extends Record<string, string>>({\n\tonClose,\n\tonItemsSelect,\n\tconfig,\n\tinitialSelectedItems\n}: AdvancedSearchModalSessionProps<T>) {\n\tconst tableColumns: TableColumnDef<T>[] = useMemo(\n\t\t() =>\n\t\t\tconfig.columns.map(\n\t\t\t\t(col) =>\n\t\t\t\t\t({\n\t\t\t\t\t\tid: col.key as keyof T,\n\t\t\t\t\t\taccessorKey: col.key as keyof T,\n\t\t\t\t\t\theader: col.label,\n\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\twidth: col.width || \"auto\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}) as TableColumnDef<T>\n\t\t\t),\n\t\t[config.columns]\n\t);\n\n\tconst { columns, isLoading } = useODataTableColumns<T>({\n\t\tservice: config.odata.service,\n\t\ttarget: config.odata.target,\n\t\tmode: \"enrich\",\n\t\tcolumns: tableColumns\n\t});\n\n\tconst { query, items, searchTerm, setSearch, clearSearch, filters, setFilters } = useAdvancedSearch(config);\n\tconst { selectedItems, deselect, replaceSelection } = useAdvancedSearchSelection(config, initialSelectedItems);\n\tconst getRowId = useCallback((item: T) => String(item[config.leadingKey]), [config.leadingKey]);\n\tconst selectedRowIds = useMemo(() => selectedItems.map((item) => String(item[config.leadingKey])), [selectedItems, config.leadingKey]);\n\tconst visibleItemIds = useMemo(() => new Set(items.map((item) => String(item[config.leadingKey]))), [items, config.leadingKey]);\n\n\tconst handleReachEnd = useCallback(() => {\n\t\tif (query.hasNextPage && !query.isFetchingNextPage) {\n\t\t\tquery.fetchNextPage();\n\t\t}\n\t}, [query]);\n\n\t/**\n\t * При изменении видимого выбора сохраняет элементы, которые временно скрыты\n\t * поиском или сегментными фильтрами.\n\t */\n\tconst handleSelect = useCallback(\n\t\t(selectedVisibleItems: T[]) => {\n\t\t\tconst selectedVisibleIds = new Set(selectedVisibleItems.map((item) => String(item[config.leadingKey])));\n\t\t\tconst hiddenSelectedItems = selectedItems.filter((item) => !visibleItemIds.has(String(item[config.leadingKey])));\n\t\t\tconst nextVisibleSelectedItems = items.filter((item) => selectedVisibleIds.has(String(item[config.leadingKey])));\n\n\t\t\treplaceSelection([...hiddenSelectedItems, ...nextVisibleSelectedItems]);\n\t\t},\n\t\t[config.leadingKey, items, replaceSelection, selectedItems, visibleItemIds]\n\t);\n\n\t/** Удаляет отдельный элемент из общего выбора. */\n\tconst handleRemoveSelectedItem = useCallback(\n\t\t(item: T) => {\n\t\t\tdeselect(String(item[config.leadingKey]));\n\t\t},\n\t\t[config.leadingKey, deselect]\n\t);\n\n\t/** Передаёт committed-значение владельцу поля только по явному подтверждению. */\n\tconst handleConfirmSelection = useCallback(() => {\n\t\tonItemsSelect(selectedItems);\n\t\tonClose();\n\t}, [selectedItems, onItemsSelect, onClose]);\n\n\tconst filterConfig = useMemo(() => {\n\t\tif (\"segments\" in config && config.segments) {\n\t\t\tconst limitedKeys = Object.keys(config.segments);\n\t\t\tif (limitedKeys.length) {\n\t\t\t\treturn {\n\t\t\t\t\todata: { ...config.odata, limitedKeys },\n\t\t\t\t\tsegments: config.segments,\n\t\t\t\t\tmodel: config.model\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}, [config]);\n\n\treturn (\n\t\t<Modal isOpen onClose={onClose} title={config.title} size=\"lg\" height=\"min(50em, 80dvh)\">\n\t\t\t<ModalToolbar>\n\t\t\t\t<FlexContainer gap=\"sm\">\n\t\t\t\t\t{filterConfig && (\n\t\t\t\t\t\t<ODataDependentMultiSelect\n\t\t\t\t\t\t\todata={filterConfig.odata}\n\t\t\t\t\t\t\tsegments={filterConfig.segments}\n\t\t\t\t\t\t\tmodel={filterConfig.model}\n\t\t\t\t\t\t\tvalues={filters}\n\t\t\t\t\t\t\tonChange={setFilters}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<InputSearch\n\t\t\t\t\t\tsize=\"md\"\n\t\t\t\t\t\tplaceholder={config.searchLabel ?? \"Введите поисковый запрос\"}\n\t\t\t\t\t\tvalue={searchTerm}\n\t\t\t\t\t\tonChange={setSearch}\n\t\t\t\t\t\tonClear={clearSearch}\n\t\t\t\t\t\tclassName=\"flexGrow\"\n\t\t\t\t\t/>\n\t\t\t\t</FlexContainer>\n\t\t\t</ModalToolbar>\n\n\t\t\t<ModalContent>\n\t\t\t\t<GridContainer gap=\"md\" templateRows=\"1fr auto\" className=\"h100\">\n\t\t\t\t\t<Table\n\t\t\t\t\t\tcolumns={columns}\n\t\t\t\t\t\tdata={items}\n\t\t\t\t\t\tselectionMode=\"multi\"\n\t\t\t\t\t\tselectedRowIds={selectedRowIds}\n\t\t\t\t\t\tgetRowId={getRowId}\n\t\t\t\t\t\tisLoading={query.isLoading || isLoading}\n\t\t\t\t\t\tisFetching={query.isFetching}\n\t\t\t\t\t\tonRowSelectionChange={handleSelect}\n\t\t\t\t\t\tonReachEnd={handleReachEnd}\n\t\t\t\t\t\tclassName=\"w100\"\n\t\t\t\t\t/>\n\n\t\t\t\t\t<div className=\"marginBlockMd border\">\n\t\t\t\t\t\t<Scrollable className=\"paddingSm\" height=\"6em\">\n\t\t\t\t\t\t\t<BadgeList>\n\t\t\t\t\t\t\t\t{selectedItems.map((item) => (\n\t\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\t\tkey={item[config.leadingKey]}\n\t\t\t\t\t\t\t\t\t\tsize=\"md\"\n\t\t\t\t\t\t\t\t\t\ttone=\"info\"\n\t\t\t\t\t\t\t\t\t\tappearance=\"outline\"\n\t\t\t\t\t\t\t\t\t\tonRemove={() => handleRemoveSelectedItem(item)}>\n\t\t\t\t\t\t\t\t\t\t{config.leadingText ? item[config.leadingText] || item[config.leadingKey] : item[config.leadingKey]}\n\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</BadgeList>\n\t\t\t\t\t\t</Scrollable>\n\t\t\t\t\t</div>\n\t\t\t\t</GridContainer>\n\t\t\t</ModalContent>\n\n\t\t\t<ModalFooter>\n\t\t\t\t<Button onClick={onClose}>Отмена</Button>\n\t\t\t\t<Button variant=\"successOutline\" onClick={handleConfirmSelection}>\n\t\t\t\t\tВыбрать\n\t\t\t\t</Button>\n\t\t\t</ModalFooter>\n\t\t</Modal>\n\t);\n}\n","import { stableStringify } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { Button } from \"../../button\";\nimport { LoadingMessage, Message } from \"../../misc\";\nimport { Modal, ModalContent, ModalFooter } from \"../../modal\";\nimport { SearchConfig } from \"../model\";\n\nimport { AdvancedSearchModalSession } from \"./AdvancedSearchModalSession\";\n\nexport type AdvancedSearchInitialSelection<T extends Record<string, string>> =\n\t{ status: \"loading\" } | { status: \"error\" } | { status: \"ready\"; items: readonly T[] };\n\ninterface SearchModalProps<T extends Record<string, string>> {\n\tonClose: () => void;\n\tonItemsSelect: (items: T[]) => void;\n\tinitialSelection: AdvancedSearchInitialSelection<T>;\n\tconfig: SearchConfig<T>;\n}\n\n/**\n * Создаёт стабильную identity modal-session по владельцу данных и внешним ключам.\n * Новый Query object с теми же строками не должен пересоздавать пользовательский draft.\n */\nfunction buildAdvancedSearchModalSessionKey<T extends Record<string, string>>(config: SearchConfig<T>, items: readonly T[]) {\n\treturn stableStringify({\n\t\tleadingKey: String(config.leadingKey),\n\t\tservice: config.odata.service,\n\t\ttarget: config.odata.target,\n\t\tselectedIds: items.map((item) => String(item[config.leadingKey])).sort()\n\t});\n}\n\n/**\n * Query boundary начального выбора. Интерактивная сессия монтируется только после\n * успешной загрузки committed snapshot, поэтому поздний ответ не может стереть draft.\n */\nexport function AdvancedSearchModal<T extends Record<string, string>>({\n\tonClose,\n\tonItemsSelect,\n\tinitialSelection,\n\tconfig\n}: SearchModalProps<T>) {\n\tif (initialSelection.status === \"ready\") {\n\t\treturn (\n\t\t\t<AdvancedSearchModalSession\n\t\t\t\tkey={buildAdvancedSearchModalSessionKey(config, initialSelection.items)}\n\t\t\t\tconfig={config}\n\t\t\t\tonClose={onClose}\n\t\t\t\tonItemsSelect={onItemsSelect}\n\t\t\t\tinitialSelectedItems={initialSelection.items}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Modal isOpen onClose={onClose} title={config.title} size=\"lg\" height=\"min(50em, 80dvh)\">\n\t\t\t<ModalContent>\n\t\t\t\t{initialSelection.status === \"loading\" ? (\n\t\t\t\t\t<LoadingMessage text=\"Загружаем выбранные элементы...\" />\n\t\t\t\t) : (\n\t\t\t\t\t<Message color=\"error\">Не удалось загрузить выбранные элементы</Message>\n\t\t\t\t)}\n\t\t\t</ModalContent>\n\n\t\t\t<ModalFooter>\n\t\t\t\t<Button onClick={onClose}>Закрыть</Button>\n\t\t\t</ModalFooter>\n\t\t</Modal>\n\t);\n}\n","import { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { ChevronRightIcon, XIcon } from \"lucide-react\";\n\nimport { FlexContainer } from \"../../flex\";\nimport { useInputFieldIds } from \"../../input\";\nimport inputStyles from \"../../input/Input.module.scss\";\nimport { UiBaseProps } from \"../../types\";\nimport uiStyles from \"../../ui.module.scss\";\n\ninterface AdvancedSearchSelectUIProps extends Omit<UiBaseProps<string[]>, \"value\" | \"onChange\"> {\n\ttoken: string | undefined;\n\tonOpen: () => void;\n\tonClear: () => void;\n}\n\nexport const AdvancedSearchSelectUI = ({\n\tlabel,\n\tdescription,\n\tdisabled,\n\tsize,\n\tplaceholder = \"Выбрать\",\n\ttoken,\n\tonOpen,\n\tonClear\n}: AdvancedSearchSelectUIProps) => {\n\tconst { controlId, labelId, descriptionId } = useInputFieldIds({\n\t\thasLabel: label !== undefined && label !== null,\n\t\thasDescription: !!description\n\t});\n\tconst hasToken = Boolean(token);\n\n\treturn (\n\t\t<div aria-disabled={disabled || undefined} className={cn(uiStyles.uiElement, uiStyles.uiSizable, size && uiStyles[size])}>\n\t\t\t{label && (\n\t\t\t\t<label id={labelId} htmlFor={controlId} className={uiStyles.uiLabel}>\n\t\t\t\t\t{label}\n\t\t\t\t</label>\n\t\t\t)}\n\t\t\t{description && (\n\t\t\t\t<p id={descriptionId} className={uiStyles.uiDescription}>\n\t\t\t\t\t{description}\n\t\t\t\t</p>\n\t\t\t)}\n\n\t\t\t<div className={uiStyles.uiInputContainer}>\n\t\t\t\t<div className={uiStyles.uiInputWithToggle}>\n\t\t\t\t\t{!hasToken && (\n\t\t\t\t\t\t<FlexContainer align=\"center\" className=\"h100\">\n\t\t\t\t\t\t\t<div className={uiStyles.uiPlaceholder}>{placeholder}</div>\n\t\t\t\t\t\t</FlexContainer>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\n\t\t\t\t<div className={inputStyles.controlEndAdornment}>\n\t\t\t\t\t<div className={uiStyles.uiToggleButtonContainer}>\n\t\t\t\t\t\t<div className=\"flexEllipsis\" style={{ maxWidth: \"100%\" }}>\n\t\t\t\t\t\t\t{token}\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tdisabled={!token}\n\t\t\t\t\t\t\tclassName={uiStyles.uiClearButton}\n\t\t\t\t\t\t\tonClick={onClear}\n\t\t\t\t\t\t\taria-label=\"Очистить все\">\n\t\t\t\t\t\t\t<XIcon />\n\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t<div className={uiStyles.uiButtonSeparator} />\n\n\t\t\t\t\t\t<button type=\"button\" onClick={onOpen} className={uiStyles.uiToggleButton}>\n\t\t\t\t\t\t\t<ChevronRightIcon className={uiStyles.uiToggleIcon} />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n","import { useCallback, useState } from \"react\";\n\nimport { UiBaseProps } from \"../../types\";\nimport { SearchConfig, useAdvancedSearchInitialSelected } from \"../model\";\n\nimport { AdvancedSearchModal, type AdvancedSearchInitialSelection } from \"./AdvancedSearchModal\";\nimport { AdvancedSearchSelectUI } from \"./AdvancedSearchSelectUI\";\n\ntype AdvancedSearchSelectProps<T extends Record<string, string>> = UiBaseProps<string[]> & {\n\tconfig: SearchConfig<T>;\n};\n\nconst EMPTY_INITIAL_SELECTION: readonly never[] = [];\n\nexport function AdvancedSearchSelect<T extends Record<string, string>>({\n\tvalue = [],\n\tonChange,\n\tconfig,\n\t...props\n}: AdvancedSearchSelectProps<T>) {\n\tconst [isModalOpen, setIsModalOpen] = useState(false);\n\n\tconst initialSelectionQuery = useAdvancedSearchInitialSelected(config, value);\n\tconst selectedItems = initialSelectionQuery.data;\n\tconst initialSelection: AdvancedSearchInitialSelection<T> =\n\t\tvalue.length === 0\n\t\t\t? { status: \"ready\", items: EMPTY_INITIAL_SELECTION }\n\t\t\t: selectedItems !== undefined\n\t\t\t\t? { status: \"ready\", items: selectedItems }\n\t\t\t\t: initialSelectionQuery.isError\n\t\t\t\t\t? { status: \"error\" }\n\t\t\t\t\t: { status: \"loading\" };\n\n\tconst handleOpen = useCallback(() => setIsModalOpen(true), []);\n\tconst handleClose = useCallback(() => setIsModalOpen(false), []);\n\tconst handleRemove = useCallback(() => onChange([]), [onChange]);\n\tconst handleSelect = useCallback(\n\t\t(items: T[]) => onChange(items.map((item) => String(item[config.leadingKey]))),\n\t\t[config.leadingKey, onChange]\n\t);\n\tconst getDisplayText = useCallback(\n\t\t(items: T[] | undefined) => {\n\t\t\tif (!items?.length) return;\n\t\t\tif (items.length > 1) return `Выбрано ${items.length} элем.`;\n\t\t\treturn `${(config.leadingText && items[0][config.leadingText]) || items[0][config.leadingKey]}`;\n\t\t},\n\t\t[config.leadingKey, config.leadingText]\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<AdvancedSearchSelectUI {...props} token={getDisplayText(selectedItems)} onOpen={handleOpen} onClear={handleRemove} />\n\n\t\t\t{isModalOpen && (\n\t\t\t\t<AdvancedSearchModal\n\t\t\t\t\tconfig={config}\n\t\t\t\t\tonClose={handleClose}\n\t\t\t\t\tonItemsSelect={handleSelect}\n\t\t\t\t\tinitialSelection={initialSelection}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</>\n\t);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/advanced-search/lib/searchParts.ts","../../src/advanced-search/model/useAdvancedSearch.ts","../../src/advanced-search/model/useAdvancedSearchInitialSelected.ts","../../src/advanced-search/model/useAdvancedSearchSelection.ts","../../src/advanced-search/ui/AdvancedSearchModalSession.tsx","../../src/advanced-search/ui/AdvancedSearchModal.tsx","../../src/advanced-search/ui/AdvancedSearchSelectUI.tsx","../../src/advanced-search/ui/AdvancedSearchSelect.tsx"],"sourcesContent":["export function buildSearchParts(searchTerm: string) {\n\tconst term = searchTerm.trim();\n\tif (!term) {\n\t\treturn [];\n\t}\n\n\tconst searchParts = term\n\t\t.split(\"*\")\n\t\t.map((part) => part.trim())\n\t\t.filter((part) => part.length);\n\n\treturn searchParts;\n\n\t// const filterConditions = searchKeys.map((key) => {\n\t// \treturn searchParts.map((part) => `substringof('${part}',${String(key)})`).join(\" and \");\n\t// });\n\n\t// return `(${filterConditions.join(\" or \")})`;\n}\n\nexport function filterBySearchParts<T extends Record<string, string>>(items: T[], searchParts: string[], searchKeys: (keyof T)[]) {\n\tconst lowerSearchParts = searchParts.map((part) => part.toLowerCase());\n\n\treturn items.filter((item) => {\n\t\tfor (const key of searchKeys) {\n\t\t\tconst value = String(item[key] || \"\").toLowerCase();\n\n\t\t\tlet lastIndex = 0;\n\t\t\tlet allPartsFound = true;\n\n\t\t\t// Ищем каждую часть строго после предыдущей\n\t\t\tfor (const part of lowerSearchParts) {\n\t\t\t\tconst index = value.indexOf(part, lastIndex);\n\t\t\t\tif (index === -1) {\n\t\t\t\t\tallPartsFound = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tlastIndex = index + part.length; // следующая часть после найденной\n\t\t\t}\n\n\t\t\tif (allPartsFound) return true;\n\t\t}\n\t\treturn false;\n\t});\n\n\t// С регуляркой медленнее в 2-3 раза\n\n\t// // Паттерн: первая часть, затем любое количество символов, затем вторая часть\n\t// const searchPattern = searchParts.join(\".*?\");\n\t// const regExp = new RegExp(searchPattern, \"i\");\n\n\t// return items.filter((item) => {\n\t// \tfor (const key of searchKeys) {\n\t// \t\tif (regExp.test(item[key])) {\n\t// \t\t\treturn true;\n\t// \t\t}\n\t// \t}\n\t// \treturn false;\n\t// });\n}\n","import { useCallback, useMemo, useState } from \"react\";\n\nimport { odataQueryFn } from \"@ryuzaki13/react-foundation-api/odata\";\nimport { createFilterContains, createFilterEqual } from \"@ryuzaki13/react-foundation-lib/odata-service\";\nimport { useInfiniteQuery } from \"@tanstack/react-query\";\n\nimport { buildSearchParts, filterBySearchParts } from \"../lib\";\n\nimport { SearchConfig } from \"./types\";\n\nconst PAGE_SIZE = 50;\n\nexport function useAdvancedSearch<T extends Record<string, string>>(config: SearchConfig<T>) {\n\tconst [term, setTerm] = useState(\"\");\n\tconst [filters, setFilters] = useState<Record<string, string[]>>(() =>\n\t\tObject.keys(config.segments ?? {}).reduce(\n\t\t\t(acc, key) => {\n\t\t\t\tacc[key] = [];\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{} as Record<string, string[]>\n\t\t)\n\t);\n\n\tconst searchParts = buildSearchParts(term);\n\tconst isComplexSearch = searchParts.length > 1;\n\n\tconst top = isComplexSearch ? 5000 : PAGE_SIZE;\n\n\tconst query = useInfiniteQuery({\n\t\tqueryKey: [\"search\", config.odata.service, config.odata.target, filters, term],\n\t\tqueryFn: async ({ pageParam = 0, signal, client }) => {\n\t\t\tconst columnKeys = config.columns.map((col) => col.key);\n\n\t\t\tconst result = await odataQueryFn<T>({\n\t\t\t\todata: {\n\t\t\t\t\tservice: config.odata.service,\n\t\t\t\t\ttarget: config.odata.target\n\t\t\t\t},\n\t\t\t\toptions: {\n\t\t\t\t\ttop: top,\n\t\t\t\t\tskip: pageParam,\n\t\t\t\t\tselect: columnKeys,\n\t\t\t\t\texpression: {\n\t\t\t\t\t\tand: true,\n\t\t\t\t\t\tfilters: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tfilters: searchParts\n\t\t\t\t\t\t\t\t\t? config.searchKeys.map((key) => ({\n\t\t\t\t\t\t\t\t\t\t\tfilters: searchParts.map((part) => createFilterContains(key, part))\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tand: true,\n\t\t\t\t\t\t\t\tfilters: Object.keys(filters).map((key) => createFilterEqual(key, filters[key]))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\tsorts: [{ key: config.leadingKey }]\n\t\t\t\t}\n\t\t\t})({ signal, client });\n\n\t\t\tif (isComplexSearch) {\n\t\t\t\treturn filterBySearchParts(result.data, searchParts, config.searchKeys);\n\t\t\t}\n\n\t\t\treturn result.data;\n\t\t},\n\t\tgetNextPageParam: (lastPage, allPages) => {\n\t\t\tif (lastPage.length < top) return undefined;\n\t\t\treturn allPages.length * top;\n\t\t},\n\t\tinitialPageParam: 0\n\t});\n\n\tconst search = useCallback((term: string) => {\n\t\tsetTerm(term);\n\t}, []);\n\n\tconst clearSearch = useCallback(() => {\n\t\tsetTerm(\"\");\n\t}, []);\n\n\tconst items = useMemo(() => {\n\t\treturn query.data?.pages.flatMap((page) => page) ?? [];\n\t}, [query.data?.pages]);\n\n\treturn {\n\t\tquery,\n\t\titems,\n\t\tsearchTerm: term,\n\t\tsetSearch: search,\n\t\tclearSearch,\n\t\tfilters,\n\t\tsetFilters\n\t};\n}\n","import { odataQueryFn } from \"@ryuzaki13/react-foundation-api/odata\";\nimport { createFilterEqual, unwrapODataQueryResult } from \"@ryuzaki13/react-foundation-lib/odata-service\";\nimport { useQuery } from \"@tanstack/react-query\";\n\nimport { SearchConfig } from \"./types\";\n\n/**\n * Хук для поиска клиентов с поддержкой бесконечной прокрутки через OData\n */\nexport function useAdvancedSearchInitialSelected<T extends Record<string, string>>(\n\tconfig: SearchConfig<T>,\n\tinitialSelectedKeys: string[] = []\n) {\n\tconst query = useQuery({\n\t\tqueryKey: [\"searchSelected\", config.odata.service, config.odata.target, initialSelectedKeys],\n\t\tqueryFn: async ({ client, signal }) => {\n\t\t\tif (initialSelectedKeys.length === 0) {\n\t\t\t\treturn { data: [] as T[], totalCount: undefined };\n\t\t\t}\n\n\t\t\t// Получаем ключи колонок для select параметра\n\t\t\tconst columnKeys = config.columns.map((col) => col.key);\n\n\t\t\t// Выполняем OData запрос\n\t\t\treturn await odataQueryFn<T>({\n\t\t\t\todata: { service: config.odata.service, target: config.odata.target },\n\t\t\t\toptions: {\n\t\t\t\t\tselect: columnKeys,\n\t\t\t\t\texpression: {\n\t\t\t\t\t\tfilters: initialSelectedKeys.map((key) => createFilterEqual(config.leadingKey, key))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})({ client, signal });\n\t\t},\n\t\tenabled: initialSelectedKeys.length > 0\n\t});\n\n\treturn unwrapODataQueryResult(query);\n}\n","import { useCallback, useState } from \"react\";\n\nimport { SearchConfig } from \"./types\";\n\n/**\n * Создаёт независимый набор выбора и сохраняет последнюю строку для каждого ведущего ключа.\n * Это единая структурная граница как для initial snapshot модалки, так и для дальнейших\n * обновлений выбора из таблицы.\n */\nfunction buildAdvancedSearchSelection<T extends Record<string, string>>(items: readonly T[], leadingKey: keyof T): T[] {\n\tconst selectionById = new Map<string, T>();\n\n\tfor (const item of items) {\n\t\tselectionById.set(String(item[leadingKey]), item);\n\t}\n\n\treturn Array.from(selectionById.values());\n}\n\n/**\n * Хук для управления выбором клиентов\n */\nexport function useAdvancedSearchSelection<T extends Record<string, string>>(\n\tconfig: SearchConfig<T>,\n\tinitialSelectedItems: readonly T[] = []\n) {\n\tconst [selectedItems, setSelectedItems] = useState<T[]>(() => buildAdvancedSearchSelection(initialSelectedItems, config.leadingKey));\n\n\t/**\n\t * Сравнивает наборы выбранных элементов по ведущему ключу без учёта порядка.\n\t */\n\tconst areSelectionsEqual = useCallback(\n\t\t(left: readonly T[], right: readonly T[]) => {\n\t\t\tif (left.length !== right.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst rightIds = new Set(right.map((item) => String(item[config.leadingKey])));\n\n\t\t\treturn left.every((item) => rightIds.has(String(item[config.leadingKey])));\n\t\t},\n\t\t[config.leadingKey]\n\t);\n\n\t/**\n\t * Нормализует новый набор выбора и удаляет дубликаты по ведущему ключу.\n\t */\n\tconst replaceSelection = useCallback(\n\t\t(nextItems: readonly T[]) => {\n\t\t\tsetSelectedItems((prev) => {\n\t\t\t\tconst normalizedItems = buildAdvancedSearchSelection(nextItems, config.leadingKey);\n\n\t\t\t\treturn areSelectionsEqual(prev, normalizedItems) ? prev : normalizedItems;\n\t\t\t});\n\t\t},\n\t\t[areSelectionsEqual, config.leadingKey]\n\t);\n\n\tconst select = useCallback(\n\t\t(item: T) => {\n\t\t\tsetSelectedItems((prev) => {\n\t\t\t\t// Проверяем, не выбран ли уже этот клиент\n\t\t\t\tif (prev.some((c) => c[config.leadingKey] === item[config.leadingKey])) {\n\t\t\t\t\treturn prev;\n\t\t\t\t}\n\t\t\t\treturn [...prev, item];\n\t\t\t});\n\t\t},\n\t\t[config.leadingKey]\n\t);\n\n\tconst deselect = useCallback(\n\t\t(id: string) => {\n\t\t\tsetSelectedItems((prev) => prev.filter((item) => item[config.leadingKey] !== id));\n\t\t},\n\t\t[config.leadingKey]\n\t);\n\n\tconst clearSelection = useCallback(() => {\n\t\tsetSelectedItems([]);\n\t}, []);\n\n\tconst isSelected = useCallback(\n\t\t(id: string) => {\n\t\t\treturn selectedItems.some((item) => item[config.leadingKey] === id);\n\t\t},\n\t\t[config.leadingKey, selectedItems]\n\t);\n\n\treturn {\n\t\tselectedItems,\n\t\tselect,\n\t\tdeselect,\n\t\treplaceSelection,\n\t\tclearSelection,\n\t\tisSelected\n\t};\n}\n","import { useCallback, useMemo } from \"react\";\n\nimport { useODataTableColumns } from \"@ryuzaki13/react-foundation-api/odata\";\nimport { type TableColumnDef } from \"@ryuzaki13/react-foundation-lib/table\";\n\nimport { Badge, BadgeList } from \"../../badge\";\nimport { Button } from \"../../button\";\nimport { FlexContainer } from \"../../flex\";\nimport { GridContainer } from \"../../grid\";\nimport { InputSearch } from \"../../input-search\";\nimport { Scrollable } from \"../../misc\";\nimport { Modal, ModalContent, ModalFooter, ModalToolbar } from \"../../modal\";\nimport { ODataDependentMultiSelect } from \"../../multi-select\";\nimport { Table } from \"../../table\";\nimport { SearchConfig, useAdvancedSearch, useAdvancedSearchSelection } from \"../model\";\n\ninterface AdvancedSearchModalSessionProps<T extends Record<string, string>> {\n\tonClose: () => void;\n\tonItemsSelect: (items: T[]) => void;\n\t/** Снимок committed-выбора, с которого начинается текущая сессия модалки. */\n\tinitialSelectedItems: readonly T[];\n\ttitle?: string;\n\tconfig: SearchConfig<T>;\n}\n\n/**\n * Интерактивная сессия расширенного поиска с собственным selection draft.\n * Компонент монтируется только после разрешения initial Query snapshot.\n */\nexport function AdvancedSearchModalSession<T extends Record<string, string>>({\n\tonClose,\n\tonItemsSelect,\n\ttitle,\n\tconfig,\n\tinitialSelectedItems\n}: AdvancedSearchModalSessionProps<T>) {\n\tconst tableColumns: TableColumnDef<T>[] = useMemo(\n\t\t() =>\n\t\t\tconfig.columns.map(\n\t\t\t\t(col) =>\n\t\t\t\t\t({\n\t\t\t\t\t\tid: col.key as keyof T,\n\t\t\t\t\t\taccessorKey: col.key as keyof T,\n\t\t\t\t\t\theader: col.label,\n\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\twidth: col.width || \"auto\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}) as TableColumnDef<T>\n\t\t\t),\n\t\t[config.columns]\n\t);\n\n\tconst { columns, isLoading } = useODataTableColumns<T>({\n\t\tservice: config.odata.service,\n\t\ttarget: config.odata.target,\n\t\tmode: \"enrich\",\n\t\tcolumns: tableColumns\n\t});\n\n\tconst { query, items, searchTerm, setSearch, clearSearch, filters, setFilters } = useAdvancedSearch(config);\n\tconst { selectedItems, deselect, replaceSelection } = useAdvancedSearchSelection(config, initialSelectedItems);\n\tconst getRowId = useCallback((item: T) => String(item[config.leadingKey]), [config.leadingKey]);\n\tconst selectedRowIds = useMemo(() => selectedItems.map((item) => String(item[config.leadingKey])), [selectedItems, config.leadingKey]);\n\tconst visibleItemIds = useMemo(() => new Set(items.map((item) => String(item[config.leadingKey]))), [items, config.leadingKey]);\n\n\tconst handleReachEnd = useCallback(() => {\n\t\tif (query.hasNextPage && !query.isFetchingNextPage) {\n\t\t\tquery.fetchNextPage();\n\t\t}\n\t}, [query]);\n\n\t/**\n\t * При изменении видимого выбора сохраняет элементы, которые временно скрыты\n\t * поиском или сегментными фильтрами.\n\t */\n\tconst handleSelect = useCallback(\n\t\t(selectedVisibleItems: T[]) => {\n\t\t\tconst selectedVisibleIds = new Set(selectedVisibleItems.map((item) => String(item[config.leadingKey])));\n\t\t\tconst hiddenSelectedItems = selectedItems.filter((item) => !visibleItemIds.has(String(item[config.leadingKey])));\n\t\t\tconst nextVisibleSelectedItems = items.filter((item) => selectedVisibleIds.has(String(item[config.leadingKey])));\n\n\t\t\treplaceSelection([...hiddenSelectedItems, ...nextVisibleSelectedItems]);\n\t\t},\n\t\t[config.leadingKey, items, replaceSelection, selectedItems, visibleItemIds]\n\t);\n\n\t/** Удаляет отдельный элемент из общего выбора. */\n\tconst handleRemoveSelectedItem = useCallback(\n\t\t(item: T) => {\n\t\t\tdeselect(String(item[config.leadingKey]));\n\t\t},\n\t\t[config.leadingKey, deselect]\n\t);\n\n\t/** Передаёт committed-значение владельцу поля только по явному подтверждению. */\n\tconst handleConfirmSelection = useCallback(() => {\n\t\tonItemsSelect(selectedItems);\n\t\tonClose();\n\t}, [selectedItems, onItemsSelect, onClose]);\n\n\tconst filterConfig = useMemo(() => {\n\t\tif (\"segments\" in config && config.segments) {\n\t\t\tconst limitedKeys = Object.keys(config.segments);\n\t\t\tif (limitedKeys.length) {\n\t\t\t\treturn {\n\t\t\t\t\todata: { ...config.odata, limitedKeys },\n\t\t\t\t\tsegments: config.segments,\n\t\t\t\t\tmodel: config.model\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}, [config]);\n\n\treturn (\n\t\t<Modal isOpen onClose={onClose} title={title || config.title} size=\"lg\" height=\"min(50em, 80dvh)\">\n\t\t\t<ModalToolbar>\n\t\t\t\t<FlexContainer gap=\"sm\">\n\t\t\t\t\t{filterConfig && (\n\t\t\t\t\t\t<ODataDependentMultiSelect\n\t\t\t\t\t\t\todata={filterConfig.odata}\n\t\t\t\t\t\t\tsegments={filterConfig.segments}\n\t\t\t\t\t\t\tmodel={filterConfig.model}\n\t\t\t\t\t\t\tvalues={filters}\n\t\t\t\t\t\t\tonChange={setFilters}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<InputSearch\n\t\t\t\t\t\tsize=\"md\"\n\t\t\t\t\t\tplaceholder={config.searchLabel ?? \"Введите поисковый запрос\"}\n\t\t\t\t\t\tvalue={searchTerm}\n\t\t\t\t\t\tonChange={setSearch}\n\t\t\t\t\t\tonClear={clearSearch}\n\t\t\t\t\t\tclassName=\"flexGrow\"\n\t\t\t\t\t/>\n\t\t\t\t</FlexContainer>\n\t\t\t</ModalToolbar>\n\n\t\t\t<ModalContent>\n\t\t\t\t<GridContainer gap=\"md\" templateRows=\"1fr auto\" className=\"h100\">\n\t\t\t\t\t<Table\n\t\t\t\t\t\tcolumns={columns}\n\t\t\t\t\t\tdata={items}\n\t\t\t\t\t\tselectionMode=\"multi\"\n\t\t\t\t\t\tselectedRowIds={selectedRowIds}\n\t\t\t\t\t\tgetRowId={getRowId}\n\t\t\t\t\t\tisLoading={query.isLoading || isLoading}\n\t\t\t\t\t\tisFetching={query.isFetching}\n\t\t\t\t\t\tonRowSelectionChange={handleSelect}\n\t\t\t\t\t\tonReachEnd={handleReachEnd}\n\t\t\t\t\t\tclassName=\"w100\"\n\t\t\t\t\t/>\n\n\t\t\t\t\t<div className=\"marginBlockMd border\">\n\t\t\t\t\t\t<Scrollable className=\"paddingSm\" height=\"6em\">\n\t\t\t\t\t\t\t<BadgeList>\n\t\t\t\t\t\t\t\t{selectedItems.map((item) => (\n\t\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\t\tkey={item[config.leadingKey]}\n\t\t\t\t\t\t\t\t\t\tsize=\"md\"\n\t\t\t\t\t\t\t\t\t\ttone=\"info\"\n\t\t\t\t\t\t\t\t\t\tappearance=\"outline\"\n\t\t\t\t\t\t\t\t\t\tonRemove={() => handleRemoveSelectedItem(item)}>\n\t\t\t\t\t\t\t\t\t\t{config.leadingText ? item[config.leadingText] || item[config.leadingKey] : item[config.leadingKey]}\n\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</BadgeList>\n\t\t\t\t\t\t</Scrollable>\n\t\t\t\t\t</div>\n\t\t\t\t</GridContainer>\n\t\t\t</ModalContent>\n\n\t\t\t<ModalFooter>\n\t\t\t\t<Button onClick={onClose}>Отмена</Button>\n\t\t\t\t<Button variant=\"successOutline\" onClick={handleConfirmSelection}>\n\t\t\t\t\tВыбрать\n\t\t\t\t</Button>\n\t\t\t</ModalFooter>\n\t\t</Modal>\n\t);\n}\n","import { stableStringify } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { Button } from \"../../button\";\nimport { LoadingMessage, Message } from \"../../misc\";\nimport { Modal, ModalContent, ModalFooter } from \"../../modal\";\nimport { SearchConfig } from \"../model\";\n\nimport { AdvancedSearchModalSession } from \"./AdvancedSearchModalSession\";\n\nexport type AdvancedSearchInitialSelection<T extends Record<string, string>> =\n\t{ status: \"loading\" } | { status: \"error\" } | { status: \"ready\"; items: readonly T[] };\n\ninterface SearchModalProps<T extends Record<string, string>> {\n\tonClose: () => void;\n\tonItemsSelect: (items: T[]) => void;\n\tinitialSelection: AdvancedSearchInitialSelection<T>;\n\ttitle?: string;\n\tconfig: SearchConfig<T>;\n}\n\n/**\n * Создаёт стабильную identity modal-session по владельцу данных и внешним ключам.\n * Новый Query object с теми же строками не должен пересоздавать пользовательский draft.\n */\nfunction buildAdvancedSearchModalSessionKey<T extends Record<string, string>>(config: SearchConfig<T>, items: readonly T[]) {\n\treturn stableStringify({\n\t\tleadingKey: String(config.leadingKey),\n\t\tservice: config.odata.service,\n\t\ttarget: config.odata.target,\n\t\tselectedIds: items.map((item) => String(item[config.leadingKey])).sort()\n\t});\n}\n\n/**\n * Query boundary начального выбора. Интерактивная сессия монтируется только после\n * успешной загрузки committed snapshot, поэтому поздний ответ не может стереть draft.\n */\nexport function AdvancedSearchModal<T extends Record<string, string>>({\n\tonClose,\n\tonItemsSelect,\n\tinitialSelection,\n\ttitle,\n\tconfig\n}: SearchModalProps<T>) {\n\tif (initialSelection.status === \"ready\") {\n\t\treturn (\n\t\t\t<AdvancedSearchModalSession\n\t\t\t\tkey={buildAdvancedSearchModalSessionKey(config, initialSelection.items)}\n\t\t\t\ttitle={title}\n\t\t\t\tconfig={config}\n\t\t\t\tonClose={onClose}\n\t\t\t\tonItemsSelect={onItemsSelect}\n\t\t\t\tinitialSelectedItems={initialSelection.items}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Modal isOpen onClose={onClose} title={title || config.title} size=\"lg\" height=\"min(50em, 80dvh)\">\n\t\t\t<ModalContent>\n\t\t\t\t{initialSelection.status === \"loading\" ? (\n\t\t\t\t\t<LoadingMessage text=\"Загружаем выбранные элементы...\" />\n\t\t\t\t) : (\n\t\t\t\t\t<Message color=\"error\">Не удалось загрузить выбранные элементы</Message>\n\t\t\t\t)}\n\t\t\t</ModalContent>\n\n\t\t\t<ModalFooter>\n\t\t\t\t<Button onClick={onClose}>Закрыть</Button>\n\t\t\t</ModalFooter>\n\t\t</Modal>\n\t);\n}\n","import { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { ChevronRightIcon, XIcon } from \"lucide-react\";\n\nimport { FlexContainer } from \"../../flex\";\nimport { useInputFieldIds } from \"../../input\";\nimport inputStyles from \"../../input/Input.module.scss\";\nimport { UiBaseProps } from \"../../types\";\nimport uiStyles from \"../../ui.module.scss\";\n\ninterface AdvancedSearchSelectUIProps extends Omit<UiBaseProps<string[]>, \"value\" | \"onChange\"> {\n\ttoken: string | undefined;\n\tonOpen: () => void;\n\tonClear: () => void;\n}\n\nexport const AdvancedSearchSelectUI = ({\n\tlabel,\n\tdescription,\n\tdisabled,\n\tsize,\n\tplaceholder = \"Выбрать\",\n\ttoken,\n\tonOpen,\n\tonClear\n}: AdvancedSearchSelectUIProps) => {\n\tconst { controlId, labelId, descriptionId } = useInputFieldIds({\n\t\thasLabel: label !== undefined && label !== null,\n\t\thasDescription: !!description\n\t});\n\tconst hasToken = Boolean(token);\n\n\treturn (\n\t\t<div aria-disabled={disabled || undefined} className={cn(uiStyles.uiElement, uiStyles.uiSizable, size && uiStyles[size])}>\n\t\t\t{label && (\n\t\t\t\t<label id={labelId} htmlFor={controlId} className={uiStyles.uiLabel}>\n\t\t\t\t\t{label}\n\t\t\t\t</label>\n\t\t\t)}\n\t\t\t{description && (\n\t\t\t\t<p id={descriptionId} className={uiStyles.uiDescription}>\n\t\t\t\t\t{description}\n\t\t\t\t</p>\n\t\t\t)}\n\n\t\t\t<div className={uiStyles.uiInputContainer}>\n\t\t\t\t<div className={uiStyles.uiInputWithToggle}>\n\t\t\t\t\t{!hasToken && (\n\t\t\t\t\t\t<FlexContainer align=\"center\" className=\"h100\">\n\t\t\t\t\t\t\t<div className={uiStyles.uiPlaceholder}>{placeholder}</div>\n\t\t\t\t\t\t</FlexContainer>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\n\t\t\t\t<div className={inputStyles.controlEndAdornment}>\n\t\t\t\t\t<div className={uiStyles.uiToggleButtonContainer}>\n\t\t\t\t\t\t<div className=\"flexEllipsis\" style={{ maxWidth: \"100%\" }}>\n\t\t\t\t\t\t\t{token}\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tdisabled={!token}\n\t\t\t\t\t\t\tclassName={uiStyles.uiClearButton}\n\t\t\t\t\t\t\tonClick={onClear}\n\t\t\t\t\t\t\taria-label=\"Очистить все\">\n\t\t\t\t\t\t\t<XIcon />\n\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t<div className={uiStyles.uiButtonSeparator} />\n\n\t\t\t\t\t\t<button type=\"button\" onClick={onOpen} className={uiStyles.uiToggleButton}>\n\t\t\t\t\t\t\t<ChevronRightIcon className={uiStyles.uiToggleIcon} />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n","import { useCallback, useState } from \"react\";\n\nimport { UiBaseProps } from \"../../types\";\nimport { SearchConfig, useAdvancedSearchInitialSelected } from \"../model\";\n\nimport { AdvancedSearchModal, type AdvancedSearchInitialSelection } from \"./AdvancedSearchModal\";\nimport { AdvancedSearchSelectUI } from \"./AdvancedSearchSelectUI\";\n\ntype AdvancedSearchSelectProps<T extends Record<string, string>> = UiBaseProps<string[]> & {\n\ttitle?: string;\n\tconfig: SearchConfig<T>;\n};\n\nconst EMPTY_INITIAL_SELECTION: readonly never[] = [];\n\nexport function AdvancedSearchSelect<T extends Record<string, string>>({\n\tvalue = [],\n\tonChange,\n\ttitle,\n\tconfig,\n\t...props\n}: AdvancedSearchSelectProps<T>) {\n\tconst [isModalOpen, setIsModalOpen] = useState(false);\n\n\tconst initialSelectionQuery = useAdvancedSearchInitialSelected(config, value);\n\tconst selectedItems = initialSelectionQuery.data;\n\tconst initialSelection: AdvancedSearchInitialSelection<T> =\n\t\tvalue.length === 0\n\t\t\t? { status: \"ready\", items: EMPTY_INITIAL_SELECTION }\n\t\t\t: selectedItems !== undefined\n\t\t\t\t? { status: \"ready\", items: selectedItems }\n\t\t\t\t: initialSelectionQuery.isError\n\t\t\t\t\t? { status: \"error\" }\n\t\t\t\t\t: { status: \"loading\" };\n\n\tconst handleOpen = useCallback(() => setIsModalOpen(true), []);\n\tconst handleClose = useCallback(() => setIsModalOpen(false), []);\n\tconst handleRemove = useCallback(() => onChange([]), [onChange]);\n\tconst handleSelect = useCallback(\n\t\t(items: T[]) => onChange(items.map((item) => String(item[config.leadingKey]))),\n\t\t[config.leadingKey, onChange]\n\t);\n\tconst getDisplayText = useCallback(\n\t\t(items: T[] | undefined) => {\n\t\t\tif (!items?.length) return;\n\t\t\tif (items.length > 1) return `Выбрано ${items.length} элем.`;\n\t\t\treturn `${(config.leadingText && items[0][config.leadingText]) || items[0][config.leadingKey]}`;\n\t\t},\n\t\t[config.leadingKey, config.leadingText]\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<AdvancedSearchSelectUI {...props} token={getDisplayText(selectedItems)} onOpen={handleOpen} onClear={handleRemove} />\n\n\t\t\t{isModalOpen && (\n\t\t\t\t<AdvancedSearchModal\n\t\t\t\t\ttitle={title}\n\t\t\t\t\tconfig={config}\n\t\t\t\t\tonClose={handleClose}\n\t\t\t\t\tonItemsSelect={handleSelect}\n\t\t\t\t\tinitialSelection={initialSelection}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</>\n\t);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,SAAgB,EAAiB,GAAoB;CACpD,IAAM,IAAO,EAAW,KAAK;CAU7B,OATK,IAIe,EAClB,MAAM,GAAG,CAAC,CACV,KAAK,MAAS,EAAK,KAAK,CAAC,CAAC,CAC1B,QAAQ,MAAS,EAAK,MAEjB,IARC,CAAC;AAeV;AAEA,SAAgB,EAAsD,GAAY,GAAuB,GAAyB;CACjI,IAAM,IAAmB,EAAY,KAAK,MAAS,EAAK,YAAY,CAAC;CAErE,OAAO,EAAM,QAAQ,MAAS;EAC7B,KAAK,IAAM,KAAO,GAAY;GAC7B,IAAM,IAAQ,OAAO,EAAK,MAAQ,EAAE,CAAC,CAAC,YAAY,GAE9C,IAAY,GACZ,IAAgB;GAGpB,KAAK,IAAM,KAAQ,GAAkB;IACpC,IAAM,IAAQ,EAAM,QAAQ,GAAM,CAAS;IAC3C,IAAI,MAAU,IAAI;KACjB,IAAgB;KAChB;IACD;IACA,IAAY,IAAQ,EAAK;GAC1B;GAEA,IAAI,GAAe,OAAO;EAC3B;EACA,OAAO;CACR,CAAC;AAgBF;;;ACjDA,IAAM,IAAY;AAElB,SAAgB,EAAoD,GAAyB;CAC5F,IAAM,CAAC,GAAM,KAAW,EAAS,EAAE,GAC7B,CAAC,GAAS,KAAc,QAC7B,OAAO,KAAK,EAAO,YAAY,CAAC,CAAC,CAAC,CAAC,QACjC,GAAK,OACL,EAAI,KAAO,CAAC,GACL,IAER,CAAC,CACF,CACD,GAEM,IAAc,EAAiB,CAAI,GACnC,IAAkB,EAAY,SAAS,GAEvC,IAAM,IAAkB,MAAO,GAE/B,IAAQ,EAAiB;EAC9B,UAAU;GAAC;GAAU,EAAO,MAAM;GAAS,EAAO,MAAM;GAAQ;GAAS;EAAI;EAC7E,SAAS,OAAO,EAAE,eAAY,GAAG,WAAQ,gBAAa;GACrD,IAAM,IAAa,EAAO,QAAQ,KAAK,MAAQ,EAAI,GAAG,GAEhD,IAAS,MAAM,EAAgB;IACpC,OAAO;KACN,SAAS,EAAO,MAAM;KACtB,QAAQ,EAAO,MAAM;IACtB;IACA,SAAS;KACH;KACL,MAAM;KACN,QAAQ;KACR,YAAY;MACX,KAAK;MACL,SAAS,CACR,EACC,SAAS,IACN,EAAO,WAAW,KAAK,OAAS,EAChC,SAAS,EAAY,KAAK,MAAS,EAAqB,GAAK,CAAI,CAAC,EACnE,EAAE,IACD,CAAC,EACL,GACA;OACC,KAAK;OACL,SAAS,OAAO,KAAK,CAAO,CAAC,CAAC,KAAK,MAAQ,EAAkB,GAAK,EAAQ,EAAI,CAAC;MAChF,CACD;KACD;KACA,OAAO,CAAC,EAAE,KAAK,EAAO,WAAW,CAAC;IACnC;GACD,CAAC,CAAC,CAAC;IAAE;IAAQ;GAAO,CAAC;GAMrB,OAJI,IACI,EAAoB,EAAO,MAAM,GAAa,EAAO,UAAU,IAGhE,EAAO;EACf;EACA,mBAAmB,GAAU,MAAa;GACrC,QAAS,SAAS,IACtB,OAAO,EAAS,SAAS;EAC1B;EACA,kBAAkB;CACnB,CAAC,GAEK,IAAS,GAAa,MAAiB;EAC5C,EAAQ,CAAI;CACb,GAAG,CAAC,CAAC,GAEC,IAAc,QAAkB;EACrC,EAAQ,EAAE;CACX,GAAG,CAAC,CAAC;CAML,OAAO;EACN;EACA,OANa,QACN,EAAM,MAAM,MAAM,SAAS,MAAS,CAAI,KAAK,CAAC,GACnD,CAAC,EAAM,MAAM,KAAK,CAIpB;EACA,YAAY;EACZ,WAAW;EACX;EACA;EACA;CACD;AACD;;;ACxFA,SAAgB,EACf,GACA,IAAgC,CAAC,GAChC;CACD,IAAM,IAAQ,EAAS;EACtB,UAAU;GAAC;GAAkB,EAAO,MAAM;GAAS,EAAO,MAAM;GAAQ;EAAmB;EAC3F,SAAS,OAAO,EAAE,WAAQ,gBAAa;GACtC,IAAI,EAAoB,WAAW,GAClC,OAAO;IAAE,MAAM,CAAC;IAAU,YAAY,KAAA;GAAU;GAIjD,IAAM,IAAa,EAAO,QAAQ,KAAK,MAAQ,EAAI,GAAG;GAGtD,OAAO,MAAM,EAAgB;IAC5B,OAAO;KAAE,SAAS,EAAO,MAAM;KAAS,QAAQ,EAAO,MAAM;IAAO;IACpE,SAAS;KACR,QAAQ;KACR,YAAY,EACX,SAAS,EAAoB,KAAK,MAAQ,EAAkB,EAAO,YAAY,CAAG,CAAC,EACpF;IACD;GACD,CAAC,CAAC,CAAC;IAAE;IAAQ;GAAO,CAAC;EACtB;EACA,SAAS,EAAoB,SAAS;CACvC,CAAC;CAED,OAAO,EAAuB,CAAK;AACpC;;;AC7BA,SAAS,EAA+D,GAAqB,GAA0B;CACtH,IAAM,oBAAgB,IAAI,IAAe;CAEzC,KAAK,IAAM,KAAQ,GAClB,EAAc,IAAI,OAAO,EAAK,EAAW,GAAG,CAAI;CAGjD,OAAO,MAAM,KAAK,EAAc,OAAO,CAAC;AACzC;AAKA,SAAgB,EACf,GACA,IAAqC,CAAC,GACrC;CACD,IAAM,CAAC,GAAe,KAAoB,QAAoB,EAA6B,GAAsB,EAAO,UAAU,CAAC,GAK7H,IAAqB,GACzB,GAAoB,MAAwB;EAC5C,IAAI,EAAK,WAAW,EAAM,QACzB,OAAO;EAGR,IAAM,IAAW,IAAI,IAAI,EAAM,KAAK,MAAS,OAAO,EAAK,EAAO,WAAW,CAAC,CAAC;EAE7E,OAAO,EAAK,OAAO,MAAS,EAAS,IAAI,OAAO,EAAK,EAAO,WAAW,CAAC,CAAC;CAC1E,GACA,CAAC,EAAO,UAAU,CACnB,GAKM,IAAmB,GACvB,MAA4B;EAC5B,GAAkB,MAAS;GAC1B,IAAM,IAAkB,EAA6B,GAAW,EAAO,UAAU;GAEjF,OAAO,EAAmB,GAAM,CAAe,IAAI,IAAO;EAC3D,CAAC;CACF,GACA,CAAC,GAAoB,EAAO,UAAU,CACvC;CAiCA,OAAO;EACN;EACA,QAjCc,GACb,MAAY;GACZ,GAAkB,MAEb,EAAK,MAAM,MAAM,EAAE,EAAO,gBAAgB,EAAK,EAAO,WAAW,IAC7D,IAED,CAAC,GAAG,GAAM,CAAI,CACrB;EACF,GACA,CAAC,EAAO,UAAU,CAuBlB;EACA,UArBgB,GACf,MAAe;GACf,GAAkB,MAAS,EAAK,QAAQ,MAAS,EAAK,EAAO,gBAAgB,CAAE,CAAC;EACjF,GACA,CAAC,EAAO,UAAU,CAiBlB;EACA;EACA,gBAhBsB,QAAkB;GACxC,EAAiB,CAAC,CAAC;EACpB,GAAG,CAAC,CAcH;EACA,YAbkB,GACjB,MACO,EAAc,MAAM,MAAS,EAAK,EAAO,gBAAgB,CAAE,GAEnE,CAAC,EAAO,YAAY,CAAa,CASjC;CACD;AACD;;;ACpEA,SAAgB,EAA6D,EAC5E,YACA,kBACA,UACA,WACA,2BACsC;CACtC,IAAM,IAAoC,QAExC,EAAO,QAAQ,KACb,OACC;EACA,IAAI,EAAI;EACR,aAAa,EAAI;EACjB,QAAQ,EAAI;EACZ,MAAM,EACL,OAAO,EAAI,SAAS,OACrB;CACD,EACF,GACD,CAAC,EAAO,OAAO,CAChB,GAEM,EAAE,YAAS,iBAAc,EAAwB;EACtD,SAAS,EAAO,MAAM;EACtB,QAAQ,EAAO,MAAM;EACrB,MAAM;EACN,SAAS;CACV,CAAC,GAEK,EAAE,UAAO,UAAO,eAAY,cAAW,gBAAa,YAAS,kBAAe,EAAkB,CAAM,GACpG,EAAE,kBAAe,aAAU,wBAAqB,EAA2B,GAAQ,CAAoB,GACvG,IAAW,GAAa,MAAY,OAAO,EAAK,EAAO,WAAW,GAAG,CAAC,EAAO,UAAU,CAAC,GACxF,IAAiB,QAAc,EAAc,KAAK,MAAS,OAAO,EAAK,EAAO,WAAW,CAAC,GAAG,CAAC,GAAe,EAAO,UAAU,CAAC,GAC/H,IAAiB,QAAc,IAAI,IAAI,EAAM,KAAK,MAAS,OAAO,EAAK,EAAO,WAAW,CAAC,CAAC,GAAG,CAAC,GAAO,EAAO,UAAU,CAAC,GAExH,IAAiB,QAAkB;EACxC,AAAI,EAAM,eAAe,CAAC,EAAM,sBAC/B,EAAM,cAAc;CAEtB,GAAG,CAAC,CAAK,CAAC,GAMJ,IAAe,GACnB,MAA8B;EAC9B,IAAM,IAAqB,IAAI,IAAI,EAAqB,KAAK,MAAS,OAAO,EAAK,EAAO,WAAW,CAAC,CAAC,GAChG,IAAsB,EAAc,QAAQ,MAAS,CAAC,EAAe,IAAI,OAAO,EAAK,EAAO,WAAW,CAAC,CAAC,GACzG,IAA2B,EAAM,QAAQ,MAAS,EAAmB,IAAI,OAAO,EAAK,EAAO,WAAW,CAAC,CAAC;EAE/G,EAAiB,CAAC,GAAG,GAAqB,GAAG,CAAwB,CAAC;CACvE,GACA;EAAC,EAAO;EAAY;EAAO;EAAkB;EAAe;CAAc,CAC3E,GAGM,IAA2B,GAC/B,MAAY;EACZ,EAAS,OAAO,EAAK,EAAO,WAAW,CAAC;CACzC,GACA,CAAC,EAAO,YAAY,CAAQ,CAC7B,GAGM,IAAyB,QAAkB;EAEhD,AADA,EAAc,CAAa,GAC3B,EAAQ;CACT,GAAG;EAAC;EAAe;EAAe;CAAO,CAAC,GAEpC,IAAe,QAAc;EAClC,IAAI,cAAc,KAAU,EAAO,UAAU;GAC5C,IAAM,IAAc,OAAO,KAAK,EAAO,QAAQ;GAC/C,IAAI,EAAY,QACf,OAAO;IACN,OAAO;KAAE,GAAG,EAAO;KAAO;IAAY;IACtC,UAAU,EAAO;IACjB,OAAO,EAAO;GACf;EAEF;CACD,GAAG,CAAC,CAAM,CAAC;CAEX,OACC,kBAAC,GAAD;EAAO,QAAA;EAAgB;EAAS,OAAO,KAAS,EAAO;EAAO,MAAK;EAAK,QAAO;EAA/E,UAAA;GACC,kBAAC,GAAD,EAAA,UACC,kBAAC,GAAD;IAAe,KAAI;IAAnB,UAAA,CACE,KACA,kBAAC,GAAD;KACC,OAAO,EAAa;KACpB,UAAU,EAAa;KACvB,OAAO,EAAa;KACpB,QAAQ;KACR,UAAU;IACV,CAAA,GAGF,kBAAC,GAAD;KACC,MAAK;KACL,aAAa,EAAO,eAAe;KACnC,OAAO;KACP,UAAU;KACV,SAAS;KACT,WAAU;IACV,CAAA,CACa;GACF,CAAA,EAAA,CAAA;GAEd,kBAAC,GAAD,EAAA,UACC,kBAAC,GAAD;IAAe,KAAI;IAAK,cAAa;IAAW,WAAU;IAA1D,UAAA,CACC,kBAAC,GAAD;KACU;KACT,MAAM;KACN,eAAc;KACE;KACN;KACV,WAAW,EAAM,aAAa;KAC9B,YAAY,EAAM;KAClB,sBAAsB;KACtB,YAAY;KACZ,WAAU;IACV,CAAA,GAED,kBAAC,OAAD;KAAK,WAAU;KACd,UAAA,kBAAC,GAAD;MAAY,WAAU;MAAY,QAAO;MACxC,UAAA,kBAAC,GAAD,EAAA,UACE,EAAc,KAAK,MACnB,kBAAC,GAAD;OAEC,MAAK;OACL,MAAK;OACL,YAAW;OACX,gBAAgB,EAAyB,CAAI;OAC5C,UAAA,EAAO,eAAc,EAAK,EAAO,gBAA0C,EAAK,EAAO;MAClF,GAND,EAAK,EAAO,WAMX,CACP,EACS,CAAA;KACA,CAAA;IACR,CAAA,CACS;GACF,CAAA,EAAA,CAAA;GAEd,kBAAC,GAAD,EAAA,UAAA,CACC,kBAAC,GAAD;IAAQ,SAAS;IAAS,UAAA;GAAc,CAAA,GACxC,kBAAC,GAAD;IAAQ,SAAQ;IAAiB,SAAS;IAAwB,UAAA;GAE1D,CAAA,CACI,EAAA,CAAA;EACP;;AAET;;;AC5JA,SAAS,EAAqE,GAAyB,GAAqB;CAC3H,OAAO,EAAgB;EACtB,YAAY,OAAO,EAAO,UAAU;EACpC,SAAS,EAAO,MAAM;EACtB,QAAQ,EAAO,MAAM;EACrB,aAAa,EAAM,KAAK,MAAS,OAAO,EAAK,EAAO,WAAW,CAAC,CAAC,CAAC,KAAK;CACxE,CAAC;AACF;AAMA,SAAgB,EAAsD,EACrE,YACA,kBACA,qBACA,UACA,aACuB;CAcvB,OAbI,EAAiB,WAAW,UAE9B,kBAAC,GAAD;EAEQ;EACC;EACC;EACM;EACf,sBAAsB,EAAiB;CACvC,GANK,EAAmC,GAAQ,EAAiB,KAAK,CAMtE,IAKF,kBAAC,GAAD;EAAO,QAAA;EAAgB;EAAS,OAAO,KAAS,EAAO;EAAO,MAAK;EAAK,QAAO;EAA/E,UAAA,CACC,kBAAC,GAAD,EAAA,UACE,EAAiB,WAAW,YAC5B,kBAAC,GAAD,EAAgB,MAAK,kCAAmC,CAAA,IAExD,kBAAC,GAAD;GAAS,OAAM;GAAQ,UAAA;EAAgD,CAAA,EAE3D,CAAA,GAEd,kBAAC,GAAD,EAAA,UACC,kBAAC,GAAD;GAAQ,SAAS;GAAS,UAAA;EAAe,CAAA,EAC7B,CAAA,CACP;;AAET;;;ACzDA,IAAa,KAA0B,EACtC,UACA,gBACA,aACA,SACA,iBAAc,WACd,UACA,WACA,iBACkC;CAClC,IAAM,EAAE,cAAW,YAAS,qBAAkB,EAAiB;EAC9D,UAAU,KAAiC;EAC3C,gBAAgB,CAAC,CAAC;CACnB,CAAC,GACK,IAAW,EAAQ;CAEzB,OACC,kBAAC,OAAD;EAAK,iBAAe,KAAY,KAAA;EAAW,WAAW,EAAG,EAAS,WAAW,EAAS,WAAW,KAAQ,EAAS,EAAK;EAAvH,UAAA;GACE,KACA,kBAAC,SAAD;IAAO,IAAI;IAAS,SAAS;IAAW,WAAW,EAAS;IAC1D,UAAA;GACK,CAAA;GAEP,KACA,kBAAC,KAAD;IAAG,IAAI;IAAe,WAAW,EAAS;IACxC,UAAA;GACC,CAAA;GAGJ,kBAAC,OAAD;IAAK,WAAW,EAAS;IAAzB,UAAA,CACC,kBAAC,OAAD;KAAK,WAAW,EAAS;KACvB,UAAA,CAAC,KACD,kBAAC,GAAD;MAAe,OAAM;MAAS,WAAU;MACvC,UAAA,kBAAC,OAAD;OAAK,WAAW,EAAS;OAAgB,UAAA;MAAiB,CAAA;KAC5C,CAAA;IAEZ,CAAA,GAEL,kBAAC,OAAD;KAAK,WAAW,EAAY;KAC3B,UAAA,kBAAC,OAAD;MAAK,WAAW,EAAS;MAAzB,UAAA;OACC,kBAAC,OAAD;QAAK,WAAU;QAAe,OAAO,EAAE,UAAU,OAAO;QACtD,UAAA;OACG,CAAA;OAEL,kBAAC,UAAD;QACC,MAAK;QACL,UAAU,CAAC;QACX,WAAW,EAAS;QACpB,SAAS;QACT,cAAW;QACX,UAAA,kBAAC,GAAD,CAAQ,CAAA;OACD,CAAA;OAER,kBAAC,OAAD,EAAK,WAAW,EAAS,kBAAoB,CAAA;OAE7C,kBAAC,UAAD;QAAQ,MAAK;QAAS,SAAS;QAAQ,WAAW,EAAS;QAC1D,UAAA,kBAAC,GAAD,EAAkB,WAAW,EAAS,aAAe,CAAA;OAC9C,CAAA;MACJ;;IACD,CAAA,CACD;;EACD;;AAEP,GCjEM,IAA4C,CAAC;AAEnD,SAAgB,EAAuD,EACtE,WAAQ,CAAC,GACT,aACA,UACA,WACA,GAAG,KAC6B;CAChC,IAAM,CAAC,GAAa,KAAkB,EAAS,EAAK,GAE9C,IAAwB,EAAiC,GAAQ,CAAK,GACtE,IAAgB,EAAsB,MACtC,IACL,EAAM,WAAW,IACd;EAAE,QAAQ;EAAS,OAAO;CAAwB,IAClD,MAAkB,KAAA,IAEjB,EAAsB,UACrB,EAAE,QAAQ,QAAQ,IAClB,EAAE,QAAQ,UAAU,IAHrB;EAAE,QAAQ;EAAS,OAAO;CAAc,GAKvC,IAAa,QAAkB,EAAe,EAAI,GAAG,CAAC,CAAC,GACvD,IAAc,QAAkB,EAAe,EAAK,GAAG,CAAC,CAAC,GACzD,IAAe,QAAkB,EAAS,CAAC,CAAC,GAAG,CAAC,CAAQ,CAAC,GACzD,IAAe,GACnB,MAAe,EAAS,EAAM,KAAK,MAAS,OAAO,EAAK,EAAO,WAAW,CAAC,CAAC,GAC7E,CAAC,EAAO,YAAY,CAAQ,CAC7B,GACM,IAAiB,GACrB,MAA2B;EACtB,OAAO,QAEZ,OADI,EAAM,SAAS,IAAU,WAAW,EAAM,OAAO,UAC9C,GAAI,EAAO,eAAe,EAAM,EAAE,CAAC,EAAO,gBAAiB,EAAM,EAAE,CAAC,EAAO;CACnF,GACA,CAAC,EAAO,YAAY,EAAO,WAAW,CACvC;CAEA,OACC,kBAAA,GAAA,EAAA,UAAA,CACC,kBAAC,GAAD;EAAwB,GAAI;EAAO,OAAO,EAAe,CAAa;EAAG,QAAQ;EAAY,SAAS;CAAe,CAAA,GAEpH,KACA,kBAAC,GAAD;EACQ;EACC;EACR,SAAS;EACT,eAAe;EACG;CAClB,CAAA,CAED,EAAA,CAAA;AAEJ"}
@@ -11,12 +11,13 @@ interface SearchModalProps<T extends Record<string, string>> {
11
11
  onClose: () => void;
12
12
  onItemsSelect: (items: T[]) => void;
13
13
  initialSelection: AdvancedSearchInitialSelection<T>;
14
+ title?: string;
14
15
  config: SearchConfig<T>;
15
16
  }
16
17
  /**
17
18
  * Query boundary начального выбора. Интерактивная сессия монтируется только после
18
19
  * успешной загрузки committed snapshot, поэтому поздний ответ не может стереть draft.
19
20
  */
20
- export declare function AdvancedSearchModal<T extends Record<string, string>>({ onClose, onItemsSelect, initialSelection, config }: SearchModalProps<T>): import("react").JSX.Element;
21
+ export declare function AdvancedSearchModal<T extends Record<string, string>>({ onClose, onItemsSelect, initialSelection, title, config }: SearchModalProps<T>): import("react").JSX.Element;
21
22
  export {};
22
23
  //# sourceMappingURL=AdvancedSearchModal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AdvancedSearchModal.d.ts","sourceRoot":"","sources":["../../../src/advanced-search/ui/AdvancedSearchModal.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAIxC,MAAM,MAAM,8BAA8B,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAC1E;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAA;CAAE,CAAC;AAExF,UAAU,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAC1D,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,aAAa,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;IACpC,gBAAgB,EAAE,8BAA8B,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;CACxB;AAeD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EACrE,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,MAAM,EACN,EAAE,gBAAgB,CAAC,CAAC,CAAC,+BA4BrB"}
1
+ {"version":3,"file":"AdvancedSearchModal.d.ts","sourceRoot":"","sources":["../../../src/advanced-search/ui/AdvancedSearchModal.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAIxC,MAAM,MAAM,8BAA8B,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAC1E;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAA;CAAE,CAAC;AAExF,UAAU,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAC1D,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,aAAa,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;IACpC,gBAAgB,EAAE,8BAA8B,CAAC,CAAC,CAAC,CAAC;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;CACxB;AAeD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EACrE,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,KAAK,EACL,MAAM,EACN,EAAE,gBAAgB,CAAC,CAAC,CAAC,+BA6BrB"}
@@ -4,12 +4,13 @@ interface AdvancedSearchModalSessionProps<T extends Record<string, string>> {
4
4
  onItemsSelect: (items: T[]) => void;
5
5
  /** Снимок committed-выбора, с которого начинается текущая сессия модалки. */
6
6
  initialSelectedItems: readonly T[];
7
+ title?: string;
7
8
  config: SearchConfig<T>;
8
9
  }
9
10
  /**
10
11
  * Интерактивная сессия расширенного поиска с собственным selection draft.
11
12
  * Компонент монтируется только после разрешения initial Query snapshot.
12
13
  */
13
- export declare function AdvancedSearchModalSession<T extends Record<string, string>>({ onClose, onItemsSelect, config, initialSelectedItems }: AdvancedSearchModalSessionProps<T>): import("react").JSX.Element;
14
+ export declare function AdvancedSearchModalSession<T extends Record<string, string>>({ onClose, onItemsSelect, title, config, initialSelectedItems }: AdvancedSearchModalSessionProps<T>): import("react").JSX.Element;
14
15
  export {};
15
16
  //# sourceMappingURL=AdvancedSearchModalSession.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AdvancedSearchModalSession.d.ts","sourceRoot":"","sources":["../../../src/advanced-search/ui/AdvancedSearchModalSession.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAE,YAAY,EAAiD,MAAM,UAAU,CAAC;AAEvF,UAAU,+BAA+B,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IACzE,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,aAAa,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;IACpC,6EAA6E;IAC7E,oBAAoB,EAAE,SAAS,CAAC,EAAE,CAAC;IACnC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAC5E,OAAO,EACP,aAAa,EACb,MAAM,EACN,oBAAoB,EACpB,EAAE,+BAA+B,CAAC,CAAC,CAAC,+BAiJpC"}
1
+ {"version":3,"file":"AdvancedSearchModalSession.d.ts","sourceRoot":"","sources":["../../../src/advanced-search/ui/AdvancedSearchModalSession.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAE,YAAY,EAAiD,MAAM,UAAU,CAAC;AAEvF,UAAU,+BAA+B,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IACzE,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,aAAa,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;IACpC,6EAA6E;IAC7E,oBAAoB,EAAE,SAAS,CAAC,EAAE,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAC5E,OAAO,EACP,aAAa,EACb,KAAK,EACL,MAAM,EACN,oBAAoB,EACpB,EAAE,+BAA+B,CAAC,CAAC,CAAC,+BAiJpC"}
@@ -1,8 +1,9 @@
1
1
  import { UiBaseProps } from "../../types";
2
2
  import { SearchConfig } from "../model";
3
3
  type AdvancedSearchSelectProps<T extends Record<string, string>> = UiBaseProps<string[]> & {
4
+ title?: string;
4
5
  config: SearchConfig<T>;
5
6
  };
6
- export declare function AdvancedSearchSelect<T extends Record<string, string>>({ value, onChange, config, ...props }: AdvancedSearchSelectProps<T>): import("react").JSX.Element;
7
+ export declare function AdvancedSearchSelect<T extends Record<string, string>>({ value, onChange, title, config, ...props }: AdvancedSearchSelectProps<T>): import("react").JSX.Element;
7
8
  export {};
8
9
  //# sourceMappingURL=AdvancedSearchSelect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AdvancedSearchSelect.d.ts","sourceRoot":"","sources":["../../../src/advanced-search/ui/AdvancedSearchSelect.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAoC,MAAM,UAAU,CAAC;AAK1E,KAAK,yBAAyB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG;IAC1F,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;CACxB,CAAC;AAIF,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EACtE,KAAU,EACV,QAAQ,EACR,MAAM,EACN,GAAG,KAAK,EACR,EAAE,yBAAyB,CAAC,CAAC,CAAC,+BA4C9B"}
1
+ {"version":3,"file":"AdvancedSearchSelect.d.ts","sourceRoot":"","sources":["../../../src/advanced-search/ui/AdvancedSearchSelect.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAoC,MAAM,UAAU,CAAC;AAK1E,KAAK,yBAAyB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG;IAC1F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;CACxB,CAAC;AAIF,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EACtE,KAAU,EACV,QAAQ,EACR,KAAK,EACL,MAAM,EACN,GAAG,KAAK,EACR,EAAE,yBAAyB,CAAC,CAAC,CAAC,+BA6C9B"}
@@ -3,7 +3,7 @@ import { r as t } from "./grid-dI94AAbi.js";
3
3
  import { i as n, n as r, r as i } from "./modal-DLRYn-Lr.js";
4
4
  import { n as a } from "./input-CCdBtl-C.js";
5
5
  import { t as o } from "./check-box-sfGjYczQ.js";
6
- import { n as s } from "./radio-group-NhBL3fkD.js";
6
+ import { n as s } from "./radio-group-BAeJjyZ5.js";
7
7
  import { a as c, i as l, n as u, r as d, t as f } from "./types-D9Wj9wrg.js";
8
8
  import { useCallback as p, useEffect as m, useMemo as h, useRef as g, useState as _ } from "react";
9
9
  import { cn as v } from "@ryuzaki13/react-foundation-lib/utils";
@@ -1440,4 +1440,4 @@ function ct({ initialData: e, onChange: t, toolbarComponents: n, businessAdapter
1440
1440
  //#endregion
1441
1441
  export { ct as TextEditorLexicalClient };
1442
1442
 
1443
- //# sourceMappingURL=TextEditorLexicalClient-CK9nZ-xo.js.map
1443
+ //# sourceMappingURL=TextEditorLexicalClient-C6b5N8AO.js.map