@ryuzaki13/react-foundation-ui 3.8.2 → 3.9.0

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 (390) hide show
  1. package/dist/base-table/index.js +1 -1
  2. package/dist/chunks/{TextEditorLexicalClient-U-sTxmCU.js → TextEditorLexicalClient-BQH41FFT.js} +2 -2
  3. package/dist/chunks/{TextEditorLexicalClient-U-sTxmCU.js.map → TextEditorLexicalClient-BQH41FFT.js.map} +1 -1
  4. package/dist/chunks/{base-table-BMesCx6H.js → base-table-9H5YuVvB.js} +2 -2
  5. package/dist/chunks/{base-table-BMesCx6H.js.map → base-table-9H5YuVvB.js.map} +1 -1
  6. package/dist/chunks/{context-menu-CrSXJxQL.js → context-menu-BV8636Ou.js} +2 -2
  7. package/dist/chunks/{context-menu-CrSXJxQL.js.map → context-menu-BV8636Ou.js.map} +1 -1
  8. package/dist/chunks/{date-input-CzCDou4s.js → date-input-B7iG9cA7.js} +2 -2
  9. package/dist/chunks/{date-input-CzCDou4s.js.map → date-input-B7iG9cA7.js.map} +1 -1
  10. package/dist/chunks/{input-CuRK9Vbz.js → input-KXI7o06g.js} +7 -7
  11. package/dist/chunks/input-KXI7o06g.js.map +1 -0
  12. package/dist/chunks/{input-files-B8j6Pb_M.js → input-files-CnBNlJo0.js} +2 -2
  13. package/dist/chunks/{input-files-B8j6Pb_M.js.map → input-files-CnBNlJo0.js.map} +1 -1
  14. package/dist/chunks/{picker-SJXnHwsj.js → picker-DagDe9OH.js} +17 -16
  15. package/dist/chunks/picker-DagDe9OH.js.map +1 -0
  16. package/dist/chunks/select-C-1U-ujV.js +368 -0
  17. package/dist/chunks/select-C-1U-ujV.js.map +1 -0
  18. package/dist/chunks/{table-OvvWkKfy.js → table-BRC1OTyE.js} +2 -2
  19. package/dist/chunks/{table-OvvWkKfy.js.map → table-BRC1OTyE.js.map} +1 -1
  20. package/dist/context-menu/index.js +1 -1
  21. package/dist/date-input/index.js +1 -1
  22. package/dist/date-time-input/index.js +1 -1
  23. package/dist/drop-zone/index.js +1 -1
  24. package/dist/image/index.js +2 -2
  25. package/dist/input/Input.d.ts +2 -2
  26. package/dist/input/Input.d.ts.map +1 -1
  27. package/dist/input/index.js +1 -1
  28. package/dist/input-date-time/index.js +1 -1
  29. package/dist/input-file/index.js +1 -1
  30. package/dist/input-files/index.js +1 -1
  31. package/dist/input-image/index.js +1 -1
  32. package/dist/input-search/index.js +1 -1
  33. package/dist/layout-picker/index.js +1 -1
  34. package/dist/listbox/index.js +1 -1
  35. package/dist/multi-select/index.js +174 -162
  36. package/dist/multi-select/index.js.map +1 -1
  37. package/dist/multi-select/ui/DeprecatedMultiSelect.d.ts +2 -0
  38. package/dist/multi-select/ui/DeprecatedMultiSelect.d.ts.map +1 -1
  39. package/dist/multi-select/ui/MultiSelect.d.ts +3 -0
  40. package/dist/multi-select/ui/MultiSelect.d.ts.map +1 -1
  41. package/dist/multi-select/ui/MultiSelectCore.d.ts +1 -1
  42. package/dist/multi-select/ui/MultiSelectCore.d.ts.map +1 -1
  43. package/dist/multi-select/ui/MultiSelectOptionRow.d.ts.map +1 -1
  44. package/dist/multi-select/ui/ODataDependentSegmentMultiSelect.d.ts.map +1 -1
  45. package/dist/multi-select/ui/ODataMultiSelect.d.ts +5 -2
  46. package/dist/multi-select/ui/ODataMultiSelect.d.ts.map +1 -1
  47. package/dist/multi-select/ui/SerializableMultiSelect.d.ts +3 -1
  48. package/dist/multi-select/ui/SerializableMultiSelect.d.ts.map +1 -1
  49. package/dist/odata-dependent/ODataDependentSegmentControlProps.d.ts +4 -0
  50. package/dist/odata-dependent/ODataDependentSegmentControlProps.d.ts.map +1 -1
  51. package/dist/period-select/PeriodSelect.d.ts +2 -0
  52. package/dist/period-select/PeriodSelect.d.ts.map +1 -1
  53. package/dist/period-select/index.js.map +1 -1
  54. package/dist/picker/PickerField.d.ts +1 -1
  55. package/dist/picker/PickerField.d.ts.map +1 -1
  56. package/dist/picker/PickerTriggerInput.d.ts.map +1 -1
  57. package/dist/picker/index.js +1 -1
  58. package/dist/picker/types.d.ts +2 -0
  59. package/dist/picker/types.d.ts.map +1 -1
  60. package/dist/preset-range-date-input/index.js +1 -1
  61. package/dist/preset-select/PresetSelect.d.ts +2 -0
  62. package/dist/preset-select/PresetSelect.d.ts.map +1 -1
  63. package/dist/preset-select/index.js +1 -1
  64. package/dist/preset-select/index.js.map +1 -1
  65. package/dist/select/ODataDependentSegmentSelect.d.ts.map +1 -1
  66. package/dist/select/ODataSelect.d.ts +3 -1
  67. package/dist/select/ODataSelect.d.ts.map +1 -1
  68. package/dist/select/Select.d.ts +3 -0
  69. package/dist/select/Select.d.ts.map +1 -1
  70. package/dist/select/SerializableSelect.d.ts +3 -1
  71. package/dist/select/SerializableSelect.d.ts.map +1 -1
  72. package/dist/select/index.js +1 -1
  73. package/dist/simple-table/index.js +1 -1
  74. package/dist/slider/index.js +2 -2
  75. package/dist/state-select/StateSelect.d.ts +3 -1
  76. package/dist/state-select/StateSelect.d.ts.map +1 -1
  77. package/dist/state-select/index.js +10 -8
  78. package/dist/state-select/index.js.map +1 -1
  79. package/dist/table/index.js +1 -1
  80. package/dist/table-editor/index.js +1 -1
  81. package/dist/table-sorting/index.js +1 -1
  82. package/dist/tag-input/index.js +1 -1
  83. package/dist/text-editor/index.js +1 -1
  84. package/dist/textarea/index.js +1 -1
  85. package/dist/tree-select/ODataTreeMultiSelect.d.ts +3 -1
  86. package/dist/tree-select/ODataTreeMultiSelect.d.ts.map +1 -1
  87. package/dist/tree-select/ODataTreeSelect.d.ts +3 -1
  88. package/dist/tree-select/ODataTreeSelect.d.ts.map +1 -1
  89. package/dist/tree-select/TreeMultiSelect.d.ts +4 -1
  90. package/dist/tree-select/TreeMultiSelect.d.ts.map +1 -1
  91. package/dist/tree-select/TreePickerBase.d.ts +3 -1
  92. package/dist/tree-select/TreePickerBase.d.ts.map +1 -1
  93. package/dist/tree-select/TreeSelect.d.ts +4 -1
  94. package/dist/tree-select/TreeSelect.d.ts.map +1 -1
  95. package/dist/tree-select/index.js +271 -259
  96. package/dist/tree-select/index.js.map +1 -1
  97. package/dist/tree-table/index.js +1 -1
  98. package/package.json +1 -1
  99. package/storybook-static/assets/{Badge-B06dZKmL.js → Badge-CL58JilM.js} +1 -1
  100. package/storybook-static/assets/{Badge.stories-CNeYsg94.js → Badge.stories-CXFTvV3D.js} +1 -1
  101. package/storybook-static/assets/{BadgeList-B3hAaRiw.js → BadgeList-DLssobfd.js} +1 -1
  102. package/storybook-static/assets/{BarcodeScannerDialog.stories-Ca3bvisG.js → BarcodeScannerDialog.stories-CpMywpKq.js} +1 -1
  103. package/storybook-static/assets/{Button-hFN4j0ap.js → Button-CSbLv1K7.js} +1 -1
  104. package/storybook-static/assets/{Button-BJqsQn21.js → Button-DMAPWgMI.js} +1 -1
  105. package/storybook-static/assets/{Button.stories-Dyqtd2c4.js → Button.stories-CU1kYMvA.js} +1 -1
  106. package/storybook-static/assets/{CalendarView-DSP85608.js → CalendarView-DuCLo_x5.js} +1 -1
  107. package/storybook-static/assets/{CheckBox-DBJMOBLd.js → CheckBox-BBPasWSk.js} +1 -1
  108. package/storybook-static/assets/{CheckBox-BKSwN7GA.js → CheckBox-Bfcdvr2o.js} +1 -1
  109. package/storybook-static/assets/{CheckBox.stories-UkX5D5Eb.js → CheckBox.stories-sGH6EuU4.js} +1 -1
  110. package/storybook-static/assets/{Color-6AOWCN3U-Df1HkQjf.js → Color-6AOWCN3U-5NJhf8m9.js} +1 -1
  111. package/storybook-static/assets/{ContextMenu-CDSgMiHk.js → ContextMenu-CxuYkXjJ.js} +1 -1
  112. package/storybook-static/assets/{ContextMenu-D2Pt6DNp.js → ContextMenu-z6NKmD0I.js} +1 -1
  113. package/storybook-static/assets/{ContextMenu.stories-fkc3HV1F.js → ContextMenu.stories-CI5IW_KX.js} +1 -1
  114. package/storybook-static/assets/{DateInput-CwquHa_L.js → DateInput-A8NURpCX.js} +1 -1
  115. package/storybook-static/assets/{DateInput-BsGJfYad.js → DateInput-BkCbK0M5.js} +1 -1
  116. package/storybook-static/assets/{DateInput.stories-BLzfl_QZ.js → DateInput.stories-DnzeyBpg.js} +1 -1
  117. package/storybook-static/assets/{DateRangePresetSelect-B4XSdHNS.js → DateRangePresetSelect-Bh7qMFTr.js} +1 -1
  118. package/storybook-static/assets/{DateRangePresetSelect-3v588bv9.js → DateRangePresetSelect-CGZkf8Ty.js} +1 -1
  119. package/storybook-static/assets/{DateRangePresetSelect.stories-Bs_7Odrc.js → DateRangePresetSelect.stories-Drm2FCnJ.js} +1 -1
  120. package/storybook-static/assets/{DeprecatedMultiSelect-ZyWVz_vc.js → DeprecatedMultiSelect-8TWWhsLi.js} +1 -1
  121. package/storybook-static/assets/{DeprecatedMultiSelect-DF_Y4SSx.js → DeprecatedMultiSelect-BebYsPmQ.js} +1 -1
  122. package/storybook-static/assets/{DeprecatedMultiSelect.stories-35N0oXql.js → DeprecatedMultiSelect.stories-7iL6YOgh.js} +1 -1
  123. package/storybook-static/assets/{Detail-BCV5krRV.js → Detail-BOZkPwOI.js} +1 -1
  124. package/storybook-static/assets/{Detail.stories-C6oEoTFG.js → Detail.stories-RZALoKmD.js} +1 -1
  125. package/storybook-static/assets/{Dialog-CfEj39yX.js → Dialog-BsslYClj.js} +1 -1
  126. package/storybook-static/assets/{Dialog-VBA5gEFI.js → Dialog-CeukIYpx.js} +1 -1
  127. package/storybook-static/assets/{Dialog.stories-CN8AihLh.js → Dialog.stories-y7MpdGQr.js} +1 -1
  128. package/storybook-static/assets/{Disclosure-Bcq5RoVw.js → Disclosure-CiTnWx5y.js} +1 -1
  129. package/storybook-static/assets/{Disclosure.stories-CTe-G-63.js → Disclosure.stories-UWW9oheF.js} +1 -1
  130. package/storybook-static/assets/{DisclosureGroup-C7pKqTeY.js → DisclosureGroup-CT3BdQXr.js} +1 -1
  131. package/storybook-static/assets/{DocsRenderer-JROSPFPF-BThe4eFL.js → DocsRenderer-JROSPFPF-x50rjjKP.js} +1 -1
  132. package/storybook-static/assets/{DropZone-CaVQvYfq.js → DropZone-DUn9vW2w.js} +1 -1
  133. package/storybook-static/assets/{DropZone-DB8lm86r.js → DropZone-gWSeoAx6.js} +1 -1
  134. package/storybook-static/assets/{DropZone.stories-CTpZzsQo.js → DropZone.stories-CmaVl9to.js} +1 -1
  135. package/storybook-static/assets/{DropdownMenu-Dbf79PmB.js → DropdownMenu-DkeS8gOF.js} +1 -1
  136. package/storybook-static/assets/{ExpandableActionPanel-BqLqYxoP.js → ExpandableActionPanel-DdqWZDe2.js} +1 -1
  137. package/storybook-static/assets/{ExpandableActionPanel.stories-Csy8zVZ0.js → ExpandableActionPanel.stories-CA-dpb07.js} +1 -1
  138. package/storybook-static/assets/{Flex-CdhL6qQJ.js → Flex-DpQpF63N.js} +1 -1
  139. package/storybook-static/assets/{Flex.stories-C7lLfAlI.js → Flex.stories-DtlKiJno.js} +1 -1
  140. package/storybook-static/assets/{FlexContainer-DpyN062a.js → FlexContainer-C1d63I55.js} +1 -1
  141. package/storybook-static/assets/{FlexItem-Ca9aW4Wg.js → FlexItem-DsoW-br3.js} +1 -1
  142. package/storybook-static/assets/{FloatingPopover-DRFncdhB.js → FloatingPopover-7MpESGU4.js} +1 -1
  143. package/storybook-static/assets/{FormattedTableCell-C38FonYG.js → FormattedTableCell-B4RRbSFK.js} +1 -1
  144. package/storybook-static/assets/{Grid-CxnlxtK1.js → Grid-DsCUaz46.js} +1 -1
  145. package/storybook-static/assets/{Grid-DtOdlaGa.js → Grid-eqZxtRIA.js} +1 -1
  146. package/storybook-static/assets/{Grid.stories-DOnfFyZS.js → Grid.stories-DAGg0GWi.js} +1 -1
  147. package/storybook-static/assets/{GridContainer-DF2QluGb.js → GridContainer-B9JaLUGE.js} +1 -1
  148. package/storybook-static/assets/{ImageCropper.stories-3nvUDz2T.js → ImageCropper.stories-W76XOOMv.js} +1 -1
  149. package/storybook-static/assets/{ImageRenderer-BbHUOlNk.js → ImageRenderer-DYg7BkPO.js} +1 -1
  150. package/storybook-static/assets/{ImageRenderer.stories-Dn_Zb_xb.js → ImageRenderer.stories-rgJV0OBp.js} +1 -1
  151. package/storybook-static/assets/{ImageView.stories-t-INtYgg.js → ImageView.stories-D9h6sg3j.js} +1 -1
  152. package/storybook-static/assets/{ImageViewer.stories-BI-dVB_h.js → ImageViewer.stories-Bd0WJOp1.js} +2 -2
  153. package/storybook-static/assets/{ImageViewerRuntime-Bxu4vpqB.js → ImageViewerRuntime-DOjvjbv0.js} +1 -1
  154. package/storybook-static/assets/Input-7N70tL0u.js +3 -0
  155. package/storybook-static/assets/{Input-D_T7Zxeh.js → Input-BxrxwNyD.js} +1 -1
  156. package/storybook-static/assets/{Input.stories-CRYZ9NRb.js → Input.stories-Df1j802b.js} +1 -1
  157. package/storybook-static/assets/{InputDateTime-B6eUN2mO.js → InputDateTime-UdemHZXV.js} +1 -1
  158. package/storybook-static/assets/{InputDateTime.stories-DVzgiyHI.js → InputDateTime.stories-yRwAe5_5.js} +1 -1
  159. package/storybook-static/assets/{InputFile-Dw6qdcEg.js → InputFile-5LpFR1Fq.js} +1 -1
  160. package/storybook-static/assets/{InputFile-LGyphRz0.js → InputFile-DDhf7A_J.js} +1 -1
  161. package/storybook-static/assets/{InputFile.stories-DPwLFjq_.js → InputFile.stories-BVDT-BAx.js} +1 -1
  162. package/storybook-static/assets/{InputFiles-BZt_WuRK.js → InputFiles-CgM2BwNO.js} +1 -1
  163. package/storybook-static/assets/{InputFiles-CH8wkV90.js → InputFiles-D3CPIXiK.js} +1 -1
  164. package/storybook-static/assets/{InputFiles.stories-C0ueJhuS.js → InputFiles.stories-XMHBA9Fn.js} +1 -1
  165. package/storybook-static/assets/{InputFilesList-964BaeSs.js → InputFilesList-DSivq9iT.js} +1 -1
  166. package/storybook-static/assets/{InputImage-Dzfzo9rQ.js → InputImage-BG_QyAh3.js} +1 -1
  167. package/storybook-static/assets/{InputImage-DUHw2isv.js → InputImage-CY0A9Xz-.js} +1 -1
  168. package/storybook-static/assets/{InputImage.stories-Cicea7iU.js → InputImage.stories-DiGXytZU.js} +1 -1
  169. package/storybook-static/assets/{InteractiveComponents-4GIVWbuZ.js → InteractiveComponents-Bf9KitNR.js} +5 -5
  170. package/storybook-static/assets/{InteractiveComponents.stories-B9SOS3j7.js → InteractiveComponents.stories-TwALUGGN.js} +1 -1
  171. package/storybook-static/assets/{LayoutPicker-xdZ95Vp5.js → LayoutPicker-BLrNe8g_.js} +1 -1
  172. package/storybook-static/assets/{LayoutPicker-DQorLWY6.js → LayoutPicker-MhA9N4WI.js} +1 -1
  173. package/storybook-static/assets/{LayoutPicker.stories-DsyPQBKR.js → LayoutPicker.stories-BCME5Ogr.js} +1 -1
  174. package/storybook-static/assets/{Listbox-JQZyzNGj.js → Listbox-B8F2xWvs.js} +1 -1
  175. package/storybook-static/assets/{Listbox-DjPjGgR4.js → Listbox-y_3VijHU.js} +1 -1
  176. package/storybook-static/assets/{Listbox.stories-BARapjFC.js → Listbox.stories-mp0p0NpO.js} +1 -1
  177. package/storybook-static/assets/{Modal-BrVR9emD.js → Modal-DgEV0vBs.js} +1 -1
  178. package/storybook-static/assets/{Modal-DXQwuOgk.js → Modal-qIsW7BkG.js} +1 -1
  179. package/storybook-static/assets/{Modal.stories-hXhWq-vm.js → Modal.stories-CQ-Hn4GK.js} +1 -1
  180. package/storybook-static/assets/{ModalManagerProvider-suT_9w0p.js → ModalManagerProvider-DEoq4q_O.js} +1 -1
  181. package/storybook-static/assets/MultiSelect-D-6XHQUG.js +79 -0
  182. package/storybook-static/assets/{MultiSelect-fOfuxSkP.js → MultiSelect-PGooEkAK.js} +1 -1
  183. package/storybook-static/assets/MultiSelect.stories-B0JzMViN.js +81 -0
  184. package/storybook-static/assets/MultiSelectCore-B0VbnEBc.js +3 -0
  185. package/storybook-static/assets/{NoData-DXZIMdxE.js → NoData-DCuuvSoD.js} +1 -1
  186. package/storybook-static/assets/{NotificationsHost-D9vUJSmY.js → NotificationsHost-CWqG91Yh.js} +1 -1
  187. package/storybook-static/assets/{NotificationsHost.stories-7XhqJWiP.js → NotificationsHost.stories-CEp-AppV.js} +1 -1
  188. package/storybook-static/assets/{ODataMultiSelect-DfvlaKWI.js → ODataMultiSelect-CwVneYzi.js} +1 -1
  189. package/storybook-static/assets/{ODataMultiSelect.stories-CJke2JsH.js → ODataMultiSelect.stories-BRnVOZsK.js} +1 -1
  190. package/storybook-static/assets/{ODataSelect-DCUvbk6e.js → ODataSelect-DyKTFqk7.js} +1 -1
  191. package/storybook-static/assets/ODataSelect.stories-B-3GaeU4.js +148 -0
  192. package/storybook-static/assets/{ODataTreeMultiSelect-CNgmTWTi.js → ODataTreeMultiSelect-16xNi9qI.js} +1 -1
  193. package/storybook-static/assets/{ODataTreeMultiSelect.stories-DLwVF_W4.js → ODataTreeMultiSelect.stories-DI9tH2qD.js} +1 -1
  194. package/storybook-static/assets/{ODataTreeSelect-B2wJG9wg.js → ODataTreeSelect-Dk262plK.js} +1 -1
  195. package/storybook-static/assets/{ODataTreeSelect.stories-_14s2U5T.js → ODataTreeSelect.stories-DfaL0dci.js} +1 -1
  196. package/storybook-static/assets/{OneStepScroller-BZNWq4hh.js → OneStepScroller-DI8qlm5c.js} +1 -1
  197. package/storybook-static/assets/{Option-DYZm6WvJ.js → Option-CG3bU2cY.js} +1 -1
  198. package/storybook-static/assets/{OptionButton-B5CdJfBO.js → OptionButton-DF0E8aU5.js} +1 -1
  199. package/storybook-static/assets/{OptionContent-ZdQ06Knj.js → OptionContent-BZ3FiJQ4.js} +1 -1
  200. package/storybook-static/assets/{OptionContentContainer-v8Se53ed.js → OptionContentContainer-CyI5IfqU.js} +1 -1
  201. package/storybook-static/assets/{PeriodSelect-DkmbIdwr.js → PeriodSelect-_gAbt3E6.js} +1 -1
  202. package/storybook-static/assets/{PeriodSelect-C4QfbGQU.js → PeriodSelect-uR-Xk4vQ.js} +1 -1
  203. package/storybook-static/assets/{PeriodSelect.stories-m3_qCC0x.js → PeriodSelect.stories-D-Lp7QtA.js} +1 -1
  204. package/storybook-static/assets/PickerField-CByAoAAO.js +1 -0
  205. package/storybook-static/assets/{PickerTriggerActions-DZ_Uxbu-.js → PickerTriggerActions-CYM-UvRz.js} +1 -1
  206. package/storybook-static/assets/{Popover-BeQ1jGma.js → Popover-CRcVoLur.js} +1 -1
  207. package/storybook-static/assets/{Popover-ChdfpaFY.js → Popover-CdnsB1ss.js} +1 -1
  208. package/storybook-static/assets/{Popover.stories-C_rBFhXq.js → Popover.stories-Dxdt7Jc5.js} +1 -1
  209. package/storybook-static/assets/{PresetRangeDateInput-CtkAGYcs.js → PresetRangeDateInput-BQkK3Nmd.js} +1 -1
  210. package/storybook-static/assets/{PresetRangeDateInput-D6OerGd6.js → PresetRangeDateInput-BmAGj8ye.js} +1 -1
  211. package/storybook-static/assets/{PresetRangeDateInput.stories-BXuuCq6s.js → PresetRangeDateInput.stories-CUIwCB6T.js} +1 -1
  212. package/storybook-static/assets/{PresetSelect-C_0i_v3W.js → PresetSelect-C7HG9CjN.js} +2 -2
  213. package/storybook-static/assets/{README-CR6ryhhR.js → README-9DTI05kd.js} +1 -1
  214. package/storybook-static/assets/{README-DFIbQUmS.js → README-B-ihyEBx.js} +1 -1
  215. package/storybook-static/assets/{README-E3dppiFa.js → README-B0iHgO_3.js} +1 -1
  216. package/storybook-static/assets/{README-CdLSG5uT.js → README-B1GSwjas.js} +1 -1
  217. package/storybook-static/assets/{README-B11eBTD2.js → README-BAjs7T_d.js} +1 -1
  218. package/storybook-static/assets/{README-YACwvmpm.js → README-BEYMpavt.js} +1 -1
  219. package/storybook-static/assets/{README-Df2Boqop.js → README-BL0-uTlP.js} +1 -1
  220. package/storybook-static/assets/{README-BIu8bA8O.js → README-BR8bdUjV.js} +1 -1
  221. package/storybook-static/assets/{README-BevvzKXd.js → README-BUnl1FiN.js} +1 -1
  222. package/storybook-static/assets/{README-BvalAebe.js → README-BbUo3mGT.js} +1 -1
  223. package/storybook-static/assets/{README-CdC-Ih1N.js → README-Bdir2bPK.js} +1 -1
  224. package/storybook-static/assets/{README-CkqO5hqM.js → README-BmwSZfOQ.js} +1 -1
  225. package/storybook-static/assets/{README-CQLFWFWd.js → README-BquP2lux.js} +1 -1
  226. package/storybook-static/assets/{README-BID-FbiL.js → README-BurB0dhj.js} +1 -1
  227. package/storybook-static/assets/{README-8iY1vxIF.js → README-ByIhL9zr.js} +1 -1
  228. package/storybook-static/assets/{README-BieFJ3W_.js → README-ByT9u_7g.js} +1 -1
  229. package/storybook-static/assets/{README-DEsuR87b.js → README-C41zKsq6.js} +1 -1
  230. package/storybook-static/assets/{README-SxoTUUoq.js → README-C5-oc7fP.js} +1 -1
  231. package/storybook-static/assets/{README-C_7Cdvro.js → README-C7NhXX-n.js} +1 -1
  232. package/storybook-static/assets/{README-BY89ids7.js → README-C8jcwgeL.js} +1 -1
  233. package/storybook-static/assets/{README-DkShUtZp.js → README-CNnGqdkH.js} +1 -1
  234. package/storybook-static/assets/{README-DgYr386S.js → README-CQlujiXR.js} +1 -1
  235. package/storybook-static/assets/{README-Bq-8Tpup.js → README-CTBkJ27k.js} +1 -1
  236. package/storybook-static/assets/{README-Baulk7Ly.js → README-CTGZXXVP.js} +1 -1
  237. package/storybook-static/assets/{README-SGW-sjaY.js → README-CUghXL33.js} +1 -1
  238. package/storybook-static/assets/{README-DPt2egzz.js → README-CiJ5wkhQ.js} +1 -1
  239. package/storybook-static/assets/{README-CwSTY83v.js → README-CoENtXo_.js} +1 -1
  240. package/storybook-static/assets/{README-BcLFiFzF.js → README-CoQeAVdv.js} +1 -1
  241. package/storybook-static/assets/{README-DrVnvpal.js → README-CpJmZHQJ.js} +1 -1
  242. package/storybook-static/assets/{README-DxGE7LaW.js → README-CtZBJdo2.js} +1 -1
  243. package/storybook-static/assets/{README-DoZmc9Z7.js → README-CvP9yRMR.js} +1 -1
  244. package/storybook-static/assets/{README-BavbgADt.js → README-D-urpNSn.js} +1 -1
  245. package/storybook-static/assets/{README-B-FPV2eT.js → README-DAH3lVWd.js} +1 -1
  246. package/storybook-static/assets/{README-BOPlsYcG.js → README-DCWk-Vga.js} +1 -1
  247. package/storybook-static/assets/{README-CvKP-pox.js → README-DMZYAdN0.js} +1 -1
  248. package/storybook-static/assets/{README-DKm_GE0L.js → README-DNrPuueH.js} +1 -1
  249. package/storybook-static/assets/{README-Cq5HM3sp.js → README-DQ1aeQ_i.js} +1 -1
  250. package/storybook-static/assets/{README-Daz1cP3j.js → README-DTMZk60G.js} +1 -1
  251. package/storybook-static/assets/{README-C5PUujUh.js → README-DY7lgi4q.js} +1 -1
  252. package/storybook-static/assets/{README-BPSzJf7K.js → README-DaaS2c7L.js} +1 -1
  253. package/storybook-static/assets/{README-Bpz4DuxV.js → README-De3j71sQ.js} +1 -1
  254. package/storybook-static/assets/{README-DokUCzu7.js → README-DevTRU4A.js} +1 -1
  255. package/storybook-static/assets/{README-oxDM2nWk.js → README-DfRan6KR.js} +1 -1
  256. package/storybook-static/assets/{README-zZXmEFnb.js → README-Dhptn6UE.js} +1 -1
  257. package/storybook-static/assets/{README-DIZEcosx.js → README-DxTRj-9a.js} +1 -1
  258. package/storybook-static/assets/{README-DHqq04o_.js → README-DyKegKG_.js} +1 -1
  259. package/storybook-static/assets/{README-DC0Q97-o.js → README-KCmlmH_Z.js} +1 -1
  260. package/storybook-static/assets/{README-BZma__4T.js → README-VNB_Dj5F.js} +1 -1
  261. package/storybook-static/assets/{README-BGsCPA3s.js → README-_8pxMMC7.js} +1 -1
  262. package/storybook-static/assets/{README-sW5h0lxy.js → README-j-Czw7ww.js} +1 -1
  263. package/storybook-static/assets/{README-D_4AwS6Z.js → README-n4utUGcX.js} +1 -1
  264. package/storybook-static/assets/{README-DnNTN38s.js → README-xrMkjHIm.js} +1 -1
  265. package/storybook-static/assets/{README-BrPD8cUu.js → README-zlaX5PMG.js} +1 -1
  266. package/storybook-static/assets/{RadioButton-Cl02_0Z6.js → RadioButton-CDIyYuS9.js} +1 -1
  267. package/storybook-static/assets/{RadioButton--NyRUoxT.js → RadioButton-DV8K96H6.js} +1 -1
  268. package/storybook-static/assets/{RadioButton.stories-CN09jcgC.js → RadioButton.stories-CRNqKsyz.js} +1 -1
  269. package/storybook-static/assets/{RadioGroup-CQI1sWRU.js → RadioGroup-BnYFRvmn.js} +1 -1
  270. package/storybook-static/assets/{RadioGroup-4Unj8AZZ.js → RadioGroup-CIIw962S.js} +1 -1
  271. package/storybook-static/assets/{RadioGroup.stories-DeL_043K.js → RadioGroup.stories-K4AidbLa.js} +1 -1
  272. package/storybook-static/assets/{Scrollable-12P7ZTKA.js → Scrollable-BI1k9ogH.js} +1 -1
  273. package/storybook-static/assets/{Scrollable-CU0oRauv.js → Scrollable-DAghtYuE.js} +1 -1
  274. package/storybook-static/assets/{Scrollable.stories-D8zzXzdr.js → Scrollable.stories-B6Doakiv.js} +1 -1
  275. package/storybook-static/assets/Select-BNHTGJqG.js +66 -0
  276. package/storybook-static/assets/Select-BlnKV8rc.js +12 -0
  277. package/storybook-static/assets/Select.stories-DZPAoL4J.js +86 -0
  278. package/storybook-static/assets/{Separator-g1czAG54.js → Separator-BCUzEQRV.js} +1 -1
  279. package/storybook-static/assets/{Separator-m_74O3an.js → Separator-CiETy9yM.js} +1 -1
  280. package/storybook-static/assets/{Separator.stories-DzcknzMf.js → Separator.stories-DTzurpM_.js} +1 -1
  281. package/storybook-static/assets/{SerializableSelect-BoTN8F9L.js → SerializableSelect-CnQurr7F.js} +1 -1
  282. package/storybook-static/assets/SerializableSelect.stories-qJaV_fjJ.js +73 -0
  283. package/storybook-static/assets/{ShimmerText-G-ZELFDr.js → ShimmerText-I292TqXa.js} +1 -1
  284. package/storybook-static/assets/{ShimmerText.stories-B1iRpPX7.js → ShimmerText.stories-AKqXqp1k.js} +1 -1
  285. package/storybook-static/assets/{SingleDateTimeInput-B8xEwaHj.js → SingleDateTimeInput-BrNi93tH.js} +1 -1
  286. package/storybook-static/assets/{SingleDateTimeInput-03cAT8aU.js → SingleDateTimeInput-DSn0vaW-.js} +1 -1
  287. package/storybook-static/assets/{SingleDateTimeInput.stories-DT1Blk15.js → SingleDateTimeInput.stories-C910kkYc.js} +1 -1
  288. package/storybook-static/assets/{Slider-BZl811z5.js → Slider-CXA5Zwku.js} +1 -1
  289. package/storybook-static/assets/{Slider-BjjfNohp.js → Slider-DO460-pY.js} +1 -1
  290. package/storybook-static/assets/{Slider.stories-XxtceDa6.js → Slider.stories-B874XxeK.js} +1 -1
  291. package/storybook-static/assets/{SliderInput-VBhTlU1v.js → SliderInput-DTidinPI.js} +1 -1
  292. package/storybook-static/assets/{SliderInput-DOXn1-j9.js → SliderInput-DsV8o7Yy.js} +1 -1
  293. package/storybook-static/assets/{SliderInput.stories-C8FTjyN2.js → SliderInput.stories-CDWNO90y.js} +1 -1
  294. package/storybook-static/assets/{Sortable-Wetn-8JF.js → Sortable-CML34YIF.js} +1 -1
  295. package/storybook-static/assets/{Sortable.stories-GXQAUY0v.js → Sortable.stories-C-_fvnHM.js} +1 -1
  296. package/storybook-static/assets/{Splitter-SbAjiEDw.js → Splitter-BcuA2qce.js} +1 -1
  297. package/storybook-static/assets/{Splitter.stories-DSHbG6nu.js → Splitter.stories-CA0-L_Ja.js} +1 -1
  298. package/storybook-static/assets/StateSelect--FDEb4-v.js +4 -0
  299. package/storybook-static/assets/{StateSelect-DbLmSOtB.js → StateSelect-B23bb_PO.js} +1 -1
  300. package/storybook-static/assets/{StateSelect.stories-FV0gIn1C.js → StateSelect.stories-CEVPThtC.js} +1 -1
  301. package/storybook-static/assets/{StatusIndicator-DwCOyHwS.js → StatusIndicator-BbTCS7Ku.js} +1 -1
  302. package/storybook-static/assets/{StatusIndicator.stories-DHTONWO2.js → StatusIndicator.stories-BIps_Ecm.js} +1 -1
  303. package/storybook-static/assets/{StringToggle.stories-BiGLcqug.js → StringToggle.stories-vhOfzslq.js} +1 -1
  304. package/storybook-static/assets/{Switch-Dcra3cbk.js → Switch-DibS4nSc.js} +1 -1
  305. package/storybook-static/assets/{Switch-BUzbRxCA.js → Switch-jJgwtWFK.js} +1 -1
  306. package/storybook-static/assets/{Switch.stories-Dxg8MW1D.js → Switch.stories-Cvky3KQz.js} +1 -1
  307. package/storybook-static/assets/{Table-OdoX0oH-.js → Table-DcNGLEI6.js} +1 -1
  308. package/storybook-static/assets/{Table.stories-EZ0nZUKx.js → Table.stories-DbEzudxD.js} +1 -1
  309. package/storybook-static/assets/{TableEditor.stories-BUiI0gPl.js → TableEditor.stories-Be9nCkds.js} +1 -1
  310. package/storybook-static/assets/{Tabs-BQbyU1MS.js → Tabs-CTL4MnkZ.js} +1 -1
  311. package/storybook-static/assets/{Tabs.stories-COyWiGIo.js → Tabs.stories-CIVbz7kW.js} +1 -1
  312. package/storybook-static/assets/{TabsBox-cTjD2iLY.js → TabsBox-C9g1p4du.js} +1 -1
  313. package/storybook-static/assets/{TagInput-Chbcbebn.js → TagInput-DuJLeiyT.js} +1 -1
  314. package/storybook-static/assets/{TagInput.stories-DFM2c9Kz.js → TagInput.stories-BLVFWr-T.js} +1 -1
  315. package/storybook-static/assets/{Text-fcFYdww4.js → Text-Cr_TUUgL.js} +1 -1
  316. package/storybook-static/assets/{Textarea-DYaPJMAi.js → Textarea-BImI6Q6v.js} +1 -1
  317. package/storybook-static/assets/{Textarea-PCGEcekt.js → Textarea-DGaanGLG.js} +1 -1
  318. package/storybook-static/assets/{Textarea.stories-0pwru7oa.js → Textarea.stories-DvQ2dDNh.js} +1 -1
  319. package/storybook-static/assets/{TimePanel-Di32Xql0.js → TimePanel-Cg2G5Hab.js} +1 -1
  320. package/storybook-static/assets/{TimePanel.stories-CG1uwyoq.js → TimePanel.stories-qy5mb3YN.js} +1 -1
  321. package/storybook-static/assets/{Toggle-C2AKl6hW.js → Toggle-CroC7YOK.js} +1 -1
  322. package/storybook-static/assets/{Toggle-CvSWEQ4M.js → Toggle-Dj8Ic_Ak.js} +1 -1
  323. package/storybook-static/assets/{Toggle.stories-CNLH3MwF.js → Toggle.stories-CmyyubM8.js} +1 -1
  324. package/storybook-static/assets/TreeMultiSelect-BHNmPW50.js +1 -0
  325. package/storybook-static/assets/TreeMultiSelect-DBQYLjnA.js +22 -0
  326. package/storybook-static/assets/TreeMultiSelect.stories-BNsE1zgF.js +68 -0
  327. package/storybook-static/assets/TreePickerBase-ZEBy3EVT.js +76 -0
  328. package/storybook-static/assets/TreeSelect-T7G2pkyK.js +1 -0
  329. package/storybook-static/assets/TreeSelect-aiPeW2uJ.js +19 -0
  330. package/storybook-static/assets/TreeSelect.stories-E6ObkYJe.js +40 -0
  331. package/storybook-static/assets/{TreeTable-dqFRn4rf.js → TreeTable-C0ORe5Pe.js} +1 -1
  332. package/storybook-static/assets/{TreeTable.stories-D01CV6ke.js → TreeTable.stories-PtGT_1X5.js} +1 -1
  333. package/storybook-static/assets/{blocks-l-Hapy_a.js → blocks-DR4JL0hD.js} +3 -3
  334. package/storybook-static/assets/{check-BlcnYTcv.js → check-PtABqMc1.js} +1 -1
  335. package/storybook-static/assets/{chevron-down-ibZ8XCP_.js → chevron-down-BaujB0G_.js} +1 -1
  336. package/storybook-static/assets/{chevron-left-DtKjRUvG.js → chevron-left-C1SZ4PrE.js} +1 -1
  337. package/storybook-static/assets/{chevron-right-XdMObkvg.js → chevron-right-CfCjHN8b.js} +1 -1
  338. package/storybook-static/assets/{chunk-W22LQPXL-wJIlOpe4.js → chunk-W22LQPXL-Cis7lFT9.js} +1 -1
  339. package/storybook-static/assets/{circle-alert-fSVH0sLX.js → circle-alert-Mymt-6wl.js} +1 -1
  340. package/storybook-static/assets/{circle-check-HnZapKSX.js → circle-check-DzqMvzJX.js} +1 -1
  341. package/storybook-static/assets/{components-Dopdhy5B.js → components-Do91qDh3.js} +3 -3
  342. package/storybook-static/assets/{contextMenu-p7HEDKnK.js → contextMenu-8NKKgKoy.js} +1 -1
  343. package/storybook-static/assets/{download-LLWCDvnc.js → download-Cn6H3Bnv.js} +1 -1
  344. package/storybook-static/assets/{floating-ui.react-DkDKExQb.js → floating-ui.react-BFqa49jG.js} +1 -1
  345. package/storybook-static/assets/{foundationApi-B8VKqVQz.js → foundationApi-CChPwNx-.js} +1 -1
  346. package/storybook-static/assets/{foundationLib-B1vp8Ip3.js → foundationLib-ClEyfTpa.js} +1 -1
  347. package/storybook-static/assets/{hooks-B4xUzofC.js → hooks-DUKyfcb_.js} +1 -1
  348. package/storybook-static/assets/{iframe-BhhO4T-j.js → iframe-1Nw_zWMi.js} +3 -3
  349. package/storybook-static/assets/iframe-BgBwFMGW.js +1 -0
  350. package/storybook-static/assets/{info-De9uqULy.js → info-DMI56qGy.js} +1 -1
  351. package/storybook-static/assets/{odata-D0RLpe5w.js → odata-D9M3xPIL.js} +1 -1
  352. package/storybook-static/assets/{odataStoryFixtures-D1_TjOS9.js → odataStoryFixtures-eHJgW7OK.js} +1 -1
  353. package/storybook-static/assets/{react-Bs97eQVC.js → react-DidV4ORc.js} +1 -1
  354. package/storybook-static/assets/{refresh-cw-gGwrfTvn.js → refresh-cw-B1ChlhvT.js} +1 -1
  355. package/storybook-static/assets/{settings-2--yrC02pK.js → settings-2-BxwqnB9r.js} +1 -1
  356. package/storybook-static/assets/{sortable-CNrgxywp.js → sortable-DMBM69Jm.js} +1 -1
  357. package/storybook-static/assets/{syntaxhighlighter-QEQV7K2Y-hPf5f2N_.js → syntaxhighlighter-QEQV7K2Y-BJZNAUo-.js} +1 -1
  358. package/storybook-static/assets/{trash-2-V9XKHLPP.js → trash-2-B768_PZU.js} +1 -1
  359. package/storybook-static/assets/{triangle-alert-B_Mx5YAP.js → triangle-alert-B8H-k2Bq.js} +1 -1
  360. package/storybook-static/assets/{useODataSelectBase-C77fkd4B.js → useODataSelectBase-BKAZcf4R.js} +1 -1
  361. package/storybook-static/assets/{useODataTreeData-DS0b1v0J.js → useODataTreeData-Bxlcmpg8.js} +1 -1
  362. package/storybook-static/assets/{usePickerQuery--63RUk1i.js → usePickerQuery-DJj2HmX9.js} +1 -1
  363. package/storybook-static/assets/{usePickerTriggerController-C-h_jIr8.js → usePickerTriggerController-CiD33ccS.js} +2 -2
  364. package/storybook-static/assets/{x-Cw8s8Zy_.js → x-Dt9SO3SL.js} +1 -1
  365. package/storybook-static/iframe.html +2 -2
  366. package/storybook-static/index.json +1 -1
  367. package/storybook-static/project.json +1 -1
  368. package/dist/chunks/input-CuRK9Vbz.js.map +0 -1
  369. package/dist/chunks/picker-SJXnHwsj.js.map +0 -1
  370. package/dist/chunks/select--oIrv7SC.js +0 -357
  371. package/dist/chunks/select--oIrv7SC.js.map +0 -1
  372. package/storybook-static/assets/Input-Ekyq4bpy.js +0 -3
  373. package/storybook-static/assets/MultiSelect-Bx6fTyE5.js +0 -76
  374. package/storybook-static/assets/MultiSelect.stories-DCZxBuNb.js +0 -64
  375. package/storybook-static/assets/MultiSelectCore-C-vizvta.js +0 -3
  376. package/storybook-static/assets/ODataSelect.stories-BZ1gic7o.js +0 -148
  377. package/storybook-static/assets/PickerField-2ulMAWeY.js +0 -1
  378. package/storybook-static/assets/Select-2xWkmvAV.js +0 -63
  379. package/storybook-static/assets/Select-DvlCWgQT.js +0 -12
  380. package/storybook-static/assets/Select.stories-CNatkE_7.js +0 -69
  381. package/storybook-static/assets/SerializableSelect.stories-CCp43_I0.js +0 -73
  382. package/storybook-static/assets/StateSelect-BySRh6uF.js +0 -4
  383. package/storybook-static/assets/TreeMultiSelect-BhfPQ7--.js +0 -20
  384. package/storybook-static/assets/TreeMultiSelect-X0257uB0.js +0 -1
  385. package/storybook-static/assets/TreeMultiSelect.stories-DfY3UKKn.js +0 -60
  386. package/storybook-static/assets/TreePickerBase-DJUnLMct.js +0 -76
  387. package/storybook-static/assets/TreeSelect-B35UB1Y1.js +0 -17
  388. package/storybook-static/assets/TreeSelect-CGfFmb1l.js +0 -1
  389. package/storybook-static/assets/TreeSelect.stories-Si06PsvL.js +0 -32
  390. package/storybook-static/assets/iframe-CkawuUUj.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/multi-select/lib/materializeMultiSelectOptions.ts","../../src/multi-select/lib/adaptLegacyMultiSelectContext.ts","../../src/multi-select/lib/resolveLegacyMultiSelectTextKey.ts","../../src/multi-select/lib/multiSelectSelection.ts","../../src/multi-select/ui/MultiSelect.module.scss","../../src/multi-select/lib/createMultiSelectOptionSections.ts","../../src/multi-select/ui/MultiSelectOptionRow.tsx","../../src/multi-select/ui/MultiSelectOptionList.tsx","../../src/multi-select/ui/MultiSelectOptionSkeleton.tsx","../../src/multi-select/ui/MultiSelectOptionsWrapper.tsx","../../src/multi-select/ui/MultiSelectCore.tsx","../../src/multi-select/ui/DeprecatedMultiSelect.tsx","../../src/multi-select/ui/MultiSelect.tsx","../../src/multi-select/model/useODataMultiSelect.ts","../../src/multi-select/ui/ODataMultiSelect.tsx","../../src/multi-select/ui/ODataDependentSegmentMultiSelect.tsx","../../src/multi-select/ui/ODataDependentMultiSelect.tsx","../../src/multi-select/ui/SerializableMultiSelect.tsx"],"sourcesContent":["/**\n * Создаёт mutable-снимок readonly options. Сохранение ссылки включается только\n * legacy-адаптером, чей опубликованный callback-контракт исторически mutable.\n */\nexport function materializeMultiSelectOptions<TOption>(options: readonly TOption[], preserveArrayReference = false): TOption[] {\n\tif (preserveArrayReference && Array.isArray(options)) {\n\t\treturn options;\n\t}\n\n\treturn [...options];\n}\n","import { type CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata-service\";\n\nimport { type DeprecatedMultiSelectOptionDisableContext, type DeprecatedMultiSelectRenderContext } from \"../ui/legacyMultiSelectTypes\";\nimport {\n\ttype MultiSelectOptionDisableContext,\n\ttype MultiSelectRenderContext as GenericMultiSelectRenderContext\n} from \"../ui/multiSelectTypes\";\n\nimport { materializeMultiSelectOptions } from \"./materializeMultiSelectOptions\";\n\n/** Преобразует generic render-context в опубликованный legacy-контракт. */\nexport function adaptLegacyMultiSelectRenderContext(\n\tcontext: GenericMultiSelectRenderContext<CollectionItem>\n): DeprecatedMultiSelectRenderContext {\n\treturn {\n\t\tselectedItems: materializeMultiSelectOptions(context.selectedOptions, true),\n\t\tcommittedSelectedItems: materializeMultiSelectOptions(context.committedSelectedOptions, true),\n\t\tavailableItems: materializeMultiSelectOptions(context.availableOptions, true),\n\t\tquery: context.query,\n\t\topen: context.open,\n\t\tclearSelection: context.clearSelection,\n\t\tselectAll: context.selectAll,\n\t\tdeselectAll: context.deselectAll\n\t};\n}\n\n/** Преобразует generic disable-context без изменения identity выбранных элементов. */\nexport function adaptLegacyMultiSelectOptionDisableContext(\n\tcontext: MultiSelectOptionDisableContext<CollectionItem>\n): DeprecatedMultiSelectOptionDisableContext {\n\treturn {\n\t\tselectedItems: materializeMultiSelectOptions(context.selectedOptions, true),\n\t\tcommittedSelectedItems: materializeMultiSelectOptions(context.committedSelectedOptions, true),\n\t\tselectedKeys: context.selectedKeys,\n\t\topen: context.open\n\t};\n}\n","import { type CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata-service\";\n\n/** Сохраняет исходное правило вывода textKey для legacy code/text API. */\nexport function resolveLegacyMultiSelectTextKey(items: readonly CollectionItem[], codeKey: string, textKey?: string) {\n\tif (textKey) {\n\t\treturn textKey;\n\t}\n\n\tconst sampleItem = items[0];\n\n\tif (!sampleItem) {\n\t\treturn codeKey;\n\t}\n\n\treturn Object.keys(sampleItem).find((key) => key !== codeKey) ?? codeKey;\n}\n","import { type MultiSelectOptionKey } from \"../ui/multiSelectTypes\";\n\n/** Сравнивает наборы выбора по identity опций, не связывая их с object reference. */\nexport function areMultiSelectSelectionsEqual<TOption>(\n\tleft: readonly TOption[],\n\tright: readonly TOption[],\n\tgetOptionKey: (option: TOption) => MultiSelectOptionKey\n): boolean {\n\tif (left.length !== right.length) {\n\t\treturn false;\n\t}\n\n\tconst rightKeys = new Set(right.map(getOptionKey));\n\n\treturn left.every((option) => rightKeys.has(getOptionKey(option)));\n}\n","@use \"@/styles/mixins\" as *;\n\n.multiSelect {\n\t// Общий контейнер\n\tpadding: 0;\n}\n\n.optionCheckBox {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tflex-shrink: 0;\n\n\t--check-box-control-size: auto;\n\tpadding-left: var(--space-sm);\n}\n\n.optionActionCell {\n\tdisplay: flex;\n\talign-self: stretch;\n\tflex: 1 1 0;\n\tmin-width: 0;\n}\n","import { type MultiSelectOptionGroup } from \"../ui/multiSelectTypes\";\n\nexport type MultiSelectOptionEntry<TOption> = Readonly<{\n\toption: TOption;\n\tindex: number;\n}>;\n\nexport type MultiSelectOptionSection<TOption> = Readonly<{\n\tgroup: MultiSelectOptionGroup | undefined;\n\tentries: readonly MultiSelectOptionEntry<TOption>[];\n}>;\n\n/**\n * Группирует только соседние опции и сохраняет их глобальные индексы. Благодаря\n * этому визуальные заголовки не попадают в active-index клавиатурной навигации.\n */\nexport function createMultiSelectOptionSections<TOption>(\n\tentries: readonly MultiSelectOptionEntry<TOption>[],\n\tgetOptionGroup: (option: TOption) => MultiSelectOptionGroup | undefined\n): readonly MultiSelectOptionSection<TOption>[] {\n\tconst sections: Array<{\n\t\tgroup: MultiSelectOptionGroup | undefined;\n\t\tentries: MultiSelectOptionEntry<TOption>[];\n\t}> = [];\n\n\tfor (const entry of entries) {\n\t\tconst group = getOptionGroup(entry.option);\n\t\tconst currentSection = sections.at(-1);\n\t\tconst belongsToCurrentSection = currentSection?.group?.key === group?.key;\n\n\t\tif (currentSection && belongsToCurrentSection) {\n\t\t\tcurrentSection.entries.push(entry);\n\t\t\tcontinue;\n\t\t}\n\n\t\tsections.push({ group, entries: [entry] });\n\t}\n\n\treturn sections;\n}\n","import { CheckBox } from \"../../check-box\";\nimport { Option, OptionButton } from \"../../option\";\n\nimport styles from \"./MultiSelect.module.scss\";\nimport { type MultiSelectOptionContent, type MultiSelectOptionKey, type MultiSelectOptionState } from \"./multiSelectTypes\";\n\ntype MultiSelectOptionRowProps<TOption> = Readonly<{\n\toption: TOption;\n\tindex: number;\n\tlistId: string;\n\tactiveIndex: number;\n\tselectedKeys: ReadonlySet<MultiSelectOptionKey>;\n\tquery: string;\n\thighlightQuery: string;\n\tgetOptionKey: (option: TOption) => MultiSelectOptionKey;\n\tgetOptionDisabled?: (option: TOption) => boolean;\n\tgetOptionId: (listId: string, index: number) => string;\n\tsetOptionRef: (index: number, node: HTMLElement | null) => void;\n\ttoggleOption: (option: TOption) => void;\n\tselectOnlyOption: (option: TOption) => void;\n\trenderOption: (option: TOption, state: MultiSelectOptionState) => MultiSelectOptionContent;\n}>;\n\n/** Одна интерактивная строка grid: checkbox меняет draft, основная кнопка подтверждает только эту опцию. */\nexport function MultiSelectOptionRow<TOption>({\n\toption,\n\tindex,\n\tlistId,\n\tactiveIndex,\n\tselectedKeys,\n\tquery,\n\thighlightQuery,\n\tgetOptionKey,\n\tgetOptionDisabled,\n\tgetOptionId,\n\tsetOptionRef,\n\ttoggleOption,\n\tselectOnlyOption,\n\trenderOption\n}: MultiSelectOptionRowProps<TOption>) {\n\tconst active = index === activeIndex;\n\tconst optionKey = getOptionKey(option);\n\tconst selected = selectedKeys.has(optionKey);\n\tconst optionDisabled = getOptionDisabled?.(option) ?? false;\n\tconst content = renderOption(option, { selected, active, disabled: optionDisabled, query, highlightQuery });\n\n\treturn (\n\t\t<Option\n\t\t\tid={getOptionId(listId, index)}\n\t\t\tref={(node) => setOptionRef(index, node)}\n\t\t\trole=\"row\"\n\t\t\taria-selected={selected}\n\t\t\taria-disabled={optionDisabled || undefined}\n\t\t\tselected={selected}\n\t\t\tactive={active}\n\t\t\tdisabled={optionDisabled}>\n\t\t\t<div\n\t\t\t\trole=\"gridcell\"\n\t\t\t\tclassName={styles.optionCheckBox}\n\t\t\t\tonMouseDown={(event) => event.stopPropagation()}\n\t\t\t\tonClick={(event) => event.stopPropagation()}>\n\t\t\t\t<CheckBox\n\t\t\t\t\tvalue={selected}\n\t\t\t\t\tdisabled={optionDisabled}\n\t\t\t\t\taria-label={`${selected ? \"Убрать\" : \"Добавить\"} «${content.text}» ${selected ? \"из выбора\" : \"в выбор\"}`}\n\t\t\t\t\tonChange={() => toggleOption(option)}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div role=\"gridcell\" className={styles.optionActionCell}>\n\t\t\t\t<OptionButton\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\tdisabled={optionDisabled}\n\t\t\t\t\taria-label={`Выбрать только «${content.text}»`}\n\t\t\t\t\ttext={content.text}\n\t\t\t\t\tcode={content.code}\n\t\t\t\t\tsearchText={highlightQuery}\n\t\t\t\t\tonMouseDown={(event) => event.preventDefault()}\n\t\t\t\t\tonClick={() => selectOnlyOption(option)}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</Option>\n\t);\n}\n","import { Fragment } from \"react\";\n\nimport uiStyles from \"../../ui.module.scss\";\nimport { createMultiSelectOptionSections, type MultiSelectOptionEntry } from \"../lib/createMultiSelectOptionSections\";\n\nimport { MultiSelectOptionRow } from \"./MultiSelectOptionRow\";\nimport {\n\ttype MultiSelectOptionContent,\n\ttype MultiSelectOptionGroup,\n\ttype MultiSelectOptionKey,\n\ttype MultiSelectOptionState\n} from \"./multiSelectTypes\";\n\ntype MultiSelectOptionListProps<TOption> = Readonly<{\n\tentries: readonly MultiSelectOptionEntry<TOption>[];\n\tsectionId: string;\n\tlistId: string;\n\tactiveIndex: number;\n\tselectedKeys: ReadonlySet<MultiSelectOptionKey>;\n\tquery: string;\n\thighlightQuery: string;\n\tgetOptionKey: (option: TOption) => MultiSelectOptionKey;\n\tgetOptionGroup?: (option: TOption) => MultiSelectOptionGroup | undefined;\n\tgetOptionDisabled?: (option: TOption) => boolean;\n\tgetOptionId: (listId: string, index: number) => string;\n\tsetOptionRef: (index: number, node: HTMLElement | null) => void;\n\ttoggleOption: (option: TOption) => void;\n\tselectOnlyOption: (option: TOption) => void;\n\trenderOption: (option: TOption, state: MultiSelectOptionState) => MultiSelectOptionContent;\n}>;\n\n/** Рендерит одну selected/available-секцию, сохраняя global option indexes при группировке. */\nexport function MultiSelectOptionList<TOption>({ entries, sectionId, getOptionGroup, ...rowProps }: MultiSelectOptionListProps<TOption>) {\n\tconst sections = getOptionGroup ? createMultiSelectOptionSections(entries, getOptionGroup) : [{ group: undefined, entries }];\n\n\treturn sections.map((section, sectionIndex) => {\n\t\tconst rows = section.entries.map(({ option, index }) => (\n\t\t\t<MultiSelectOptionRow key={`${rowProps.getOptionKey(option)}-${index}`} option={option} index={index} {...rowProps} />\n\t\t));\n\n\t\tif (!section.group) {\n\t\t\treturn <Fragment key={`${sectionId}-ungrouped-${sectionIndex}`}>{rows}</Fragment>;\n\t\t}\n\n\t\tconst groupLabelId = `${sectionId}-group-${sectionIndex}`;\n\n\t\treturn (\n\t\t\t<div key={`${sectionId}-${section.group.key}-${sectionIndex}`} role=\"rowgroup\" aria-labelledby={groupLabelId}>\n\t\t\t\t<div id={groupLabelId} role=\"row\" className={uiStyles.uiPopupGroupLabel}>\n\t\t\t\t\t<div role=\"gridcell\">{section.group.label}</div>\n\t\t\t\t</div>\n\t\t\t\t{rows}\n\t\t\t</div>\n\t\t);\n\t});\n}\n","import { Text } from \"../../text\";\nimport uiStyles from \"../../ui.module.scss\";\n\ninterface MultiSelectOptionSkeletonProps {\n\ttext: string;\n\tisError?: boolean;\n}\n\n/**\n * Скелетон строки опции для `MultiSelect`. Используется во время загрузки или при отображении ошибок получения списка.\n */\nexport function MultiSelectOptionSkeleton({ text, isError }: MultiSelectOptionSkeletonProps) {\n\treturn (\n\t\t<div className={uiStyles.uiPopupOption}>\n\t\t\t<span className={uiStyles.uiPopupOptionIcon}></span>\n\t\t\t<Text color={isError ? \"error\" : \"primary\"}>{text}</Text>\n\t\t</div>\n\t);\n}\n","import { type PropsWithChildren } from \"react\";\n\nimport { PickerStatus } from \"../../picker\";\n\nimport { MultiSelectOptionSkeleton } from \"./MultiSelectOptionSkeleton\";\n\ntype MultiSelectOptionsWrapperProps = PropsWithChildren<{\n\tisNoData?: boolean;\n\terror?: string;\n}>;\n\n/** Выбирает одно доступное состояние тела popup, не меняя структуру самого grid. */\nexport function MultiSelectOptionsWrapper({ isNoData, error, children }: MultiSelectOptionsWrapperProps) {\n\tif (isNoData) {\n\t\treturn <PickerStatus emptyState={<MultiSelectOptionSkeleton text=\"Нет данных\" />} />;\n\t}\n\n\tif (error) {\n\t\treturn <PickerStatus errorState={<MultiSelectOptionSkeleton isError text=\"Ошибка загрузки\" />} />;\n\t}\n\n\treturn <>{children}</>;\n}\n","import { useCallback, useMemo, useRef, useState } from \"react\";\n\nimport {\n\textractPickerTextContent,\n\tPickerField,\n\tPickerPopup,\n\tPickerTrigger,\n\tusePickerDefaultFilter,\n\tusePickerFloatingListbox,\n\tusePickerQuery,\n\tusePickerSelectionLifecycle,\n\tusePickerTriggerController\n} from \"../../picker\";\nimport { Separator } from \"../../separator\";\nimport { formatMultiSelectOptionCount } from \"../lib/formatMultiSelectOptionCount\";\nimport { materializeMultiSelectOptions } from \"../lib/materializeMultiSelectOptions\";\nimport { areMultiSelectSelectionsEqual } from \"../lib/multiSelectSelection\";\n\nimport { type MultiSelectProps } from \"./MultiSelect\";\nimport styles from \"./MultiSelect.module.scss\";\nimport { MultiSelectOptionList } from \"./MultiSelectOptionList\";\nimport { MultiSelectOptionsWrapper } from \"./MultiSelectOptionsWrapper\";\nimport { type MultiSelectOptionDisableContext } from \"./multiSelectTypes\";\n\ntype MultiSelectCoreProps<TOption> = MultiSelectProps<TOption> &\n\tReadonly<{\n\t\t/** Сохраняет опубликованную ссылочную семантику только для legacy MultiSelect. */\n\t\tpreserveOptionArrayReference?: boolean;\n\t}>;\n\n/**\n * Единая generic-реализация множественного выбора. Публичные компоненты только\n * адаптируют свои контракты к этим selector-функциям, поэтому focus и a11y\n * поведение не расходятся между новым и legacy API.\n */\nexport function MultiSelectCore<TOption>({\n\tref,\n\toptions,\n\tvalue,\n\tonChange,\n\tgetOptionKey,\n\tgetOptionLabel,\n\tgetOptionCode,\n\tgetOptionGroup,\n\tgetOptionSearchText,\n\tlabel,\n\tdescription,\n\tplaceholder,\n\tsize,\n\tquery,\n\tdefaultQuery,\n\thighlightQuery,\n\tonQuery,\n\tdefaultFilter = true,\n\tonOpen,\n\tonClose,\n\tgetOptionDisabled,\n\tdisabled,\n\terror,\n\tisLoading,\n\trenderToken,\n\trenderToolbar,\n\trenderOption,\n\tpreserveOptionArrayReference = false\n}: MultiSelectCoreProps<TOption>) {\n\tconst inputRef = useRef<HTMLInputElement | null>(null);\n\tconst [open, setOpen] = useState(false);\n\tconst triggerMode = \"search-multi\";\n\tconst committedSelectedOptions = useMemo(\n\t\t() => materializeMultiSelectOptions(value, preserveOptionArrayReference),\n\t\t[preserveOptionArrayReference, value]\n\t);\n\tconst committedSelectedKeys = useMemo(\n\t\t() => new Set(committedSelectedOptions.map(getOptionKey)),\n\t\t[committedSelectedOptions, getOptionKey]\n\t);\n\tconst availableOptions = useMemo(\n\t\t() => options.filter((option) => !committedSelectedKeys.has(getOptionKey(option))),\n\t\t[committedSelectedKeys, getOptionKey, options]\n\t);\n\tconst {\n\t\tquery: currentQuery,\n\t\tsetQuery,\n\t\tresetQueryOnClose\n\t} = usePickerQuery({\n\t\tquery,\n\t\tdefaultQuery,\n\t\tonQuery,\n\t\ttriggerMode\n\t});\n\tconst handleOpenChange = (nextOpen: boolean) => {\n\t\tif (open && !nextOpen && resetQueryOnClose) {\n\t\t\tsetQuery(\"\");\n\t\t}\n\n\t\tsetOpen(nextOpen);\n\t};\n\tconst getSearchText = useCallback(\n\t\t(option: TOption) =>\n\t\t\tgetOptionSearchText?.(option) ??\n\t\t\t[getOptionLabel(option), getOptionCode?.(option), extractPickerTextContent(getOptionGroup?.(option)?.label)].filter(\n\t\t\t\t(part): part is string => Boolean(part)\n\t\t\t),\n\t\t[getOptionCode, getOptionGroup, getOptionLabel, getOptionSearchText]\n\t);\n\tconst filteredCommittedSelectedOptions = usePickerDefaultFilter({\n\t\toptions: committedSelectedOptions,\n\t\tquery: currentQuery,\n\t\tenabled: defaultFilter,\n\t\tgetSearchText\n\t});\n\tconst filteredAvailableOptions = usePickerDefaultFilter({\n\t\toptions: availableOptions,\n\t\tquery: currentQuery,\n\t\tenabled: defaultFilter,\n\t\tgetSearchText\n\t});\n\tconst visibleOptions = useMemo(\n\t\t() => [...filteredCommittedSelectedOptions, ...filteredAvailableOptions],\n\t\t[filteredAvailableOptions, filteredCommittedSelectedOptions]\n\t);\n\tconst selectedIndex = filteredCommittedSelectedOptions.length > 0 ? 0 : -1;\n\tconst compareSelections = useCallback(\n\t\t(left: TOption[], right: TOption[]) => areMultiSelectSelectionsEqual(left, right, getOptionKey),\n\t\t[getOptionKey]\n\t);\n\tconst {\n\t\tdraftValue: draftSelectedOptions,\n\t\tsetDraftValue: setDraftSelectedOptions,\n\t\tprepareOpen\n\t} = usePickerSelectionLifecycle({\n\t\tvalue: committedSelectedOptions,\n\t\topen,\n\t\tonCommit: onChange,\n\t\tonOpen,\n\t\tonClose,\n\t\tisEqual: compareSelections\n\t});\n\tconst selectedKeys = useMemo(() => new Set(draftSelectedOptions.map(getOptionKey)), [draftSelectedOptions, getOptionKey]);\n\tconst optionDisableContext = useMemo<MultiSelectOptionDisableContext<TOption>>(\n\t\t() => ({\n\t\t\tselectedOptions: draftSelectedOptions,\n\t\t\tcommittedSelectedOptions,\n\t\t\tselectedKeys,\n\t\t\topen\n\t\t}),\n\t\t[committedSelectedOptions, draftSelectedOptions, open, selectedKeys]\n\t);\n\tconst isOptionDisabled = useCallback(\n\t\t(option: TOption) => getOptionDisabled?.(option, optionDisableContext) ?? false,\n\t\t[getOptionDisabled, optionDisableContext]\n\t);\n\tconst {\n\t\tactiveIndex,\n\t\tcontext,\n\t\tfloatingStyles,\n\t\tgetFloatingProps,\n\t\tsetReference,\n\t\tsetFloating,\n\t\tsetOptionRef,\n\t\tclose,\n\t\topenList,\n\t\ttoggleOpen,\n\t\thandleReferenceKeyDown,\n\t\thandleFloatingKeyDown,\n\t\tgetOptionId,\n\t\tgetActiveOptionId\n\t} = usePickerFloatingListbox({\n\t\toptions: visibleOptions,\n\t\tselectedIndex,\n\t\topen,\n\t\tonOpenChange: handleOpenChange,\n\t\tonSelect: undefined,\n\t\tdisabled,\n\t\tgetOptionDisabled: isOptionDisabled,\n\t\tcloseOnSelect: false,\n\t\tallowOpenWithoutOptions: true,\n\t\ttriggerMode\n\t});\n\n\tconst currentHighlightQuery = highlightQuery ?? currentQuery;\n\tconst toggleDraftSelection = (option: TOption) => {\n\t\tconst optionKey = getOptionKey(option);\n\n\t\tsetDraftSelectedOptions((currentOptions) => {\n\t\t\tconst isSelected = currentOptions.some((selectedOption) => getOptionKey(selectedOption) === optionKey);\n\n\t\t\tif (isSelected) {\n\t\t\t\treturn currentOptions.filter((selectedOption) => getOptionKey(selectedOption) !== optionKey);\n\t\t\t}\n\n\t\t\tif (isOptionDisabled(option)) {\n\t\t\t\treturn currentOptions;\n\t\t\t}\n\n\t\t\treturn [...currentOptions, option];\n\t\t});\n\t};\n\n\tconst setInputNode = useCallback(\n\t\t(node: HTMLInputElement | null) => {\n\t\t\tinputRef.current = node;\n\n\t\t\tif (typeof ref === \"function\") {\n\t\t\t\tref(node);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (ref) {\n\t\t\t\tref.current = node;\n\t\t\t}\n\t\t},\n\t\t[ref]\n\t);\n\n\tconst clearSelection = () => {\n\t\tsetDraftSelectedOptions([]);\n\n\t\tif (!open) {\n\t\t\tonChange([]);\n\t\t}\n\t};\n\n\tconst selectAll = () => {\n\t\tsetDraftSelectedOptions((currentOptions) => {\n\t\t\tconst nextOptions = [...currentOptions];\n\t\t\tconst nextSelectedKeys = new Set(currentOptions.map(getOptionKey));\n\n\t\t\tfor (const option of visibleOptions) {\n\t\t\t\tconst optionKey = getOptionKey(option);\n\n\t\t\t\tif (!nextSelectedKeys.has(optionKey) && !isOptionDisabled(option)) {\n\t\t\t\t\tnextSelectedKeys.add(optionKey);\n\t\t\t\t\tnextOptions.push(option);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn nextOptions;\n\t\t});\n\t};\n\n\tconst deselectAll = () => {\n\t\tsetDraftSelectedOptions([]);\n\t};\n\n\tconst selectOnlyOption = (option: TOption) => {\n\t\tif (isOptionDisabled(option)) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetDraftSelectedOptions([option]);\n\t\tclose();\n\t};\n\n\tconst currentSelectedOptions = open ? draftSelectedOptions : committedSelectedOptions;\n\tconst hasSelectedOptions = currentSelectedOptions.length > 0;\n\tconst renderContext = {\n\t\tselectedOptions: currentSelectedOptions,\n\t\tcommittedSelectedOptions,\n\t\tavailableOptions: filteredAvailableOptions,\n\t\tquery: currentQuery,\n\t\topen,\n\t\tclearSelection,\n\t\tselectAll,\n\t\tdeselectAll\n\t};\n\tconst defaultTokenNode =\n\t\tcurrentSelectedOptions.length > 1\n\t\t\t? formatMultiSelectOptionCount(currentSelectedOptions.length)\n\t\t\t: currentSelectedOptions.length === 1\n\t\t\t\t? getOptionLabel(currentSelectedOptions[0])\n\t\t\t\t: undefined;\n\tconst tokenNode = renderToken === undefined ? defaultTokenNode : typeof renderToken === \"function\" ? renderToken(renderContext) : null;\n\tconst toolbarNode = typeof renderToolbar === \"function\" ? renderToolbar(renderContext) : renderToolbar;\n\tconst renderDefaultOption = useCallback(\n\t\t(option: TOption) => ({ text: getOptionLabel(option), code: getOptionCode?.(option) }),\n\t\t[getOptionCode, getOptionLabel]\n\t);\n\tconst optionRenderer = renderOption ?? renderDefaultOption;\n\tconst selectedEntries = filteredCommittedSelectedOptions.map((option, index) => ({ option, index }));\n\tconst availableEntries = filteredAvailableOptions.map((option, index) => ({\n\t\toption,\n\t\tindex: index + selectedEntries.length\n\t}));\n\tconst isNoData = !isLoading && !error && visibleOptions.length === 0;\n\tconst triggerController = usePickerTriggerController({\n\t\tmode: triggerMode,\n\t\topen,\n\t\tcurrentQuery,\n\t\thasDisplayValue: false,\n\t\tinputRef,\n\t\tsetQuery,\n\t\topenList,\n\t\tclose,\n\t\ttoggleOpen,\n\t\tonBeforeOpen: () => {\n\t\t\tif (!open) {\n\t\t\t\tprepareOpen();\n\t\t\t}\n\t\t}\n\t});\n\n\treturn (\n\t\t<PickerField label={label} description={description} disabled={disabled} size={size} className={styles.multiSelect}>\n\t\t\t{({ controlId, labelId, describedBy }) => {\n\t\t\t\tconst listId = `${controlId}-grid`;\n\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<PickerTrigger\n\t\t\t\t\t\t\tref={setInputNode}\n\t\t\t\t\t\t\trootRef={setReference}\n\t\t\t\t\t\t\tid={controlId}\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\topen={open}\n\t\t\t\t\t\t\toptionCount={options.length}\n\t\t\t\t\t\t\tlabel={label}\n\t\t\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t\t\tplaceholderFallback=\"Выберите значения\"\n\t\t\t\t\t\t\tvalue={currentQuery}\n\t\t\t\t\t\t\tselectedValue={tokenNode}\n\t\t\t\t\t\t\thasSelection={hasSelectedOptions}\n\t\t\t\t\t\t\tshowSelectedValue={hasSelectedOptions && currentQuery.length === 0}\n\t\t\t\t\t\t\tclearable\n\t\t\t\t\t\t\tonClear={clearSelection}\n\t\t\t\t\t\t\tclearAriaLabel=\"Очистить все\"\n\t\t\t\t\t\t\tonToggleMouseDown={triggerController.handleToggleMouseDown}\n\t\t\t\t\t\t\tonToggleClick={triggerController.handleToggleClick}\n\t\t\t\t\t\t\taria-labelledby={labelId}\n\t\t\t\t\t\t\taria-describedby={describedBy}\n\t\t\t\t\t\t\taria-haspopup=\"grid\"\n\t\t\t\t\t\t\taria-expanded={open}\n\t\t\t\t\t\t\taria-controls={open ? listId : undefined}\n\t\t\t\t\t\t\taria-autocomplete=\"list\"\n\t\t\t\t\t\t\taria-activedescendant={open ? getActiveOptionId(listId) : undefined}\n\t\t\t\t\t\t\trootClassName=\"flex alignItemsCenter\"\n\t\t\t\t\t\t\tonChange={(event) => {\n\t\t\t\t\t\t\t\ttriggerController.handleTriggerInputChange(event.target.value);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonClick={triggerController.handleTriggerClick}\n\t\t\t\t\t\t\tonFocus={(event) => {\n\t\t\t\t\t\t\t\ttriggerController.handleTriggerFocus(event.currentTarget);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonKeyDown={(event) => {\n\t\t\t\t\t\t\t\thandleReferenceKeyDown(event);\n\n\t\t\t\t\t\t\t\tif (event.defaultPrevented) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (open && event.ctrlKey && event.key === \" \") {\n\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\tconst activeOption = visibleOptions[activeIndex];\n\t\t\t\t\t\t\t\t\tif (activeIndex >= 0 && activeIndex < visibleOptions.length) {\n\t\t\t\t\t\t\t\t\t\ttoggleDraftSelection(activeOption);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ttriggerController.handleTriggerKeyDown({\n\t\t\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t\t\tonActivateWhenOpen: () => {\n\t\t\t\t\t\t\t\t\t\tconst activeOption = visibleOptions[activeIndex];\n\t\t\t\t\t\t\t\t\t\tif (activeIndex >= 0 && activeIndex < visibleOptions.length) {\n\t\t\t\t\t\t\t\t\t\t\tselectOnlyOption(activeOption);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tenableClosedArrowDownOpen: true,\n\t\t\t\t\t\t\t\t\tsuppressClosedArrowUp: true\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<PickerPopup\n\t\t\t\t\t\t\topen={open}\n\t\t\t\t\t\t\tcontext={context}\n\t\t\t\t\t\t\tfloatingStyles={floatingStyles}\n\t\t\t\t\t\t\tlistId={listId}\n\t\t\t\t\t\t\tlabelId={labelId}\n\t\t\t\t\t\t\tdescriptionId={describedBy}\n\t\t\t\t\t\t\tactiveOptionId={open ? getActiveOptionId(listId) : undefined}\n\t\t\t\t\t\t\tariaMultiselectable\n\t\t\t\t\t\t\tpopupRole=\"grid\"\n\t\t\t\t\t\t\tsetFloating={setFloating}\n\t\t\t\t\t\t\tgetFloatingProps={getFloatingProps}\n\t\t\t\t\t\t\tonKeyDown={handleFloatingKeyDown}\n\t\t\t\t\t\t\tinitialFocus={-1}\n\t\t\t\t\t\t\treturnFocus={false}\n\t\t\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\t\t\ttoolbar={toolbarNode}\n\t\t\t\t\t\t\tselectionActions={\n\t\t\t\t\t\t\t\trenderToolbar === undefined ? { onSelectAll: selectAll, onDeselectAll: deselectAll } : undefined\n\t\t\t\t\t\t\t}>\n\t\t\t\t\t\t\t<MultiSelectOptionsWrapper isNoData={isNoData} error={error}>\n\t\t\t\t\t\t\t\t<div role=\"presentation\" className=\"scrollable overscroll h100\">\n\t\t\t\t\t\t\t\t\t<MultiSelectOptionList\n\t\t\t\t\t\t\t\t\t\tentries={selectedEntries}\n\t\t\t\t\t\t\t\t\t\tsectionId={`${listId}-selected`}\n\t\t\t\t\t\t\t\t\t\tlistId={listId}\n\t\t\t\t\t\t\t\t\t\tactiveIndex={activeIndex}\n\t\t\t\t\t\t\t\t\t\tselectedKeys={selectedKeys}\n\t\t\t\t\t\t\t\t\t\tquery={currentQuery}\n\t\t\t\t\t\t\t\t\t\thighlightQuery={currentHighlightQuery}\n\t\t\t\t\t\t\t\t\t\tgetOptionKey={getOptionKey}\n\t\t\t\t\t\t\t\t\t\tgetOptionGroup={getOptionGroup}\n\t\t\t\t\t\t\t\t\t\tgetOptionDisabled={isOptionDisabled}\n\t\t\t\t\t\t\t\t\t\tgetOptionId={getOptionId}\n\t\t\t\t\t\t\t\t\t\tsetOptionRef={setOptionRef}\n\t\t\t\t\t\t\t\t\t\ttoggleOption={toggleDraftSelection}\n\t\t\t\t\t\t\t\t\t\tselectOnlyOption={selectOnlyOption}\n\t\t\t\t\t\t\t\t\t\trenderOption={optionRenderer}\n\t\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t\t{selectedEntries.length > 0 && availableEntries.length > 0 && (\n\t\t\t\t\t\t\t\t\t\t<Separator aria-hidden=\"true\" className=\"marginBlockSm\" />\n\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t<MultiSelectOptionList\n\t\t\t\t\t\t\t\t\t\tentries={availableEntries}\n\t\t\t\t\t\t\t\t\t\tsectionId={`${listId}-available`}\n\t\t\t\t\t\t\t\t\t\tlistId={listId}\n\t\t\t\t\t\t\t\t\t\tactiveIndex={activeIndex}\n\t\t\t\t\t\t\t\t\t\tselectedKeys={selectedKeys}\n\t\t\t\t\t\t\t\t\t\tquery={currentQuery}\n\t\t\t\t\t\t\t\t\t\thighlightQuery={currentHighlightQuery}\n\t\t\t\t\t\t\t\t\t\tgetOptionKey={getOptionKey}\n\t\t\t\t\t\t\t\t\t\tgetOptionGroup={getOptionGroup}\n\t\t\t\t\t\t\t\t\t\tgetOptionDisabled={isOptionDisabled}\n\t\t\t\t\t\t\t\t\t\tgetOptionId={getOptionId}\n\t\t\t\t\t\t\t\t\t\tsetOptionRef={setOptionRef}\n\t\t\t\t\t\t\t\t\t\ttoggleOption={toggleDraftSelection}\n\t\t\t\t\t\t\t\t\t\tselectOnlyOption={selectOnlyOption}\n\t\t\t\t\t\t\t\t\t\trenderOption={optionRenderer}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</MultiSelectOptionsWrapper>\n\t\t\t\t\t\t</PickerPopup>\n\t\t\t\t\t</>\n\t\t\t\t);\n\t\t\t}}\n\t\t</PickerField>\n\t);\n}\n","import { type ReactNode, type Ref, useMemo } from \"react\";\n\nimport { type CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata-service\";\n\nimport { type UiBaseProps } from \"../../types\";\nimport { adaptLegacyMultiSelectOptionDisableContext, adaptLegacyMultiSelectRenderContext } from \"../lib/adaptLegacyMultiSelectContext\";\nimport { resolveLegacyMultiSelectTextKey } from \"../lib/resolveLegacyMultiSelectTextKey\";\n\nimport {\n\ttype DeprecatedMultiSelectItemState,\n\ttype DeprecatedMultiSelectOptionContent,\n\ttype DeprecatedMultiSelectOptionDisableContext,\n\ttype DeprecatedMultiSelectRenderContext\n} from \"./legacyMultiSelectTypes\";\nimport { MultiSelectCore } from \"./MultiSelectCore\";\n\ntype MultiSelectOptionalRenderer<TContext> = ((context: TContext) => ReactNode) | null | false;\n\ninterface MultiSelectRenderers {\n\trenderToken?: MultiSelectOptionalRenderer<DeprecatedMultiSelectRenderContext>;\n\trenderToolbar?: MultiSelectOptionalRenderer<DeprecatedMultiSelectRenderContext>;\n\trenderItem?: (item: CollectionItem, state: DeprecatedMultiSelectItemState) => DeprecatedMultiSelectOptionContent;\n}\n\n/** Контракт устаревшего codeKey/textKey-компонента. */\nexport interface DeprecatedMultiSelectProps<TOption extends Record<string, string> = CollectionItem>\n\textends MultiSelectRenderers, UiBaseProps<TOption[]> {\n\tref?: Ref<HTMLInputElement>;\n\tcodeKey: string;\n\ttextKey?: string;\n\thideCode?: boolean;\n\tquery?: string;\n\tdefaultQuery?: string;\n\thighlightQuery?: string;\n\tonQuery?: (value: string) => void;\n\tdefaultFilter?: boolean;\n\titems: TOption[];\n\tgetOptionDisabled?: (item: TOption, context: DeprecatedMultiSelectOptionDisableContext) => boolean;\n\tonOpen?: () => void;\n\tonClose?: (value: TOption[]) => void;\n\terror?: string;\n\tisLoading?: boolean;\n}\n\n/**\n * Устаревший адаптер OData-подобных `codeKey`/`textKey` коллекций. Компонент\n * сохраняет прежнюю OData-семантику, пока consumers переходят на selector API\n * канонического `MultiSelect`.\n *\n * @deprecated Используйте `MultiSelect` с selector-функциями.\n */\nexport function DeprecatedMultiSelect<TOption extends Record<string, string> = CollectionItem>({\n\tref,\n\tcodeKey,\n\ttextKey,\n\thideCode,\n\titems,\n\tvalue,\n\tonChange,\n\tgetOptionDisabled,\n\tonClose,\n\trenderToken,\n\trenderToolbar,\n\trenderItem,\n\t...props\n}: DeprecatedMultiSelectProps<TOption>) {\n\tconst selectedItems = useMemo(() => value ?? [], [value]);\n\tconst resolvedTextKey = useMemo(\n\t\t() => resolveLegacyMultiSelectTextKey([...selectedItems, ...items], codeKey, textKey),\n\t\t[codeKey, items, selectedItems, textKey]\n\t);\n\tconst adaptedRenderToken =\n\t\ttypeof renderToken === \"function\"\n\t\t\t? (context: Parameters<typeof adaptLegacyMultiSelectRenderContext>[0]) =>\n\t\t\t\t\trenderToken(adaptLegacyMultiSelectRenderContext(context))\n\t\t\t: renderToken;\n\tconst adaptedRenderToolbar =\n\t\ttypeof renderToolbar === \"function\"\n\t\t\t? (context: Parameters<typeof adaptLegacyMultiSelectRenderContext>[0]) =>\n\t\t\t\t\trenderToolbar(adaptLegacyMultiSelectRenderContext(context))\n\t\t\t: renderToolbar;\n\n\treturn (\n\t\t<MultiSelectCore\n\t\t\t{...props}\n\t\t\tref={ref}\n\t\t\tpreserveOptionArrayReference\n\t\t\toptions={items}\n\t\t\tvalue={selectedItems}\n\t\t\tonChange={onChange}\n\t\t\tgetOptionKey={(item) => item[codeKey]}\n\t\t\tgetOptionLabel={(item) => item[resolvedTextKey] ?? item[codeKey] ?? \"\"}\n\t\t\tgetOptionCode={hideCode ? undefined : (item) => item[codeKey] ?? \"\"}\n\t\t\tgetOptionSearchText={(item) => Array.from(new Set([item[resolvedTextKey], item[codeKey], ...Object.values(item)]))}\n\t\t\tgetOptionDisabled={\n\t\t\t\tgetOptionDisabled\n\t\t\t\t\t? (item, context) => getOptionDisabled(item, adaptLegacyMultiSelectOptionDisableContext(context))\n\t\t\t\t\t: undefined\n\t\t\t}\n\t\t\tonClose={onClose}\n\t\t\trenderToken={adaptedRenderToken}\n\t\t\trenderToolbar={adaptedRenderToolbar}\n\t\t\trenderOption={\n\t\t\t\trenderItem\n\t\t\t\t\t? (item, state) => renderItem(item, state)\n\t\t\t\t\t: (item) => ({\n\t\t\t\t\t\t\ttext: item[resolvedTextKey] ?? \"\",\n\t\t\t\t\t\t\tcode: hideCode ? undefined : (item[codeKey] ?? \"\")\n\t\t\t\t\t\t})\n\t\t\t}\n\t\t/>\n\t);\n}\n\nDeprecatedMultiSelect.displayName = \"DeprecatedMultiSelect\";\n\nexport {\n\ttype DeprecatedMultiSelectItemState,\n\ttype DeprecatedMultiSelectOptionContent,\n\ttype DeprecatedMultiSelectOptionDisableContext,\n\ttype DeprecatedMultiSelectRenderContext\n} from \"./legacyMultiSelectTypes\";\n","import { type Ref } from \"react\";\n\nimport { type UiBaseProps } from \"../../types\";\n\nimport { MultiSelectCore } from \"./MultiSelectCore\";\nimport {\n\ttype MultiSelectOptionDisableContext,\n\ttype MultiSelectOptionGroup,\n\ttype MultiSelectOptionKey,\n\ttype MultiSelectRenderers\n} from \"./multiSelectTypes\";\n\n/**\n * Типобезопасный контракт множественного выбора. Опция остаётся в исходной\n * domain/view-model форме, а UI получает только необходимые selector-функции.\n */\nexport type MultiSelectProps<TOption> = MultiSelectRenderers<TOption> &\n\tOmit<UiBaseProps<TOption[], readonly TOption[]>, \"onChange\"> &\n\tReadonly<{\n\t\tref?: Ref<HTMLInputElement>;\n\t\toptions: readonly TOption[];\n\t\tonChange: (value: TOption[]) => void;\n\t\tgetOptionKey: (option: TOption) => MultiSelectOptionKey;\n\t\tgetOptionLabel: (option: TOption) => string;\n\t\tgetOptionCode?: (option: TOption) => string | undefined;\n\t\tgetOptionGroup?: (option: TOption) => MultiSelectOptionGroup | undefined;\n\t\tgetOptionSearchText?: (option: TOption) => string | readonly string[];\n\t\tgetOptionDisabled?: (option: TOption, context: MultiSelectOptionDisableContext<TOption>) => boolean;\n\t\tquery?: string;\n\t\tdefaultQuery?: string;\n\t\thighlightQuery?: string;\n\t\tonQuery?: (value: string) => void;\n\t\tdefaultFilter?: boolean;\n\t\tonOpen?: () => void;\n\t\tonClose?: (value: TOption[]) => void;\n\t\terror?: string;\n\t\tisLoading?: boolean;\n\t}>;\n\n/** Множественный выбор для произвольной типизированной коллекции опций. */\nexport function MultiSelect<TOption>(props: MultiSelectProps<TOption>) {\n\treturn <MultiSelectCore {...props} />;\n}\n","import { ODataCollectionModel, ODataSelectBaseProps } from \"@ryuzaki13/react-foundation-api/odata\";\nimport { CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata-service\";\n\nimport { mapSelectedItemsToValues, useODataSelectBase } from \"../../select/model/useODataSelectBase\";\n\ninterface UseODataMultiSelectOptions extends Omit<ODataSelectBaseProps, \"model\"> {\n\tmodel: Required<ODataCollectionModel>;\n\tonChange: (keys: string[]) => void;\n}\n\nexport function useODataMultiSelect({ odata, segment, model, value, dependencies, onChange }: UseODataMultiSelectOptions) {\n\tconst odataModel = useODataSelectBase({\n\t\todata,\n\t\tsegment,\n\t\tmodel,\n\t\tvalue,\n\t\tdependencies\n\t});\n\n\tconst handleChange = (items: CollectionItem[]) => {\n\t\tonChange(mapSelectedItemsToValues(items, odataModel.selectionKey));\n\t};\n\n\treturn {\n\t\t...odataModel,\n\t\thandleChange\n\t};\n}\n","import { ODataSelectBaseProps, useODataCollectionModel } from \"@ryuzaki13/react-foundation-api/odata\";\n\nimport { UiBaseProps } from \"../../types\";\nimport { useODataMultiSelect } from \"../model/useODataMultiSelect\";\n\nimport { DeprecatedMultiSelect } from \"./DeprecatedMultiSelect\";\n\ntype ODataMultiSelectProps = ODataSelectBaseProps & Omit<UiBaseProps<string[]>, \"placeholder\"> & {};\n\nexport function ODataMultiSelect({\n\todata,\n\tsegment,\n\tmodel: initialModel,\n\tlabel,\n\tdescription,\n\tdisabled,\n\tvalue,\n\tdependencies,\n\tonChange,\n\tsize\n}: ODataMultiSelectProps) {\n\tconst model = useODataCollectionModel(initialModel);\n\tconst odataModel = useODataMultiSelect({\n\t\todata,\n\t\tsegment,\n\t\tmodel,\n\t\tvalue,\n\t\tdependencies,\n\t\tonChange\n\t});\n\n\treturn (\n\t\t<DeprecatedMultiSelect\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\tsize={size}\n\t\t\tcodeKey={odataModel.codeKey}\n\t\t\ttextKey={odataModel.textKey}\n\t\t\thideCode={segment.hideCode ?? odata.hideCode}\n\t\t\titems={odataModel.filteredItems}\n\t\t\tvalue={odataModel.selectedItems}\n\t\t\tonChange={odataModel.handleChange}\n\t\t\tonQuery={odataModel.setQuery}\n\t\t\tquery={odataModel.query}\n\t\t\tdefaultFilter={false}\n\t\t\thighlightQuery={odataModel.debouncedQuery}\n\t\t\tisLoading={odataModel.isLoading}\n\t\t\tdisabled={disabled}\n\t\t\tplaceholder={odataModel.placeholder}\n\t\t\terror={odataModel.isError ? \"Ошибка загрузки\" : undefined}\n\t\t/>\n\t);\n}\n","import { useCallback } from \"react\";\n\nimport { useODataDependentSelection } from \"../../odata-dependent\";\n\nimport { ODataMultiSelect } from \"./ODataMultiSelect\";\n\nimport type { ODataDependentSegmentControlProps } from \"../../odata-dependent\";\n\nexport type ODataDependentSegmentMultiSelectProps = ODataDependentSegmentControlProps;\n\nexport function ODataDependentSegmentMultiSelect(props: ODataDependentSegmentMultiSelectProps) {\n\tconst { item, disabled, label, description, size, width = 15 } = props;\n\tconst selection = useODataDependentSelection(props);\n\tconst { updateSegment } = selection;\n\tconst widthStyle = `calc(${width}em + var(--width-add))`;\n\n\tconst handleSelectionChange = useCallback(\n\t\t(keys: string[]) => {\n\t\t\tupdateSegment(item.id, keys);\n\t\t},\n\t\t[item.id, updateSegment]\n\t);\n\n\treturn (\n\t\t<div style={{ maxWidth: widthStyle, minWidth: widthStyle }}>\n\t\t\t<ODataMultiSelect\n\t\t\t\todata={item.odata}\n\t\t\t\tsegment={item.segment}\n\t\t\t\tmodel={item.model}\n\t\t\t\tdependencies={selection.values}\n\t\t\t\tvalue={selection.values[item.id]}\n\t\t\t\tonChange={handleSelectionChange}\n\t\t\t\tdisabled={disabled || selection.isSegmentDisabled(item.id)}\n\t\t\t\tlabel={label}\n\t\t\t\tdescription={description}\n\t\t\t\tsize={size}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n","import { flattenODataDependentServices, type ODataDependentBaseProps } from \"@ryuzaki13/react-foundation-api/odata\";\n\nimport { useODataDependentSelection } from \"../../odata-dependent\";\n\nimport { ODataDependentSegmentMultiSelect } from \"./ODataDependentSegmentMultiSelect\";\n\nimport type { UseODataDependentSelectionOptions } from \"../../odata-dependent\";\n\nexport type ODataDependentMultiSelectProps = Omit<ODataDependentBaseProps, \"dependencies\" | \"value\"> &\n\tUseODataDependentSelectionOptions & {\n\t\t/**\n\t\t * Ширина одного элемента в `em` единицах.\n\t\t *\n\t\t * @default 15\n\t\t */\n\t\twidth?: number;\n\t};\n\nexport function ODataDependentMultiSelect(props: ODataDependentMultiSelectProps) {\n\tconst { width = 15, odata, segments, model, values, defaultValues, onChange, selectionMode, segmentOrder } = props;\n\tconst selection = useODataDependentSelection({ values, defaultValues, onChange });\n\tconst segmentSelectionProps =\n\t\tselectionMode === \"sequential\" ? { selectionMode: \"sequential\" as const, segmentOrder } : { selectionMode, segmentOrder };\n\tconst items = flattenODataDependentServices([\n\t\t{\n\t\t\todata,\n\t\t\tsegments,\n\t\t\tmodel\n\t\t}\n\t]);\n\n\treturn items.map((item) => (\n\t\t<ODataDependentSegmentMultiSelect\n\t\t\tkey={item.id}\n\t\t\titem={item}\n\t\t\tvalues={selection.values}\n\t\t\tonChange={selection.updateValues}\n\t\t\t{...segmentSelectionProps}\n\t\t\twidth={width}\n\t\t/>\n\t));\n}\n","import { DeprecatedMultiSelect } from \"./DeprecatedMultiSelect\";\n\nimport type { UiBaseProps } from \"../../types\";\nimport type { CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata-service\";\n\ntype SerializableOptionRecord = Record<string, unknown>;\n\ntype SerializableOptionKeyField<TOption extends SerializableOptionRecord> = {\n\t[K in keyof TOption]: Extract<TOption[K], string> extends never ? never : K;\n}[keyof TOption];\n\nexport interface SerializableMultiSelectProps<\n\tTOption extends SerializableOptionRecord,\n\tTOptionKey extends SerializableOptionKeyField<TOption>,\n\tTOptionLabel extends keyof TOption\n> extends UiBaseProps<Extract<TOption[TOptionKey], string>[]> {\n\toptions: readonly TOption[];\n\toptionKey: TOptionKey;\n\toptionLabel: TOptionLabel;\n\trenderCode?: true;\n}\n\nfunction getSerializableOptionKey<TOption extends SerializableOptionRecord, TOptionKey extends SerializableOptionKeyField<TOption>>(\n\toption: TOption,\n\toptionKey: TOptionKey\n): Extract<TOption[TOptionKey], string> {\n\treturn option[optionKey] as Extract<TOption[TOptionKey], string>;\n}\n\nfunction getSerializableOptionLabel<\n\tTOption extends SerializableOptionRecord,\n\tTOptionKey extends SerializableOptionKeyField<TOption>,\n\tTOptionLabel extends keyof TOption\n>(option: TOption, optionLabel: TOptionLabel, optionKey: TOptionKey): string {\n\tconst label = option[optionLabel];\n\n\tif (typeof label === \"string\") {\n\t\treturn label;\n\t}\n\n\tconst key = getSerializableOptionKey(option, optionKey);\n\treturn typeof key === \"string\" ? key : String(key);\n}\n\nexport function SerializableMultiSelect<\n\tTOption extends SerializableOptionRecord,\n\tTOptionKey extends SerializableOptionKeyField<TOption>,\n\tTOptionLabel extends keyof TOption\n>({\n\tlabel,\n\tdescription,\n\tdisabled,\n\tplaceholder,\n\tsize,\n\toptions,\n\tvalue,\n\tonChange,\n\toptionKey,\n\toptionLabel,\n\trenderCode\n}: SerializableMultiSelectProps<TOption, TOptionKey, TOptionLabel>) {\n\t// Как будто можно не мемоизировать, нет смысла\n\tconst items = options.map<CollectionItem>((option) => ({\n\t\tkey: String(getSerializableOptionKey(option, optionKey)),\n\t\ttext: getSerializableOptionLabel(option, optionLabel, optionKey)\n\t}));\n\tconst selectedKeys = new Set((value ?? []).map((item) => String(item)));\n\tconst selectedItems = items.filter((item) => selectedKeys.has(item.key));\n\n\treturn (\n\t\t<DeprecatedMultiSelect\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\tdisabled={disabled}\n\t\t\tplaceholder={placeholder}\n\t\t\tsize={size}\n\t\t\titems={items}\n\t\t\tcodeKey=\"key\"\n\t\t\ttextKey=\"text\"\n\t\t\thideCode={renderCode ? undefined : true}\n\t\t\tvalue={selectedItems}\n\t\t\tonChange={(nextItems) => onChange(nextItems.map((item) => item.key) as Extract<TOption[TOptionKey], string>[])}\n\t\t/>\n\t);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/multi-select/lib/materializeMultiSelectOptions.ts","../../src/multi-select/lib/adaptLegacyMultiSelectContext.ts","../../src/multi-select/lib/resolveLegacyMultiSelectTextKey.ts","../../src/multi-select/lib/multiSelectSelection.ts","../../src/multi-select/ui/MultiSelect.module.scss","../../src/multi-select/lib/createMultiSelectOptionSections.ts","../../src/multi-select/ui/MultiSelectOptionRow.tsx","../../src/multi-select/ui/MultiSelectOptionList.tsx","../../src/multi-select/ui/MultiSelectOptionSkeleton.tsx","../../src/multi-select/ui/MultiSelectOptionsWrapper.tsx","../../src/multi-select/ui/MultiSelectCore.tsx","../../src/multi-select/ui/DeprecatedMultiSelect.tsx","../../src/multi-select/ui/MultiSelect.tsx","../../src/multi-select/model/useODataMultiSelect.ts","../../src/multi-select/ui/ODataMultiSelect.tsx","../../src/multi-select/ui/ODataDependentSegmentMultiSelect.tsx","../../src/multi-select/ui/ODataDependentMultiSelect.tsx","../../src/multi-select/ui/SerializableMultiSelect.tsx"],"sourcesContent":["/**\n * Создаёт mutable-снимок readonly options. Сохранение ссылки включается только\n * legacy-адаптером, чей опубликованный callback-контракт исторически mutable.\n */\nexport function materializeMultiSelectOptions<TOption>(options: readonly TOption[], preserveArrayReference = false): TOption[] {\n\tif (preserveArrayReference && Array.isArray(options)) {\n\t\treturn options;\n\t}\n\n\treturn [...options];\n}\n","import { type CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata-service\";\n\nimport { type DeprecatedMultiSelectOptionDisableContext, type DeprecatedMultiSelectRenderContext } from \"../ui/legacyMultiSelectTypes\";\nimport {\n\ttype MultiSelectOptionDisableContext,\n\ttype MultiSelectRenderContext as GenericMultiSelectRenderContext\n} from \"../ui/multiSelectTypes\";\n\nimport { materializeMultiSelectOptions } from \"./materializeMultiSelectOptions\";\n\n/** Преобразует generic render-context в опубликованный legacy-контракт. */\nexport function adaptLegacyMultiSelectRenderContext(\n\tcontext: GenericMultiSelectRenderContext<CollectionItem>\n): DeprecatedMultiSelectRenderContext {\n\treturn {\n\t\tselectedItems: materializeMultiSelectOptions(context.selectedOptions, true),\n\t\tcommittedSelectedItems: materializeMultiSelectOptions(context.committedSelectedOptions, true),\n\t\tavailableItems: materializeMultiSelectOptions(context.availableOptions, true),\n\t\tquery: context.query,\n\t\topen: context.open,\n\t\tclearSelection: context.clearSelection,\n\t\tselectAll: context.selectAll,\n\t\tdeselectAll: context.deselectAll\n\t};\n}\n\n/** Преобразует generic disable-context без изменения identity выбранных элементов. */\nexport function adaptLegacyMultiSelectOptionDisableContext(\n\tcontext: MultiSelectOptionDisableContext<CollectionItem>\n): DeprecatedMultiSelectOptionDisableContext {\n\treturn {\n\t\tselectedItems: materializeMultiSelectOptions(context.selectedOptions, true),\n\t\tcommittedSelectedItems: materializeMultiSelectOptions(context.committedSelectedOptions, true),\n\t\tselectedKeys: context.selectedKeys,\n\t\topen: context.open\n\t};\n}\n","import { type CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata-service\";\n\n/** Сохраняет исходное правило вывода textKey для legacy code/text API. */\nexport function resolveLegacyMultiSelectTextKey(items: readonly CollectionItem[], codeKey: string, textKey?: string) {\n\tif (textKey) {\n\t\treturn textKey;\n\t}\n\n\tconst sampleItem = items[0];\n\n\tif (!sampleItem) {\n\t\treturn codeKey;\n\t}\n\n\treturn Object.keys(sampleItem).find((key) => key !== codeKey) ?? codeKey;\n}\n","import { type MultiSelectOptionKey } from \"../ui/multiSelectTypes\";\n\n/** Сравнивает наборы выбора по identity опций, не связывая их с object reference. */\nexport function areMultiSelectSelectionsEqual<TOption>(\n\tleft: readonly TOption[],\n\tright: readonly TOption[],\n\tgetOptionKey: (option: TOption) => MultiSelectOptionKey\n): boolean {\n\tif (left.length !== right.length) {\n\t\treturn false;\n\t}\n\n\tconst rightKeys = new Set(right.map(getOptionKey));\n\n\treturn left.every((option) => rightKeys.has(getOptionKey(option)));\n}\n","@use \"@/styles/mixins\" as *;\n\n.multiSelect {\n\t// Общий контейнер\n\tpadding: 0;\n}\n\n.optionCheckBox {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tflex-shrink: 0;\n\n\t--check-box-control-size: auto;\n\tpadding-left: var(--space-sm);\n}\n\n.optionActionCell {\n\tdisplay: flex;\n\talign-self: stretch;\n\tflex: 1 1 0;\n\tmin-width: 0;\n}\n","import { type MultiSelectOptionGroup } from \"../ui/multiSelectTypes\";\n\nexport type MultiSelectOptionEntry<TOption> = Readonly<{\n\toption: TOption;\n\tindex: number;\n}>;\n\nexport type MultiSelectOptionSection<TOption> = Readonly<{\n\tgroup: MultiSelectOptionGroup | undefined;\n\tentries: readonly MultiSelectOptionEntry<TOption>[];\n}>;\n\n/**\n * Группирует только соседние опции и сохраняет их глобальные индексы. Благодаря\n * этому визуальные заголовки не попадают в active-index клавиатурной навигации.\n */\nexport function createMultiSelectOptionSections<TOption>(\n\tentries: readonly MultiSelectOptionEntry<TOption>[],\n\tgetOptionGroup: (option: TOption) => MultiSelectOptionGroup | undefined\n): readonly MultiSelectOptionSection<TOption>[] {\n\tconst sections: Array<{\n\t\tgroup: MultiSelectOptionGroup | undefined;\n\t\tentries: MultiSelectOptionEntry<TOption>[];\n\t}> = [];\n\n\tfor (const entry of entries) {\n\t\tconst group = getOptionGroup(entry.option);\n\t\tconst currentSection = sections.at(-1);\n\t\tconst belongsToCurrentSection = currentSection?.group?.key === group?.key;\n\n\t\tif (currentSection && belongsToCurrentSection) {\n\t\t\tcurrentSection.entries.push(entry);\n\t\t\tcontinue;\n\t\t}\n\n\t\tsections.push({ group, entries: [entry] });\n\t}\n\n\treturn sections;\n}\n","import { CheckBox } from \"../../check-box\";\nimport { Option, OptionButton } from \"../../option\";\n\nimport styles from \"./MultiSelect.module.scss\";\nimport { type MultiSelectOptionContent, type MultiSelectOptionKey, type MultiSelectOptionState } from \"./multiSelectTypes\";\n\ntype MultiSelectOptionRowProps<TOption> = Readonly<{\n\toption: TOption;\n\tindex: number;\n\tlistId: string;\n\tactiveIndex: number;\n\tselectedKeys: ReadonlySet<MultiSelectOptionKey>;\n\tquery: string;\n\thighlightQuery: string;\n\tgetOptionKey: (option: TOption) => MultiSelectOptionKey;\n\tgetOptionDisabled?: (option: TOption) => boolean;\n\tgetOptionId: (listId: string, index: number) => string;\n\tsetOptionRef: (index: number, node: HTMLElement | null) => void;\n\ttoggleOption: (option: TOption) => void;\n\tselectOnlyOption: (option: TOption) => void;\n\trenderOption: (option: TOption, state: MultiSelectOptionState) => MultiSelectOptionContent;\n}>;\n\n/** Одна интерактивная строка grid: checkbox меняет draft, основная кнопка подтверждает только эту опцию. */\nexport function MultiSelectOptionRow<TOption>({\n\toption,\n\tindex,\n\tlistId,\n\tactiveIndex,\n\tselectedKeys,\n\tquery,\n\thighlightQuery,\n\tgetOptionKey,\n\tgetOptionDisabled,\n\tgetOptionId,\n\tsetOptionRef,\n\ttoggleOption,\n\tselectOnlyOption,\n\trenderOption\n}: MultiSelectOptionRowProps<TOption>) {\n\tconst active = index === activeIndex;\n\tconst optionKey = getOptionKey(option);\n\tconst selected = selectedKeys.has(optionKey);\n\tconst optionDisabled = getOptionDisabled?.(option) ?? false;\n\tconst content = renderOption(option, { selected, active, disabled: optionDisabled, query, highlightQuery });\n\n\treturn (\n\t\t<Option\n\t\t\tid={getOptionId(listId, index)}\n\t\t\tref={(node) => setOptionRef(index, node)}\n\t\t\trole=\"row\"\n\t\t\taria-selected={selected}\n\t\t\taria-disabled={optionDisabled || undefined}\n\t\t\tselected={selected}\n\t\t\tactive={active}\n\t\t\tdisabled={optionDisabled}>\n\t\t\t<div\n\t\t\t\trole=\"gridcell\"\n\t\t\t\tclassName={styles.optionCheckBox}\n\t\t\t\tonMouseDown={(event) => {\n\t\t\t\t\t/*\n\t\t\t\t\t * Checkbox меняет draft мышью, но владельцем виртуального фокуса\n\t\t\t\t\t * остаётся combobox input с aria-activedescendant. Иначе браузер\n\t\t\t\t\t * переводит focus на input[type=checkbox] и разрывает навигацию строк.\n\t\t\t\t\t */\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}}\n\t\t\t\tonClick={(event) => event.stopPropagation()}>\n\t\t\t\t<CheckBox\n\t\t\t\t\tvalue={selected}\n\t\t\t\t\tdisabled={optionDisabled}\n\t\t\t\t\taria-label={`${selected ? \"Убрать\" : \"Добавить\"} «${content.text}» ${selected ? \"из выбора\" : \"в выбор\"}`}\n\t\t\t\t\tonChange={() => toggleOption(option)}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div role=\"gridcell\" className={styles.optionActionCell}>\n\t\t\t\t<OptionButton\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\tdisabled={optionDisabled}\n\t\t\t\t\taria-label={`Выбрать только «${content.text}»`}\n\t\t\t\t\ttext={content.text}\n\t\t\t\t\tcode={content.code}\n\t\t\t\t\tsearchText={highlightQuery}\n\t\t\t\t\tonMouseDown={(event) => event.preventDefault()}\n\t\t\t\t\tonClick={() => selectOnlyOption(option)}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</Option>\n\t);\n}\n","import { Fragment } from \"react\";\n\nimport uiStyles from \"../../ui.module.scss\";\nimport { createMultiSelectOptionSections, type MultiSelectOptionEntry } from \"../lib/createMultiSelectOptionSections\";\n\nimport { MultiSelectOptionRow } from \"./MultiSelectOptionRow\";\nimport {\n\ttype MultiSelectOptionContent,\n\ttype MultiSelectOptionGroup,\n\ttype MultiSelectOptionKey,\n\ttype MultiSelectOptionState\n} from \"./multiSelectTypes\";\n\ntype MultiSelectOptionListProps<TOption> = Readonly<{\n\tentries: readonly MultiSelectOptionEntry<TOption>[];\n\tsectionId: string;\n\tlistId: string;\n\tactiveIndex: number;\n\tselectedKeys: ReadonlySet<MultiSelectOptionKey>;\n\tquery: string;\n\thighlightQuery: string;\n\tgetOptionKey: (option: TOption) => MultiSelectOptionKey;\n\tgetOptionGroup?: (option: TOption) => MultiSelectOptionGroup | undefined;\n\tgetOptionDisabled?: (option: TOption) => boolean;\n\tgetOptionId: (listId: string, index: number) => string;\n\tsetOptionRef: (index: number, node: HTMLElement | null) => void;\n\ttoggleOption: (option: TOption) => void;\n\tselectOnlyOption: (option: TOption) => void;\n\trenderOption: (option: TOption, state: MultiSelectOptionState) => MultiSelectOptionContent;\n}>;\n\n/** Рендерит одну selected/available-секцию, сохраняя global option indexes при группировке. */\nexport function MultiSelectOptionList<TOption>({ entries, sectionId, getOptionGroup, ...rowProps }: MultiSelectOptionListProps<TOption>) {\n\tconst sections = getOptionGroup ? createMultiSelectOptionSections(entries, getOptionGroup) : [{ group: undefined, entries }];\n\n\treturn sections.map((section, sectionIndex) => {\n\t\tconst rows = section.entries.map(({ option, index }) => (\n\t\t\t<MultiSelectOptionRow key={`${rowProps.getOptionKey(option)}-${index}`} option={option} index={index} {...rowProps} />\n\t\t));\n\n\t\tif (!section.group) {\n\t\t\treturn <Fragment key={`${sectionId}-ungrouped-${sectionIndex}`}>{rows}</Fragment>;\n\t\t}\n\n\t\tconst groupLabelId = `${sectionId}-group-${sectionIndex}`;\n\n\t\treturn (\n\t\t\t<div key={`${sectionId}-${section.group.key}-${sectionIndex}`} role=\"rowgroup\" aria-labelledby={groupLabelId}>\n\t\t\t\t<div id={groupLabelId} role=\"row\" className={uiStyles.uiPopupGroupLabel}>\n\t\t\t\t\t<div role=\"gridcell\">{section.group.label}</div>\n\t\t\t\t</div>\n\t\t\t\t{rows}\n\t\t\t</div>\n\t\t);\n\t});\n}\n","import { Text } from \"../../text\";\nimport uiStyles from \"../../ui.module.scss\";\n\ninterface MultiSelectOptionSkeletonProps {\n\ttext: string;\n\tisError?: boolean;\n}\n\n/**\n * Скелетон строки опции для `MultiSelect`. Используется во время загрузки или при отображении ошибок получения списка.\n */\nexport function MultiSelectOptionSkeleton({ text, isError }: MultiSelectOptionSkeletonProps) {\n\treturn (\n\t\t<div className={uiStyles.uiPopupOption}>\n\t\t\t<span className={uiStyles.uiPopupOptionIcon}></span>\n\t\t\t<Text color={isError ? \"error\" : \"primary\"}>{text}</Text>\n\t\t</div>\n\t);\n}\n","import { type PropsWithChildren } from \"react\";\n\nimport { PickerStatus } from \"../../picker\";\n\nimport { MultiSelectOptionSkeleton } from \"./MultiSelectOptionSkeleton\";\n\ntype MultiSelectOptionsWrapperProps = PropsWithChildren<{\n\tisNoData?: boolean;\n\terror?: string;\n}>;\n\n/** Выбирает одно доступное состояние тела popup, не меняя структуру самого grid. */\nexport function MultiSelectOptionsWrapper({ isNoData, error, children }: MultiSelectOptionsWrapperProps) {\n\tif (isNoData) {\n\t\treturn <PickerStatus emptyState={<MultiSelectOptionSkeleton text=\"Нет данных\" />} />;\n\t}\n\n\tif (error) {\n\t\treturn <PickerStatus errorState={<MultiSelectOptionSkeleton isError text=\"Ошибка загрузки\" />} />;\n\t}\n\n\treturn <>{children}</>;\n}\n","import { useCallback, useMemo, useRef, useState } from \"react\";\n\nimport {\n\textractPickerTextContent,\n\tPickerField,\n\tPickerPopup,\n\tPickerTrigger,\n\tusePickerDefaultFilter,\n\tusePickerFloatingListbox,\n\tusePickerQuery,\n\tusePickerSelectionLifecycle,\n\tusePickerTriggerController\n} from \"../../picker\";\nimport { Separator } from \"../../separator\";\nimport { formatMultiSelectOptionCount } from \"../lib/formatMultiSelectOptionCount\";\nimport { materializeMultiSelectOptions } from \"../lib/materializeMultiSelectOptions\";\nimport { areMultiSelectSelectionsEqual } from \"../lib/multiSelectSelection\";\n\nimport { type MultiSelectProps } from \"./MultiSelect\";\nimport styles from \"./MultiSelect.module.scss\";\nimport { MultiSelectOptionList } from \"./MultiSelectOptionList\";\nimport { MultiSelectOptionsWrapper } from \"./MultiSelectOptionsWrapper\";\nimport { type MultiSelectOptionDisableContext } from \"./multiSelectTypes\";\n\ntype MultiSelectCoreProps<TOption> = MultiSelectProps<TOption> &\n\tReadonly<{\n\t\t/** Сохраняет опубликованную ссылочную семантику только для legacy MultiSelect. */\n\t\tpreserveOptionArrayReference?: boolean;\n\t}>;\n\n/**\n * Единая generic-реализация множественного выбора. Публичные компоненты только\n * адаптируют свои контракты к этим selector-функциям, поэтому focus и a11y\n * поведение не расходятся между новым и legacy API.\n */\nexport function MultiSelectCore<TOption>({\n\tref,\n\toptions,\n\tvalue,\n\tonChange,\n\tgetOptionKey,\n\tgetOptionLabel,\n\tgetOptionCode,\n\tgetOptionGroup,\n\tgetOptionSearchText,\n\tlabel,\n\tdescription,\n\tplaceholder,\n\tsize,\n\tquery,\n\tdefaultQuery,\n\thighlightQuery,\n\tonQuery,\n\tdefaultFilter = true,\n\tonOpen,\n\tonClose,\n\tgetOptionDisabled,\n\tdisabled,\n\terror,\n\tfieldError,\n\trequired,\n\tisLoading,\n\trenderToken,\n\trenderToolbar,\n\trenderOption,\n\tpreserveOptionArrayReference = false\n}: MultiSelectCoreProps<TOption>) {\n\tconst inputRef = useRef<HTMLInputElement | null>(null);\n\tconst [open, setOpen] = useState(false);\n\tconst triggerMode = \"search-multi\";\n\tconst committedSelectedOptions = useMemo(\n\t\t() => materializeMultiSelectOptions(value, preserveOptionArrayReference),\n\t\t[preserveOptionArrayReference, value]\n\t);\n\tconst committedSelectedKeys = useMemo(\n\t\t() => new Set(committedSelectedOptions.map(getOptionKey)),\n\t\t[committedSelectedOptions, getOptionKey]\n\t);\n\tconst availableOptions = useMemo(\n\t\t() => options.filter((option) => !committedSelectedKeys.has(getOptionKey(option))),\n\t\t[committedSelectedKeys, getOptionKey, options]\n\t);\n\tconst {\n\t\tquery: currentQuery,\n\t\tsetQuery,\n\t\tresetQueryOnClose\n\t} = usePickerQuery({\n\t\tquery,\n\t\tdefaultQuery,\n\t\tonQuery,\n\t\ttriggerMode\n\t});\n\tconst handleOpenChange = (nextOpen: boolean) => {\n\t\tif (open && !nextOpen && resetQueryOnClose) {\n\t\t\tsetQuery(\"\");\n\t\t}\n\n\t\tsetOpen(nextOpen);\n\t};\n\tconst getSearchText = useCallback(\n\t\t(option: TOption) =>\n\t\t\tgetOptionSearchText?.(option) ??\n\t\t\t[getOptionLabel(option), getOptionCode?.(option), extractPickerTextContent(getOptionGroup?.(option)?.label)].filter(\n\t\t\t\t(part): part is string => Boolean(part)\n\t\t\t),\n\t\t[getOptionCode, getOptionGroup, getOptionLabel, getOptionSearchText]\n\t);\n\tconst filteredCommittedSelectedOptions = usePickerDefaultFilter({\n\t\toptions: committedSelectedOptions,\n\t\tquery: currentQuery,\n\t\tenabled: defaultFilter,\n\t\tgetSearchText\n\t});\n\tconst filteredAvailableOptions = usePickerDefaultFilter({\n\t\toptions: availableOptions,\n\t\tquery: currentQuery,\n\t\tenabled: defaultFilter,\n\t\tgetSearchText\n\t});\n\tconst visibleOptions = useMemo(\n\t\t() => [...filteredCommittedSelectedOptions, ...filteredAvailableOptions],\n\t\t[filteredAvailableOptions, filteredCommittedSelectedOptions]\n\t);\n\tconst selectedIndex = filteredCommittedSelectedOptions.length > 0 ? 0 : -1;\n\tconst compareSelections = useCallback(\n\t\t(left: TOption[], right: TOption[]) => areMultiSelectSelectionsEqual(left, right, getOptionKey),\n\t\t[getOptionKey]\n\t);\n\tconst {\n\t\tdraftValue: draftSelectedOptions,\n\t\tsetDraftValue: setDraftSelectedOptions,\n\t\tprepareOpen\n\t} = usePickerSelectionLifecycle({\n\t\tvalue: committedSelectedOptions,\n\t\topen,\n\t\tonCommit: onChange,\n\t\tonOpen,\n\t\tonClose,\n\t\tisEqual: compareSelections\n\t});\n\tconst selectedKeys = useMemo(() => new Set(draftSelectedOptions.map(getOptionKey)), [draftSelectedOptions, getOptionKey]);\n\tconst optionDisableContext = useMemo<MultiSelectOptionDisableContext<TOption>>(\n\t\t() => ({\n\t\t\tselectedOptions: draftSelectedOptions,\n\t\t\tcommittedSelectedOptions,\n\t\t\tselectedKeys,\n\t\t\topen\n\t\t}),\n\t\t[committedSelectedOptions, draftSelectedOptions, open, selectedKeys]\n\t);\n\tconst isOptionDisabled = useCallback(\n\t\t(option: TOption) => getOptionDisabled?.(option, optionDisableContext) ?? false,\n\t\t[getOptionDisabled, optionDisableContext]\n\t);\n\tconst {\n\t\tactiveIndex,\n\t\tcontext,\n\t\tfloatingStyles,\n\t\tgetFloatingProps,\n\t\tsetReference,\n\t\tsetFloating,\n\t\tsetOptionRef,\n\t\tclose,\n\t\topenList,\n\t\ttoggleOpen,\n\t\thandleReferenceKeyDown,\n\t\thandleFloatingKeyDown,\n\t\tgetOptionId,\n\t\tgetActiveOptionId\n\t} = usePickerFloatingListbox({\n\t\toptions: visibleOptions,\n\t\tselectedIndex,\n\t\topen,\n\t\tonOpenChange: handleOpenChange,\n\t\tonSelect: undefined,\n\t\tdisabled,\n\t\tgetOptionDisabled: isOptionDisabled,\n\t\tcloseOnSelect: false,\n\t\tallowOpenWithoutOptions: true,\n\t\ttriggerMode\n\t});\n\n\tconst currentHighlightQuery = highlightQuery ?? currentQuery;\n\tconst toggleDraftSelection = (option: TOption) => {\n\t\tconst optionKey = getOptionKey(option);\n\n\t\tsetDraftSelectedOptions((currentOptions) => {\n\t\t\tconst isSelected = currentOptions.some((selectedOption) => getOptionKey(selectedOption) === optionKey);\n\n\t\t\tif (isSelected) {\n\t\t\t\treturn currentOptions.filter((selectedOption) => getOptionKey(selectedOption) !== optionKey);\n\t\t\t}\n\n\t\t\tif (isOptionDisabled(option)) {\n\t\t\t\treturn currentOptions;\n\t\t\t}\n\n\t\t\treturn [...currentOptions, option];\n\t\t});\n\t};\n\n\tconst setInputNode = useCallback(\n\t\t(node: HTMLInputElement | null) => {\n\t\t\tinputRef.current = node;\n\n\t\t\tif (typeof ref === \"function\") {\n\t\t\t\tref(node);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (ref) {\n\t\t\t\tref.current = node;\n\t\t\t}\n\t\t},\n\t\t[ref]\n\t);\n\n\tconst clearSelection = () => {\n\t\tsetDraftSelectedOptions([]);\n\n\t\tif (!open) {\n\t\t\tonChange([]);\n\t\t}\n\t};\n\n\tconst selectAll = () => {\n\t\tsetDraftSelectedOptions((currentOptions) => {\n\t\t\tconst nextOptions = [...currentOptions];\n\t\t\tconst nextSelectedKeys = new Set(currentOptions.map(getOptionKey));\n\n\t\t\tfor (const option of visibleOptions) {\n\t\t\t\tconst optionKey = getOptionKey(option);\n\n\t\t\t\tif (!nextSelectedKeys.has(optionKey) && !isOptionDisabled(option)) {\n\t\t\t\t\tnextSelectedKeys.add(optionKey);\n\t\t\t\t\tnextOptions.push(option);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn nextOptions;\n\t\t});\n\t};\n\n\tconst deselectAll = () => {\n\t\tsetDraftSelectedOptions([]);\n\t};\n\n\tconst selectOnlyOption = (option: TOption) => {\n\t\tif (isOptionDisabled(option)) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetDraftSelectedOptions([option]);\n\t\tclose();\n\t};\n\n\tconst currentSelectedOptions = open ? draftSelectedOptions : committedSelectedOptions;\n\tconst hasSelectedOptions = currentSelectedOptions.length > 0;\n\tconst renderContext = {\n\t\tselectedOptions: currentSelectedOptions,\n\t\tcommittedSelectedOptions,\n\t\tavailableOptions: filteredAvailableOptions,\n\t\tquery: currentQuery,\n\t\topen,\n\t\tclearSelection,\n\t\tselectAll,\n\t\tdeselectAll\n\t};\n\tconst defaultTokenNode =\n\t\tcurrentSelectedOptions.length > 1\n\t\t\t? formatMultiSelectOptionCount(currentSelectedOptions.length)\n\t\t\t: currentSelectedOptions.length === 1\n\t\t\t\t? getOptionLabel(currentSelectedOptions[0])\n\t\t\t\t: undefined;\n\tconst tokenNode = renderToken === undefined ? defaultTokenNode : typeof renderToken === \"function\" ? renderToken(renderContext) : null;\n\tconst toolbarNode = typeof renderToolbar === \"function\" ? renderToolbar(renderContext) : renderToolbar;\n\tconst renderDefaultOption = useCallback(\n\t\t(option: TOption) => ({ text: getOptionLabel(option), code: getOptionCode?.(option) }),\n\t\t[getOptionCode, getOptionLabel]\n\t);\n\tconst optionRenderer = renderOption ?? renderDefaultOption;\n\tconst selectedEntries = filteredCommittedSelectedOptions.map((option, index) => ({ option, index }));\n\tconst availableEntries = filteredAvailableOptions.map((option, index) => ({\n\t\toption,\n\t\tindex: index + selectedEntries.length\n\t}));\n\tconst isNoData = !isLoading && !error && visibleOptions.length === 0;\n\tconst triggerController = usePickerTriggerController({\n\t\tmode: triggerMode,\n\t\topen,\n\t\tcurrentQuery,\n\t\thasDisplayValue: false,\n\t\tinputRef,\n\t\tsetQuery,\n\t\topenList,\n\t\tclose,\n\t\ttoggleOpen,\n\t\tonBeforeOpen: () => {\n\t\t\tif (!open) {\n\t\t\t\tprepareOpen();\n\t\t\t}\n\t\t}\n\t});\n\n\treturn (\n\t\t<PickerField\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\tdisabled={disabled}\n\t\t\tsize={size}\n\t\t\tclassName={styles.multiSelect}\n\t\t\terror={fieldError}\n\t\t\trequired={required}>\n\t\t\t{({ controlId, labelId, describedBy }) => {\n\t\t\t\tconst listId = `${controlId}-grid`;\n\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<PickerTrigger\n\t\t\t\t\t\t\tref={setInputNode}\n\t\t\t\t\t\t\trootRef={setReference}\n\t\t\t\t\t\t\tid={controlId}\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\topen={open}\n\t\t\t\t\t\t\toptionCount={options.length}\n\t\t\t\t\t\t\tlabel={label}\n\t\t\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t\t\tplaceholderFallback=\"Выберите значения\"\n\t\t\t\t\t\t\tvalue={currentQuery}\n\t\t\t\t\t\t\tselectedValue={tokenNode}\n\t\t\t\t\t\t\thasSelection={hasSelectedOptions}\n\t\t\t\t\t\t\tshowSelectedValue={hasSelectedOptions && currentQuery.length === 0}\n\t\t\t\t\t\t\tclearable\n\t\t\t\t\t\t\tonClear={clearSelection}\n\t\t\t\t\t\t\tclearAriaLabel=\"Очистить все\"\n\t\t\t\t\t\t\tonToggleMouseDown={triggerController.handleToggleMouseDown}\n\t\t\t\t\t\t\tonToggleClick={triggerController.handleToggleClick}\n\t\t\t\t\t\t\taria-labelledby={labelId}\n\t\t\t\t\t\t\taria-describedby={describedBy}\n\t\t\t\t\t\t\taria-required={required || undefined}\n\t\t\t\t\t\t\taria-invalid={Boolean(fieldError) || undefined}\n\t\t\t\t\t\t\taria-haspopup=\"grid\"\n\t\t\t\t\t\t\taria-expanded={open}\n\t\t\t\t\t\t\taria-controls={open ? listId : undefined}\n\t\t\t\t\t\t\taria-autocomplete=\"list\"\n\t\t\t\t\t\t\taria-activedescendant={open ? getActiveOptionId(listId) : undefined}\n\t\t\t\t\t\t\trootClassName=\"flex alignItemsCenter\"\n\t\t\t\t\t\t\tonChange={(event) => {\n\t\t\t\t\t\t\t\ttriggerController.handleTriggerInputChange(event.target.value);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonClick={triggerController.handleTriggerClick}\n\t\t\t\t\t\t\tonFocus={(event) => {\n\t\t\t\t\t\t\t\ttriggerController.handleTriggerFocus(event.currentTarget);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonKeyDown={(event) => {\n\t\t\t\t\t\t\t\thandleReferenceKeyDown(event);\n\n\t\t\t\t\t\t\t\tif (event.defaultPrevented) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (open && event.ctrlKey && event.key === \" \") {\n\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\tconst activeOption = visibleOptions[activeIndex];\n\t\t\t\t\t\t\t\t\tif (activeIndex >= 0 && activeIndex < visibleOptions.length) {\n\t\t\t\t\t\t\t\t\t\ttoggleDraftSelection(activeOption);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ttriggerController.handleTriggerKeyDown({\n\t\t\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t\t\tonActivateWhenOpen: () => {\n\t\t\t\t\t\t\t\t\t\tconst activeOption = visibleOptions[activeIndex];\n\t\t\t\t\t\t\t\t\t\tif (activeIndex >= 0 && activeIndex < visibleOptions.length) {\n\t\t\t\t\t\t\t\t\t\t\tselectOnlyOption(activeOption);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tenableClosedArrowDownOpen: true,\n\t\t\t\t\t\t\t\t\tsuppressClosedArrowUp: true\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<PickerPopup\n\t\t\t\t\t\t\topen={open}\n\t\t\t\t\t\t\tcontext={context}\n\t\t\t\t\t\t\tfloatingStyles={floatingStyles}\n\t\t\t\t\t\t\tlistId={listId}\n\t\t\t\t\t\t\tlabelId={labelId}\n\t\t\t\t\t\t\tdescriptionId={describedBy}\n\t\t\t\t\t\t\tactiveOptionId={open ? getActiveOptionId(listId) : undefined}\n\t\t\t\t\t\t\tariaMultiselectable\n\t\t\t\t\t\t\tpopupRole=\"grid\"\n\t\t\t\t\t\t\tsetFloating={setFloating}\n\t\t\t\t\t\t\tgetFloatingProps={getFloatingProps}\n\t\t\t\t\t\t\tonKeyDown={handleFloatingKeyDown}\n\t\t\t\t\t\t\tinitialFocus={-1}\n\t\t\t\t\t\t\treturnFocus={false}\n\t\t\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\t\t\ttoolbar={toolbarNode}\n\t\t\t\t\t\t\tselectionActions={\n\t\t\t\t\t\t\t\trenderToolbar === undefined ? { onSelectAll: selectAll, onDeselectAll: deselectAll } : undefined\n\t\t\t\t\t\t\t}>\n\t\t\t\t\t\t\t<MultiSelectOptionsWrapper isNoData={isNoData} error={error}>\n\t\t\t\t\t\t\t\t<div role=\"presentation\" className=\"scrollable overscroll h100\">\n\t\t\t\t\t\t\t\t\t<MultiSelectOptionList\n\t\t\t\t\t\t\t\t\t\tentries={selectedEntries}\n\t\t\t\t\t\t\t\t\t\tsectionId={`${listId}-selected`}\n\t\t\t\t\t\t\t\t\t\tlistId={listId}\n\t\t\t\t\t\t\t\t\t\tactiveIndex={activeIndex}\n\t\t\t\t\t\t\t\t\t\tselectedKeys={selectedKeys}\n\t\t\t\t\t\t\t\t\t\tquery={currentQuery}\n\t\t\t\t\t\t\t\t\t\thighlightQuery={currentHighlightQuery}\n\t\t\t\t\t\t\t\t\t\tgetOptionKey={getOptionKey}\n\t\t\t\t\t\t\t\t\t\tgetOptionGroup={getOptionGroup}\n\t\t\t\t\t\t\t\t\t\tgetOptionDisabled={isOptionDisabled}\n\t\t\t\t\t\t\t\t\t\tgetOptionId={getOptionId}\n\t\t\t\t\t\t\t\t\t\tsetOptionRef={setOptionRef}\n\t\t\t\t\t\t\t\t\t\ttoggleOption={toggleDraftSelection}\n\t\t\t\t\t\t\t\t\t\tselectOnlyOption={selectOnlyOption}\n\t\t\t\t\t\t\t\t\t\trenderOption={optionRenderer}\n\t\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t\t{selectedEntries.length > 0 && availableEntries.length > 0 && (\n\t\t\t\t\t\t\t\t\t\t<Separator aria-hidden=\"true\" className=\"marginBlockSm\" />\n\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t<MultiSelectOptionList\n\t\t\t\t\t\t\t\t\t\tentries={availableEntries}\n\t\t\t\t\t\t\t\t\t\tsectionId={`${listId}-available`}\n\t\t\t\t\t\t\t\t\t\tlistId={listId}\n\t\t\t\t\t\t\t\t\t\tactiveIndex={activeIndex}\n\t\t\t\t\t\t\t\t\t\tselectedKeys={selectedKeys}\n\t\t\t\t\t\t\t\t\t\tquery={currentQuery}\n\t\t\t\t\t\t\t\t\t\thighlightQuery={currentHighlightQuery}\n\t\t\t\t\t\t\t\t\t\tgetOptionKey={getOptionKey}\n\t\t\t\t\t\t\t\t\t\tgetOptionGroup={getOptionGroup}\n\t\t\t\t\t\t\t\t\t\tgetOptionDisabled={isOptionDisabled}\n\t\t\t\t\t\t\t\t\t\tgetOptionId={getOptionId}\n\t\t\t\t\t\t\t\t\t\tsetOptionRef={setOptionRef}\n\t\t\t\t\t\t\t\t\t\ttoggleOption={toggleDraftSelection}\n\t\t\t\t\t\t\t\t\t\tselectOnlyOption={selectOnlyOption}\n\t\t\t\t\t\t\t\t\t\trenderOption={optionRenderer}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</MultiSelectOptionsWrapper>\n\t\t\t\t\t\t</PickerPopup>\n\t\t\t\t\t</>\n\t\t\t\t);\n\t\t\t}}\n\t\t</PickerField>\n\t);\n}\n","import { type ReactNode, type Ref, useMemo } from \"react\";\n\nimport { type CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata-service\";\n\nimport { type UiBaseProps } from \"../../types\";\nimport { adaptLegacyMultiSelectOptionDisableContext, adaptLegacyMultiSelectRenderContext } from \"../lib/adaptLegacyMultiSelectContext\";\nimport { resolveLegacyMultiSelectTextKey } from \"../lib/resolveLegacyMultiSelectTextKey\";\n\nimport {\n\ttype DeprecatedMultiSelectItemState,\n\ttype DeprecatedMultiSelectOptionContent,\n\ttype DeprecatedMultiSelectOptionDisableContext,\n\ttype DeprecatedMultiSelectRenderContext\n} from \"./legacyMultiSelectTypes\";\nimport { MultiSelectCore } from \"./MultiSelectCore\";\n\ntype MultiSelectOptionalRenderer<TContext> = ((context: TContext) => ReactNode) | null | false;\n\ninterface MultiSelectRenderers {\n\trenderToken?: MultiSelectOptionalRenderer<DeprecatedMultiSelectRenderContext>;\n\trenderToolbar?: MultiSelectOptionalRenderer<DeprecatedMultiSelectRenderContext>;\n\trenderItem?: (item: CollectionItem, state: DeprecatedMultiSelectItemState) => DeprecatedMultiSelectOptionContent;\n}\n\n/** Контракт устаревшего codeKey/textKey-компонента. */\nexport interface DeprecatedMultiSelectProps<TOption extends Record<string, string> = CollectionItem>\n\textends MultiSelectRenderers, UiBaseProps<TOption[]> {\n\tref?: Ref<HTMLInputElement>;\n\tcodeKey: string;\n\ttextKey?: string;\n\thideCode?: boolean;\n\tquery?: string;\n\tdefaultQuery?: string;\n\thighlightQuery?: string;\n\tonQuery?: (value: string) => void;\n\tdefaultFilter?: boolean;\n\titems: TOption[];\n\tgetOptionDisabled?: (item: TOption, context: DeprecatedMultiSelectOptionDisableContext) => boolean;\n\tonOpen?: () => void;\n\tonClose?: (value: TOption[]) => void;\n\terror?: string;\n\tfieldError?: string;\n\trequired?: boolean;\n\tisLoading?: boolean;\n}\n\n/**\n * Устаревший адаптер OData-подобных `codeKey`/`textKey` коллекций. Компонент\n * сохраняет прежнюю OData-семантику, пока consumers переходят на selector API\n * канонического `MultiSelect`.\n *\n * @deprecated Используйте `MultiSelect` с selector-функциями.\n */\nexport function DeprecatedMultiSelect<TOption extends Record<string, string> = CollectionItem>({\n\tref,\n\tcodeKey,\n\ttextKey,\n\thideCode,\n\titems,\n\tvalue,\n\tonChange,\n\tgetOptionDisabled,\n\tonClose,\n\trenderToken,\n\trenderToolbar,\n\trenderItem,\n\t...props\n}: DeprecatedMultiSelectProps<TOption>) {\n\tconst selectedItems = useMemo(() => value ?? [], [value]);\n\tconst resolvedTextKey = useMemo(\n\t\t() => resolveLegacyMultiSelectTextKey([...selectedItems, ...items], codeKey, textKey),\n\t\t[codeKey, items, selectedItems, textKey]\n\t);\n\tconst adaptedRenderToken =\n\t\ttypeof renderToken === \"function\"\n\t\t\t? (context: Parameters<typeof adaptLegacyMultiSelectRenderContext>[0]) =>\n\t\t\t\t\trenderToken(adaptLegacyMultiSelectRenderContext(context))\n\t\t\t: renderToken;\n\tconst adaptedRenderToolbar =\n\t\ttypeof renderToolbar === \"function\"\n\t\t\t? (context: Parameters<typeof adaptLegacyMultiSelectRenderContext>[0]) =>\n\t\t\t\t\trenderToolbar(adaptLegacyMultiSelectRenderContext(context))\n\t\t\t: renderToolbar;\n\n\treturn (\n\t\t<MultiSelectCore\n\t\t\t{...props}\n\t\t\tref={ref}\n\t\t\tpreserveOptionArrayReference\n\t\t\toptions={items}\n\t\t\tvalue={selectedItems}\n\t\t\tonChange={onChange}\n\t\t\tgetOptionKey={(item) => item[codeKey]}\n\t\t\tgetOptionLabel={(item) => item[resolvedTextKey] ?? item[codeKey] ?? \"\"}\n\t\t\tgetOptionCode={hideCode ? undefined : (item) => item[codeKey] ?? \"\"}\n\t\t\tgetOptionSearchText={(item) => Array.from(new Set([item[resolvedTextKey], item[codeKey], ...Object.values(item)]))}\n\t\t\tgetOptionDisabled={\n\t\t\t\tgetOptionDisabled\n\t\t\t\t\t? (item, context) => getOptionDisabled(item, adaptLegacyMultiSelectOptionDisableContext(context))\n\t\t\t\t\t: undefined\n\t\t\t}\n\t\t\tonClose={onClose}\n\t\t\trenderToken={adaptedRenderToken}\n\t\t\trenderToolbar={adaptedRenderToolbar}\n\t\t\trenderOption={\n\t\t\t\trenderItem\n\t\t\t\t\t? (item, state) => renderItem(item, state)\n\t\t\t\t\t: (item) => ({\n\t\t\t\t\t\t\ttext: item[resolvedTextKey] ?? \"\",\n\t\t\t\t\t\t\tcode: hideCode ? undefined : (item[codeKey] ?? \"\")\n\t\t\t\t\t\t})\n\t\t\t}\n\t\t/>\n\t);\n}\n\nDeprecatedMultiSelect.displayName = \"DeprecatedMultiSelect\";\n\nexport {\n\ttype DeprecatedMultiSelectItemState,\n\ttype DeprecatedMultiSelectOptionContent,\n\ttype DeprecatedMultiSelectOptionDisableContext,\n\ttype DeprecatedMultiSelectRenderContext\n} from \"./legacyMultiSelectTypes\";\n","import { type Ref } from \"react\";\n\nimport { type UiBaseProps } from \"../../types\";\n\nimport { MultiSelectCore } from \"./MultiSelectCore\";\nimport {\n\ttype MultiSelectOptionDisableContext,\n\ttype MultiSelectOptionGroup,\n\ttype MultiSelectOptionKey,\n\ttype MultiSelectRenderers\n} from \"./multiSelectTypes\";\n\n/**\n * Типобезопасный контракт множественного выбора. Опция остаётся в исходной\n * domain/view-model форме, а UI получает только необходимые selector-функции.\n */\nexport type MultiSelectProps<TOption> = MultiSelectRenderers<TOption> &\n\tOmit<UiBaseProps<TOption[], readonly TOption[]>, \"onChange\"> &\n\tReadonly<{\n\t\tref?: Ref<HTMLInputElement>;\n\t\toptions: readonly TOption[];\n\t\tonChange: (value: TOption[]) => void;\n\t\tgetOptionKey: (option: TOption) => MultiSelectOptionKey;\n\t\tgetOptionLabel: (option: TOption) => string;\n\t\tgetOptionCode?: (option: TOption) => string | undefined;\n\t\tgetOptionGroup?: (option: TOption) => MultiSelectOptionGroup | undefined;\n\t\tgetOptionSearchText?: (option: TOption) => string | readonly string[];\n\t\tgetOptionDisabled?: (option: TOption, context: MultiSelectOptionDisableContext<TOption>) => boolean;\n\t\tquery?: string;\n\t\tdefaultQuery?: string;\n\t\thighlightQuery?: string;\n\t\tonQuery?: (value: string) => void;\n\t\tdefaultFilter?: boolean;\n\t\tonOpen?: () => void;\n\t\tonClose?: (value: TOption[]) => void;\n\t\terror?: string;\n\t\t/** Ошибка выбранного значения; error сообщает о сбое загрузки опций в popup. */\n\t\tfieldError?: string;\n\t\trequired?: boolean;\n\t\tisLoading?: boolean;\n\t}>;\n\n/** Множественный выбор для произвольной типизированной коллекции опций. */\nexport function MultiSelect<TOption>(props: MultiSelectProps<TOption>) {\n\treturn <MultiSelectCore {...props} />;\n}\n","import { ODataCollectionModel, ODataSelectBaseProps } from \"@ryuzaki13/react-foundation-api/odata\";\nimport { CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata-service\";\n\nimport { mapSelectedItemsToValues, useODataSelectBase } from \"../../select/model/useODataSelectBase\";\n\ninterface UseODataMultiSelectOptions extends Omit<ODataSelectBaseProps, \"model\"> {\n\tmodel: Required<ODataCollectionModel>;\n\tonChange: (keys: string[]) => void;\n}\n\nexport function useODataMultiSelect({ odata, segment, model, value, dependencies, onChange }: UseODataMultiSelectOptions) {\n\tconst odataModel = useODataSelectBase({\n\t\todata,\n\t\tsegment,\n\t\tmodel,\n\t\tvalue,\n\t\tdependencies\n\t});\n\n\tconst handleChange = (items: CollectionItem[]) => {\n\t\tonChange(mapSelectedItemsToValues(items, odataModel.selectionKey));\n\t};\n\n\treturn {\n\t\t...odataModel,\n\t\thandleChange\n\t};\n}\n","import { ODataSelectBaseProps, useODataCollectionModel } from \"@ryuzaki13/react-foundation-api/odata\";\n\nimport { UiBaseProps } from \"../../types\";\nimport { useODataMultiSelect } from \"../model/useODataMultiSelect\";\n\nimport { DeprecatedMultiSelect } from \"./DeprecatedMultiSelect\";\n\ntype ODataMultiSelectProps = ODataSelectBaseProps &\n\tOmit<UiBaseProps<string[]>, \"placeholder\"> & { required?: boolean; fieldError?: string };\n\nexport function ODataMultiSelect({\n\todata,\n\tsegment,\n\tmodel: initialModel,\n\tlabel,\n\tdescription,\n\tdisabled,\n\trequired,\n\tfieldError,\n\tvalue,\n\tdependencies,\n\tonChange,\n\tsize\n}: ODataMultiSelectProps) {\n\tconst model = useODataCollectionModel(initialModel);\n\tconst odataModel = useODataMultiSelect({\n\t\todata,\n\t\tsegment,\n\t\tmodel,\n\t\tvalue,\n\t\tdependencies,\n\t\tonChange\n\t});\n\n\treturn (\n\t\t<DeprecatedMultiSelect\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\trequired={required}\n\t\t\tfieldError={fieldError}\n\t\t\tsize={size}\n\t\t\tcodeKey={odataModel.codeKey}\n\t\t\ttextKey={odataModel.textKey}\n\t\t\thideCode={segment.hideCode ?? odata.hideCode}\n\t\t\titems={odataModel.filteredItems}\n\t\t\tvalue={odataModel.selectedItems}\n\t\t\tonChange={odataModel.handleChange}\n\t\t\tonQuery={odataModel.setQuery}\n\t\t\tquery={odataModel.query}\n\t\t\tdefaultFilter={false}\n\t\t\thighlightQuery={odataModel.debouncedQuery}\n\t\t\tisLoading={odataModel.isLoading}\n\t\t\tdisabled={disabled}\n\t\t\tplaceholder={odataModel.placeholder}\n\t\t\terror={odataModel.isError ? \"Ошибка загрузки\" : undefined}\n\t\t/>\n\t);\n}\n","import { useCallback } from \"react\";\n\nimport { useODataDependentSelection } from \"../../odata-dependent\";\n\nimport { ODataMultiSelect } from \"./ODataMultiSelect\";\n\nimport type { ODataDependentSegmentControlProps } from \"../../odata-dependent\";\n\nexport type ODataDependentSegmentMultiSelectProps = ODataDependentSegmentControlProps;\n\nexport function ODataDependentSegmentMultiSelect(props: ODataDependentSegmentMultiSelectProps) {\n\tconst { item, disabled, label, description, required, fieldError, size, width = 15 } = props;\n\tconst selection = useODataDependentSelection(props);\n\tconst { updateSegment } = selection;\n\tconst widthStyle = `calc(${width}em + var(--width-add))`;\n\n\tconst handleSelectionChange = useCallback(\n\t\t(keys: string[]) => {\n\t\t\tupdateSegment(item.id, keys);\n\t\t},\n\t\t[item.id, updateSegment]\n\t);\n\n\treturn (\n\t\t<div style={{ maxWidth: widthStyle, minWidth: widthStyle }}>\n\t\t\t<ODataMultiSelect\n\t\t\t\todata={item.odata}\n\t\t\t\tsegment={item.segment}\n\t\t\t\tmodel={item.model}\n\t\t\t\tdependencies={selection.values}\n\t\t\t\tvalue={selection.values[item.id]}\n\t\t\t\tonChange={handleSelectionChange}\n\t\t\t\tdisabled={disabled || selection.isSegmentDisabled(item.id)}\n\t\t\t\tlabel={label}\n\t\t\t\tdescription={description}\n\t\t\t\trequired={required}\n\t\t\t\tfieldError={fieldError}\n\t\t\t\tsize={size}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n","import { flattenODataDependentServices, type ODataDependentBaseProps } from \"@ryuzaki13/react-foundation-api/odata\";\n\nimport { useODataDependentSelection } from \"../../odata-dependent\";\n\nimport { ODataDependentSegmentMultiSelect } from \"./ODataDependentSegmentMultiSelect\";\n\nimport type { UseODataDependentSelectionOptions } from \"../../odata-dependent\";\n\nexport type ODataDependentMultiSelectProps = Omit<ODataDependentBaseProps, \"dependencies\" | \"value\"> &\n\tUseODataDependentSelectionOptions & {\n\t\t/**\n\t\t * Ширина одного элемента в `em` единицах.\n\t\t *\n\t\t * @default 15\n\t\t */\n\t\twidth?: number;\n\t};\n\nexport function ODataDependentMultiSelect(props: ODataDependentMultiSelectProps) {\n\tconst { width = 15, odata, segments, model, values, defaultValues, onChange, selectionMode, segmentOrder } = props;\n\tconst selection = useODataDependentSelection({ values, defaultValues, onChange });\n\tconst segmentSelectionProps =\n\t\tselectionMode === \"sequential\" ? { selectionMode: \"sequential\" as const, segmentOrder } : { selectionMode, segmentOrder };\n\tconst items = flattenODataDependentServices([\n\t\t{\n\t\t\todata,\n\t\t\tsegments,\n\t\t\tmodel\n\t\t}\n\t]);\n\n\treturn items.map((item) => (\n\t\t<ODataDependentSegmentMultiSelect\n\t\t\tkey={item.id}\n\t\t\titem={item}\n\t\t\tvalues={selection.values}\n\t\t\tonChange={selection.updateValues}\n\t\t\t{...segmentSelectionProps}\n\t\t\twidth={width}\n\t\t/>\n\t));\n}\n","import { DeprecatedMultiSelect } from \"./DeprecatedMultiSelect\";\n\nimport type { UiBaseProps } from \"../../types\";\nimport type { CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata-service\";\n\ntype SerializableOptionRecord = Record<string, unknown>;\n\ntype SerializableOptionKeyField<TOption extends SerializableOptionRecord> = {\n\t[K in keyof TOption]: Extract<TOption[K], string> extends never ? never : K;\n}[keyof TOption];\n\nexport interface SerializableMultiSelectProps<\n\tTOption extends SerializableOptionRecord,\n\tTOptionKey extends SerializableOptionKeyField<TOption>,\n\tTOptionLabel extends keyof TOption\n> extends UiBaseProps<Extract<TOption[TOptionKey], string>[]> {\n\toptions: readonly TOption[];\n\toptionKey: TOptionKey;\n\toptionLabel: TOptionLabel;\n\trenderCode?: true;\n\trequired?: boolean;\n\tfieldError?: string;\n}\n\nfunction getSerializableOptionKey<TOption extends SerializableOptionRecord, TOptionKey extends SerializableOptionKeyField<TOption>>(\n\toption: TOption,\n\toptionKey: TOptionKey\n): Extract<TOption[TOptionKey], string> {\n\treturn option[optionKey] as Extract<TOption[TOptionKey], string>;\n}\n\nfunction getSerializableOptionLabel<\n\tTOption extends SerializableOptionRecord,\n\tTOptionKey extends SerializableOptionKeyField<TOption>,\n\tTOptionLabel extends keyof TOption\n>(option: TOption, optionLabel: TOptionLabel, optionKey: TOptionKey): string {\n\tconst label = option[optionLabel];\n\n\tif (typeof label === \"string\") {\n\t\treturn label;\n\t}\n\n\tconst key = getSerializableOptionKey(option, optionKey);\n\treturn typeof key === \"string\" ? key : String(key);\n}\n\nexport function SerializableMultiSelect<\n\tTOption extends SerializableOptionRecord,\n\tTOptionKey extends SerializableOptionKeyField<TOption>,\n\tTOptionLabel extends keyof TOption\n>({\n\tlabel,\n\tdescription,\n\tdisabled,\n\tplaceholder,\n\tsize,\n\toptions,\n\tvalue,\n\tonChange,\n\toptionKey,\n\toptionLabel,\n\trenderCode,\n\trequired,\n\tfieldError\n}: SerializableMultiSelectProps<TOption, TOptionKey, TOptionLabel>) {\n\t// Как будто можно не мемоизировать, нет смысла\n\tconst items = options.map<CollectionItem>((option) => ({\n\t\tkey: String(getSerializableOptionKey(option, optionKey)),\n\t\ttext: getSerializableOptionLabel(option, optionLabel, optionKey)\n\t}));\n\tconst selectedKeys = new Set((value ?? []).map((item) => String(item)));\n\tconst selectedItems = items.filter((item) => selectedKeys.has(item.key));\n\n\treturn (\n\t\t<DeprecatedMultiSelect\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\trequired={required}\n\t\t\tfieldError={fieldError}\n\t\t\tdisabled={disabled}\n\t\t\tplaceholder={placeholder}\n\t\t\tsize={size}\n\t\t\titems={items}\n\t\t\tcodeKey=\"key\"\n\t\t\ttextKey=\"text\"\n\t\t\thideCode={renderCode ? undefined : true}\n\t\t\tvalue={selectedItems}\n\t\t\tonChange={(nextItems) => onChange(nextItems.map((item) => item.key) as Extract<TOption[TOptionKey], string>[])}\n\t\t/>\n\t);\n}\n"],"mappings":"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"}
