@ryuzaki13/react-foundation-ui 1.7.0 → 1.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (241) hide show
  1. package/README.md +36 -0
  2. package/dist/advanced-search/index.js +1 -1
  3. package/dist/chunks/{multi-select-Bs1GU5MD.js → multi-select-D5b3Gxsv.js} +130 -119
  4. package/dist/chunks/{multi-select-Bs1GU5MD.js.map → multi-select-D5b3Gxsv.js.map} +1 -1
  5. package/dist/chunks/odata-dependent-C_DCbKY2.js +45 -0
  6. package/dist/chunks/odata-dependent-C_DCbKY2.js.map +1 -0
  7. package/dist/chunks/select-D3EnRya6.js +355 -0
  8. package/dist/chunks/select-D3EnRya6.js.map +1 -0
  9. package/dist/chunks/{useODataSelectBase-Bq36Wp1U.js → useODataSelectBase-Cc79kBNk.js} +27 -43
  10. package/dist/chunks/useODataSelectBase-Cc79kBNk.js.map +1 -0
  11. package/dist/multi-select/index.js +1 -1
  12. package/dist/multi-select/ui/ODataDependentMultiSelect.d.ts +5 -13
  13. package/dist/multi-select/ui/ODataDependentMultiSelect.d.ts.map +1 -1
  14. package/dist/multi-select/ui/ODataDependentSegmentMultiSelect.d.ts +3 -20
  15. package/dist/multi-select/ui/ODataDependentSegmentMultiSelect.d.ts.map +1 -1
  16. package/dist/odata-dependent/ODataDependentSegmentControlProps.d.ts +29 -0
  17. package/dist/odata-dependent/ODataDependentSegmentControlProps.d.ts.map +1 -0
  18. package/dist/odata-dependent/index.d.ts +3 -0
  19. package/dist/odata-dependent/index.d.ts.map +1 -0
  20. package/dist/odata-dependent/index.js +2 -0
  21. package/dist/odata-dependent/model/useODataDependentSelection.d.ts +50 -0
  22. package/dist/odata-dependent/model/useODataDependentSelection.d.ts.map +1 -0
  23. package/dist/preset-select/index.js +1 -1
  24. package/dist/select/ODataDependentSegmentSelect.d.ts +12 -0
  25. package/dist/select/ODataDependentSegmentSelect.d.ts.map +1 -0
  26. package/dist/select/index.d.ts +1 -0
  27. package/dist/select/index.d.ts.map +1 -1
  28. package/dist/select/index.js +2 -2
  29. package/dist/select/model/useODataSelectBase.d.ts.map +1 -1
  30. package/dist/state-select/index.js +1 -1
  31. package/dist/tree-select/index.js +2 -2
  32. package/package.json +5 -1
  33. package/storybook-static/assets/{Badge-Dvx1zhPb.js → Badge-vnYXe1um.js} +1 -1
  34. package/storybook-static/assets/{Badge.stories-0OqfwxFw.js → Badge.stories-5LcplF_Q.js} +1 -1
  35. package/storybook-static/assets/{BadgeList-y-uBOP3g.js → BadgeList-B1Mn9GtM.js} +1 -1
  36. package/storybook-static/assets/{Button-Do2mwgAg.js → Button-Ez6zTRLH.js} +1 -1
  37. package/storybook-static/assets/{Button-C80gfqoH.js → Button-tokZDQsV.js} +1 -1
  38. package/storybook-static/assets/{Button.stories-D8Fw6nud.js → Button.stories-BeJ5wldz.js} +1 -1
  39. package/storybook-static/assets/{CalendarView--kZXxq2R.js → CalendarView-BYiJjzKd.js} +1 -1
  40. package/storybook-static/assets/{CheckBox-B75CNLqu.js → CheckBox-BFCmk9Is.js} +1 -1
  41. package/storybook-static/assets/{CheckBox-BLhKCbdy.js → CheckBox-O5kReKiZ.js} +1 -1
  42. package/storybook-static/assets/{CheckBox.stories-B6oVA8el.js → CheckBox.stories-BUNYAiF-.js} +1 -1
  43. package/storybook-static/assets/{Color-6AOWCN3U-cvznI3uO.js → Color-6AOWCN3U-CYSLqqAa.js} +1 -1
  44. package/storybook-static/assets/{ContextMenu-CO0idIWo.js → ContextMenu-CXsCt4Ca.js} +1 -1
  45. package/storybook-static/assets/{ContextMenu-fNZVzUvQ.js → ContextMenu-D7IH0vrL.js} +1 -1
  46. package/storybook-static/assets/{ContextMenu.stories-0nmobIh6.js → ContextMenu.stories-BugHcFL7.js} +1 -1
  47. package/storybook-static/assets/{DateInput-D2rfcbf3.js → DateInput-Clx9NJfT.js} +1 -1
  48. package/storybook-static/assets/{DateInput-C2In05Rg.js → DateInput-xKfdW4xy.js} +1 -1
  49. package/storybook-static/assets/{DateInput.stories-JUkITh6A.js → DateInput.stories-VgCgoB2M.js} +1 -1
  50. package/storybook-static/assets/{DateRangePresetSelect-nJgrTbCb.js → DateRangePresetSelect-CalAPOdY.js} +1 -1
  51. package/storybook-static/assets/{DateRangePresetSelect-Qc1kiswO.js → DateRangePresetSelect-PvUDbbbE.js} +1 -1
  52. package/storybook-static/assets/{DateRangePresetSelect.stories-ZCKuMVv1.js → DateRangePresetSelect.stories-DrLZercZ.js} +1 -1
  53. package/storybook-static/assets/{Detail-pOYJZCE7.js → Detail-Bls5nJys.js} +1 -1
  54. package/storybook-static/assets/{Detail.stories-zt0s1IF8.js → Detail.stories-BS7JQ0sv.js} +1 -1
  55. package/storybook-static/assets/{Dialog-0qof8LAi.js → Dialog-DzFUQBt1.js} +1 -1
  56. package/storybook-static/assets/{Dialog-yNCOXo0U.js → Dialog-T74XF-bA.js} +1 -1
  57. package/storybook-static/assets/{Dialog.stories-B8N3aCaV.js → Dialog.stories-DwAyLLWR.js} +1 -1
  58. package/storybook-static/assets/{Disclosure-1aczsOfE.js → Disclosure-DukYcfZ8.js} +1 -1
  59. package/storybook-static/assets/{Disclosure.stories-BHF7zV4r.js → Disclosure.stories-BwbQhJLc.js} +1 -1
  60. package/storybook-static/assets/{DisclosureGroup-1UIF1dzA.js → DisclosureGroup-C2j4-sfq.js} +1 -1
  61. package/storybook-static/assets/{DocsRenderer-JROSPFPF-C3ElfDK6.js → DocsRenderer-JROSPFPF-aOEkU93H.js} +1 -1
  62. package/storybook-static/assets/{DropZone-BXwkEyR-.js → DropZone-CX6FCvI6.js} +1 -1
  63. package/storybook-static/assets/{DropZone-DcnHdyOy.js → DropZone-DmXfqTac.js} +1 -1
  64. package/storybook-static/assets/{DropZone.stories-C__hp7nZ.js → DropZone.stories-CWUYTr9y.js} +1 -1
  65. package/storybook-static/assets/{DropdownMenu-Cn3NEWML.js → DropdownMenu-9_GcY2uX.js} +1 -1
  66. package/storybook-static/assets/{ExpandableActionPanel-DRmbAqvH.js → ExpandableActionPanel-nt3MqFv9.js} +1 -1
  67. package/storybook-static/assets/{ExpandableActionPanel.stories-CILdKlLi.js → ExpandableActionPanel.stories-olHfqsW_.js} +1 -1
  68. package/storybook-static/assets/{Flex-sxipWyth.js → Flex-RLn0K4Ow.js} +1 -1
  69. package/storybook-static/assets/{Flex.stories-DY8V2sbR.js → Flex.stories-DQDMHquA.js} +1 -1
  70. package/storybook-static/assets/{FloatingPopover-CNZzGjfO.js → FloatingPopover-C3zX8ub-.js} +1 -1
  71. package/storybook-static/assets/{FormattedTableCell-DG4dVFTa.js → FormattedTableCell-B4pCfcrR.js} +1 -1
  72. package/storybook-static/assets/{Grid-D2wN6WmI.js → Grid-tCvypgeR.js} +1 -1
  73. package/storybook-static/assets/{Grid.stories-Dtya61zz.js → Grid.stories-B5vW8L5j.js} +1 -1
  74. package/storybook-static/assets/{ImageCropper.stories-CQOvZs9k.js → ImageCropper.stories-ZYBRPrX5.js} +1 -1
  75. package/storybook-static/assets/{ImageRenderer-C8mxg5a9.js → ImageRenderer-BNfa_o00.js} +1 -1
  76. package/storybook-static/assets/{ImageRenderer.stories-ulHRIV84.js → ImageRenderer.stories-Dpnwae9g.js} +1 -1
  77. package/storybook-static/assets/{ImageView.stories-DfO8LRNv.js → ImageView.stories-B0AdmHu8.js} +1 -1
  78. package/storybook-static/assets/{ImageViewer.stories-BC2AIOFa.js → ImageViewer.stories-BjS-HrS8.js} +2 -2
  79. package/storybook-static/assets/{ImageViewerRuntime-D3u-RNDY.js → ImageViewerRuntime-CUjlGhkL.js} +1 -1
  80. package/storybook-static/assets/{Input-Duo7u72d.js → Input-BZvdvztj.js} +1 -1
  81. package/storybook-static/assets/{Input-BrWASIXE.js → Input-BfxuEl-U.js} +1 -1
  82. package/storybook-static/assets/{Input.stories--i9k07KI.js → Input.stories-CRyRl5-A.js} +1 -1
  83. package/storybook-static/assets/{InputDateTime-DcZRgiPg.js → InputDateTime-BoHXIqs0.js} +1 -1
  84. package/storybook-static/assets/{InputDateTime.stories-Dt6Y1CZ2.js → InputDateTime.stories-4TKy1puk.js} +1 -1
  85. package/storybook-static/assets/{InputFile-BiLD06iA.js → InputFile-9rfT18Tp.js} +1 -1
  86. package/storybook-static/assets/{InputFile-Cj-m_fo4.js → InputFile-cHVEMDCa.js} +1 -1
  87. package/storybook-static/assets/{InputFile.stories-akX4tW3o.js → InputFile.stories-Dfz4dP6-.js} +1 -1
  88. package/storybook-static/assets/{InputFiles-B8Erga76.js → InputFiles-B7hAFUUH.js} +1 -1
  89. package/storybook-static/assets/{InputFiles-6FDWUpPw.js → InputFiles-D-yaCNy7.js} +1 -1
  90. package/storybook-static/assets/{InputFiles.stories-CHQIzkT-.js → InputFiles.stories-BuyS7aob.js} +1 -1
  91. package/storybook-static/assets/{InputFilesList-B2ED3xeD.js → InputFilesList-AVN7l6tF.js} +1 -1
  92. package/storybook-static/assets/{InputImage-Csz6DuXw.js → InputImage-B9XqXq0w.js} +1 -1
  93. package/storybook-static/assets/{InputImage-DgEux6nu.js → InputImage-HJDF6igx.js} +1 -1
  94. package/storybook-static/assets/{InputImage.stories-BQMt1D7p.js → InputImage.stories-BV70MC-m.js} +1 -1
  95. package/storybook-static/assets/{InteractiveComponents-Dsk4_Vr2.js → InteractiveComponents-CHY0kEDq.js} +1 -1
  96. package/storybook-static/assets/{InteractiveComponents.stories-DkOUo1Hs.js → InteractiveComponents.stories-D6arBycE.js} +1 -1
  97. package/storybook-static/assets/{LayoutPicker-CtU_BRSU.js → LayoutPicker-BGk1niU3.js} +1 -1
  98. package/storybook-static/assets/{LayoutPicker-BYQGwA2A.js → LayoutPicker-SjhPWivQ.js} +1 -1
  99. package/storybook-static/assets/{LayoutPicker.stories-u-llXrmg.js → LayoutPicker.stories-CbEGkcsV.js} +1 -1
  100. package/storybook-static/assets/{Listbox-CRpGe74L.js → Listbox-C3sJ_hRZ.js} +1 -1
  101. package/storybook-static/assets/{Listbox-D-w3s2rV.js → Listbox-D8KrJkpi.js} +1 -1
  102. package/storybook-static/assets/{Listbox.stories-DNgm_jEg.js → Listbox.stories-CVdUd7oX.js} +1 -1
  103. package/storybook-static/assets/{Modal-BCEfdMRV.js → Modal-0PfZiQTc.js} +1 -1
  104. package/storybook-static/assets/{Modal.stories-DgluP-Zg.js → Modal.stories-CVsQnsPB.js} +1 -1
  105. package/storybook-static/assets/{ModalManagerProvider-DB1CpShR.js → ModalManagerProvider-CtrgehPS.js} +1 -1
  106. package/storybook-static/assets/{MultiSelect-CtPVgzw3.js → MultiSelect-BmMO3Np9.js} +1 -1
  107. package/storybook-static/assets/{MultiSelect-DXazv8Gk.js → MultiSelect-C4uTzWsY.js} +1 -1
  108. package/storybook-static/assets/{MultiSelect.stories-m3lK4whp.js → MultiSelect.stories-BbRKK0p6.js} +1 -1
  109. package/storybook-static/assets/{NoData-tXPTJtqs.js → NoData-FOwrLS3D.js} +1 -1
  110. package/storybook-static/assets/{NotificationsHost-Cns_wFoV.js → NotificationsHost-CvUyoPxm.js} +1 -1
  111. package/storybook-static/assets/{NotificationsHost.stories-Bl6cz2bV.js → NotificationsHost.stories-CxAmUl63.js} +1 -1
  112. package/storybook-static/assets/{ODataMultiSelect-6Df5Fkah.js → ODataMultiSelect-MtLFqFdV.js} +3 -2
  113. package/storybook-static/assets/ODataMultiSelect.stories-BqdZ_SmQ.js +139 -0
  114. package/storybook-static/assets/{ODataSelect-BO5s66q2.js → ODataSelect-C2mNXOs7.js} +3 -1
  115. package/storybook-static/assets/ODataSelect.stories-Ch9pJFtV.js +161 -0
  116. package/storybook-static/assets/{ODataTreeMultiSelect-OSArfN7U.js → ODataTreeMultiSelect-DKuQpEHJ.js} +1 -1
  117. package/storybook-static/assets/{ODataTreeMultiSelect.stories-DIO3n7N6.js → ODataTreeMultiSelect.stories-rhaGxNb0.js} +1 -1
  118. package/storybook-static/assets/{ODataTreeSelect-C2YNVppX.js → ODataTreeSelect-iOpfYI9F.js} +1 -1
  119. package/storybook-static/assets/{ODataTreeSelect.stories-BCjXst_-.js → ODataTreeSelect.stories-DO1bOEQc.js} +1 -1
  120. package/storybook-static/assets/{OneStepScroller-CBqY-Bqn.js → OneStepScroller-BMbG0e_H.js} +1 -1
  121. package/storybook-static/assets/{PeriodSelect-D9DwWI_-.js → PeriodSelect-Cs81vXtY.js} +1 -1
  122. package/storybook-static/assets/{PeriodSelect-8I2DZE_l.js → PeriodSelect-MupKtCZ2.js} +1 -1
  123. package/storybook-static/assets/{PeriodSelect.stories-Dvdfl6jl.js → PeriodSelect.stories-B2FDkAfy.js} +1 -1
  124. package/storybook-static/assets/{PickerSelectionToolbar-DTFaKHYJ.js → PickerSelectionToolbar-DkWserZQ.js} +1 -1
  125. package/storybook-static/assets/{PickerTriggerActions-DB5hWOPs.js → PickerTriggerActions-BOhoXiBt.js} +1 -1
  126. package/storybook-static/assets/{Popover-x1KDnoku.js → Popover-UdAXxj_x.js} +1 -1
  127. package/storybook-static/assets/{Popover-DDuVgt46.js → Popover-dlyvIeXz.js} +1 -1
  128. package/storybook-static/assets/{Popover.stories-JeW5d8gm.js → Popover.stories-CO2yrZc-.js} +1 -1
  129. package/storybook-static/assets/{PresetRangeDateInput-C4gbhz_V.js → PresetRangeDateInput-Bbgpqy-r.js} +1 -1
  130. package/storybook-static/assets/{PresetRangeDateInput-Csq8RBK7.js → PresetRangeDateInput-TTU2ggx2.js} +1 -1
  131. package/storybook-static/assets/{PresetRangeDateInput.stories-mPfnN7w9.js → PresetRangeDateInput.stories-DUMiMPe7.js} +1 -1
  132. package/storybook-static/assets/{PresetSelect-D5XN8_y3.js → PresetSelect-DmdRTAVo.js} +1 -1
  133. package/storybook-static/assets/{RadioButton-DqKb7dga.js → RadioButton-CMxc7Jvy.js} +1 -1
  134. package/storybook-static/assets/{RadioButton-3vNTYzok.js → RadioButton-CsZACDyv.js} +1 -1
  135. package/storybook-static/assets/{RadioButton.stories-DEtB6-Gq.js → RadioButton.stories-Aav_OAcv.js} +1 -1
  136. package/storybook-static/assets/{RadioGroup-CxSDxT4Z.js → RadioGroup-C34FTwLU.js} +1 -1
  137. package/storybook-static/assets/{RadioGroup-BVH61YyU.js → RadioGroup-U2EEs5od.js} +1 -1
  138. package/storybook-static/assets/{RadioGroup.stories-D8YHF52N.js → RadioGroup.stories-wL2AX-Yg.js} +1 -1
  139. package/storybook-static/assets/{Scrollable-CzjaBhDx.js → Scrollable-DUOHq_cZ.js} +1 -1
  140. package/storybook-static/assets/{Select-DRU8ibvA.js → Select-CaoNBi5X.js} +1 -1
  141. package/storybook-static/assets/{Select-DCitHJuw.js → Select-JY35jdqV.js} +1 -1
  142. package/storybook-static/assets/{Select.stories-CK_D5RAO.js → Select.stories-Db-PRiir.js} +1 -1
  143. package/storybook-static/assets/{SelectOptionContent-BAJEXMJG.js → SelectOptionContent-BcvkiM5d.js} +1 -1
  144. package/storybook-static/assets/{SerializableSelect-DyRYm6Fb.js → SerializableSelect-HSwx4Kn2.js} +1 -1
  145. package/storybook-static/assets/{SerializableSelect.stories-6msteGLD.js → SerializableSelect.stories-DdHotcES.js} +1 -1
  146. package/storybook-static/assets/{SingleDateTimeInput-CNIODG1r.js → SingleDateTimeInput-CQVoGA2w.js} +1 -1
  147. package/storybook-static/assets/{SingleDateTimeInput-Dt2pvrEI.js → SingleDateTimeInput-MYajYmv1.js} +1 -1
  148. package/storybook-static/assets/{SingleDateTimeInput.stories-BjZkApxR.js → SingleDateTimeInput.stories-BbUphbSp.js} +1 -1
  149. package/storybook-static/assets/{Slider-CyrGnw3r.js → Slider-BrQ4ksxF.js} +1 -1
  150. package/storybook-static/assets/{Slider-C2STT2eb.js → Slider-s7ST-3RJ.js} +1 -1
  151. package/storybook-static/assets/{Slider.stories-cV_-2z3X.js → Slider.stories-w50A1paF.js} +1 -1
  152. package/storybook-static/assets/{SliderInput-C7XLyS8n.js → SliderInput-1_Egcch8.js} +1 -1
  153. package/storybook-static/assets/{SliderInput-DxWLjpcW.js → SliderInput-Cnm3KcyF.js} +1 -1
  154. package/storybook-static/assets/{SliderInput.stories-DBIe7Yhj.js → SliderInput.stories-DLBBUxKz.js} +1 -1
  155. package/storybook-static/assets/{Sortable-06Qmji0A.js → Sortable-B0TvDh0j.js} +1 -1
  156. package/storybook-static/assets/{Sortable.stories-VPSDld7o.js → Sortable.stories-B31jbM4x.js} +1 -1
  157. package/storybook-static/assets/{Splitter-Bjc9_DpU.js → Splitter-D4B3BVbz.js} +1 -1
  158. package/storybook-static/assets/{Splitter.stories-CaecpwzX.js → Splitter.stories-szzG_E9V.js} +1 -1
  159. package/storybook-static/assets/{StateSelect-DEbS-UHz.js → StateSelect-BNneTJ8H.js} +1 -1
  160. package/storybook-static/assets/{StateSelect-CBqVFgZr.js → StateSelect-Ceh8_VLn.js} +1 -1
  161. package/storybook-static/assets/{StateSelect.stories-DHCZQjpD.js → StateSelect.stories-CJxr-Qm_.js} +1 -1
  162. package/storybook-static/assets/{StringToggle.stories-DZ5cJKre.js → StringToggle.stories-Cwdk9yWF.js} +1 -1
  163. package/storybook-static/assets/{Switch-BQVOziJc.js → Switch-f5NHm5hJ.js} +1 -1
  164. package/storybook-static/assets/{Switch-DbMsXJZQ.js → Switch-uGSRbqVn.js} +1 -1
  165. package/storybook-static/assets/{Switch.stories-xsRPNma9.js → Switch.stories-HaYKntQH.js} +1 -1
  166. package/storybook-static/assets/{Table-90xunt07.js → Table-DxQuA1Dc.js} +1 -1
  167. package/storybook-static/assets/{Table.stories-BHO05Nt2.js → Table.stories-SMhKCmIb.js} +1 -1
  168. package/storybook-static/assets/{Tabs-I00nOCLh.js → Tabs-BDX7aIIu.js} +1 -1
  169. package/storybook-static/assets/{Tabs.stories-B2XJ7Ho5.js → Tabs.stories-CjlYBZ8E.js} +1 -1
  170. package/storybook-static/assets/{TabsBox-elxR9IVU.js → TabsBox-t8UA3Ghh.js} +1 -1
  171. package/storybook-static/assets/{TagInput-DJRFuFDX.js → TagInput-YHV8sAGl.js} +1 -1
  172. package/storybook-static/assets/{TagInput.stories-Cf6c-1Xx.js → TagInput.stories-VKkEKC9A.js} +1 -1
  173. package/storybook-static/assets/{Text-CKeWyv1R.js → Text-BQ5vHbkZ.js} +1 -1
  174. package/storybook-static/assets/{Textarea-DamLyP7r.js → Textarea-BY_dHgap.js} +1 -1
  175. package/storybook-static/assets/{Textarea-DZ27cTTb.js → Textarea-ogSh20Tb.js} +1 -1
  176. package/storybook-static/assets/{Textarea.stories-1wsB9B_l.js → Textarea.stories-BixCwInt.js} +1 -1
  177. package/storybook-static/assets/{TimePanel-BCiqgc3_.js → TimePanel-CgR59Au6.js} +1 -1
  178. package/storybook-static/assets/{TimePanel.stories-CChD-RUz.js → TimePanel.stories-D3uV3m77.js} +1 -1
  179. package/storybook-static/assets/{Toggle-BAJj1RSd.js → Toggle-BbYcoBEJ.js} +1 -1
  180. package/storybook-static/assets/{Toggle-CUhT4loI.js → Toggle-Cit9qQ37.js} +1 -1
  181. package/storybook-static/assets/{Toggle.stories-Dipcr_LJ.js → Toggle.stories-uPLdFwPH.js} +1 -1
  182. package/storybook-static/assets/{TreeMultiSelect-BXhuUX3J.js → TreeMultiSelect-CYvFBp49.js} +1 -1
  183. package/storybook-static/assets/{TreeMultiSelect-D4Owgkp8.js → TreeMultiSelect-RMw3Sgov.js} +1 -1
  184. package/storybook-static/assets/{TreeMultiSelect.stories-CB2jm_bz.js → TreeMultiSelect.stories-eVCsLnck.js} +1 -1
  185. package/storybook-static/assets/{TreePickerBase-eXU7yGrA.js → TreePickerBase-CU303uk2.js} +1 -1
  186. package/storybook-static/assets/{TreeSelect-5qlmmCCI.js → TreeSelect-CAWkriLu.js} +1 -1
  187. package/storybook-static/assets/{TreeSelect-0dZm6ufk.js → TreeSelect-MAH_yWl9.js} +1 -1
  188. package/storybook-static/assets/{TreeSelect.stories-CllcJYnI.js → TreeSelect.stories-CIfGlEJN.js} +1 -1
  189. package/storybook-static/assets/{TreeTable-BqZk_QkK.js → TreeTable-0VRrM8GW.js} +1 -1
  190. package/storybook-static/assets/{TreeTable.stories-BDoNVZCh.js → TreeTable.stories-CNS5t3Hd.js} +1 -1
  191. package/storybook-static/assets/{async-CoT7Kgjz.js → async-D1pthPMH.js} +1 -1
  192. package/storybook-static/assets/{blocks-W-usNnZb.js → blocks-DGyM6J7r.js} +3 -3
  193. package/storybook-static/assets/{browserAndReact-CdN7k1Ys.js → browserAndReact-nVftiNpl.js} +1 -1
  194. package/storybook-static/assets/{check-DjVied9B.js → check-CiBhUcLr.js} +1 -1
  195. package/storybook-static/assets/{chevron-down-CjmFWC1H.js → chevron-down-B5rz2XNJ.js} +1 -1
  196. package/storybook-static/assets/{chevron-left-CgCtsWUK.js → chevron-left-CzhF1KUP.js} +1 -1
  197. package/storybook-static/assets/{chevron-right-DfAt2YE7.js → chevron-right-B0yOnjFl.js} +1 -1
  198. package/storybook-static/assets/{chunk-W22LQPXL-CPNotdVj.js → chunk-W22LQPXL-8PHxgOk1.js} +1 -1
  199. package/storybook-static/assets/{circle-alert-DNyHEnP7.js → circle-alert-BoM4TTd8.js} +1 -1
  200. package/storybook-static/assets/{circle-check-BUp-oyqo.js → circle-check-Dehe_1cN.js} +1 -1
  201. package/storybook-static/assets/{components-CWI6MUvj.js → components-pGFA2Z8i.js} +3 -3
  202. package/storybook-static/assets/{contextMenu-B2RJaey1.js → contextMenu-CVWcJjzy.js} +1 -1
  203. package/storybook-static/assets/{defaultRenderers-jxMgDhVa.js → defaultRenderers-DvwV_t0j.js} +1 -1
  204. package/storybook-static/assets/{download-C5zRdMry.js → download-OLJFBMAt.js} +1 -1
  205. package/storybook-static/assets/{filesAndExcel-CYKyG14W.js → filesAndExcel-BA3jxJBm.js} +1 -1
  206. package/storybook-static/assets/{floating-ui.react-BGMb0aIS.js → floating-ui.react-CdJawQTm.js} +1 -1
  207. package/storybook-static/assets/{formatters-runtime-DnSgDhbz.js → formatters-runtime-C4C-phHX.js} +1 -1
  208. package/storybook-static/assets/{formatters-DeU7wI7T.js → formatters-wR_e2lQa.js} +1 -1
  209. package/storybook-static/assets/{foundationLib-DrimcZD1.js → foundationLib-Bz2ZS9e8.js} +1 -1
  210. package/storybook-static/assets/{hooks-BJmY6rG1.js → hooks-B3pvBii1.js} +1 -1
  211. package/storybook-static/assets/{iframe-BnW9ONAs.js → iframe-CE1ro1AE.js} +3 -3
  212. package/storybook-static/assets/iframe-D3TD9_FU.js +1 -0
  213. package/storybook-static/assets/{info-2igYCwst.js → info-D18FxvY-.js} +1 -1
  214. package/storybook-static/assets/{odata-DfSyh3Sn.js → odata-BBdp3RzK.js} +1 -1
  215. package/storybook-static/assets/{odataAndTables-BhJXkoYZ.js → odataAndTables-CcXirND0.js} +1 -1
  216. package/storybook-static/assets/{odataFetchFn-D2X1lPng.js → odataFetchFn-vrHbdkDn.js} +1 -1
  217. package/storybook-static/assets/{odataStoryFixtures-DYRSp8rq.js → odataStoryFixtures-BPO4gqpN.js} +1 -1
  218. package/storybook-static/assets/{persisted-DHhF6isC.js → persisted-1Sxmb7Az.js} +1 -1
  219. package/storybook-static/assets/{pureUtilities-ChXuZIo7.js → pureUtilities-CvNXMzzV.js} +1 -1
  220. package/storybook-static/assets/{react-CLWTMVeL.js → react-B2hhruMd.js} +1 -1
  221. package/storybook-static/assets/{refresh-cw-B-NTAP58.js → refresh-cw-pmQ0tFtI.js} +1 -1
  222. package/storybook-static/assets/{runtimeAndState-H412awCm.js → runtimeAndState-DV7ilYb6.js} +1 -1
  223. package/storybook-static/assets/{settings-2-1qvlM5d_.js → settings-2-BEyMy2Fq.js} +1 -1
  224. package/storybook-static/assets/{sortable-BHG_CM3B.js → sortable-BNF14v_A.js} +1 -1
  225. package/storybook-static/assets/{syntaxhighlighter-T5IQBZDB-R3_3CMVb.js → syntaxhighlighter-T5IQBZDB-CaaXbF-I.js} +1 -1
  226. package/storybook-static/assets/{trash-2-CE6CewYq.js → trash-2-CQnHnUJa.js} +1 -1
  227. package/storybook-static/assets/{triangle-alert-D3UYXaLs.js → triangle-alert-DSpoU8D0.js} +1 -1
  228. package/storybook-static/assets/useODataSelectBase-Czwwb448.js +1 -0
  229. package/storybook-static/assets/{useODataTreeData-kmN53sfw.js → useODataTreeData-CnsLoUDj.js} +1 -1
  230. package/storybook-static/assets/{usePickerQuery-0QXDg2qR.js → usePickerQuery-DSDKSoxY.js} +1 -1
  231. package/storybook-static/assets/{usePickerTriggerController-FtkRoBgz.js → usePickerTriggerController-CTVRGuZE.js} +1 -1
  232. package/storybook-static/assets/{x-BGnlLolo.js → x-DRm1wyYI.js} +1 -1
  233. package/storybook-static/iframe.html +2 -2
  234. package/storybook-static/project.json +1 -1
  235. package/dist/chunks/select-DeeGYtVc.js +0 -328
  236. package/dist/chunks/select-DeeGYtVc.js.map +0 -1
  237. package/dist/chunks/useODataSelectBase-Bq36Wp1U.js.map +0 -1
  238. package/storybook-static/assets/ODataMultiSelect.stories-B6yPCpTe.js +0 -137
  239. package/storybook-static/assets/ODataSelect.stories-C0zyeXlC.js +0 -207
  240. package/storybook-static/assets/iframe-DGAjOA6_.js +0 -1
  241. package/storybook-static/assets/useODataSelectBase-FSv5umRf.js +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-D3EnRya6.js","names":[],"sources":["../../src/select/lib/getOptionSearchText.ts","../../src/select/model/useODataSelect.ts","../../src/select/lib/createSelectOptionSections.ts","../../src/select/Select.module.scss","../../src/select/Select.tsx","../../src/select/ODataSelect.tsx","../../src/select/ODataDependentSegmentSelect.tsx","../../src/select/SerializableSelect.tsx"],"sourcesContent":["import { ReactNode } from \"react\";\n\nimport { InputType } from \"@ryuzaki13/react-foundation-lib/types\";\n\nimport { extractPickerTextContent } from \"../../picker\";\nimport { type SelectOptionGroup } from \"../SelectOptionGroup\";\n\nexport function getOptionSearchText<T extends InputType>({\n\toption,\n\tgetOptionLabel,\n\tgetOptionCode,\n\tgetOptionGroup\n}: {\n\toption: T;\n\tgetOptionLabel: (option: T) => ReactNode;\n\tgetOptionCode?: (option: T) => ReactNode;\n\tgetOptionGroup?: (option: T) => SelectOptionGroup | undefined;\n}) {\n\treturn [\n\t\textractPickerTextContent(getOptionLabel(option)),\n\t\textractPickerTextContent(getOptionCode?.(option)),\n\t\textractPickerTextContent(getOptionGroup?.(option)?.label)\n\t]\n\t\t.filter((part): part is string => Boolean(part))\n\t\t.join(\" \")\n\t\t.toLowerCase();\n}\n\n/** Находит selected option по value и возвращает fallback, если значение еще не нормализовано. */\nexport function resolveSelectedOption<TOption extends { value: string }>(\n\toptions: readonly TOption[],\n\tvalue: string,\n\tfallback: TOption\n): TOption {\n\treturn options.find((option) => option.value === value) ?? fallback;\n}\n","import { useMemo } from \"react\";\n\nimport { ODataCollectionModel, ODataSingleSelectProps } from \"@ryuzaki13/react-foundation-api/odata\";\nimport { CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata\";\n\nimport { useODataSelectBase } from \"./useODataSelectBase\";\n\ninterface UseODataSelectOptions extends Omit<ODataSingleSelectProps, \"model\"> {\n\tmodel: Required<ODataCollectionModel>;\n\tonChange: (value: string | undefined) => void;\n}\n\nexport function useODataSelect({ odata, segment, model, value, dependencies, onChange }: UseODataSelectOptions) {\n\tconst odataModel = useODataSelectBase({\n\t\todata,\n\t\tsegment,\n\t\tmodel,\n\t\tvalue: value ? [value] : [],\n\t\tdependencies\n\t});\n\n\tconst selectedItem = odataModel.selectedItems[0];\n\tconst options = useMemo(() => {\n\t\tif (!selectedItem) {\n\t\t\treturn odataModel.filteredItems;\n\t\t}\n\n\t\treturn [selectedItem, ...odataModel.filteredItems];\n\t}, [odataModel.filteredItems, selectedItem]);\n\n\tconst handleChange = (item: CollectionItem | undefined) => {\n\t\tonChange(item?.[odataModel.selectionKey]);\n\t};\n\n\treturn {\n\t\t...odataModel,\n\t\tselectedItem,\n\t\toptions,\n\t\thandleChange\n\t};\n}\n","import { type SelectOptionGroup } from \"../SelectOptionGroup\";\n\nexport type SelectOptionSectionItem<TOption> = {\n\treadonly option: TOption;\n\treadonly index: number;\n};\n\nexport type SelectOptionSection<TOption> = {\n\treadonly group: SelectOptionGroup | undefined;\n\treadonly items: readonly SelectOptionSectionItem<TOption>[];\n};\n\n/**\n * Собирает соседние опции с одинаковым group key в секции, сохраняя исходные индексы для клавиатурной навигации listbox.\n */\nexport function createSelectOptionSections<TOption>(\n\toptions: readonly TOption[],\n\tgetOptionGroup: (option: TOption) => SelectOptionGroup | undefined\n): readonly SelectOptionSection<TOption>[] {\n\tconst sections: Array<{ group: SelectOptionGroup | undefined; items: SelectOptionSectionItem<TOption>[] }> = [];\n\n\toptions.forEach((option, index) => {\n\t\tconst group = getOptionGroup(option);\n\t\tconst currentSection = sections.at(-1);\n\t\tconst belongsToCurrentSection = currentSection?.group?.key === group?.key;\n\n\t\tif (currentSection && belongsToCurrentSection) {\n\t\t\tcurrentSection.items.push({ option, index });\n\t\t\treturn;\n\t\t}\n\n\t\tsections.push({\n\t\t\tgroup,\n\t\t\titems: [{ option, index }]\n\t\t});\n\t});\n\n\treturn sections;\n}\n",".inputWithOverlay {\n\tcolor: transparent;\n\tcaret-color: transparent;\n}\n\n.valueOverlay {\n\tposition: absolute;\n\tinset: 0 calc(var(--control-height) + var(--space-xs)) 0 var(--space-md);\n\tdisplay: flex;\n\talign-items: center;\n\tpointer-events: none;\n\toverflow: hidden;\n}\n","import { type CSSProperties, Fragment, ReactNode, useCallback, useMemo, useRef, useState } from \"react\";\n\nimport { Placement } from \"@floating-ui/react\";\nimport { InputType } from \"@ryuzaki13/react-foundation-lib/types\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { CheckIcon, XIcon } from \"lucide-react\";\n\nimport {\n\textractPickerTextContent,\n\tPickerField,\n\tPickerPopup,\n\tPickerStatus,\n\tPickerTriggerActions,\n\tPickerTriggerInput,\n\tusePickerDefaultFilter,\n\tusePickerFloatingListbox,\n\tusePickerQuery,\n\tusePickerTriggerController\n} from \"../picker\";\nimport { ChangeHandler, UiBaseProps } from \"../types\";\nimport uiStyles from \"../ui.module.scss\";\n\nimport { getOptionSearchText } from \"./lib\";\nimport { createSelectOptionSections } from \"./lib/createSelectOptionSections\";\nimport styles from \"./Select.module.scss\";\nimport { type SelectOptionGroup, type SelectOptionKey } from \"./SelectOptionGroup\";\n\nexport { type SelectOptionGroup, type SelectOptionKey } from \"./SelectOptionGroup\";\n\nexport type SelectOptionState = {\n\tactive: boolean;\n\tselected: boolean;\n\tdisabled: boolean;\n};\n\ntype SelectSharedProps<TOption extends InputType> = Omit<UiBaseProps<TOption, TOption | undefined>, \"onChange\"> & {\n\toptions: readonly TOption[];\n\tgetOptionKey: (option: TOption) => SelectOptionKey;\n\tgetOptionLabel: (option: TOption) => ReactNode;\n\tgetOptionCode?: (option: TOption) => ReactNode;\n\tgetOptionDisabled?: (option: TOption) => boolean;\n\tgetOptionAriaLabel?: (option: TOption) => string;\n\tgetOptionGroup?: (option: TOption) => SelectOptionGroup | undefined;\n\tgetOptionClassName?: (option: TOption, state: SelectOptionState) => string | undefined;\n\trenderOption?: (option: TOption, state: SelectOptionState) => ReactNode;\n\trenderValue?: (option: TOption) => ReactNode;\n\tclassName?: string;\n\tbuttonClassName?: string;\n\toptionsClassName?: string;\n\toptionsMaxWidth?: CSSProperties[\"maxWidth\"];\n\toptionsContentClassName?: string;\n\tsearchable?: boolean;\n\tquery?: string;\n\tdefaultQuery?: string;\n\tonQuery?: (value: string) => void;\n\tdefaultFilter?: boolean;\n\tisLoading?: boolean;\n\trenderPopupHeader?: ReactNode;\n\temptyState?: ReactNode;\n\terrorState?: ReactNode;\n\tplacement?: Placement;\n};\n\ntype SelectChangeValue<TOption extends InputType, TClearable extends boolean | undefined> = true extends TClearable\n\t? TOption | undefined\n\t: TOption;\n\nexport type SelectProps<TOption extends InputType, TClearable extends boolean | undefined = false> = SelectSharedProps<TOption> & {\n\tclearable?: TClearable;\n\tonChange: ChangeHandler<SelectChangeValue<TOption, TClearable>>;\n};\n\n/**\n * Выпадающий список выбора значения из набора опций. Подходит для форм, фильтров и простых справочников.\n */\nexport function Select<TOption extends InputType, TClearable extends boolean | undefined = false>(props: SelectProps<TOption, TClearable>) {\n\tconst {\n\t\tlabel,\n\t\tdescription,\n\t\tdisabled,\n\t\tplaceholder,\n\t\tsize,\n\t\toptions,\n\t\tvalue,\n\t\tonChange,\n\t\tgetOptionKey,\n\t\tgetOptionLabel,\n\t\tgetOptionCode,\n\t\tgetOptionDisabled,\n\t\tgetOptionAriaLabel,\n\t\tgetOptionGroup,\n\t\tgetOptionClassName,\n\t\trenderOption,\n\t\trenderValue,\n\t\tclassName,\n\t\tbuttonClassName,\n\t\toptionsClassName,\n\t\toptionsMaxWidth,\n\t\toptionsContentClassName,\n\t\tsearchable = false,\n\t\tdefaultFilter = true,\n\t\tquery,\n\t\tdefaultQuery,\n\t\tonQuery,\n\t\trenderPopupHeader,\n\t\temptyState,\n\t\tisLoading,\n\t\terrorState,\n\t\tplacement = \"bottom-start\",\n\t\tclearable = false\n\t} = props;\n\tconst emitChange = onChange as ChangeHandler<TOption | undefined>;\n\n\tconst inputRef = useRef<HTMLInputElement | null>(null);\n\tconst [open, setOpen] = useState(false);\n\tconst triggerMode = searchable ? \"search-single\" : \"display\";\n\tconst selectedKey = value === undefined ? undefined : getOptionKey(value);\n\tconst selectedOption =\n\t\tselectedKey === undefined ? undefined : (options.find((option) => getOptionKey(option) === selectedKey) ?? value);\n\tconst {\n\t\tquery: currentQuery,\n\t\tsetQuery,\n\t\tresetQueryOnClose\n\t} = usePickerQuery({\n\t\tquery,\n\t\tdefaultQuery,\n\t\tonQuery,\n\t\ttriggerMode\n\t});\n\tconst handleOpenChange = (nextOpen: boolean) => {\n\t\tif (open && !nextOpen && resetQueryOnClose) {\n\t\t\tsetQuery(\"\");\n\t\t}\n\n\t\tsetOpen(nextOpen);\n\t};\n\tconst getSearchText = useCallback(\n\t\t(option: TOption) =>\n\t\t\tgetOptionSearchText({\n\t\t\t\toption,\n\t\t\t\tgetOptionLabel,\n\t\t\t\tgetOptionCode,\n\t\t\t\tgetOptionGroup\n\t\t\t}),\n\t\t[getOptionCode, getOptionGroup, getOptionLabel]\n\t);\n\tconst visibleOptions = usePickerDefaultFilter({\n\t\toptions,\n\t\tquery: currentQuery,\n\t\tenabled: searchable && defaultFilter,\n\t\tgetSearchText\n\t});\n\tconst optionSections = useMemo(\n\t\t() => (getOptionGroup ? createSelectOptionSections(visibleOptions, getOptionGroup) : undefined),\n\t\t[getOptionGroup, visibleOptions]\n\t);\n\tconst selectedIndex = selectedKey === undefined ? -1 : visibleOptions.findIndex((option) => getOptionKey(option) === selectedKey);\n\tconst {\n\t\tactiveIndex,\n\t\tcontext,\n\t\tfloatingStyles,\n\t\tgetFloatingProps,\n\t\tsetReference,\n\t\tsetFloating,\n\t\tsetOptionRef,\n\t\tclose,\n\t\topenList,\n\t\ttoggleOpen,\n\t\tselectOption,\n\t\tselectActiveOption,\n\t\thandleReferenceKeyDown,\n\t\thandleFloatingKeyDown,\n\t\tgetOptionId,\n\t\tgetActiveOptionId\n\t} = usePickerFloatingListbox({\n\t\toptions: visibleOptions,\n\t\tselectedIndex,\n\t\topen,\n\t\tonOpenChange: handleOpenChange,\n\t\tgetOptionDisabled,\n\t\tonSelect: emitChange,\n\t\tdisabled,\n\t\tplacement,\n\t\ttriggerMode\n\t});\n\n\tconst hasOptions = visibleOptions.length > 0;\n\tconst labelContent = selectedOption !== undefined ? getOptionLabel(selectedOption) : undefined;\n\tconst displayContent = selectedOption !== undefined ? (renderValue ? renderValue(selectedOption) : labelContent) : undefined;\n\tconst labelText = extractPickerTextContent(labelContent);\n\tconst codeText = selectedOption !== undefined ? extractPickerTextContent(getOptionCode?.(selectedOption)) : undefined;\n\tconst displayText =\n\t\textractPickerTextContent(displayContent) ?? labelText ?? codeText ?? (selectedKey !== undefined ? String(selectedKey) : \"\");\n\tconst showSearchValue = searchable && (open || currentQuery.length > 0);\n\tconst inputValue = showSearchValue ? currentQuery : selectedOption !== undefined ? displayText : \"\";\n\tconst showDisplayOverlay =\n\t\tselectedOption !== undefined &&\n\t\tdisplayContent !== undefined &&\n\t\textractPickerTextContent(displayContent) === undefined &&\n\t\t!showSearchValue;\n\tconst triggerController = usePickerTriggerController({\n\t\tmode: triggerMode,\n\t\topen,\n\t\tcurrentQuery,\n\t\thasDisplayValue: selectedOption !== undefined,\n\t\tinputRef,\n\t\tsetQuery,\n\t\topenList,\n\t\tclose,\n\t\ttoggleOpen\n\t});\n\tconst setInputNode = (node: HTMLInputElement | null) => {\n\t\tinputRef.current = node;\n\t};\n\tconst handleClear = () => {\n\t\tif (clearable) {\n\t\t\temitChange(undefined);\n\t\t}\n\n\t\tsetQuery(\"\");\n\t\tclose();\n\t};\n\tconst renderOptionNode = (listId: string, option: TOption, index: number) => {\n\t\tconst optionKey = getOptionKey(option);\n\t\tconst selected = selectedKey !== undefined && optionKey === selectedKey;\n\t\tconst active = index === activeIndex;\n\t\tconst optionDisabled = getOptionDisabled?.(option) ?? false;\n\t\tconst optionState = { active, selected, disabled: optionDisabled };\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tkey={optionKey}\n\t\t\t\tid={getOptionId(listId, index)}\n\t\t\t\tref={(node) => setOptionRef(index, node)}\n\t\t\t\trole=\"option\"\n\t\t\t\taria-selected={selected}\n\t\t\t\taria-disabled={optionDisabled || undefined}\n\t\t\t\taria-label={getOptionAriaLabel?.(option)}\n\t\t\t\tclassName={cn(\n\t\t\t\t\tuiStyles.uiPopupOption,\n\t\t\t\t\toptionDisabled && uiStyles.disabled,\n\t\t\t\t\tactive && uiStyles.uiPopupOptionActive,\n\t\t\t\t\tselected && uiStyles.selected,\n\t\t\t\t\tgetOptionClassName?.(option, optionState)\n\t\t\t\t)}\n\t\t\t\tonClick={() => selectOption(option)}>\n\t\t\t\t{renderOption ? (\n\t\t\t\t\trenderOption(option, optionState)\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{selected ? <CheckIcon className={uiStyles.uiPopupOptionIcon} /> : <span className={uiStyles.uiPopupOptionIcon} />}\n\t\t\t\t\t\t<div className={uiStyles.uiOptionText}>{getOptionLabel(option)}</div>\n\t\t\t\t\t\t{getOptionCode && <div className={uiStyles.uiOptionCode}>{getOptionCode(option)}</div>}\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t};\n\n\treturn (\n\t\t<PickerField label={label} description={description} disabled={disabled} size={size} className={className}>\n\t\t\t{({ controlId, labelId, describedBy }) => {\n\t\t\t\tconst listId = `${controlId}-listbox`;\n\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<PickerTriggerInput\n\t\t\t\t\t\t\tref={setInputNode}\n\t\t\t\t\t\t\trootRef={setReference}\n\t\t\t\t\t\t\tid={controlId}\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\treadOnly={!searchable}\n\t\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t\t\tvalue={inputValue}\n\t\t\t\t\t\t\tplaceholder={\n\t\t\t\t\t\t\t\tselectedOption === undefined || showSearchValue\n\t\t\t\t\t\t\t\t\t? `${placeholder ?? label ?? \"\"} <${options.length}>`\n\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\taria-labelledby={labelId}\n\t\t\t\t\t\t\taria-describedby={describedBy}\n\t\t\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t\t\t\taria-expanded={open}\n\t\t\t\t\t\t\taria-controls={open ? listId : undefined}\n\t\t\t\t\t\t\taria-autocomplete={searchable ? \"list\" : \"none\"}\n\t\t\t\t\t\t\taria-activedescendant={open ? getActiveOptionId(listId) : undefined}\n\t\t\t\t\t\t\tinputClassName={cn(showDisplayOverlay && styles.inputWithOverlay, buttonClassName, \"textOverflow\")}\n\t\t\t\t\t\t\toverlay={showDisplayOverlay ? <div className={styles.valueOverlay}>{displayContent}</div> : undefined}\n\t\t\t\t\t\t\tendAdornment={\n\t\t\t\t\t\t\t\t<PickerTriggerActions\n\t\t\t\t\t\t\t\t\topen={open}\n\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\tonToggleMouseDown={triggerController.handleToggleMouseDown}\n\t\t\t\t\t\t\t\t\tonToggleClick={triggerController.handleToggleClick}>\n\t\t\t\t\t\t\t\t\t{clearable && selectedOption !== undefined && !disabled ? (\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tclassName={uiStyles.uiClearButton}\n\t\t\t\t\t\t\t\t\t\t\tdata-ui=\"select-clear-button\"\n\t\t\t\t\t\t\t\t\t\t\tdata-action=\"clear-select\"\n\t\t\t\t\t\t\t\t\t\t\tonMouseDown={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\thandleClear();\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Очистить выбор\">\n\t\t\t\t\t\t\t\t\t\t\t<XIcon />\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t</PickerTriggerActions>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonChange={(event) => {\n\t\t\t\t\t\t\t\tif (!searchable) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ttriggerController.handleTriggerInputChange(event.target.value);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonClick={triggerController.handleTriggerClick}\n\t\t\t\t\t\t\tonFocus={(event) => {\n\t\t\t\t\t\t\t\ttriggerController.handleTriggerFocus(event.currentTarget);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonKeyDown={(event) => {\n\t\t\t\t\t\t\t\thandleReferenceKeyDown(event);\n\n\t\t\t\t\t\t\t\tif (event.defaultPrevented) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ttriggerController.handleTriggerKeyDown({\n\t\t\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t\t\tonActivateWhenOpen: selectActiveOption,\n\t\t\t\t\t\t\t\t\tenableSpaceActivation: !searchable\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<PickerPopup\n\t\t\t\t\t\t\topen={open}\n\t\t\t\t\t\t\tcontext={context}\n\t\t\t\t\t\t\tfloatingStyles={floatingStyles}\n\t\t\t\t\t\t\tlistId={listId}\n\t\t\t\t\t\t\tlabelId={labelId}\n\t\t\t\t\t\t\tdescriptionId={describedBy}\n\t\t\t\t\t\t\tactiveOptionId={hasOptions ? getActiveOptionId(listId) : undefined}\n\t\t\t\t\t\t\tsetFloating={setFloating}\n\t\t\t\t\t\t\tgetFloatingProps={getFloatingProps}\n\t\t\t\t\t\t\tonKeyDown={handleFloatingKeyDown}\n\t\t\t\t\t\t\tclassName={cn(uiStyles.uiPopupOptions, optionsClassName)}\n\t\t\t\t\t\t\tmaxWidth={optionsMaxWidth}\n\t\t\t\t\t\t\theader={renderPopupHeader}>\n\t\t\t\t\t\t\t<div className={cn(optionsContentClassName, \"h100 scrollable\")}>\n\t\t\t\t\t\t\t\t{hasOptions ? (\n\t\t\t\t\t\t\t\t\toptionSections ? (\n\t\t\t\t\t\t\t\t\t\toptionSections.map((section, sectionIndex) => {\n\t\t\t\t\t\t\t\t\t\t\tconst groupLabelId = section.group ? `${listId}-group-${sectionIndex}` : undefined;\n\t\t\t\t\t\t\t\t\t\t\tconst optionNodes = section.items.map(({ option, index }) =>\n\t\t\t\t\t\t\t\t\t\t\t\trenderOptionNode(listId, option, index)\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\treturn section.group ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\tkey={`group-${String(section.group.key)}-${sectionIndex}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\trole=\"group\"\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-labelledby={groupLabelId}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div id={groupLabelId} className={uiStyles.uiPopupGroupLabel}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{section.group.label}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{optionNodes}\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t<Fragment key={`options-${sectionIndex}`}>{optionNodes}</Fragment>\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\tvisibleOptions.map((option, index) => renderOptionNode(listId, option, index))\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<PickerStatus emptyState={emptyState} errorState={errorState} />\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</PickerPopup>\n\t\t\t\t\t</>\n\t\t\t\t);\n\t\t\t}}\n\t\t</PickerField>\n\t);\n}\n","import React from \"react\";\n\nimport { ODataSingleSelectProps, useODataCollectionModel } from \"@ryuzaki13/react-foundation-api/odata\";\nimport { CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata\";\n\nimport { InputUILoading } from \"../input\";\nimport { UiBaseProps } from \"../types\";\n\nimport { useODataSelect } from \"./model/useODataSelect\";\nimport { Select } from \"./Select\";\nimport { SelectOptionContent } from \"./SelectOptionContent\";\n\ntype ODataSelectProps = Omit<ODataSingleSelectProps, \"value\"> & UiBaseProps<string | undefined> & { clearable?: boolean };\n\nfunction getODataOptionTextKey(item: CollectionItem | undefined, textKey: string, codeKey: string) {\n\tif (!item) {\n\t\treturn textKey || codeKey;\n\t}\n\n\treturn textKey || Object.keys(item).find((key) => key !== codeKey) || codeKey;\n}\n\nexport const ODataSelect: React.FC<ODataSelectProps> = ({\n\todata,\n\tsegment,\n\tmodel: initialModel,\n\tsize,\n\tlabel,\n\tdescription,\n\tdisabled,\n\tvalue,\n\tdependencies,\n\tonChange,\n\tclearable\n}) => {\n\tconst model = useODataCollectionModel(initialModel);\n\tconst odataModel = useODataSelect({\n\t\todata,\n\t\tsegment,\n\t\tmodel,\n\t\tvalue,\n\t\tdependencies,\n\t\tonChange\n\t});\n\n\tif (odataModel.isLoading) {\n\t\treturn <InputUILoading size={size} label={label} description={description} />;\n\t}\n\n\tconst hideCode = segment.hideCode ?? odata.hideCode;\n\tconst resolvedTextKey = getODataOptionTextKey(odataModel.selectedItem ?? odataModel.options[0], odataModel.textKey, odataModel.codeKey);\n\n\treturn (\n\t\t<Select\n\t\t\tsize={size}\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\toptions={odataModel.options}\n\t\t\tvalue={odataModel.selectedItem}\n\t\t\tonChange={odataModel.handleChange}\n\t\t\tgetOptionKey={(item) => item[odataModel.codeKey]}\n\t\t\tgetOptionLabel={(item) => item[resolvedTextKey]}\n\t\t\tgetOptionCode={hideCode ? undefined : (item) => item[odataModel.codeKey]}\n\t\t\tgetOptionAriaLabel={(item) =>\n\t\t\t\thideCode || item[resolvedTextKey] === item[odataModel.codeKey]\n\t\t\t\t\t? String(item[resolvedTextKey])\n\t\t\t\t\t: `${item[resolvedTextKey]} ${item[odataModel.codeKey]}`\n\t\t\t}\n\t\t\trenderValue={(item) => (\n\t\t\t\t<SelectOptionContent label={item[resolvedTextKey]} code={hideCode ? undefined : item[odataModel.codeKey]} />\n\t\t\t)}\n\t\t\trenderOption={(item) => (\n\t\t\t\t<SelectOptionContent\n\t\t\t\t\tlabel={item[resolvedTextKey]}\n\t\t\t\t\tcode={hideCode ? undefined : item[odataModel.codeKey]}\n\t\t\t\t\thighlight={odataModel.debouncedQuery}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\tsearchable\n\t\t\tquery={odataModel.query}\n\t\t\tonQuery={odataModel.setQuery}\n\t\t\tdefaultFilter={false}\n\t\t\tdisabled={disabled || odataModel.isLoading}\n\t\t\tplaceholder={odataModel.placeholder}\n\t\t\tisLoading={odataModel.isLoading}\n\t\t\terrorState={odataModel.isError ? \"Ошибка загрузки\" : undefined}\n\t\t\temptyState={!odataModel.isLoading && !odataModel.isError ? \"Нет данных\" : undefined}\n\t\t\tclearable={clearable}\n\t\t/>\n\t);\n};\n","import { useCallback } from \"react\";\n\nimport { useODataDependentSelection } from \"../odata-dependent\";\n\nimport { ODataSelect } from \"./ODataSelect\";\n\nimport type { ODataDependentSegmentControlProps } from \"../odata-dependent\";\n\nexport type ODataDependentSegmentSelectProps = ODataDependentSegmentControlProps & {\n\t/** Показывает действие очистки выбранного значения. */\n\tclearable?: boolean;\n};\n\n/**\n * Адаптирует один развёрнутый зависимый OData-сегмент к single-select UI.\n * Общий снимок остаётся массивным, поэтому совместим с `dependencies` и\n * может совместно использоваться с segment-level MultiSelect-контролами.\n */\nexport function ODataDependentSegmentSelect(props: ODataDependentSegmentSelectProps) {\n\tconst { item, disabled, label, description, size, width = 15, clearable } = props;\n\tconst selection = useODataDependentSelection(props);\n\tconst { updateSegment } = selection;\n\tconst widthStyle = `calc(${width}em + var(--width-add))`;\n\n\tconst handleSelectionChange = useCallback(\n\t\t(value: string | undefined) => {\n\t\t\tupdateSegment(item.id, value === undefined ? [] : [value]);\n\t\t},\n\t\t[item.id, updateSegment]\n\t);\n\n\treturn (\n\t\t<div style={{ maxWidth: widthStyle, minWidth: widthStyle }}>\n\t\t\t<ODataSelect\n\t\t\t\todata={item.odata}\n\t\t\t\tsegment={item.segment}\n\t\t\t\tmodel={item.model}\n\t\t\t\tdependencies={selection.values}\n\t\t\t\tvalue={selection.values[item.id]?.[0]}\n\t\t\t\tonChange={handleSelectionChange}\n\t\t\t\tdisabled={disabled || selection.isSegmentDisabled(item.id)}\n\t\t\t\tlabel={label}\n\t\t\t\tdescription={description}\n\t\t\t\tsize={size}\n\t\t\t\tclearable={clearable}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n","import { Select } from \"./Select\";\n\nimport type { UiBaseProps } from \"../types\";\nimport type { SelectOptionKey } from \"./Select\";\n\ntype SerializableOptionRecord = Record<string, unknown>;\n\ntype SerializableOptionKeyField<TOption extends SerializableOptionRecord> = {\n\t[K in keyof TOption]: Extract<TOption[K], SelectOptionKey> extends never ? never : K;\n}[keyof TOption];\n\ntype SerializableOptionValue<TOption extends SerializableOptionRecord, TOptionKey extends SerializableOptionKeyField<TOption>> = Extract<\n\tTOption[TOptionKey],\n\tSelectOptionKey\n>;\n\nexport interface SerializableSelectProps<\n\tTOption extends SerializableOptionRecord,\n\tTOptionKey extends SerializableOptionKeyField<TOption>,\n\tTOptionLabel extends keyof TOption\n> extends Omit<UiBaseProps<SerializableOptionValue<TOption, TOptionKey> | undefined>, \"onChange\"> {\n\toptions: readonly TOption[];\n\tonChange: (value: SerializableOptionValue<TOption, TOptionKey> | undefined) => void;\n\toptionKey: TOptionKey;\n\toptionLabel: TOptionLabel;\n\trenderCode?: true;\n\tclassName?: string;\n\tclearable?: boolean;\n}\n\nfunction getSerializableOptionKey<TOption extends SerializableOptionRecord, TOptionKey extends SerializableOptionKeyField<TOption>>(\n\toption: TOption,\n\toptionKey: TOptionKey\n): Extract<TOption[TOptionKey], SelectOptionKey> {\n\treturn option[optionKey] as Extract<TOption[TOptionKey], SelectOptionKey>;\n}\n\nfunction getSerializableOptionLabel<\n\tTOption extends SerializableOptionRecord,\n\tTOptionKey extends SerializableOptionKeyField<TOption>,\n\tTOptionLabel extends keyof TOption\n>(option: TOption, optionLabel: TOptionLabel, optionKey: TOptionKey): string | number {\n\tconst label = option[optionLabel];\n\n\tif (typeof label === \"string\" || typeof label === \"number\") {\n\t\treturn label;\n\t}\n\n\tconst key = getSerializableOptionKey(option, optionKey);\n\treturn typeof key === \"string\" || typeof key === \"number\" ? key : String(key);\n}\n\nexport function SerializableSelect<\n\tTOption extends SerializableOptionRecord,\n\tTOptionKey extends SerializableOptionKeyField<TOption>,\n\tTOptionLabel extends keyof TOption\n>({\n\tlabel,\n\tdescription,\n\tdisabled,\n\tplaceholder,\n\tsize,\n\toptions,\n\tvalue,\n\tonChange,\n\toptionKey,\n\toptionLabel,\n\trenderCode,\n\tclassName,\n\tclearable\n}: SerializableSelectProps<TOption, TOptionKey, TOptionLabel>) {\n\tconst selectedOption =\n\t\tvalue === undefined ? undefined : options.find((option) => getSerializableOptionKey(option, optionKey) === value);\n\n\treturn (\n\t\t<Select\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\tdisabled={disabled}\n\t\t\tplaceholder={placeholder}\n\t\t\tsize={size}\n\t\t\toptions={options}\n\t\t\tvalue={selectedOption}\n\t\t\tonChange={(option: TOption | undefined) => onChange(option ? getSerializableOptionKey(option, optionKey) : undefined)}\n\t\t\tgetOptionKey={(option: TOption) => getSerializableOptionKey(option, optionKey)}\n\t\t\tgetOptionLabel={(option: TOption) => getSerializableOptionLabel(option, optionLabel, optionKey)}\n\t\t\tgetOptionCode={renderCode ? (option: TOption) => getSerializableOptionKey(option, optionKey) : undefined}\n\t\t\tclassName={className}\n\t\t\tclearable={clearable}\n\t\t/>\n\t);\n}\n"],"mappings":"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"}