@@ -24,6 +24,8 @@ export interface DeprecatedMultiSelectProps<TOption extends Record<string, strin
24
24
  onOpen?: () => void;
25
25
  onClose?: (value: TOption[]) => void;
26
26
  error?: string;
27
+ fieldError?: string;
28
+ required?: boolean;
27
29
  isLoading?: boolean;
28
30
  }
29
31
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"DeprecatedMultiSelect.d.ts","sourceRoot":"","sources":["../../../src/multi-select/ui/DeprecatedMultiSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,GAAG,EAAW,MAAM,OAAO,CAAC;AAE1D,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C,OAAO,EACN,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EACvC,KAAK,yCAAyC,EAC9C,KAAK,kCAAkC,EACvC,MAAM,0BAA0B,CAAC;AAGlC,KAAK,2BAA2B,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,KAAK,SAAS,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;AAE/F,UAAU,oBAAoB;IAC7B,WAAW,CAAC,EAAE,2BAA2B,CAAC,kCAAkC,CAAC,CAAC;IAC9E,aAAa,CAAC,EAAE,2BAA2B,CAAC,kCAAkC,CAAC,CAAC;IAChF,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,8BAA8B,KAAK,kCAAkC,CAAC;CACjH;AAED,uDAAuD;AACvD,MAAM,WAAW,0BAA0B,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,cAAc,CAClG,SAAQ,oBAAoB,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC;IACpD,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,yCAAyC,KAAK,OAAO,CAAC;IACnG,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,cAAc,EAAE,EAC9F,GAAG,EACH,OAAO,EACP,OAAO,EACP,QAAQ,EACR,KAAK,EACL,KAAK,EACL,QAAQ,EACR,iBAAiB,EACjB,OAAO,EACP,WAAW,EACX,aAAa,EACb,UAAU,EACV,GAAG,KAAK,EACR,EAAE,0BAA0B,CAAC,OAAO,CAAC,+BA+CrC;yBA7De,qBAAqB;;;AAiErC,OAAO,EACN,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EACvC,KAAK,yCAAyC,EAC9C,KAAK,kCAAkC,EACvC,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"DeprecatedMultiSelect.d.ts","sourceRoot":"","sources":["../../../src/multi-select/ui/DeprecatedMultiSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,GAAG,EAAW,MAAM,OAAO,CAAC;AAE1D,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C,OAAO,EACN,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EACvC,KAAK,yCAAyC,EAC9C,KAAK,kCAAkC,EACvC,MAAM,0BAA0B,CAAC;AAGlC,KAAK,2BAA2B,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,KAAK,SAAS,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;AAE/F,UAAU,oBAAoB;IAC7B,WAAW,CAAC,EAAE,2BAA2B,CAAC,kCAAkC,CAAC,CAAC;IAC9E,aAAa,CAAC,EAAE,2BAA2B,CAAC,kCAAkC,CAAC,CAAC;IAChF,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,8BAA8B,KAAK,kCAAkC,CAAC;CACjH;AAED,uDAAuD;AACvD,MAAM,WAAW,0BAA0B,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,cAAc,CAClG,SAAQ,oBAAoB,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC;IACpD,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,yCAAyC,KAAK,OAAO,CAAC;IACnG,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,cAAc,EAAE,EAC9F,GAAG,EACH,OAAO,EACP,OAAO,EACP,QAAQ,EACR,KAAK,EACL,KAAK,EACL,QAAQ,EACR,iBAAiB,EACjB,OAAO,EACP,WAAW,EACX,aAAa,EACb,UAAU,EACV,GAAG,KAAK,EACR,EAAE,0BAA0B,CAAC,OAAO,CAAC,+BA+CrC;yBA7De,qBAAqB;;;AAiErC,OAAO,EACN,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EACvC,KAAK,yCAAyC,EAC9C,KAAK,kCAAkC,EACvC,MAAM,0BAA0B,CAAC"}
@@ -23,6 +23,9 @@ export type MultiSelectProps<TOption> = MultiSelectRenderers<TOption> & Omit<UiB
23
23
  onOpen?: () => void;
24
24
  onClose?: (value: TOption[]) => void;
25
25
  error?: string;
26
+ /** Ошибка выбранного значения; error сообщает о сбое загрузки опций в popup. */
27
+ fieldError?: string;
28
+ required?: boolean;
26
29
  isLoading?: boolean;
27
30
  }>;