@@ -51,84 +51,68 @@ function h(e) {
51
51
  return t;
52
52
  }
53
53
  function g({ odata: e, segment: t, model: o, value: s, dependencies: c }) {
54
- let [u, d] = i(""), [f, p] = i(""), { codeKey: g, searchDebounceDelay: _, minSearchCodeLength: v, minSearchTextLength: y } = o, { data: b, textKey: x, isLoading: S, isError: C, getItems: w, separatedItems: T, findSourceItemsByKeys: E, setFilteredItems: D, debounce: O } = a({
54
+ let [u, d] = i(""), [f, p] = i(""), { codeKey: g, searchDebounceDelay: _, minSearchCodeLength: v, minSearchTextLength: y } = o, { data: b, textKey: x, isLoading: S, isError: C, getItems: w, separatedItems: T, debounce: E } = a({
55
55
  odata: e,
56
56
  model: o
57
- }), k = T.length, A = t.selectText && x ? x : g, j = r(() => b ? m(g, b.keyPairsMap, c) : "", [
57
+ }), D = T.length, O = t.selectText && x ? x : g, k = r(() => b ? m(g, b.keyPairsMap, c) : "", [
58
58
  b,
59
59
  g,
60
60
  c
61
- ]);
62
- n(() => {
63
- if (!b) return;
64
- let e = b.chain.findIndex((e) => e.codeKey === g), t = h(j), n = (e) => {
65
- let n = b.chain[e].codeKey, r = t.get(n);
66
- if (r?.length) return E(n, r);
67
- };
68
- for (let t = b.chain.length - 1; t > e; t--) {
69
- let e = n(t);
70
- if (e) {
71
- D(e);
72
- return;
73
- }
74
- }
75
- for (let t = 0; t < e; t++) {
76
- let e = n(t);
77
- if (e) {
78
- D(e);
79
- return;
80
- }
81
- }
82
- D(void 0);
61
+ ]), A = r(() => {
62
+ if (!b || !k) return;
63
+ let e = Array.from(h(k), ([e, t]) => [e, new Set(t)]), t = /* @__PURE__ */ new Set();
64
+ for (let n of b.items) e.every(([e, t]) => t.has(n[e])) && n[g] && t.add(n[g]);
65
+ return t;
83
66
  }, [
84
- b,
85
- j,
86
67
  g,
87
- E,
88
- D
89
- ]), n(() => {
90
- O("search", () => {
68
+ k,
69
+ b
70
+ ]);
71
+ n(() => {
72
+ E("search", () => {
91
73
  p(u.trim().toLowerCase());
92
74
  }, _);
93
75
  }, [
94
- O,
76
+ E,
95
77
  u,
96
78
  _
97
79
  ]);
98
- let M = r(() => {
99
- if (!s?.length || !A) return [];
80
+ let j = r(() => {
81
+ if (!s?.length || !O) return [];
100
82
  let e = new Set(s);
101
- return T.filter((t) => e.has(t[A]));
83
+ return T.filter((t) => e.has(t[O]));
102
84
  }, [
103
85
  T,
104
- A,
86
+ O,
105
87
  s
106
88
  ]);
107
89
  return {
108
90
  query: u,
109
91
  setQuery: d,
110
92
  debouncedQuery: f,
111
- selectedItems: M,
93
+ selectedItems: j,
112
94
  filteredItems: r(() => {
113
95
  if (!b) return [];
114
- if (!(f.length >= y)) return w(void 0, M);
115
- let e = f.length >= y, n = !t.hideCode && f.length >= v && !Number.isNaN(Number(f));
116
- return w((t, r) => !!(t && r && (n && l(t, f) || e && r.toLowerCase().includes(f))), M);
96
+ let e = f.length >= y;
97
+ if (!e && A === void 0) return w(void 0, j);
98
+ let n = f.length >= y, r = !t.hideCode && f.length >= v && !Number.isNaN(Number(f));
99
+ return w((t, i) => A && !A.has(t) ? !1 : !!(!e || t && i && (r && l(t, f) || n && i.toLowerCase().includes(f))), j);
117
100
  }, [
118
101
  f,
102
+ A,
119
103
  w,
120
104
  v,
121
105
  y,
122
106
  b,
123
107
  t.hideCode,
124
- M
108
+ j
125
109
  ]),
126
- itemsCount: k,
110
+ itemsCount: D,
127
111
  isLoading: S,
128
112
  isError: C,
129
113
  codeKey: g,
130
114
  textKey: x,
131
- selectionKey: A,
115
+ selectionKey: O,
132
116
  placeholder: t.placeholder
133
117
  };
134
118
  }
@@ -138,4 +122,4 @@ function _(e, t) {
138
122
  //#endregion
139
123
  export { g as n, u as r, _ as t };
140
124
 
141
- //# sourceMappingURL=useODataSelectBase-Bq36Wp1U.js.map
125
+ //# sourceMappingURL=useODataSelectBase-Cc79kBNk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useODataSelectBase-Cc79kBNk.js","names":[],"sources":["../../src/select/SelectOptionContent.tsx","../../src/select/model/useODataSelectBase.ts"],"sourcesContent":["import { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { HighlightText } from \"../text\";\nimport uiStyles from \"../ui.module.scss\";\n\ninterface OptionContentProps {\n\tlabel: string;\n\tcode?: string;\n\thighlight?: string;\n\t/** Приватный визуальный modifier label для специализированного владельца option. */\n\tlabelClassName?: string;\n\t/** Отдельный modifier code, потому что code задаёт собственный variable-font weight. */\n\tcodeClassName?: string;\n}\n\n/**\n * Универсальный рендерер опции. Используется и в single-select, и в multi-select.\n */\nexport function SelectOptionContent({ label, code, highlight, labelClassName, codeClassName }: OptionContentProps) {\n\treturn (\n\t\t<div className={uiStyles.uiOptionBase}>\n\t\t\t<div className={cn(uiStyles.uiOptionText, \"flexEllipsis\", labelClassName)}>\n\t\t\t\t<HighlightText text={label} highlight={highlight} />\n\t\t\t</div>\n\t\t\t{code && (\n\t\t\t\t<div className={cn(uiStyles.uiOptionCode, codeClassName)}>\n\t\t\t\t\t<HighlightText text={code} highlight={highlight} />\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import { useEffect, useMemo, useState } from \"react\";\n\nimport { ODataCollectionModel, ODataSelectBaseProps, useODataCollection } from \"@ryuzaki13/react-foundation-api/odata\";\nimport { startsWithIgnoringZeros } from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport { CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata\";\n\ninterface UseODataSelectBaseOptions extends Omit<ODataSelectBaseProps, \"model\" | \"value\"> {\n\tmodel: Required<ODataCollectionModel>;\n\tvalue?: string[];\n}\n\nconst DEPENDENCY_KEY_SEPARATOR = \"\\u0002\";\nconst DEPENDENCY_VALUE_SEPARATOR = \"\\u0001\";\n\nfunction normalizeDependencyValues(values?: readonly string[]) {\n\tif (!values?.length) return [];\n\treturn [...new Set(values)].sort();\n}\n\nfunction createDependencySignature(codeKey: string, availableKeys: Record<string, unknown>, dependencies?: Record<string, string[]>) {\n\tconst parts: string[] = [];\n\n\tfor (const key of Object.keys(availableKeys).sort()) {\n\t\tif (key === codeKey) continue;\n\n\t\tconst values = normalizeDependencyValues(dependencies?.[key]);\n\t\tif (!values.length) continue;\n\n\t\tparts.push(`${key}:${values.join(DEPENDENCY_VALUE_SEPARATOR)}`);\n\t}\n\n\treturn parts.join(DEPENDENCY_KEY_SEPARATOR);\n}\n\nfunction parseDependencySignature(signature: string) {\n\tconst dependencies = new Map<string, string[]>();\n\tif (!signature) return dependencies;\n\n\tfor (const part of signature.split(DEPENDENCY_KEY_SEPARATOR)) {\n\t\tconst separatorIndex = part.indexOf(\":\");\n\t\tif (separatorIndex < 0) continue;\n\n\t\tconst key = part.slice(0, separatorIndex);\n\t\tconst values = part\n\t\t\t.slice(separatorIndex + 1)\n\t\t\t.split(DEPENDENCY_VALUE_SEPARATOR)\n\t\t\t.filter(Boolean);\n\t\tif (key && values.length) {\n\t\t\tdependencies.set(key, values);\n\t\t}\n\t}\n\n\treturn dependencies;\n}\n\nexport function useODataSelectBase({ odata, segment, model, value, dependencies }: UseODataSelectBaseOptions) {\n\tconst [query, setQuery] = useState(\"\");\n\tconst [debouncedQuery, setDebouncedQuery] = useState(\"\");\n\n\tconst { codeKey, searchDebounceDelay, minSearchCodeLength, minSearchTextLength: minSearchLength } = model;\n\n\tconst { data: rawData, textKey, isLoading, isError, getItems, separatedItems, debounce } = useODataCollection({ odata, model });\n\n\tconst itemsCount = separatedItems.length;\n\tconst selectionKey = segment.selectText && textKey ? textKey : codeKey;\n\n\tconst dependencySignature = useMemo(() => {\n\t\tif (!rawData) return \"\";\n\t\treturn createDependencySignature(codeKey, rawData.keyPairsMap, dependencies);\n\t}, [rawData, codeKey, dependencies]);\n\n\t/**\n\t * Зависимости фильтруют уже загруженные строки справочника и не меняют OData query.\n\t * Значения одного сегмента объединяются по OR, а заполненные сегменты пересекаются по AND;\n\t * итоговый Set содержит допустимые коды текущего контрола, включая корректный пустой результат.\n\t */\n\tconst dependencyFilteredKeys = useMemo(() => {\n\t\tif (!rawData || !dependencySignature) return undefined;\n\n\t\tconst dependencyValueSets = Array.from(\n\t\t\tparseDependencySignature(dependencySignature),\n\t\t\t([key, values]) => [key, new Set(values)] as const\n\t\t);\n\t\tconst filteredKeys = new Set<string>();\n\n\t\tfor (const item of rawData.items) {\n\t\t\tconst matchesEveryDependency = dependencyValueSets.every(([key, values]) => values.has(item[key]));\n\t\t\tif (matchesEveryDependency && item[codeKey]) {\n\t\t\t\tfilteredKeys.add(item[codeKey]);\n\t\t\t}\n\t\t}\n\n\t\treturn filteredKeys;\n\t}, [codeKey, dependencySignature, rawData]);\n\n\tuseEffect(() => {\n\t\tdebounce(\n\t\t\t\"search\",\n\t\t\t() => {\n\t\t\t\tsetDebouncedQuery(query.trim().toLowerCase());\n\t\t\t},\n\t\t\tsearchDebounceDelay\n\t\t);\n\t}, [debounce, query, searchDebounceDelay]);\n\n\tconst selectedItems = useMemo(() => {\n\t\tif (!value?.length || !selectionKey) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst selectedValues = new Set(value);\n\t\treturn separatedItems.filter((item) => selectedValues.has(item[selectionKey]));\n\t}, [separatedItems, selectionKey, value]);\n\n\tconst filteredItems = useMemo(() => {\n\t\tif (!rawData) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst isSearchFiltered = debouncedQuery.length >= minSearchLength;\n\t\tconst isDependencyFiltered = dependencyFilteredKeys !== undefined;\n\n\t\tif (!isSearchFiltered && !isDependencyFiltered) {\n\t\t\treturn getItems(undefined, selectedItems);\n\t\t}\n\n\t\tconst isAheadText = debouncedQuery.length >= minSearchLength;\n\t\tconst isAheadCode = !segment.hideCode && debouncedQuery.length >= minSearchCodeLength && !Number.isNaN(Number(debouncedQuery));\n\n\t\treturn getItems((codeValue: string, textValue: string) => {\n\t\t\tif (dependencyFilteredKeys && !dependencyFilteredKeys.has(codeValue)) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (!isSearchFiltered) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (codeValue && textValue) {\n\t\t\t\tif (isAheadCode && startsWithIgnoringZeros(codeValue, debouncedQuery)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tif (isAheadText && textValue.toLowerCase().includes(debouncedQuery)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}, selectedItems);\n\t}, [debouncedQuery, dependencyFilteredKeys, getItems, minSearchCodeLength, minSearchLength, rawData, segment.hideCode, selectedItems]);\n\n\t// const placeholder = useMemo(() => {\n\t// \tconst filteredItemsLength = filteredItems.length;\n\n\t// \tif (!itemsCount) {\n\t// \t\treturn `${segment.placeholder} <пусто>`;\n\t// \t}\n\n\t// \tif (filteredItemsLength < itemsCount) {\n\t// \t\treturn `${segment.placeholder} <${filteredItemsLength}+>`;\n\t// \t}\n\n\t// \treturn `${segment.placeholder} <${itemsCount > model.maxVisibleItems ? `${model.maxVisibleItems}+` : itemsCount}>`;\n\t// }, [filteredItems.length, itemsCount, model.maxVisibleItems, segment.placeholder]);\n\n\treturn {\n\t\tquery,\n\t\tsetQuery,\n\t\tdebouncedQuery,\n\t\tselectedItems,\n\t\tfilteredItems,\n\t\titemsCount,\n\t\tisLoading,\n\t\tisError,\n\t\tcodeKey,\n\t\ttextKey,\n\t\tselectionKey,\n\t\tplaceholder: segment.placeholder\n\t};\n}\n\nexport type ODataSelectBaseModel = ReturnType<typeof useODataSelectBase>;\n\nexport function mapSelectedItemsToValues(items: CollectionItem[], selectionKey: string) {\n\treturn items.map((item) => item[selectionKey]);\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import { a as e, i as t, n, r, s as i, t as a } from "../chunks/multi-select-Bs1GU5MD.js";
1
+ import { a as e, i as t, n, r, s as i, t as a } from "../chunks/multi-select-D5b3Gxsv.js";
2
2
  export { e as MultiSelect, i as MultiSelectToken, n as ODataDependentMultiSelect, r as ODataDependentSegmentMultiSelect, t as ODataMultiSelect, a as SerializableMultiSelect };
@@ -1,20 +1,12 @@
1
- import { ODataDependentBaseProps } from "@ryuzaki13/react-foundation-api/odata";
2
- interface ODataDependentMultiSelectProps extends ODataDependentBaseProps {
3
- /**
4
- * Выбранные значения (управляемый компонент)
5
- */
6
- values?: Record<string, string[]>;
7
- /**
8
- * Обработчик изменения выбранных значений
9
- */
10
- onChange?: (selected: Record<string, string[]>) => void;
1
+ import { type ODataDependentBaseProps } from "@ryuzaki13/react-foundation-api/odata";
2
+ import type { UseODataDependentSelectionOptions } from "../../odata-dependent";
3
+ export type ODataDependentMultiSelectProps = Omit<ODataDependentBaseProps, "dependencies" | "value"> & UseODataDependentSelectionOptions & {
11
4
  /**
12
5
  * Ширина одного элемента в `em` единицах.
13
6
  *
14
7
  * @default 15
15
8
  */
16
9
  width?: number;
17
- }
18
- export declare const ODataDependentMultiSelect: React.FC<ODataDependentMultiSelectProps>;
19
- export {};
10
+ };
11
+ export declare function ODataDependentMultiSelect(props: ODataDependentMultiSelectProps): import("react").JSX.Element[];
20
12
  //# sourceMappingURL=ODataDependentMultiSelect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ODataDependentMultiSelect.d.ts","sourceRoot":"","sources":["../../../src/multi-select/ui/ODataDependentMultiSelect.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAiC,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAI/G,UAAU,8BAA+B,SAAQ,uBAAuB;IACvE;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAElC;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,IAAI,CAAC;IAExD;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,yBAAyB,EAAE,KAAK,CAAC,EAAE,CAAC,8BAA8B,CAiC9E,CAAC"}
1
+ {"version":3,"file":"ODataDependentMultiSelect.d.ts","sourceRoot":"","sources":["../../../src/multi-select/ui/ODataDependentMultiSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiC,KAAK,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAMpH,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,uBAAuB,CAAC;AAE/E,MAAM,MAAM,8BAA8B,GAAG,IAAI,CAAC,uBAAuB,EAAE,cAAc,GAAG,OAAO,CAAC,GACnG,iCAAiC,GAAG;IACnC;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,8BAA8B,iCAuB9E"}
@@ -1,21 +1,4 @@
1
- import type { ODataDependentSegmentItem } from "@ryuzaki13/react-foundation-api/odata";
2
- interface ODataDependentSegmentMultiSelectProps {
3
- item: ODataDependentSegmentItem;
4
- /**
5
- * Выбранные значения (управляемый компонент)
6
- */
7
- values?: Record<string, string[]>;
8
- /**
9
- * Обработчик изменения выбранных значений
10
- */
11
- onChange?: (selected: Record<string, string[]>) => void;
12
- /**
13
- * Ширина одного элемента в `em` единицах.
14
- *
15
- * @default 15
16
- */
17
- width?: number;
18
- }
19
- export declare const ODataDependentSegmentMultiSelect: React.FC<ODataDependentSegmentMultiSelectProps>;
20
- export {};
1
+ import type { ODataDependentSegmentControlProps } from "../../odata-dependent";
2
+ export type ODataDependentSegmentMultiSelectProps = ODataDependentSegmentControlProps;
3
+ export declare function ODataDependentSegmentMultiSelect(props: ODataDependentSegmentMultiSelectProps): import("react").JSX.Element;
21
4
  //# sourceMappingURL=ODataDependentSegmentMultiSelect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ODataDependentSegmentMultiSelect.d.ts","sourceRoot":"","sources":["../../../src/multi-select/ui/ODataDependentSegmentMultiSelect.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAEvF,UAAU,qCAAqC;IAC9C,IAAI,EAAE,yBAAyB,CAAC;IAChC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAClC;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,IAAI,CAAC;IACxD;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,gCAAgC,EAAE,KAAK,CAAC,EAAE,CAAC,qCAAqC,CAsC5F,CAAC"}
1
+ {"version":3,"file":"ODataDependentSegmentMultiSelect.d.ts","sourceRoot":"","sources":["../../../src/multi-select/ui/ODataDependentSegmentMultiSelect.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,uBAAuB,CAAC;AAE/E,MAAM,MAAM,qCAAqC,GAAG,iCAAiC,CAAC;AAEtF,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,qCAAqC,+BA6B5F"}
@@ -0,0 +1,29 @@
1
+ import type { ReactNode } from "react";
2
+ import type { UiSize } from "../types";
3
+ import type { UseODataDependentSelectionOptions } from "./model/useODataDependentSelection";
4
+ import type { ODataDependentSegmentItem } from "@ryuzaki13/react-foundation-api/odata";
5
+ /**
6
+ * Общий UI-контракт segment-level OData-контролов.
7
+ *
8
+ * Контракт намеренно не определяет форму локального значения: Select адаптирует
9
+ * массив к одному элементу, а MultiSelect использует массив напрямую.
10
+ */
11
+ export type ODataDependentSegmentControlProps = UseODataDependentSelectionOptions & {
12
+ /** Развёрнутое описание конкретного OData-сегмента. */
13
+ item: ODataDependentSegmentItem;
14
+ /** Дополнительная внешняя блокировка поверх sequential-policy. */
15
+ disabled?: boolean;
16
+ /** Заголовок поля. */
17
+ label?: ReactNode;
18
+ /** Дополнительное описание поля. */
19
+ description?: string;
20
+ /** Размер базового Select или MultiSelect. */
21
+ size?: UiSize;
22
+ /**
23
+ * Ширина элемента в `em` без служебной добавки базового input.
24
+ *
25
+ * @default 15
26
+ */
27
+ width?: number;
28
+ };
29
+ //# sourceMappingURL=ODataDependentSegmentControlProps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ODataDependentSegmentControlProps.d.ts","sourceRoot":"","sources":["../../src/odata-dependent/ODataDependentSegmentControlProps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,oCAAoC,CAAC;AAC5F,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAEvF;;;;;GAKG;AACH,MAAM,MAAM,iCAAiC,GAAG,iCAAiC,GAAG;IACnF,uDAAuD;IACvD,IAAI,EAAE,yBAAyB,CAAC;IAChC,kEAAkE;IAClE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sBAAsB;IACtB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CACf,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { useODataDependentSelection, type ODataDependentSelectionMode, type ODataDependentSelectionModel, type ODataDependentSelectionValues, type UseODataDependentSelectionOptions } from "./model/useODataDependentSelection";
2
+ export type { ODataDependentSegmentControlProps } from "./ODataDependentSegmentControlProps";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/odata-dependent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,0BAA0B,EAC1B,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EACjC,KAAK,6BAA6B,EAClC,KAAK,iCAAiC,EACtC,MAAM,oCAAoC,CAAC;AAC5C,YAAY,EAAE,iCAAiC,EAAE,MAAM,qCAAqC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { t as e } from "../chunks/odata-dependent-C_DCbKY2.js";
2
+ export { e as useODataDependentSelection };
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Единый массивный формат значений зависимых OData-сегментов.
3
+ *
4
+ * Даже single-select хранит значение как массив из нуля или одного элемента:
5
+ * это позволяет без преобразований передавать весь снимок в `dependencies`
6
+ * OData-контролов и использовать один state-контракт для разных видов выбора.
7
+ */
8
+ export type ODataDependentSelectionValues = Record<string, string[]>;
9
+ export type ODataDependentSelectionMode = "independent" | "sequential";
10
+ type ODataDependentSelectionCommonOptions = {
11
+ /** Внешний снимок значений. При наличии включает controlled-режим. */
12
+ values?: ODataDependentSelectionValues;
13
+ /** Начальный снимок для uncontrolled-режима. */
14
+ defaultValues?: ODataDependentSelectionValues;
15
+ /** Получает полный снимок после каждого изменения сегмента. */
16
+ onChange?: (values: ODataDependentSelectionValues) => void;
17
+ };
18
+ type IndependentSelectionOptions = {
19
+ /** Каждый сегмент доступен независимо от заполненности предыдущих. */
20
+ selectionMode?: "independent";
21
+ /** Порядок может передаваться общей композицией, но в этом режиме не ограничивает выбор. */
22
+ segmentOrder?: readonly string[];
23
+ };
24
+ type SequentialSelectionOptions = {
25
+ /** Сегмент доступен только после заполнения всех предыдущих уровней цепочки. */
26
+ selectionMode: "sequential";
27
+ /** Явный metadata- или consumer-порядок сегментов одной цепочки. */
28
+ segmentOrder: readonly string[];
29
+ };
30
+ export type UseODataDependentSelectionOptions = ODataDependentSelectionCommonOptions & (IndependentSelectionOptions | SequentialSelectionOptions);
31
+ export type ODataDependentSelectionModel = {
32
+ /** Текущий общий снимок, который следует передавать каждому OData-контролу как `dependencies`. */
33
+ values: ODataDependentSelectionValues;
34
+ /** Публикует готовый общий снимок, сохраняя controlled/uncontrolled семантику hook. */
35
+ updateValues: (values: ODataDependentSelectionValues) => void;
36
+ /** Обновляет один сегмент и в sequential-режиме сбрасывает все последующие уровни. */
37
+ updateSegment: (segmentId: string, value: readonly string[]) => void;
38
+ /** Проверяет доступность сегмента относительно полного предшествующего пути цепочки. */
39
+ isSegmentDisabled: (segmentId: string) => boolean;
40
+ };
41
+ /**
42
+ * Управляет общим снимком зависимых OData-сегментов без привязки к Select или MultiSelect.
43
+ *
44
+ * В sequential-режиме `segmentOrder` является источником истины для блокировки и
45
+ * каскадного сброса. Если id отсутствует в порядке, сегмент блокируется: это
46
+ * fail-closed поведение не позволяет незаметно обойти неправильно заданную цепочку.
47
+ */
48
+ export declare function useODataDependentSelection({ values, defaultValues, onChange, selectionMode, segmentOrder }: UseODataDependentSelectionOptions): ODataDependentSelectionModel;
49
+ export {};
50
+ //# sourceMappingURL=useODataDependentSelection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useODataDependentSelection.d.ts","sourceRoot":"","sources":["../../../src/odata-dependent/model/useODataDependentSelection.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,MAAM,6BAA6B,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAErE,MAAM,MAAM,2BAA2B,GAAG,aAAa,GAAG,YAAY,CAAC;AAEvE,KAAK,oCAAoC,GAAG;IAC3C,sEAAsE;IACtE,MAAM,CAAC,EAAE,6BAA6B,CAAC;IACvC,gDAAgD;IAChD,aAAa,CAAC,EAAE,6BAA6B,CAAC;IAC9C,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,6BAA6B,KAAK,IAAI,CAAC;CAC3D,CAAC;AAEF,KAAK,2BAA2B,GAAG;IAClC,sEAAsE;IACtE,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,4FAA4F;IAC5F,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC,CAAC;AAEF,KAAK,0BAA0B,GAAG;IACjC,gFAAgF;IAChF,aAAa,EAAE,YAAY,CAAC;IAC5B,oEAAoE;IACpE,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,iCAAiC,GAAG,oCAAoC,GACnF,CAAC,2BAA2B,GAAG,0BAA0B,CAAC,CAAC;AAE5D,MAAM,MAAM,4BAA4B,GAAG;IAC1C,kGAAkG;IAClG,MAAM,EAAE,6BAA6B,CAAC;IACtC,uFAAuF;IACvF,YAAY,EAAE,CAAC,MAAM,EAAE,6BAA6B,KAAK,IAAI,CAAC;IAC9D,sFAAsF;IACtF,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,CAAC;IACrE,wFAAwF;IACxF,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;CAClD,CAAC;AAMF;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,EAC1C,MAAM,EACN,aAAa,EACb,QAAQ,EACR,aAA6B,EAC7B,YAAiB,EACjB,EAAE,iCAAiC,GAAG,4BAA4B,CA0DlE"}
@@ -1,4 +1,4 @@
1
- import { r as e } from "../chunks/select-DeeGYtVc.js";
1
+ import { i as e } from "../chunks/select-D3EnRya6.js";
2
2
  import { jsx as t } from "react/jsx-runtime";
3
3
  import { getPresetOption as n } from "@ryuzaki13/react-foundation-lib/presets";
4
4
  //#region src/preset-select/PresetSelect.tsx
@@ -0,0 +1,12 @@
1
+ import type { ODataDependentSegmentControlProps } from "../odata-dependent";
2
+ export type ODataDependentSegmentSelectProps = ODataDependentSegmentControlProps & {
3
+ /** Показывает действие очистки выбранного значения. */
4
+ clearable?: boolean;
5
+ };
6
+ /**
7
+ * Адаптирует один развёрнутый зависимый OData-сегмент к single-select UI.
8
+ * Общий снимок остаётся массивным, поэтому совместим с `dependencies` и
9
+ * может совместно использоваться с segment-level MultiSelect-контролами.
10
+ */
11
+ export declare function ODataDependentSegmentSelect(props: ODataDependentSegmentSelectProps): import("react").JSX.Element;
12
+ //# sourceMappingURL=ODataDependentSegmentSelect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ODataDependentSegmentSelect.d.ts","sourceRoot":"","sources":["../../src/select/ODataDependentSegmentSelect.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,oBAAoB,CAAC;AAE5E,MAAM,MAAM,gCAAgC,GAAG,iCAAiC,GAAG;IAClF,uDAAuD;IACvD,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,gCAAgC,+BA8BlF"}
@@ -1,4 +1,5 @@
1
1
  export { resolveSelectedOption } from "./lib";
2
+ export * from "./ODataDependentSegmentSelect";
2
3
  export * from "./ODataSelect";
3
4
  export * from "./Select";
4
5
  export * from "./SerializableSelect";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/select/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC;AAC9C,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/select/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC"}
@@ -1,2 +1,2 @@
1
- import { i as e, n as t, r as n, t as r } from "../chunks/select-DeeGYtVc.js";
2
- export { t as ODataSelect, n as Select, r as SerializableSelect, e as resolveSelectedOption };
1
+ import { a as e, i as t, n, r, t as i } from "../chunks/select-D3EnRya6.js";
2
+ export { n as ODataDependentSegmentSelect, r as ODataSelect, t as Select, i as SerializableSelect, e as resolveSelectedOption };
@@ -1 +1 @@
1
- {"version":3,"file":"useODataSelectBase.d.ts","sourceRoot":"","sources":["../../../src/select/model/useODataSelectBase.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAsB,MAAM,uCAAuC,CAAC;AAEvH,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAEvE,UAAU,yBAA0B,SAAQ,IAAI,CAAC,oBAAoB,EAAE,OAAO,GAAG,OAAO,CAAC;IACxF,KAAK,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AA8CD,wBAAgB,kBAAkB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,yBAAyB;;;;;;;;;;;;;EAuI3G;AAED,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEzE,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,YAAY,EAAE,MAAM,YAErF"}
1
+ {"version":3,"file":"useODataSelectBase.d.ts","sourceRoot":"","sources":["../../../src/select/model/useODataSelectBase.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAsB,MAAM,uCAAuC,CAAC;AAEvH,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAEvE,UAAU,yBAA0B,SAAQ,IAAI,CAAC,oBAAoB,EAAE,OAAO,GAAG,OAAO,CAAC;IACxF,KAAK,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AA8CD,wBAAgB,kBAAkB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,yBAAyB;;;;;;;;;;;;;EA6H3G;AAED,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEzE,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,YAAY,EAAE,MAAM,YAErF"}
@@ -1,4 +1,4 @@
1
- import { r as e } from "../chunks/select-DeeGYtVc.js";
1
+ import { i as e } from "../chunks/select-D3EnRya6.js";
2
2
  import { useMemo as t } from "react";
3
3
  import { cn as n } from "@ryuzaki13/react-foundation-lib/utils";
4
4
  import { Fragment as r, jsx as i, jsxs as a } from "react/jsx-runtime";
@@ -2,8 +2,8 @@ import { t as e } from "../chunks/ui.module-DHVTOqZ0.js";
2
2
  import { s as t } from "../chunks/input-CCdBtl-C.js";
3
3
  import { t as n } from "../chunks/check-box-sfGjYczQ.js";
4
4
  import { c as r, d as i, f as a, i as o, l as s, n as c, p as l, r as u, t as d, u as f } from "../chunks/picker-CrRdwdA5.js";
5
- import { r as p } from "../chunks/useODataSelectBase-Bq36Wp1U.js";
6
- import { o as m, s as h } from "../chunks/multi-select-Bs1GU5MD.js";
5
+ import { r as p } from "../chunks/useODataSelectBase-Cc79kBNk.js";
6
+ import { o as m, s as h } from "../chunks/multi-select-D5b3Gxsv.js";
7
7
  import { useCallback as g, useLayoutEffect as _, useMemo as v, useRef as y, useState as ee } from "react";
8
8
  import { flattenODataDependentServices as b, sortODataDependentSegmentItemsByChains as x, useODataCollection as S, useODataCollectionChains as C, useODataCollectionModel as w } from "@ryuzaki13/react-foundation-api/odata";
9
9
  import { cn as T } from "@ryuzaki13/react-foundation-lib/utils";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ryuzaki13/react-foundation-ui",
3
- "version": "1.7.0",
3
+ "version": "1.8.1",
4
4
  "description": "Reusable React foundation UI primitives and Storybook stories.",
5
5
  "license": "MIT",
6
6
  "author": "Ryuzaki13",
@@ -194,6 +194,10 @@
194
194
  "types": "./dist/notifications/index.d.ts",
195
195
  "import": "./dist/notifications/index.js"
196
196
  },
197
+ "./odata-dependent": {
198
+ "types": "./dist/odata-dependent/index.d.ts",
199
+ "import": "./dist/odata-dependent/index.js"
200
+ },
197
201
  "./pages": {
198
202
  "types": "./dist/pages/index.d.ts",
199
203
  "import": "./dist/pages/index.js"
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-BnW9ONAs.js";import{i as n,r}from"./react-qN2cStNd.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-W-usNnZb.js";import{a as p,i as m,n as h,o as g,r as _,s as v,t as y}from"./Badge.stories-0OqfwxFw.js";function b(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(s,{of:h,parameters:{atomicCanvas:!0,layout:`padded`,docs:{toc:!0}}}),`
1
+ import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-CE1ro1AE.js";import{i as n,r}from"./react-qN2cStNd.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-DGyM6J7r.js";import{a as p,i as m,n as h,o as g,r as _,s as v,t as y}from"./Badge.stories-5LcplF_Q.js";function b(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(s,{of:h,parameters:{atomicCanvas:!0,layout:`padded`,docs:{toc:!0}}}),`
2
2
  `,(0,S.jsx)(u,{children:`Badge`}),`
3
3
  `,(0,S.jsx)(o,{children:`Компактная текстовая метка для статусов, категорий, фильтров и коротких служебных пометок`}),`
4
4
  `,(0,S.jsx)(t.p,{children:`Badge подходит для коротких подписей, которые должны быстро читаться и не перегружать интерфейс:`}),`
@@ -1,4 +1,4 @@
1
- import{n as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{t as n}from"./react-C21x__mS.js";import{n as r}from"./iframe-BnW9ONAs.js";import{i,n as a,r as o,t as s}from"./BadgeList-y-uBOP3g.js";var c=t({Appearances:()=>h,Basic:()=>p,RemovableList:()=>_,Sizes:()=>g,Tones:()=>m,__namedExportsOrder:()=>v,default:()=>f}),l,u,d,f,p,m,h,g,_,v;function y(){return(y=e((()=>{l=n(),i(),a(),u=r(),{useArgs:d}=__STORYBOOK_MODULE_PREVIEW_API__,f={title:`Shared/UI/Badge`,component:o,args:{children:`Новый`,size:`md`,tone:`info`,appearance:`solid`},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{children:{description:`Текст внутри бейджа.`,control:`text`},size:{description:`Размер бейджа.`,control:`inline-radio`,options:[`xs`,`sm`,`md`,`lg`,`xl`]},tone:{description:`Цветовой тон бейджа.`,control:`inline-radio`,options:[`neutral`,`brand`,`success`,`warning`,`error`,`info`]},appearance:{description:`Форма бейджа.`,control:`inline-radio`,options:[`solid`,`outline`,`ghost`,`transparent`]},onRemove:{description:`Показывает кнопку удаления и вызывает обработчик по клику.`,control:!1}}},p={render:function(){let[e]=d();return(0,u.jsx)(o,{...e})}},m={render:()=>(0,u.jsxs)(s,{children:[(0,u.jsx)(o,{tone:`neutral`,appearance:`outline`,children:`Neutral`}),(0,u.jsx)(o,{tone:`success`,appearance:`solid`,children:`Успешно`}),(0,u.jsx)(o,{tone:`warning`,appearance:`solid`,children:`Внимание`}),(0,u.jsx)(o,{tone:`error`,appearance:`solid`,children:`Ошибка`}),(0,u.jsx)(o,{tone:`info`,appearance:`solid`,children:`Информация`})]})},h={render:()=>(0,u.jsxs)(s,{children:[(0,u.jsx)(o,{tone:`neutral`,appearance:`solid`,children:`Solid`}),(0,u.jsx)(o,{tone:`neutral`,appearance:`outline`,children:`Outline`}),(0,u.jsx)(o,{tone:`info`,appearance:`ghost`,children:`Ghost`}),(0,u.jsx)(o,{tone:`warning`,appearance:`transparent`,children:`Transparent`})]})},g={render:()=>(0,u.jsxs)(s,{children:[(0,u.jsx)(o,{size:`xs`,children:`Extra Small`}),(0,u.jsx)(o,{size:`sm`,children:`Small`}),(0,u.jsx)(o,{size:`md`,children:`Medium`}),(0,u.jsx)(o,{size:`lg`,children:`Large`}),(0,u.jsx)(o,{size:`xl`,children:`Extra Large`})]})},_={render:()=>{let[e,t]=(0,l.useState)([`Фильтр A`,`Фильтр B`,`Фильтр C`]);return(0,u.jsx)(s,{children:e.map(e=>(0,u.jsx)(o,{tone:`info`,appearance:`outline`,onRemove:()=>t(t=>t.filter(t=>t!==e)),children:e},e))})}},p.parameters={...p.parameters,docs:{...p.parameters?.docs,source:{originalSource:`{
1
+ import{n as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{t as n}from"./react-C21x__mS.js";import{n as r}from"./iframe-CE1ro1AE.js";import{i,n as a,r as o,t as s}from"./BadgeList-B1Mn9GtM.js";var c=t({Appearances:()=>h,Basic:()=>p,RemovableList:()=>_,Sizes:()=>g,Tones:()=>m,__namedExportsOrder:()=>v,default:()=>f}),l,u,d,f,p,m,h,g,_,v;function y(){return(y=e((()=>{l=n(),i(),a(),u=r(),{useArgs:d}=__STORYBOOK_MODULE_PREVIEW_API__,f={title:`Shared/UI/Badge`,component:o,args:{children:`Новый`,size:`md`,tone:`info`,appearance:`solid`},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{children:{description:`Текст внутри бейджа.`,control:`text`},size:{description:`Размер бейджа.`,control:`inline-radio`,options:[`xs`,`sm`,`md`,`lg`,`xl`]},tone:{description:`Цветовой тон бейджа.`,control:`inline-radio`,options:[`neutral`,`brand`,`success`,`warning`,`error`,`info`]},appearance:{description:`Форма бейджа.`,control:`inline-radio`,options:[`solid`,`outline`,`ghost`,`transparent`]},onRemove:{description:`Показывает кнопку удаления и вызывает обработчик по клику.`,control:!1}}},p={render:function(){let[e]=d();return(0,u.jsx)(o,{...e})}},m={render:()=>(0,u.jsxs)(s,{children:[(0,u.jsx)(o,{tone:`neutral`,appearance:`outline`,children:`Neutral`}),(0,u.jsx)(o,{tone:`success`,appearance:`solid`,children:`Успешно`}),(0,u.jsx)(o,{tone:`warning`,appearance:`solid`,children:`Внимание`}),(0,u.jsx)(o,{tone:`error`,appearance:`solid`,children:`Ошибка`}),(0,u.jsx)(o,{tone:`info`,appearance:`solid`,children:`Информация`})]})},h={render:()=>(0,u.jsxs)(s,{children:[(0,u.jsx)(o,{tone:`neutral`,appearance:`solid`,children:`Solid`}),(0,u.jsx)(o,{tone:`neutral`,appearance:`outline`,children:`Outline`}),(0,u.jsx)(o,{tone:`info`,appearance:`ghost`,children:`Ghost`}),(0,u.jsx)(o,{tone:`warning`,appearance:`transparent`,children:`Transparent`})]})},g={render:()=>(0,u.jsxs)(s,{children:[(0,u.jsx)(o,{size:`xs`,children:`Extra Small`}),(0,u.jsx)(o,{size:`sm`,children:`Small`}),(0,u.jsx)(o,{size:`md`,children:`Medium`}),(0,u.jsx)(o,{size:`lg`,children:`Large`}),(0,u.jsx)(o,{size:`xl`,children:`Extra Large`})]})},_={render:()=>{let[e,t]=(0,l.useState)([`Фильтр A`,`Фильтр B`,`Фильтр C`]);return(0,u.jsx)(s,{children:e.map(e=>(0,u.jsx)(o,{tone:`info`,appearance:`outline`,onRemove:()=>t(t=>t.filter(t=>t!==e)),children:e},e))})}},p.parameters={...p.parameters,docs:{...p.parameters?.docs,source:{originalSource:`{
2
2
  render: function Render() {
3
3
  const [args] = useArgs<BadgeStoryArgs>();
4
4
  return <Badge {...args} />;
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{t}from"./react-C21x__mS.js";import{n,t as r}from"./x-BGnlLolo.js";import{n as i}from"./iframe-BnW9ONAs.js";import{a,i as o}from"./utils-DUM89eIj.js";import{a as s,l as c}from"./array-D-_yMMUK-CIRmlF93.js";import{n as l,t as u}from"./FloatingPopover-CNZzGjfO.js";import{a as d,i as f,r as p,t as m}from"./uiClasses-DiXn3Hc-.js";import{n as h,t as g}from"./FlexContainer-LmZIdhq2.js";function _({maxChar:e,placement:t=`left`,closeDelay:n=0,maxWidth:r,children:i,block:a,state:o,textWrap:s,textWrapProps:l}){let d=c(i);if(!d.length||e&&d.length<e)return(0,v.jsx)(`span`,{children:d});let f=s??`div`,p={style:{display:a?`block`:`inline-block`,width:e?`${e-3}ch`:`auto`},className:`textOverflow`},m={...l,...p,style:{...l?.style,...p.style},className:[l?.className,p.className].filter(Boolean).join(` `)};return(0,v.jsx)(u,{state:o,placement:t,openOnHover:!0,content:d,closeDelay:n,maxWidth:r,children:(0,v.jsx)(f,{...m,children:d})})}var v;function y(){return(y=e((()=>{s(),l(),v=i(),_.__docgenInfo={description:``,methods:[],displayName:`TextOverflow`,props:{children:{required:!0,tsType:{name:`string`},description:``},maxChar:{required:!1,tsType:{name:`number`},description:``},maxWidth:{required:!1,tsType:{name:`number`},description:`Максимальная ширина тултипа в em.`},placement:{required:!1,tsType:{name:`Placement`},description:``,defaultValue:{value:`"left"`,computed:!1}},closeDelay:{required:!1,tsType:{name:`number`},description:``,defaultValue:{value:`0`,computed:!1}},block:{required:!1,tsType:{name:`literal`,value:`true`},description:`Для работы text-overflow элемент обязан быть блочным или inline-block.
1
+ import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{t}from"./react-C21x__mS.js";import{n,t as r}from"./x-DRm1wyYI.js";import{n as i}from"./iframe-CE1ro1AE.js";import{a,i as o}from"./utils-DUM89eIj.js";import{a as s,l as c}from"./array-D-_yMMUK-CIRmlF93.js";import{n as l,t as u}from"./FloatingPopover-C3zX8ub-.js";import{a as d,i as f,r as p,t as m}from"./uiClasses-DiXn3Hc-.js";import{n as h,t as g}from"./FlexContainer-LmZIdhq2.js";function _({maxChar:e,placement:t=`left`,closeDelay:n=0,maxWidth:r,children:i,block:a,state:o,textWrap:s,textWrapProps:l}){let d=c(i);if(!d.length||e&&d.length<e)return(0,v.jsx)(`span`,{children:d});let f=s??`div`,p={style:{display:a?`block`:`inline-block`,width:e?`${e-3}ch`:`auto`},className:`textOverflow`},m={...l,...p,style:{...l?.style,...p.style},className:[l?.className,p.className].filter(Boolean).join(` `)};return(0,v.jsx)(u,{state:o,placement:t,openOnHover:!0,content:d,closeDelay:n,maxWidth:r,children:(0,v.jsx)(f,{...m,children:d})})}var v;function y(){return(y=e((()=>{s(),l(),v=i(),_.__docgenInfo={description:``,methods:[],displayName:`TextOverflow`,props:{children:{required:!0,tsType:{name:`string`},description:``},maxChar:{required:!1,tsType:{name:`number`},description:``},maxWidth:{required:!1,tsType:{name:`number`},description:`Максимальная ширина тултипа в em.`},placement:{required:!1,tsType:{name:`Placement`},description:``,defaultValue:{value:`"left"`,computed:!1}},closeDelay:{required:!1,tsType:{name:`number`},description:``,defaultValue:{value:`0`,computed:!1}},block:{required:!1,tsType:{name:`literal`,value:`true`},description:`Для работы text-overflow элемент обязан быть блочным или inline-block.
2
2
  Если в качестве обёртки передается инлайновый компонент, то он будет
3
3
  перезаписан через стили на display: block или inline-block в зависимости
4
4
  от установки данного пропса.`},state:{required:!1,tsType:{name:`union`,raw:`"information" | "error" | "warning" | "success" | "negative"`,elements:[{name:`literal`,value:`"information"`},{name:`literal`,value:`"error"`},{name:`literal`,value:`"warning"`},{name:`literal`,value:`"success"`},{name:`literal`,value:`"negative"`}]},description:``},textWrap:{required:!1,tsType:{name:`T`},description:``},textWrapProps:{required:!1,tsType:{name:`Omit`,elements:[{name:`ComponentProps`,elements:[{name:`T`}],raw:`ComponentProps<T>`},{name:`literal`,value:`"children"`}],raw:`Omit<ComponentProps<T>, "children">`},description:``}}}})))()}var b,x,S,C,w,T,E,D,O,k;function A(){return(A=e((()=>{b=`qBtmnH`,x=`p-HsHY`,S=`u9tQAE`,C=`FRScRz`,w=`W13uQO`,T=`_3IRcM9`,E=`R3ybI7`,D=`DdWAaC`,O=`_5cXBQF`,k={badge:b,passive:x,sizeXs:S,sizeSm:C,sizeMd:w,sizeLg:T,sizeXl:E,content:D,removeButton:O}})))()}function j({children:e,size:t=`sm`,tone:n,appearance:i,className:o,onRemove:s}){let c=n??`neutral`,l=d({tone:n,appearance:i,fallbackTone:c,fallbackAppearance:c===`neutral`?`outline`:`solid`});return(0,M.jsxs)(`div`,{className:a(k.badge,N[t],p(l.tone),m(l.appearance),!s&&k.passive,o),children:[(0,M.jsx)(_,{maxChar:25,placement:`top`,block:!0,textWrapProps:{className:k.content},children:String(e)}),s&&(0,M.jsx)(`button`,{type:`button`,onClick:s,className:k.removeButton,"aria-label":`Удалить бейдж`,"data-ui":`badge-remove-button`,"data-action":`remove-badge`,children:(0,M.jsx)(r,{})})]})}var M,N;function P(){return(P=e((()=>{o(),n(),y(),f(),A(),M=i(),N={xs:k.sizeXs,sm:k.sizeSm,md:k.sizeMd,lg:k.sizeLg,xl:k.sizeXl},j.__docgenInfo={description:`Компактный индикатор для статусов, категорий и коротких служебных меток.`,methods:[],displayName:`Badge`,props:{children:{required:!0,tsType:{name:`union`,raw:`string | number`,elements:[{name:`string`},{name:`number`}]},description:``},size:{required:!1,tsType:{name:`union`,raw:`"xs" | "sm" | "md" | "lg" | "xl"`,elements:[{name:`literal`,value:`"xs"`},{name:`literal`,value:`"sm"`},{name:`literal`,value:`"md"`},{name:`literal`,value:`"lg"`},{name:`literal`,value:`"xl"`}]},description:``,defaultValue:{value:`"sm"`,computed:!1}},tone:{required:!1,tsType:{name:`union`,raw:`"neutral" | "brand" | "error" | "warning" | "success" | "info"`,elements:[{name:`literal`,value:`"neutral"`},{name:`literal`,value:`"brand"`},{name:`literal`,value:`"error"`},{name:`literal`,value:`"warning"`},{name:`literal`,value:`"success"`},{name:`literal`,value:`"info"`}]},description:``},appearance:{required:!1,tsType:{name:`union`,raw:`"solid" | "outline" | "ghost" | "transparent"`,elements:[{name:`literal`,value:`"solid"`},{name:`literal`,value:`"outline"`},{name:`literal`,value:`"ghost"`},{name:`literal`,value:`"transparent"`}]},description:``},className:{required:!1,tsType:{name:`string`},description:``},onRemove:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``}}}})))()}function F({children:e}){return(0,L.jsx)(g,{inline:!0,wrap:!0,gap:`sm`,align:`baseline`,children:I.Children.map(e,(e,t)=>(0,L.jsx)(I.Fragment,{children:e},t))})}var I,L;function R(){return(R=e((()=>{I=t(),h(),L=i(),F.__docgenInfo={description:"Контейнер для группы `Badge`, который выстраивает элементы в единый список с предсказуемыми отступами. Используется для компактного вывода набора меток или фильтров.",methods:[],displayName:`BadgeList`,props:{children:{required:!0,tsType:{name:`Array`,elements:[{name:`ReactElement`,elements:[{name:`union`,raw:`typeof Badge | null | undefined | false`,elements:[{name:`Badge`},{name:`null`},{name:`undefined`},{name:`literal`,value:`false`}]}],raw:`ReactElement<typeof Badge | null | undefined | false>`}],raw:`ReactElement<typeof Badge | null | undefined | false>[]`},description:``}}}})))()}export{P as i,R as n,j as r,F as t};
@@ -1,4 +1,4 @@
1
- import{n as e,o as t}from"./rolldown-runtime-C0FnF6B9.js";import{t as n}from"./react-C21x__mS.js";import{n as r}from"./iframe-BnW9ONAs.js";import{a as i,i as a}from"./utils-DUM89eIj.js";import{n as o,t as s}from"./FloatingPopover-CNZzGjfO.js";import{n as c,t as l}from"./ui.module-CiLQZm_L.js";import{a as u,i as d,r as f,t as p}from"./uiClasses-DiXn3Hc-.js";var m,h,g,_,v;function y(){return(y=e((()=>{m=`wLOHwj`,h=`lFsM-Y`,g=`LPob63`,_=`tsaGtv`,v={button:m,iconOnly:h,buttonInner:g,buttonIcon:_}})))()}var b,x,S;function C(){return(C=e((()=>{b=t(n(),1),a(),o(),l(),d(),y(),x=r(),S=(0,b.forwardRef)(function({children:e,disabled:t,className:n,icon:r,iconEnd:a,title:o,variant:l,tone:d,appearance:m,type:h=`button`,"aria-label":g,..._},y){let S=b.Children.count(e)>0,C=!!r&&!S,w=u({variant:l,tone:d,appearance:m,fallbackAppearance:d&&d!==`neutral`?`solid`:`outline`}),T=C?g??o:g,E=(0,x.jsx)(`button`,{..._,ref:y,type:h,disabled:t,"aria-label":T,className:i(c.uiElement,c.uiInputControl,v.button,f(w.tone),p(w.appearance),C?v.iconOnly:``,`textNoWrap`,n??``),children:(0,x.jsxs)(`span`,{className:v.buttonInner,children:[r&&!a&&(0,x.jsx)(`span`,{"aria-hidden":`true`,className:v.buttonIcon,children:r}),S&&(0,x.jsx)(`span`,{className:`flexEllipsis`,children:e}),r&&a&&(0,x.jsx)(`span`,{"aria-hidden":`true`,className:v.buttonIcon,children:r})]})});return o?(0,x.jsx)(s,{placement:`bottom`,tooltip:!0,content:(0,x.jsx)(x.Fragment,{children:o}),children:E}):E}),S.__docgenInfo={description:'Базовая кнопка дизайн-системы для пользовательских действий.\nПоддерживает состояния, tone + appearance, иконки и безопасный `type="button"` по умолчанию.',methods:[],displayName:`Button`,props:{variant:{required:!1,tsType:{name:`union`,raw:`| "transparent"
1
+ import{n as e,o as t}from"./rolldown-runtime-C0FnF6B9.js";import{t as n}from"./react-C21x__mS.js";import{n as r}from"./iframe-CE1ro1AE.js";import{a as i,i as a}from"./utils-DUM89eIj.js";import{n as o,t as s}from"./FloatingPopover-C3zX8ub-.js";import{n as c,t as l}from"./ui.module-CiLQZm_L.js";import{a as u,i as d,r as f,t as p}from"./uiClasses-DiXn3Hc-.js";var m,h,g,_,v;function y(){return(y=e((()=>{m=`wLOHwj`,h=`lFsM-Y`,g=`LPob63`,_=`tsaGtv`,v={button:m,iconOnly:h,buttonInner:g,buttonIcon:_}})))()}var b,x,S;function C(){return(C=e((()=>{b=t(n(),1),a(),o(),l(),d(),y(),x=r(),S=(0,b.forwardRef)(function({children:e,disabled:t,className:n,icon:r,iconEnd:a,title:o,variant:l,tone:d,appearance:m,type:h=`button`,"aria-label":g,..._},y){let S=b.Children.count(e)>0,C=!!r&&!S,w=u({variant:l,tone:d,appearance:m,fallbackAppearance:d&&d!==`neutral`?`solid`:`outline`}),T=C?g??o:g,E=(0,x.jsx)(`button`,{..._,ref:y,type:h,disabled:t,"aria-label":T,className:i(c.uiElement,c.uiInputControl,v.button,f(w.tone),p(w.appearance),C?v.iconOnly:``,`textNoWrap`,n??``),children:(0,x.jsxs)(`span`,{className:v.buttonInner,children:[r&&!a&&(0,x.jsx)(`span`,{"aria-hidden":`true`,className:v.buttonIcon,children:r}),S&&(0,x.jsx)(`span`,{className:`flexEllipsis`,children:e}),r&&a&&(0,x.jsx)(`span`,{"aria-hidden":`true`,className:v.buttonIcon,children:r})]})});return o?(0,x.jsx)(s,{placement:`bottom`,tooltip:!0,content:(0,x.jsx)(x.Fragment,{children:o}),children:E}):E}),S.__docgenInfo={description:'Базовая кнопка дизайн-системы для пользовательских действий.\nПоддерживает состояния, tone + appearance, иконки и безопасный `type="button"` по умолчанию.',methods:[],displayName:`Button`,props:{variant:{required:!1,tsType:{name:`union`,raw:`| "transparent"
2
2
  | "ghost"
3
3
  | "neutral"
4
4
  | "brand"
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-BnW9ONAs.js";import{i as n,r}from"./react-qN2cStNd.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-W-usNnZb.js";import{a as p,i as m,n as h,o as g,r as _,t as v}from"./Button.stories-D8Fw6nud.js";function y(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(s,{of:h,parameters:{atomicCanvas:!0,layout:`padded`,docs:{toc:!0}}}),`
1
+ import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-CE1ro1AE.js";import{i as n,r}from"./react-qN2cStNd.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-DGyM6J7r.js";import{a as p,i as m,n as h,o as g,r as _,t as v}from"./Button.stories-BeJ5wldz.js";function y(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(s,{of:h,parameters:{atomicCanvas:!0,layout:`padded`,docs:{toc:!0}}}),`
2
2
  `,(0,x.jsx)(u,{children:`Button`}),`
3
3
  `,(0,x.jsx)(o,{children:`Базовая action-кнопка дизайн-системы для пользовательских действий, подтверждений и быстрых операций`}),`
4
4
  `,(0,x.jsxs)(t.p,{children:[(0,x.jsx)(t.code,{children:`Button`}),` используется как универсальная кнопка интерфейса: в формах, тулбарах, модальных окнах, карточках, таблицах и компактных icon-only сценариях.`]}),`