28
31
  /** Множественный выбор для произвольной типизированной коллекции опций. */
@@ -1 +1 @@
1
- {"version":3,"file":"MultiSelect.d.ts","sourceRoot":"","sources":["../../../src/multi-select/ui/MultiSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,EACN,KAAK,+BAA+B,EACpC,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,MAAM,oBAAoB,CAAC;AAE5B;;;GAGG;AACH,MAAM,MAAM,gBAAgB,CAAC,OAAO,IAAI,oBAAoB,CAAC,OAAO,CAAC,GACpE,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,SAAS,OAAO,EAAE,CAAC,EAAE,UAAU,CAAC,GAC5D,QAAQ,CAAC;IACR,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC5B,OAAO,EAAE,SAAS,OAAO,EAAE,CAAC;IAC5B,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACrC,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,oBAAoB,CAAC;IACxD,cAAc,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,CAAC;IAC5C,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,CAAC;IACxD,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,sBAAsB,GAAG,SAAS,CAAC;IACzE,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACtE,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,+BAA+B,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC;IACpG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC,CAAC;AAEJ,2EAA2E;AAC3E,wBAAgB,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,+BAEpE"}
1
+ {"version":3,"file":"MultiSelect.d.ts","sourceRoot":"","sources":["../../../src/multi-select/ui/MultiSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,EACN,KAAK,+BAA+B,EACpC,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,MAAM,oBAAoB,CAAC;AAE5B;;;GAGG;AACH,MAAM,MAAM,gBAAgB,CAAC,OAAO,IAAI,oBAAoB,CAAC,OAAO,CAAC,GACpE,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,SAAS,OAAO,EAAE,CAAC,EAAE,UAAU,CAAC,GAC5D,QAAQ,CAAC;IACR,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC5B,OAAO,EAAE,SAAS,OAAO,EAAE,CAAC;IAC5B,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACrC,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,oBAAoB,CAAC;IACxD,cAAc,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,CAAC;IAC5C,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,CAAC;IACxD,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,sBAAsB,GAAG,SAAS,CAAC;IACzE,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACtE,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,+BAA+B,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC;IACpG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC,CAAC;AAEJ,2EAA2E;AAC3E,wBAAgB,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,+BAEpE"}
@@ -8,6 +8,6 @@ type MultiSelectCoreProps<TOption> = MultiSelectProps<TOption> & Readonly<{
8
8
  * адаптируют свои контракты к этим selector-функциям, поэтому focus и a11y
9
9
  * поведение не расходятся между новым и legacy API.
10
10
  */
11
- export declare function MultiSelectCore<TOption>({ ref, options, value, onChange, getOptionKey, getOptionLabel, getOptionCode, getOptionGroup, getOptionSearchText, label, description, placeholder, size, query, defaultQuery, highlightQuery, onQuery, defaultFilter, onOpen, onClose, getOptionDisabled, disabled, error, isLoading, renderToken, renderToolbar, renderOption, preserveOptionArrayReference }: MultiSelectCoreProps<TOption>): import("react").JSX.Element;
11
+ export declare function MultiSelectCore<TOption>({ ref, options, value, onChange, getOptionKey, getOptionLabel, getOptionCode, getOptionGroup, getOptionSearchText, label, description, placeholder, size, query, defaultQuery, highlightQuery, onQuery, defaultFilter, onOpen, onClose, getOptionDisabled, disabled, error, fieldError, required, isLoading, renderToken, renderToolbar, renderOption, preserveOptionArrayReference }: MultiSelectCoreProps<TOption>): import("react").JSX.Element;
12
12
  export {};
13
13
  //# sourceMappingURL=MultiSelectCore.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MultiSelectCore.d.ts","sourceRoot":"","sources":["../../../src/multi-select/ui/MultiSelectCore.tsx"],"names":[],"mappings":"AAkBA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAMtD,KAAK,oBAAoB,CAAC,OAAO,IAAI,gBAAgB,CAAC,OAAO,CAAC,GAC7D,QAAQ,CAAC;IACR,kFAAkF;IAClF,4BAA4B,CAAC,EAAE,OAAO,CAAC;CACvC,CAAC,CAAC;AAEJ;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,EACxC,GAAG,EACH,OAAO,EACP,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,KAAK,EACL,WAAW,EACX,WAAW,EACX,IAAI,EACJ,KAAK,EACL,YAAY,EACZ,cAAc,EACd,OAAO,EACP,aAAoB,EACpB,MAAM,EACN,OAAO,EACP,iBAAiB,EACjB,QAAQ,EACR,KAAK,EACL,SAAS,EACT,WAAW,EACX,aAAa,EACb,YAAY,EACZ,4BAAoC,EACpC,EAAE,oBAAoB,CAAC,OAAO,CAAC,+BA8X/B"}
1
+ {"version":3,"file":"MultiSelectCore.d.ts","sourceRoot":"","sources":["../../../src/multi-select/ui/MultiSelectCore.tsx"],"names":[],"mappings":"AAkBA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAMtD,KAAK,oBAAoB,CAAC,OAAO,IAAI,gBAAgB,CAAC,OAAO,CAAC,GAC7D,QAAQ,CAAC;IACR,kFAAkF;IAClF,4BAA4B,CAAC,EAAE,OAAO,CAAC;CACvC,CAAC,CAAC;AAEJ;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,EACxC,GAAG,EACH,OAAO,EACP,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,KAAK,EACL,WAAW,EACX,WAAW,EACX,IAAI,EACJ,KAAK,EACL,YAAY,EACZ,cAAc,EACd,OAAO,EACP,aAAoB,EACpB,MAAM,EACN,OAAO,EACP,iBAAiB,EACjB,QAAQ,EACR,KAAK,EACL,UAAU,EACV,QAAQ,EACR,SAAS,EACT,WAAW,EACX,aAAa,EACb,YAAY,EACZ,4BAAoC,EACpC,EAAE,oBAAoB,CAAC,OAAO,CAAC,+BAuY/B"}
@@ -1 +1 @@
1
- {"version":3,"file":"MultiSelectOptionRow.d.ts","sourceRoot":"","sources":["../../../src/multi-select/ui/MultiSelectOptionRow.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,wBAAwB,EAAE,KAAK,oBAAoB,EAAE,KAAK,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE3H,KAAK,yBAAyB,CAAC,OAAO,IAAI,QAAQ,CAAC;IAClD,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,WAAW,CAAC,oBAAoB,CAAC,CAAC;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,oBAAoB,CAAC;IACxD,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;IACjD,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACvD,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IAChE,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,gBAAgB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,sBAAsB,KAAK,wBAAwB,CAAC;CAC3F,CAAC,CAAC;AAEH,4GAA4G;AAC5G,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,EAC7C,MAAM,EACN,KAAK,EACL,MAAM,EACN,WAAW,EACX,YAAY,EACZ,KAAK,EACL,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,EAAE,yBAAyB,CAAC,OAAO,CAAC,+BA2CpC"}
1
+ {"version":3,"file":"MultiSelectOptionRow.d.ts","sourceRoot":"","sources":["../../../src/multi-select/ui/MultiSelectOptionRow.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,wBAAwB,EAAE,KAAK,oBAAoB,EAAE,KAAK,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE3H,KAAK,yBAAyB,CAAC,OAAO,IAAI,QAAQ,CAAC;IAClD,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,WAAW,CAAC,oBAAoB,CAAC,CAAC;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,oBAAoB,CAAC;IACxD,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;IACjD,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACvD,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IAChE,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,gBAAgB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,sBAAsB,KAAK,wBAAwB,CAAC;CAC3F,CAAC,CAAC;AAEH,4GAA4G;AAC5G,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,EAC7C,MAAM,EACN,KAAK,EACL,MAAM,EACN,WAAW,EACX,YAAY,EACZ,KAAK,EACL,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,EAAE,yBAAyB,CAAC,OAAO,CAAC,+BAmDpC"}
@@ -1 +1 @@
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"}
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,+BA+B5F"}
@@ -1,6 +1,9 @@
1
1
  import { ODataSelectBaseProps } from "@ryuzaki13/react-foundation-api/odata";
2
2
  import { UiBaseProps } from "../../types";
3
- type ODataMultiSelectProps = ODataSelectBaseProps & Omit<UiBaseProps<string[]>, "placeholder"> & {};
4
- export declare function ODataMultiSelect({ odata, segment, model: initialModel, label, description, disabled, value, dependencies, onChange, size }: ODataMultiSelectProps): import("react").JSX.Element;
3
+ type ODataMultiSelectProps = ODataSelectBaseProps & Omit<UiBaseProps<string[]>, "placeholder"> & {
4
+ required?: boolean;
5
+ fieldError?: string;
6
+ };
7
+ export declare function ODataMultiSelect({ odata, segment, model: initialModel, label, description, disabled, required, fieldError, value, dependencies, onChange, size }: ODataMultiSelectProps): import("react").JSX.Element;
5
8
  export {};
6
9
  //# sourceMappingURL=ODataMultiSelect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ODataMultiSelect.d.ts","sourceRoot":"","sources":["../../../src/multi-select/ui/ODataMultiSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAA2B,MAAM,uCAAuC,CAAC;AAEtG,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK1C,KAAK,qBAAqB,GAAG,oBAAoB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,aAAa,CAAC,GAAG,EAAE,CAAC;AAEpG,wBAAgB,gBAAgB,CAAC,EAChC,KAAK,EACL,OAAO,EACP,KAAK,EAAE,YAAY,EACnB,KAAK,EACL,WAAW,EACX,QAAQ,EACR,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,IAAI,EACJ,EAAE,qBAAqB,+BAgCvB"}
1
+ {"version":3,"file":"ODataMultiSelect.d.ts","sourceRoot":"","sources":["../../../src/multi-select/ui/ODataMultiSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAA2B,MAAM,uCAAuC,CAAC;AAEtG,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK1C,KAAK,qBAAqB,GAAG,oBAAoB,GAChD,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,aAAa,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1F,wBAAgB,gBAAgB,CAAC,EAChC,KAAK,EACL,OAAO,EACP,KAAK,EAAE,YAAY,EACnB,KAAK,EACL,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,IAAI,EACJ,EAAE,qBAAqB,+BAkCvB"}
@@ -8,7 +8,9 @@ export interface SerializableMultiSelectProps<TOption extends SerializableOption
8
8
  optionKey: TOptionKey;
9
9
  optionLabel: TOptionLabel;
10
10
  renderCode?: true;
11
+ required?: boolean;
12
+ fieldError?: string;
11
13
  }
12
- export declare function SerializableMultiSelect<TOption extends SerializableOptionRecord, TOptionKey extends SerializableOptionKeyField<TOption>, TOptionLabel extends keyof TOption>({ label, description, disabled, placeholder, size, options, value, onChange, optionKey, optionLabel, renderCode }: SerializableMultiSelectProps<TOption, TOptionKey, TOptionLabel>): import("react").JSX.Element;
14
+ export declare function SerializableMultiSelect<TOption extends SerializableOptionRecord, TOptionKey extends SerializableOptionKeyField<TOption>, TOptionLabel extends keyof TOption>({ label, description, disabled, placeholder, size, options, value, onChange, optionKey, optionLabel, renderCode, required, fieldError }: SerializableMultiSelectProps<TOption, TOptionKey, TOptionLabel>): import("react").JSX.Element;
13
15
  export {};
14
16
  //# sourceMappingURL=SerializableMultiSelect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SerializableMultiSelect.d.ts","sourceRoot":"","sources":["../../../src/multi-select/ui/SerializableMultiSelect.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,KAAK,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAExD,KAAK,0BAA0B,CAAC,OAAO,SAAS,wBAAwB,IAAI;KAC1E,CAAC,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,KAAK,GAAG,KAAK,GAAG,CAAC;CAC3E,CAAC,MAAM,OAAO,CAAC,CAAC;AAEjB,MAAM,WAAW,4BAA4B,CAC5C,OAAO,SAAS,wBAAwB,EACxC,UAAU,SAAS,0BAA0B,CAAC,OAAO,CAAC,EACtD,YAAY,SAAS,MAAM,OAAO,CACjC,SAAQ,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;IAC5D,OAAO,EAAE,SAAS,OAAO,EAAE,CAAC;IAC5B,SAAS,EAAE,UAAU,CAAC;IACtB,WAAW,EAAE,YAAY,CAAC;IAC1B,UAAU,CAAC,EAAE,IAAI,CAAC;CAClB;AAwBD,wBAAgB,uBAAuB,CACtC,OAAO,SAAS,wBAAwB,EACxC,UAAU,SAAS,0BAA0B,CAAC,OAAO,CAAC,EACtD,YAAY,SAAS,MAAM,OAAO,EACjC,EACD,KAAK,EACL,WAAW,EACX,QAAQ,EACR,WAAW,EACX,IAAI,EACJ,OAAO,EACP,KAAK,EACL,QAAQ,EACR,SAAS,EACT,WAAW,EACX,UAAU,EACV,EAAE,4BAA4B,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,CAAC,+BAwBjE"}
1
+ {"version":3,"file":"SerializableMultiSelect.d.ts","sourceRoot":"","sources":["../../../src/multi-select/ui/SerializableMultiSelect.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,KAAK,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAExD,KAAK,0BAA0B,CAAC,OAAO,SAAS,wBAAwB,IAAI;KAC1E,CAAC,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,KAAK,GAAG,KAAK,GAAG,CAAC;CAC3E,CAAC,MAAM,OAAO,CAAC,CAAC;AAEjB,MAAM,WAAW,4BAA4B,CAC5C,OAAO,SAAS,wBAAwB,EACxC,UAAU,SAAS,0BAA0B,CAAC,OAAO,CAAC,EACtD,YAAY,SAAS,MAAM,OAAO,CACjC,SAAQ,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;IAC5D,OAAO,EAAE,SAAS,OAAO,EAAE,CAAC;IAC5B,SAAS,EAAE,UAAU,CAAC;IACtB,WAAW,EAAE,YAAY,CAAC;IAC1B,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAwBD,wBAAgB,uBAAuB,CACtC,OAAO,SAAS,wBAAwB,EACxC,UAAU,SAAS,0BAA0B,CAAC,OAAO,CAAC,EACtD,YAAY,SAAS,MAAM,OAAO,EACjC,EACD,KAAK,EACL,WAAW,EACX,QAAQ,EACR,WAAW,EACX,IAAI,EACJ,OAAO,EACP,KAAK,EACL,QAAQ,EACR,SAAS,EACT,WAAW,EACX,UAAU,EACV,QAAQ,EACR,UAAU,EACV,EAAE,4BAA4B,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,CAAC,+BA0BjE"}
@@ -17,6 +17,10 @@ export type ODataDependentSegmentControlProps = UseODataDependentSelectionOption
17
17
  label?: ReactNode;
18
18
  /** Дополнительное описание поля. */
19
19
  description?: string;
20
+ /** Обязательность выбора конкретного сегмента. */
21
+ required?: boolean;
22
+ /** Ошибка выбранного значения сегмента, независимая от загрузки опций. */
23
+ fieldError?: string;
20
24
  /** Размер базового Select или MultiSelect. */
21
25
  size?: UiSize;
22
26
  /**
@@ -1 +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"}
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,kDAAkD;IAClD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CACf,CAAC"}
@@ -2,6 +2,8 @@ import { type PeriodSelectLabels, type PeriodSelectOption, type PeriodSelectPres
2
2
  import type { UiBaseProps } from "../types";
3
3
  import type { DateRangeInput } from "@ryuzaki13/react-foundation-lib/formatters";
4
4
  export interface PeriodSelectProps extends UiBaseProps<PeriodSelectOption["id"] | undefined> {
5
+ required?: boolean;
6
+ error?: string;
5
7
  /**
6
8
  * Полный список custom options с высшим приоритетом. При его передаче
7
9
  * встроенные `presetIds`, `labels` и пороги диапазона не применяются.
@@ -1 +1 @@
1
- {"version":3,"file":"PeriodSelect.d.ts","sourceRoot":"","sources":["../../src/period-select/PeriodSelect.tsx"],"names":[],"mappings":"AAIA,OAAO,EAMN,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAEjF,MAAM,WAAW,iBAAkB,SAAQ,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;IAC3F;;;OAGG;IACH,OAAO,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACxC;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACrC;;;;OAIG;IACH,SAAS,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAC5C,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAC5B,KAAK,EACL,QAAQ,EACR,OAAO,EACP,MAAM,EACN,SAAS,EACT,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,GAAG,KAAK,EACR,EAAE,iBAAiB,+BAqDnB"}
1
+ {"version":3,"file":"PeriodSelect.d.ts","sourceRoot":"","sources":["../../src/period-select/PeriodSelect.tsx"],"names":[],"mappings":"AAIA,OAAO,EAMN,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAEjF,MAAM,WAAW,iBAAkB,SAAQ,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;IAC3F,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,OAAO,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACxC;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACrC;;;;OAIG;IACH,SAAS,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAC5C,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAC5B,KAAK,EACL,QAAQ,EACR,OAAO,EACP,MAAM,EACN,SAAS,EACT,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,GAAG,KAAK,EACR,EAAE,iBAAiB,+BAqDnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/period-select/lib/constants.ts","../../src/period-select/lib/periodSelect.ts","../../src/period-select/PeriodSelect.tsx"],"sourcesContent":["export const PERIOD_SELECT_COMPONENT_ID = \"period-select\";\n","import {\n\tcountCalendarDaysInDateRange,\n\ttype DateRangeInput,\n\tnormalizeText,\n\ttoPositiveInteger\n} from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport { getPresetOption, normalizePresetIds, type PresetOption, resolvePresetOptionsByIds } from \"@ryuzaki13/react-foundation-lib/presets\";\nimport { isRecord } from \"@ryuzaki13/react-foundation-lib/validators\";\n\n/**\n * Идентификаторы встроенных уровней детализации периода.\n */\nexport type PeriodSelectPresetId = \"day\" | \"week\" | \"month\" | \"year\";\nexport type PeriodSelectId = PeriodSelectPresetId | (string & {});\n\n/**\n * Полный типизированный набор подписей встроенных уровней детализации.\n * Потребитель может передать его частично, сохранив канонические подписи\n * для всех отсутствующих ключей.\n */\nexport type PeriodSelectLabels = Readonly<Record<PeriodSelectPresetId, string>>;\n\nexport interface PeriodSelectOption extends PresetOption<PeriodSelectId> {\n\tmaxRangeDays?: number;\n}\n\ntype BuiltInPeriodSelectOption = PeriodSelectOption & {\n\tid: PeriodSelectPresetId;\n};\n\nexport type PeriodSelectDateRangeConnectors = Readonly<{\n\tstart: string;\n\tend: string;\n}>;\n\nexport type PeriodSelectThresholds = {\n\tmaxDayRangeDays?: number;\n\tmaxWeekRangeWeeks?: number;\n};\n\n/**\n * Настройки формирования встроенных options. `labels` изменяет только\n * отображаемый текст и не влияет на id, порядок или ограничения диапазона.\n */\nexport type PeriodSelectOptionsConfig = PeriodSelectThresholds & {\n\tlabels?: Partial<PeriodSelectLabels>;\n};\n\nexport const DEFAULT_PERIOD_SELECT_PRESET_ID = \"day\" satisfies PeriodSelectPresetId;\nexport const DEFAULT_PERIOD_SELECT_MAX_DAY_RANGE_DAYS = 31;\nexport const DEFAULT_PERIOD_SELECT_MAX_WEEK_RANGE_WEEKS = 26;\n\n/**\n * Канонический каталог встроенных вариантов. Порядок элементов задает порядок\n * отображения и автоматического перехода к следующему доступному уровню.\n */\nexport const PERIOD_SELECT_OPTIONS: readonly BuiltInPeriodSelectOption[] = Object.freeze([\n\t{\n\t\tid: \"day\",\n\t\tlabel: \"по дням\"\n\t},\n\t{\n\t\tid: \"week\",\n\t\tlabel: \"по неделям\"\n\t},\n\t{\n\t\tid: \"month\",\n\t\tlabel: \"по месяцам\"\n\t},\n\t{\n\t\tid: \"year\",\n\t\tlabel: \"по годам\"\n\t}\n]);\n\n/**\n * Полный набор встроенных вариантов, доступный при отсутствии явного allow-list.\n */\nexport const DEFAULT_PERIOD_SELECT_PRESET_IDS = Object.freeze([\n\t\"day\",\n\t\"week\",\n\t\"month\",\n\t\"year\"\n] as const satisfies readonly PeriodSelectPresetId[]);\n\nconst PERIOD_SELECT_PRESET_ID_SET: ReadonlySet<string> = new Set(PERIOD_SELECT_OPTIONS.map((option) => option.id));\n\nexport function isPeriodSelectPresetId(value: unknown): value is PeriodSelectPresetId {\n\treturn typeof value === \"string\" && PERIOD_SELECT_PRESET_ID_SET.has(value);\n}\n\nexport function normalizePeriodSelectPresetIds(\n\tvalue: unknown,\n\tfallbackIds: readonly PeriodSelectPresetId[] = DEFAULT_PERIOD_SELECT_PRESET_IDS\n): PeriodSelectPresetId[] {\n\tconst normalizedIds = normalizePresetIds(value, isPeriodSelectPresetId, fallbackIds);\n\tconst resolvedIds = normalizedIds.length > 0 ? normalizedIds : DEFAULT_PERIOD_SELECT_PRESET_IDS;\n\tconst resolvedIdSet = new Set<PeriodSelectPresetId>(resolvedIds);\n\n\t// Порядок runtime-опций является частью контракта: конфигурация только ограничивает\n\t// каталог и не может переставить уровни либо оставить контрол без вариантов.\n\treturn DEFAULT_PERIOD_SELECT_PRESET_IDS.filter((presetId) => resolvedIdSet.has(presetId));\n}\n\nexport function resolvePeriodSelectOptionsByIds(\n\tpresetIds: readonly PeriodSelectOption[\"id\"][],\n\toptions: readonly PeriodSelectOption[] = PERIOD_SELECT_OPTIONS\n): PeriodSelectOption[] {\n\treturn resolvePresetOptionsByIds(presetIds, options);\n}\n\nexport function getPeriodSelectOption(\n\tid: PeriodSelectOption[\"id\"] | undefined,\n\toptions: readonly PeriodSelectOption[] = PERIOD_SELECT_OPTIONS\n): PeriodSelectOption | null {\n\treturn getPresetOption(id, options);\n}\n\nexport function resolvePeriodSelectDefaultValue(value: unknown): PeriodSelectPresetId {\n\treturn isPeriodSelectPresetId(value) ? value : DEFAULT_PERIOD_SELECT_PRESET_ID;\n}\n\n/**\n * Создает независимый список встроенных options с порогами доступности и\n * частичными подписями потребителя поверх канонического каталога.\n */\nexport function createPeriodSelectOptions({\n\tmaxDayRangeDays,\n\tmaxWeekRangeWeeks,\n\tlabels\n}: PeriodSelectOptionsConfig = {}): PeriodSelectOption[] {\n\tconst dayLimit = toPositiveInteger(maxDayRangeDays);\n\tconst weekLimit = toPositiveInteger(maxWeekRangeWeeks);\n\n\treturn PERIOD_SELECT_OPTIONS.map((option) => {\n\t\tconst resolvedOption = {\n\t\t\t...option,\n\t\t\tlabel: labels?.[option.id] ?? option.label\n\t\t};\n\n\t\tif (option.id === \"day\" && dayLimit !== undefined) {\n\t\t\treturn {\n\t\t\t\t...resolvedOption,\n\t\t\t\tmaxRangeDays: dayLimit\n\t\t\t};\n\t\t}\n\n\t\tif (option.id === \"week\" && weekLimit !== undefined) {\n\t\t\treturn {\n\t\t\t\t...resolvedOption,\n\t\t\t\tmaxRangeDays: weekLimit * 7\n\t\t\t};\n\t\t}\n\n\t\treturn resolvedOption;\n\t});\n}\n\nexport function isPeriodSelectOptionDisabled(option: PeriodSelectOption, dateRange: DateRangeInput | undefined): boolean {\n\tconst maxRangeDays = toPositiveInteger(option.maxRangeDays);\n\tif (maxRangeDays === undefined || dateRange === undefined) {\n\t\treturn false;\n\t}\n\n\tconst rangeDays = countCalendarDaysInDateRange(dateRange);\n\treturn rangeDays !== null && rangeDays > maxRangeDays;\n}\n\nexport function resolvePeriodSelectAvailableValue(\n\tvalue: PeriodSelectOption[\"id\"] | undefined,\n\toptions: readonly PeriodSelectOption[],\n\tdateRange: DateRangeInput | undefined\n): PeriodSelectOption[\"id\"] | undefined {\n\tif (options.length === 0) {\n\t\treturn undefined;\n\t}\n\n\tconst selectedIndex = value === undefined ? -1 : options.findIndex((option) => option.id === value);\n\tconst selectedOption = selectedIndex >= 0 ? options[selectedIndex] : undefined;\n\n\tif (selectedOption && !isPeriodSelectOptionDisabled(selectedOption, dateRange)) {\n\t\treturn selectedOption.id;\n\t}\n\n\tconst nextOptions = selectedIndex >= 0 ? options.slice(selectedIndex + 1) : options;\n\tconst nextAvailableOption = nextOptions.find((option) => !isPeriodSelectOptionDisabled(option, dateRange));\n\n\treturn nextAvailableOption?.id ?? options.find((option) => !isPeriodSelectOptionDisabled(option, dateRange))?.id;\n}\n\nexport function normalizePeriodSelectDateRangeConnectors(value: unknown): PeriodSelectDateRangeConnectors | undefined {\n\tif (!isRecord(value)) {\n\t\treturn undefined;\n\t}\n\n\tconst startConnector = normalizeText(value.start);\n\tconst endConnector = normalizeText(value.end);\n\n\treturn startConnector && endConnector ? { start: startConnector, end: endConnector } : undefined;\n}\n","import { useEffect, useEffectEvent, useMemo, useRef } from \"react\";\n\nimport { PresetSelect } from \"../preset-select\";\n\nimport {\n\tcreatePeriodSelectOptions,\n\tisPeriodSelectOptionDisabled,\n\tnormalizePeriodSelectPresetIds,\n\tresolvePeriodSelectAvailableValue,\n\tresolvePeriodSelectOptionsByIds,\n\ttype PeriodSelectLabels,\n\ttype PeriodSelectOption,\n\ttype PeriodSelectPresetId\n} from \"./lib\";\n\nimport type { UiBaseProps } from \"../types\";\nimport type { DateRangeInput } from \"@ryuzaki13/react-foundation-lib/formatters\";\n\nexport interface PeriodSelectProps extends UiBaseProps<PeriodSelectOption[\"id\"] | undefined> {\n\t/**\n\t * Полный список custom options с высшим приоритетом. При его передаче\n\t * встроенные `presetIds`, `labels` и пороги диапазона не применяются.\n\t */\n\toptions?: readonly PeriodSelectOption[];\n\t/**\n\t * Частично заменяет подписи встроенных вариантов, не изменяя их id,\n\t * канонический порядок и правила доступности.\n\t * Не применяется, когда передан собственный `options`.\n\t */\n\tlabels?: Partial<PeriodSelectLabels>;\n\t/**\n\t * Разрешенные встроенные варианты периода. Значение нормализуется в канонический\n\t * порядок, а пустой либо невалидный список безопасно заменяется полным набором.\n\t * Не применяется, когда передан собственный `options`.\n\t */\n\tpresetIds?: readonly PeriodSelectPresetId[];\n\tdateRange?: DateRangeInput;\n\tmaxDayRangeDays?: number;\n\tmaxWeekRangeWeeks?: number;\n}\n\n/**\n * Select периода детализации, который может ограничивать доступные варианты по диапазону дат.\n */\nexport function PeriodSelect({\n\tvalue,\n\tonChange,\n\toptions,\n\tlabels,\n\tpresetIds,\n\tdateRange,\n\tmaxDayRangeDays,\n\tmaxWeekRangeWeeks,\n\t...props\n}: PeriodSelectProps) {\n\tconst resolvedOptions = useMemo(\n\t\t() =>\n\t\t\toptions ??\n\t\t\tresolvePeriodSelectOptionsByIds(\n\t\t\t\tnormalizePeriodSelectPresetIds(presetIds),\n\t\t\t\tcreatePeriodSelectOptions({ maxDayRangeDays, maxWeekRangeWeeks, labels })\n\t\t\t),\n\t\t[labels, maxDayRangeDays, maxWeekRangeWeeks, options, presetIds]\n\t);\n\tconst availableValue = useMemo(\n\t\t() => resolvePeriodSelectAvailableValue(value, resolvedOptions, dateRange),\n\t\t[dateRange, resolvedOptions, value]\n\t);\n\tconst lastEmittedTransitionRef = useRef<{\n\t\tvalue: PeriodSelectOption[\"id\"] | undefined;\n\t\tavailableValue: PeriodSelectOption[\"id\"] | undefined;\n\t} | null>(null);\n\n\tconst emitAvailableValue = useEffectEvent(() => {\n\t\tif (availableValue === undefined || availableValue === value) {\n\t\t\t// После принятия controlled-значения либо временной блокировки всех опций\n\t\t\t// такой же переход должен снова стать допустимым при следующем изменении условий.\n\t\t\tlastEmittedTransitionRef.current = null;\n\t\t\treturn;\n\t\t}\n\n\t\tconst lastTransition = lastEmittedTransitionRef.current;\n\t\tif (lastTransition && lastTransition.value === value && lastTransition.availableValue === availableValue) {\n\t\t\treturn;\n\t\t}\n\n\t\tlastEmittedTransitionRef.current = { value, availableValue };\n\n\t\t// Сигнатура перехода защищает reconciliation от повтора в React StrictMode.\n\t\t// При временной блокировке всех опций внешний controlled-id сохраняется,\n\t\t// поэтому выбор восстановится без потери runtime-параметра после смены диапазона.\n\t\tonChange(availableValue);\n\t});\n\n\tuseEffect(() => {\n\t\temitAvailableValue();\n\t}, [availableValue, value]);\n\n\treturn (\n\t\t<PresetSelect\n\t\t\t{...props}\n\t\t\toptions={resolvedOptions}\n\t\t\tvalue={availableValue}\n\t\t\tonChange={onChange}\n\t\t\tgetOptionDisabled={(option) => isPeriodSelectOptionDisabled(option, dateRange)}\n\t\t/>\n\t);\n}\n"],"mappings":";;;;;;;AAAA,IAAa,IAA6B,iBCgD7B,IAAkC,OAClC,IAA2C,IAC3C,IAA6C,IAM7C,IAA8D,OAAO,OAAO;CACxF;EACC,IAAI;EACJ,OAAO;CACR;CACA;EACC,IAAI;EACJ,OAAO;CACR;CACA;EACC,IAAI;EACJ,OAAO;CACR;CACA;EACC,IAAI;EACJ,OAAO;CACR;AACD,CAAC,GAKY,IAAmC,OAAO,OAAO;CAC7D;CACA;CACA;CACA;AACD,CAAoD,GAE9C,IAAmD,IAAI,IAAI,EAAsB,KAAK,MAAW,EAAO,EAAE,CAAC;AAEjH,SAAgB,EAAuB,GAA+C;CACrF,OAAO,OAAO,KAAU,YAAY,EAA4B,IAAI,CAAK;AAC1E;AAEA,SAAgB,EACf,GACA,IAA+C,GACtB;CACzB,IAAM,IAAgB,EAAmB,GAAO,GAAwB,CAAW,GAC7E,IAAc,EAAc,SAAS,IAAI,IAAgB,GACzD,IAAgB,IAAI,IAA0B,CAAW;CAI/D,OAAO,EAAiC,QAAQ,MAAa,EAAc,IAAI,CAAQ,CAAC;AACzF;AAEA,SAAgB,EACf,GACA,IAAyC,GAClB;CACvB,OAAO,EAA0B,GAAW,CAAO;AACpD;AAEA,SAAgB,EACf,GACA,IAAyC,GACb;CAC5B,OAAO,EAAgB,GAAI,CAAO;AACnC;AAEA,SAAgB,EAAgC,GAAsC;CACrF,OAAO,EAAuB,CAAK,IAAI,IAAA;AACxC;AAMA,SAAgB,EAA0B,EACzC,oBACA,sBACA,cAC8B,CAAC,GAAyB;CACxD,IAAM,IAAW,EAAkB,CAAe,GAC5C,IAAY,EAAkB,CAAiB;CAErD,OAAO,EAAsB,KAAK,MAAW;EAC5C,IAAM,IAAiB;GACtB,GAAG;GACH,OAAO,IAAS,EAAO,OAAO,EAAO;EACtC;EAgBA,OAdI,EAAO,OAAO,SAAS,MAAa,KAAA,IAChC;GACN,GAAG;GACH,cAAc;EACf,IAGG,EAAO,OAAO,UAAU,MAAc,KAAA,IAClC;GACN,GAAG;GACH,cAAc,IAAY;EAC3B,IAGM;CACR,CAAC;AACF;AAEA,SAAgB,EAA6B,GAA4B,GAAgD;CACxH,IAAM,IAAe,EAAkB,EAAO,YAAY;CAC1D,IAAI,MAAiB,KAAA,KAAa,MAAc,KAAA,GAC/C,OAAO;CAGR,IAAM,IAAY,EAA6B,CAAS;CACxD,OAAO,MAAc,QAAQ,IAAY;AAC1C;AAEA,SAAgB,EACf,GACA,GACA,GACuC;CACvC,IAAI,EAAQ,WAAW,GACtB;CAGD,IAAM,IAAgB,MAAU,KAAA,IAAY,KAAK,EAAQ,WAAW,MAAW,EAAO,OAAO,CAAK,GAC5F,IAAiB,KAAiB,IAAI,EAAQ,KAAiB,KAAA;CASrE,OAPI,KAAkB,CAAC,EAA6B,GAAgB,CAAS,IACrE,EAAe,MAGH,KAAiB,IAAI,EAAQ,MAAM,IAAgB,CAAC,IAAI,EAAA,CACpC,MAAM,MAAW,CAAC,EAA6B,GAAQ,CAAS,CAEjG,CAAA,EAAqB,MAAM,EAAQ,MAAM,MAAW,CAAC,EAA6B,GAAQ,CAAS,CAAC,CAAC,EAAE;AAC/G;AAEA,SAAgB,EAAyC,GAA6D;CACrH,IAAI,CAAC,EAAS,CAAK,GAClB;CAGD,IAAM,IAAiB,EAAc,EAAM,KAAK,GAC1C,IAAe,EAAc,EAAM,GAAG;CAE5C,OAAO,KAAkB,IAAe;EAAE,OAAO;EAAgB,KAAK;CAAa,IAAI,KAAA;AACxF;;;AC3JA,SAAgB,EAAa,EAC5B,UACA,aACA,YACA,WACA,cACA,cACA,oBACA,sBACA,GAAG,KACkB;CACrB,IAAM,IAAkB,QAEtB,KACA,EACC,EAA+B,CAAS,GACxC,EAA0B;EAAE;EAAiB;EAAmB;CAAO,CAAC,CACzE,GACD;EAAC;EAAQ;EAAiB;EAAmB;EAAS;CAAS,CAChE,GACM,IAAiB,QAChB,EAAkC,GAAO,GAAiB,CAAS,GACzE;EAAC;EAAW;EAAiB;CAAK,CACnC,GACM,IAA2B,EAGvB,IAAI,GAER,IAAqB,QAAqB;EAC/C,IAAI,MAAmB,KAAA,KAAa,MAAmB,GAAO;GAG7D,EAAyB,UAAU;GACnC;EACD;EAEA,IAAM,IAAiB,EAAyB;EAC5C,KAAkB,EAAe,UAAU,KAAS,EAAe,mBAAmB,MAI1F,EAAyB,UAAU;GAAE;GAAO;EAAe,GAK3D,EAAS,CAAc;CACxB,CAAC;CAMD,OAJA,QAAgB;EACf,EAAmB;CACpB,GAAG,CAAC,GAAgB,CAAK,CAAC,GAGzB,kBAAC,GAAD;EACC,GAAI;EACJ,SAAS;EACT,OAAO;EACG;EACV,oBAAoB,MAAW,EAA6B,GAAQ,CAAS;CAC7E,CAAA;AAEH"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/period-select/lib/constants.ts","../../src/period-select/lib/periodSelect.ts","../../src/period-select/PeriodSelect.tsx"],"sourcesContent":["export const PERIOD_SELECT_COMPONENT_ID = \"period-select\";\n","import {\n\tcountCalendarDaysInDateRange,\n\ttype DateRangeInput,\n\tnormalizeText,\n\ttoPositiveInteger\n} from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport { getPresetOption, normalizePresetIds, type PresetOption, resolvePresetOptionsByIds } from \"@ryuzaki13/react-foundation-lib/presets\";\nimport { isRecord } from \"@ryuzaki13/react-foundation-lib/validators\";\n\n/**\n * Идентификаторы встроенных уровней детализации периода.\n */\nexport type PeriodSelectPresetId = \"day\" | \"week\" | \"month\" | \"year\";\nexport type PeriodSelectId = PeriodSelectPresetId | (string & {});\n\n/**\n * Полный типизированный набор подписей встроенных уровней детализации.\n * Потребитель может передать его частично, сохранив канонические подписи\n * для всех отсутствующих ключей.\n */\nexport type PeriodSelectLabels = Readonly<Record<PeriodSelectPresetId, string>>;\n\nexport interface PeriodSelectOption extends PresetOption<PeriodSelectId> {\n\tmaxRangeDays?: number;\n}\n\ntype BuiltInPeriodSelectOption = PeriodSelectOption & {\n\tid: PeriodSelectPresetId;\n};\n\nexport type PeriodSelectDateRangeConnectors = Readonly<{\n\tstart: string;\n\tend: string;\n}>;\n\nexport type PeriodSelectThresholds = {\n\tmaxDayRangeDays?: number;\n\tmaxWeekRangeWeeks?: number;\n};\n\n/**\n * Настройки формирования встроенных options. `labels` изменяет только\n * отображаемый текст и не влияет на id, порядок или ограничения диапазона.\n */\nexport type PeriodSelectOptionsConfig = PeriodSelectThresholds & {\n\tlabels?: Partial<PeriodSelectLabels>;\n};\n\nexport const DEFAULT_PERIOD_SELECT_PRESET_ID = \"day\" satisfies PeriodSelectPresetId;\nexport const DEFAULT_PERIOD_SELECT_MAX_DAY_RANGE_DAYS = 31;\nexport const DEFAULT_PERIOD_SELECT_MAX_WEEK_RANGE_WEEKS = 26;\n\n/**\n * Канонический каталог встроенных вариантов. Порядок элементов задает порядок\n * отображения и автоматического перехода к следующему доступному уровню.\n */\nexport const PERIOD_SELECT_OPTIONS: readonly BuiltInPeriodSelectOption[] = Object.freeze([\n\t{\n\t\tid: \"day\",\n\t\tlabel: \"по дням\"\n\t},\n\t{\n\t\tid: \"week\",\n\t\tlabel: \"по неделям\"\n\t},\n\t{\n\t\tid: \"month\",\n\t\tlabel: \"по месяцам\"\n\t},\n\t{\n\t\tid: \"year\",\n\t\tlabel: \"по годам\"\n\t}\n]);\n\n/**\n * Полный набор встроенных вариантов, доступный при отсутствии явного allow-list.\n */\nexport const DEFAULT_PERIOD_SELECT_PRESET_IDS = Object.freeze([\n\t\"day\",\n\t\"week\",\n\t\"month\",\n\t\"year\"\n] as const satisfies readonly PeriodSelectPresetId[]);\n\nconst PERIOD_SELECT_PRESET_ID_SET: ReadonlySet<string> = new Set(PERIOD_SELECT_OPTIONS.map((option) => option.id));\n\nexport function isPeriodSelectPresetId(value: unknown): value is PeriodSelectPresetId {\n\treturn typeof value === \"string\" && PERIOD_SELECT_PRESET_ID_SET.has(value);\n}\n\nexport function normalizePeriodSelectPresetIds(\n\tvalue: unknown,\n\tfallbackIds: readonly PeriodSelectPresetId[] = DEFAULT_PERIOD_SELECT_PRESET_IDS\n): PeriodSelectPresetId[] {\n\tconst normalizedIds = normalizePresetIds(value, isPeriodSelectPresetId, fallbackIds);\n\tconst resolvedIds = normalizedIds.length > 0 ? normalizedIds : DEFAULT_PERIOD_SELECT_PRESET_IDS;\n\tconst resolvedIdSet = new Set<PeriodSelectPresetId>(resolvedIds);\n\n\t// Порядок runtime-опций является частью контракта: конфигурация только ограничивает\n\t// каталог и не может переставить уровни либо оставить контрол без вариантов.\n\treturn DEFAULT_PERIOD_SELECT_PRESET_IDS.filter((presetId) => resolvedIdSet.has(presetId));\n}\n\nexport function resolvePeriodSelectOptionsByIds(\n\tpresetIds: readonly PeriodSelectOption[\"id\"][],\n\toptions: readonly PeriodSelectOption[] = PERIOD_SELECT_OPTIONS\n): PeriodSelectOption[] {\n\treturn resolvePresetOptionsByIds(presetIds, options);\n}\n\nexport function getPeriodSelectOption(\n\tid: PeriodSelectOption[\"id\"] | undefined,\n\toptions: readonly PeriodSelectOption[] = PERIOD_SELECT_OPTIONS\n): PeriodSelectOption | null {\n\treturn getPresetOption(id, options);\n}\n\nexport function resolvePeriodSelectDefaultValue(value: unknown): PeriodSelectPresetId {\n\treturn isPeriodSelectPresetId(value) ? value : DEFAULT_PERIOD_SELECT_PRESET_ID;\n}\n\n/**\n * Создает независимый список встроенных options с порогами доступности и\n * частичными подписями потребителя поверх канонического каталога.\n */\nexport function createPeriodSelectOptions({\n\tmaxDayRangeDays,\n\tmaxWeekRangeWeeks,\n\tlabels\n}: PeriodSelectOptionsConfig = {}): PeriodSelectOption[] {\n\tconst dayLimit = toPositiveInteger(maxDayRangeDays);\n\tconst weekLimit = toPositiveInteger(maxWeekRangeWeeks);\n\n\treturn PERIOD_SELECT_OPTIONS.map((option) => {\n\t\tconst resolvedOption = {\n\t\t\t...option,\n\t\t\tlabel: labels?.[option.id] ?? option.label\n\t\t};\n\n\t\tif (option.id === \"day\" && dayLimit !== undefined) {\n\t\t\treturn {\n\t\t\t\t...resolvedOption,\n\t\t\t\tmaxRangeDays: dayLimit\n\t\t\t};\n\t\t}\n\n\t\tif (option.id === \"week\" && weekLimit !== undefined) {\n\t\t\treturn {\n\t\t\t\t...resolvedOption,\n\t\t\t\tmaxRangeDays: weekLimit * 7\n\t\t\t};\n\t\t}\n\n\t\treturn resolvedOption;\n\t});\n}\n\nexport function isPeriodSelectOptionDisabled(option: PeriodSelectOption, dateRange: DateRangeInput | undefined): boolean {\n\tconst maxRangeDays = toPositiveInteger(option.maxRangeDays);\n\tif (maxRangeDays === undefined || dateRange === undefined) {\n\t\treturn false;\n\t}\n\n\tconst rangeDays = countCalendarDaysInDateRange(dateRange);\n\treturn rangeDays !== null && rangeDays > maxRangeDays;\n}\n\nexport function resolvePeriodSelectAvailableValue(\n\tvalue: PeriodSelectOption[\"id\"] | undefined,\n\toptions: readonly PeriodSelectOption[],\n\tdateRange: DateRangeInput | undefined\n): PeriodSelectOption[\"id\"] | undefined {\n\tif (options.length === 0) {\n\t\treturn undefined;\n\t}\n\n\tconst selectedIndex = value === undefined ? -1 : options.findIndex((option) => option.id === value);\n\tconst selectedOption = selectedIndex >= 0 ? options[selectedIndex] : undefined;\n\n\tif (selectedOption && !isPeriodSelectOptionDisabled(selectedOption, dateRange)) {\n\t\treturn selectedOption.id;\n\t}\n\n\tconst nextOptions = selectedIndex >= 0 ? options.slice(selectedIndex + 1) : options;\n\tconst nextAvailableOption = nextOptions.find((option) => !isPeriodSelectOptionDisabled(option, dateRange));\n\n\treturn nextAvailableOption?.id ?? options.find((option) => !isPeriodSelectOptionDisabled(option, dateRange))?.id;\n}\n\nexport function normalizePeriodSelectDateRangeConnectors(value: unknown): PeriodSelectDateRangeConnectors | undefined {\n\tif (!isRecord(value)) {\n\t\treturn undefined;\n\t}\n\n\tconst startConnector = normalizeText(value.start);\n\tconst endConnector = normalizeText(value.end);\n\n\treturn startConnector && endConnector ? { start: startConnector, end: endConnector } : undefined;\n}\n","import { useEffect, useEffectEvent, useMemo, useRef } from \"react\";\n\nimport { PresetSelect } from \"../preset-select\";\n\nimport {\n\tcreatePeriodSelectOptions,\n\tisPeriodSelectOptionDisabled,\n\tnormalizePeriodSelectPresetIds,\n\tresolvePeriodSelectAvailableValue,\n\tresolvePeriodSelectOptionsByIds,\n\ttype PeriodSelectLabels,\n\ttype PeriodSelectOption,\n\ttype PeriodSelectPresetId\n} from \"./lib\";\n\nimport type { UiBaseProps } from \"../types\";\nimport type { DateRangeInput } from \"@ryuzaki13/react-foundation-lib/formatters\";\n\nexport interface PeriodSelectProps extends UiBaseProps<PeriodSelectOption[\"id\"] | undefined> {\n\trequired?: boolean;\n\terror?: string;\n\t/**\n\t * Полный список custom options с высшим приоритетом. При его передаче\n\t * встроенные `presetIds`, `labels` и пороги диапазона не применяются.\n\t */\n\toptions?: readonly PeriodSelectOption[];\n\t/**\n\t * Частично заменяет подписи встроенных вариантов, не изменяя их id,\n\t * канонический порядок и правила доступности.\n\t * Не применяется, когда передан собственный `options`.\n\t */\n\tlabels?: Partial<PeriodSelectLabels>;\n\t/**\n\t * Разрешенные встроенные варианты периода. Значение нормализуется в канонический\n\t * порядок, а пустой либо невалидный список безопасно заменяется полным набором.\n\t * Не применяется, когда передан собственный `options`.\n\t */\n\tpresetIds?: readonly PeriodSelectPresetId[];\n\tdateRange?: DateRangeInput;\n\tmaxDayRangeDays?: number;\n\tmaxWeekRangeWeeks?: number;\n}\n\n/**\n * Select периода детализации, который может ограничивать доступные варианты по диапазону дат.\n */\nexport function PeriodSelect({\n\tvalue,\n\tonChange,\n\toptions,\n\tlabels,\n\tpresetIds,\n\tdateRange,\n\tmaxDayRangeDays,\n\tmaxWeekRangeWeeks,\n\t...props\n}: PeriodSelectProps) {\n\tconst resolvedOptions = useMemo(\n\t\t() =>\n\t\t\toptions ??\n\t\t\tresolvePeriodSelectOptionsByIds(\n\t\t\t\tnormalizePeriodSelectPresetIds(presetIds),\n\t\t\t\tcreatePeriodSelectOptions({ maxDayRangeDays, maxWeekRangeWeeks, labels })\n\t\t\t),\n\t\t[labels, maxDayRangeDays, maxWeekRangeWeeks, options, presetIds]\n\t);\n\tconst availableValue = useMemo(\n\t\t() => resolvePeriodSelectAvailableValue(value, resolvedOptions, dateRange),\n\t\t[dateRange, resolvedOptions, value]\n\t);\n\tconst lastEmittedTransitionRef = useRef<{\n\t\tvalue: PeriodSelectOption[\"id\"] | undefined;\n\t\tavailableValue: PeriodSelectOption[\"id\"] | undefined;\n\t} | null>(null);\n\n\tconst emitAvailableValue = useEffectEvent(() => {\n\t\tif (availableValue === undefined || availableValue === value) {\n\t\t\t// После принятия controlled-значения либо временной блокировки всех опций\n\t\t\t// такой же переход должен снова стать допустимым при следующем изменении условий.\n\t\t\tlastEmittedTransitionRef.current = null;\n\t\t\treturn;\n\t\t}\n\n\t\tconst lastTransition = lastEmittedTransitionRef.current;\n\t\tif (lastTransition && lastTransition.value === value && lastTransition.availableValue === availableValue) {\n\t\t\treturn;\n\t\t}\n\n\t\tlastEmittedTransitionRef.current = { value, availableValue };\n\n\t\t// Сигнатура перехода защищает reconciliation от повтора в React StrictMode.\n\t\t// При временной блокировке всех опций внешний controlled-id сохраняется,\n\t\t// поэтому выбор восстановится без потери runtime-параметра после смены диапазона.\n\t\tonChange(availableValue);\n\t});\n\n\tuseEffect(() => {\n\t\temitAvailableValue();\n\t}, [availableValue, value]);\n\n\treturn (\n\t\t<PresetSelect\n\t\t\t{...props}\n\t\t\toptions={resolvedOptions}\n\t\t\tvalue={availableValue}\n\t\t\tonChange={onChange}\n\t\t\tgetOptionDisabled={(option) => isPeriodSelectOptionDisabled(option, dateRange)}\n\t\t/>\n\t);\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import { InputType } from "@ryuzaki13/react-foundation-lib/types";
2
2
  import { PickerFieldProps } from "./types";
3
- export declare function PickerField<TValue extends InputType>({ id, label, description, disabled, size, className, error, children }: PickerFieldProps<TValue>): import("react").JSX.Element;
3
+ export declare function PickerField<TValue extends InputType>({ id, label, description, disabled, size, className, error, required, children }: PickerFieldProps<TValue>): import("react").JSX.Element;
4
4
  //# sourceMappingURL=PickerField.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PickerField.d.ts","sourceRoot":"","sources":["../../src/picker/PickerField.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAKlE,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,wBAAgB,WAAW,CAAC,MAAM,SAAS,SAAS,EAAE,EACrD,EAAE,EACF,KAAK,EACL,WAAW,EACX,QAAQ,EACR,IAAI,EACJ,SAAS,EACT,KAAK,EACL,QAAQ,EACR,EAAE,gBAAgB,CAAC,MAAM,CAAC,+BAuB1B"}
1
+ {"version":3,"file":"PickerField.d.ts","sourceRoot":"","sources":["../../src/picker/PickerField.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAKlE,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,wBAAgB,WAAW,CAAC,MAAM,SAAS,SAAS,EAAE,EACrD,EAAE,EACF,KAAK,EACL,WAAW,EACX,QAAQ,EACR,IAAI,EACJ,SAAS,EACT,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,EAAE,gBAAgB,CAAC,MAAM,CAAC,+BAwB1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"PickerTriggerInput.d.ts","sourceRoot":"","sources":["../../src/picker/PickerTriggerInput.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,wBAAwB,EAAE,KAAK,SAAS,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAShF,MAAM,WAAW,uBAAwB,SAAQ,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC/F,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAAC,EAClC,GAAG,EACH,OAAO,EACP,YAAY,EACZ,OAAO,EACP,aAAa,EACb,cAAc,EACd,SAAS,EACT,GAAG,KAAK,EACR,EAAE,uBAAuB,GAAG;IAAE,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAA;CAAE,+BAsB3D;yBA/Be,kBAAkB"}
1
+ {"version":3,"file":"PickerTriggerInput.d.ts","sourceRoot":"","sources":["../../src/picker/PickerTriggerInput.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,wBAAwB,EAAE,KAAK,SAAS,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAShF,MAAM,WAAW,uBAAwB,SAAQ,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC/F,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAAC,EAClC,GAAG,EACH,OAAO,EACP,YAAY,EACZ,OAAO,EACP,aAAa,EACb,cAAc,EACd,SAAS,EACT,GAAG,KAAK,EACR,EAAE,uBAAuB,GAAG;IAAE,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAA;CAAE,+BA4B3D;yBArCe,kBAAkB"}
@@ -1,2 +1,2 @@
1
- import { _ as e, a as t, c as n, d as r, f as i, g as a, h as o, i as s, l as c, m as l, n as u, o as d, p as f, r as p, s as m, t as h, u as g, v as _ } from "../chunks/picker-SJXnHwsj.js";
1
+ import { _ as e, a as t, c as n, d as r, f as i, g as a, h as o, i as s, l as c, m as l, n as u, o as d, p as f, r as p, s as m, t as h, u as g, v as _ } from "../chunks/picker-DagDe9OH.js";
2
2
  export { e as PickerClearButton, _ as PickerField, o as PickerOptions, i as PickerPopup, r as PickerSelectedToken, a as PickerSelectionToolbar, g as PickerStatus, m as PickerTrigger, c as PickerTriggerActions, n as PickerTriggerInput, d as createPickerTriggerPolicy, l as extractPickerTextContent, f as getPickerPlaceholder, t as usePickerDefaultFilter, s as usePickerFloatingListbox, p as usePickerQuery, u as usePickerSelectionLifecycle, h as usePickerTriggerController };
@@ -5,6 +5,8 @@ export interface PickerFieldProps<TValue extends InputType = InputType> extends
5
5
  id?: string;
6
6
  className?: string;
7
7
  error?: string;
8
+ /** Показывает обязательность выбора; проверку value выполняет форма, а не поисковый input. */
9
+ required?: boolean;
8
10
  children: (context: PickerFieldContext) => ReactNode;
9
11
  }
10
12
  export interface PickerFieldContext {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/picker/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAElE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,MAAM,WAAW,gBAAgB,CAAC,MAAM,SAAS,SAAS,GAAG,SAAS,CAAE,SAAQ,IAAI,CACnF,WAAW,CAAC,MAAM,CAAC,EACnB,OAAO,GAAG,UAAU,GAAG,aAAa,CACpC;IACA,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,SAAS,CAAC;CACrD;AAED,MAAM,WAAW,kBAAkB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/picker/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAElE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,MAAM,WAAW,gBAAgB,CAAC,MAAM,SAAS,SAAS,GAAG,SAAS,CAAE,SAAQ,IAAI,CACnF,WAAW,CAAC,MAAM,CAAC,EACnB,OAAO,GAAG,UAAU,GAAG,aAAa,CACpC;IACA,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,SAAS,CAAC;CACrD;AAED,MAAM,WAAW,kBAAkB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB"}
@@ -1,5 +1,5 @@
1
1
  import { o as e } from "../chunks/flex-D86M_h-0.js";
2
- import { t } from "../chunks/date-input-CzCDou4s.js";
2
+ import { t } from "../chunks/date-input-B7iG9cA7.js";
3
3
  import { c as n, l as r, r as i, s as a, t as o, u as s } from "../chunks/date-range-preset-select-CyzGMvVp.js";
4
4
  import { jsx as c, jsxs as l } from "react/jsx-runtime";
5
5
  import { useCallback as u, useMemo as d, useRef as f, useState as p } from "react";
@@ -13,6 +13,8 @@ export interface PresetSelectProps<TOption extends PresetOption> extends UiBaseP
13
13
  buttonClassName?: string;
14
14
  optionsClassName?: string;
15
15
  clearable?: boolean;
16
+ required?: boolean;
17
+ error?: string;
16
18
  }
17
19
  /**
18
20
  * Базовый Select для пресетов с контрактом `id/label`.
@@ -1 +1 @@
1
- {"version":3,"file":"PresetSelect.d.ts","sourceRoot":"","sources":["../../src/preset-select/PresetSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAE7F,OAAO,EAAU,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,WAAW,iBAAiB,CAAC,OAAO,SAAS,YAAY,CAAE,SAAQ,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;IAC9G,OAAO,EAAE,SAAS,OAAO,EAAE,CAAC;IAC5B,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;IACjD,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,CAAC;IAC5C,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,CAAC;IACjD,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,KAAK,SAAS,CAAC;IACxE,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,SAAS,CAAC;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,SAAS,YAAY,EAAE,EAC1D,OAAO,EACP,KAAK,EACL,QAAQ,EACR,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,SAAS,EACT,GAAG,KAAK,EACR,EAAE,iBAAiB,CAAC,OAAO,CAAC,+BAsB5B"}
1
+ {"version":3,"file":"PresetSelect.d.ts","sourceRoot":"","sources":["../../src/preset-select/PresetSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAE7F,OAAO,EAAU,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,WAAW,iBAAiB,CAAC,OAAO,SAAS,YAAY,CAAE,SAAQ,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;IAC9G,OAAO,EAAE,SAAS,OAAO,EAAE,CAAC;IAC5B,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;IACjD,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,CAAC;IAC5C,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,CAAC;IACjD,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,KAAK,SAAS,CAAC;IACxE,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,SAAS,CAAC;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,SAAS,YAAY,EAAE,EAC1D,OAAO,EACP,KAAK,EACL,QAAQ,EACR,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,SAAS,EACT,GAAG,KAAK,EACR,EAAE,iBAAiB,CAAC,OAAO,CAAC,+BAsB5B"}