@ryuzaki13/react-foundation-ui 0.1.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) hide show
  1. package/dist/badge/Badge.d.ts.map +1 -1
  2. package/dist/badge/index.js +1 -1
  3. package/dist/badge/stories/Badge.stories.js +1 -1
  4. package/dist/base-table/index.js +1 -1
  5. package/dist/base-table/lib/columnPinning.d.ts.map +1 -1
  6. package/dist/base-table/model/useTableColumnOrder.d.ts +1 -1
  7. package/dist/base-table/model/useTableColumnOrder.d.ts.map +1 -1
  8. package/dist/base-table/model/useTableColumnSizing.d.ts +1 -1
  9. package/dist/base-table/model/useTableColumnSizing.d.ts.map +1 -1
  10. package/dist/base-table/ui/BaseTable.d.ts +2 -2
  11. package/dist/base-table/ui/BaseTable.d.ts.map +1 -1
  12. package/dist/base-table/ui/BaseTableHeaderCell.d.ts.map +1 -1
  13. package/dist/base-table/ui/FormattedTableCell.d.ts.map +1 -1
  14. package/dist/check-box/CheckBox.d.ts.map +1 -1
  15. package/dist/check-box/index.js +1 -1
  16. package/dist/check-box/stories/CheckBox.stories.js +1 -1
  17. package/dist/chunks/{BadgeList-DHW_Ktr3.js → BadgeList-6qL9oNAp.js} +5 -5
  18. package/dist/chunks/BadgeList-6qL9oNAp.js.map +1 -0
  19. package/dist/chunks/{CalendarView-B75faWIU.js → CalendarView-DjShdvRD.js} +42 -42
  20. package/dist/chunks/{CalendarView-B75faWIU.js.map → CalendarView-DjShdvRD.js.map} +1 -1
  21. package/dist/chunks/{CheckBox-Cck5w1Ud.js → CheckBox-CulnjNvJ.js} +9 -9
  22. package/dist/chunks/CheckBox-CulnjNvJ.js.map +1 -0
  23. package/dist/chunks/{DateInput-CINDYueM.js → DateInput-LSSvObtg.js} +3 -3
  24. package/dist/chunks/DateInput-LSSvObtg.js.map +1 -0
  25. package/dist/chunks/Dialog-BPS4BeWZ.js.map +1 -1
  26. package/dist/chunks/{DisclosureGroup-0BtaXO54.js → DisclosureGroup-Plk2M_Vl.js} +9 -9
  27. package/dist/chunks/DisclosureGroup-Plk2M_Vl.js.map +1 -0
  28. package/dist/chunks/{DropZone-hf7Em__0.js → DropZone-DPGTpHI6.js} +7 -7
  29. package/dist/chunks/DropZone-DPGTpHI6.js.map +1 -0
  30. package/dist/chunks/DropdownMenu-Ds-trH4M.js.map +1 -1
  31. package/dist/chunks/Flex-DbBdq336.js.map +1 -1
  32. package/dist/chunks/Grid-ByIIytjh.js.map +1 -1
  33. package/dist/chunks/{Input-Ce2HXBUc.js → Input-Wrew1puH.js} +30 -30
  34. package/dist/chunks/Input-Wrew1puH.js.map +1 -0
  35. package/dist/chunks/{InputDateTime-DPtY_4Od.js → InputDateTime-2PCX8an8.js} +2 -2
  36. package/dist/chunks/{InputDateTime-DPtY_4Od.js.map → InputDateTime-2PCX8an8.js.map} +1 -1
  37. package/dist/chunks/{InputFile-ga5yJmdZ.js → InputFile-Ca-bRo93.js} +2 -2
  38. package/dist/chunks/InputFile-Ca-bRo93.js.map +1 -0
  39. package/dist/chunks/{InputFiles-Or2Nvfgk.js → InputFiles-pI9rQXOI.js} +22 -22
  40. package/dist/chunks/InputFiles-pI9rQXOI.js.map +1 -0
  41. package/dist/chunks/{InputImage-BeA5WJz1.js → InputImage-B522AQzl.js} +2 -2
  42. package/dist/chunks/{InputImage-BeA5WJz1.js.map → InputImage-B522AQzl.js.map} +1 -1
  43. package/dist/chunks/{LabeledExpandableActionPanel-Bx-DWmYz.js → LabeledExpandableActionPanel-CWmOSWeS.js} +12 -12
  44. package/dist/chunks/LabeledExpandableActionPanel-CWmOSWeS.js.map +1 -0
  45. package/dist/chunks/{Listbox-CY1wQOCP.js → Listbox-B6F_IKQv.js} +22 -22
  46. package/dist/chunks/Listbox-B6F_IKQv.js.map +1 -0
  47. package/dist/chunks/{MultiSelect-CBqTylqO.js → MultiSelect-CUXA8gx-.js} +12 -12
  48. package/dist/chunks/{MultiSelect-CBqTylqO.js.map → MultiSelect-CUXA8gx-.js.map} +1 -1
  49. package/dist/chunks/{NotificationsHost-BQc-zOr2.js → NotificationsHost-Bnq7xFKO.js} +24 -24
  50. package/dist/chunks/NotificationsHost-Bnq7xFKO.js.map +1 -0
  51. package/dist/chunks/{PresetRangeDateInput-YBQm_4Fb.js → PresetRangeDateInput-B_8jsilZ.js} +2 -2
  52. package/dist/chunks/{PresetRangeDateInput-YBQm_4Fb.js.map → PresetRangeDateInput-B_8jsilZ.js.map} +1 -1
  53. package/dist/chunks/{RadioButton-DJp31HFR.js → RadioButton-D5vPW4Yr.js} +8 -8
  54. package/dist/chunks/RadioButton-D5vPW4Yr.js.map +1 -0
  55. package/dist/chunks/{Select-B7k_8_Lf.js → Select-CoAYWNOn.js} +10 -10
  56. package/dist/chunks/Select-CoAYWNOn.js.map +1 -0
  57. package/dist/chunks/{SerializableSelect-53uNCqdE.js → SerializableSelect-awBOWKTj.js} +2 -2
  58. package/dist/chunks/{SerializableSelect-53uNCqdE.js.map → SerializableSelect-awBOWKTj.js.map} +1 -1
  59. package/dist/chunks/{SingleDateTimeInput-CwvIbwje.js → SingleDateTimeInput-o44Vlwdk.js} +19 -19
  60. package/dist/chunks/SingleDateTimeInput-o44Vlwdk.js.map +1 -0
  61. package/dist/chunks/{StateSelect-D0wuUdT9.js → StateSelect-abZq176J.js} +2 -2
  62. package/dist/chunks/{StateSelect-D0wuUdT9.js.map → StateSelect-abZq176J.js.map} +1 -1
  63. package/dist/chunks/{Switch-B476FBUD.js → Switch-DHMnZVmN.js} +9 -9
  64. package/dist/chunks/Switch-DHMnZVmN.js.map +1 -0
  65. package/dist/chunks/{TextEditorLexicalClient-DcixYuo4.js → TextEditorLexicalClient-Dt4eaPA3.js} +4 -4
  66. package/dist/chunks/{TextEditorLexicalClient-DcixYuo4.js.map → TextEditorLexicalClient-Dt4eaPA3.js.map} +1 -1
  67. package/dist/chunks/{Textarea-DeJJjjkI.js → Textarea-DOVrPH4I.js} +2 -2
  68. package/dist/chunks/{Textarea-DeJJjjkI.js.map → Textarea-DOVrPH4I.js.map} +1 -1
  69. package/dist/chunks/TimePanel-_kF2RtHk.js.map +1 -1
  70. package/dist/chunks/{TreeMultiSelect-DRYNx7u5.js → TreeMultiSelect-C76RYavo.js} +2 -2
  71. package/dist/chunks/{TreeMultiSelect-DRYNx7u5.js.map → TreeMultiSelect-C76RYavo.js.map} +1 -1
  72. package/dist/chunks/{TreePickerBase-DYzTsSBQ.js → TreePickerBase-qNHIWbYL.js} +155 -155
  73. package/dist/chunks/TreePickerBase-qNHIWbYL.js.map +1 -0
  74. package/dist/chunks/{TreeSelect-DGLDu6qc.js → TreeSelect-LEhNdPCX.js} +2 -2
  75. package/dist/chunks/{TreeSelect-DGLDu6qc.js.map → TreeSelect-LEhNdPCX.js.map} +1 -1
  76. package/dist/chunks/{base-table-DVje02Zi.js → base-table-ij2guVMB.js} +3 -3
  77. package/dist/chunks/base-table-ij2guVMB.js.map +1 -0
  78. package/dist/chunks/{layout-picker-BA9vA8JI.js → layout-picker-CzZ8Xzkk.js} +9 -9
  79. package/dist/chunks/layout-picker-CzZ8Xzkk.js.map +1 -0
  80. package/dist/chunks/{misc-DrmMj8GO.js → misc-Bj0y3ERC.js} +54 -54
  81. package/dist/chunks/misc-Bj0y3ERC.js.map +1 -0
  82. package/dist/chunks/{modal-DqVcZws_.js → modal-B4ivQb2h.js} +10 -10
  83. package/dist/chunks/modal-B4ivQb2h.js.map +1 -0
  84. package/dist/chunks/{picker-Cj4RnJh6.js → picker-gIUs0nE_.js} +13 -13
  85. package/dist/chunks/picker-gIUs0nE_.js.map +1 -0
  86. package/dist/chunks/popover-C79P5bm2.js.map +1 -1
  87. package/dist/chunks/{slider-34wxzKkG.js → slider-CigVo4Ju.js} +3 -3
  88. package/dist/chunks/slider-CigVo4Ju.js.map +1 -0
  89. package/dist/chunks/{sortable-CwDHC3CA.js → sortable-BZqnZ_LA.js} +10 -10
  90. package/dist/chunks/sortable-BZqnZ_LA.js.map +1 -0
  91. package/dist/chunks/{table-BYA0hCj7.js → table-CK-CM2zD.js} +2 -2
  92. package/dist/chunks/table-CK-CM2zD.js.map +1 -0
  93. package/dist/chunks/table-column-interactions-DPyJDD7P.js.map +1 -1
  94. package/dist/chunks/{tabs-CjU2KCgs.js → tabs-D5ikIIng.js} +2 -2
  95. package/dist/chunks/{tabs-CjU2KCgs.js.map → tabs-D5ikIIng.js.map} +1 -1
  96. package/dist/chunks/ui.module-BisoTevy.js.map +1 -1
  97. package/dist/context-menu/components/MenuContent.d.ts.map +1 -1
  98. package/dist/context-menu/components/MenuContext.d.ts.map +1 -1
  99. package/dist/context-menu/components/MenuRoot.d.ts.map +1 -1
  100. package/dist/context-menu/components/RadialMenuContent.d.ts.map +1 -1
  101. package/dist/date-input/index.js +2 -2
  102. package/dist/date-input/lib/types.d.ts.map +1 -1
  103. package/dist/date-input/stories/DateInput.stories.js +2 -2
  104. package/dist/date-input/ui/CalendarView.d.ts.map +1 -1
  105. package/dist/date-input/ui/DateInput.d.ts.map +1 -1
  106. package/dist/date-range-preset-select/stories/DateRangePresetSelect.stories.js +1 -1
  107. package/dist/date-time-input/index.js +1 -1
  108. package/dist/date-time-input/lib/dateTimeValue.d.ts.map +1 -1
  109. package/dist/date-time-input/stories/SingleDateTimeInput.stories.js +1 -1
  110. package/dist/date-time-input/ui/SingleDateTimeInput.d.ts.map +1 -1
  111. package/dist/dialog/Dialog.d.ts.map +1 -1
  112. package/dist/disclosure/Disclosure.d.ts.map +1 -1
  113. package/dist/disclosure/index.js +1 -1
  114. package/dist/disclosure/stories/Disclosure.stories.js +1 -1
  115. package/dist/drop-zone/DropZone.d.ts.map +1 -1
  116. package/dist/drop-zone/index.js +1 -1
  117. package/dist/drop-zone/stories/DropZone.stories.d.ts.map +1 -1
  118. package/dist/drop-zone/stories/DropZone.stories.js +1 -1
  119. package/dist/drop-zone/stories/DropZone.stories.js.map +1 -1
  120. package/dist/errors/ErrorDisplay.d.ts.map +1 -1
  121. package/dist/errors/index.js.map +1 -1
  122. package/dist/expandable-action-panel/ExpandableActionPanel.d.ts.map +1 -1
  123. package/dist/expandable-action-panel/index.js +1 -1
  124. package/dist/expandable-action-panel/stories/ExpandableActionPanel.stories.js +4 -4
  125. package/dist/image/index.js +3 -3
  126. package/dist/image/index.js.map +1 -1
  127. package/dist/image/ui/ImageSelection.d.ts.map +1 -1
  128. package/dist/input/Input.d.ts.map +1 -1
  129. package/dist/input/index.js +1 -1
  130. package/dist/input/stories/Input.stories.js +1 -1
  131. package/dist/input-date-time/index.js +1 -1
  132. package/dist/input-date-time/stories/InputDateTime.stories.js +1 -1
  133. package/dist/input-file/InputFile.d.ts.map +1 -1
  134. package/dist/input-file/index.js +1 -1
  135. package/dist/input-file/stories/InputFile.stories.d.ts.map +1 -1
  136. package/dist/input-file/stories/InputFile.stories.js +1 -1
  137. package/dist/input-file/stories/InputFile.stories.js.map +1 -1
  138. package/dist/input-files/InputFilesList.d.ts.map +1 -1
  139. package/dist/input-files/index.js +1 -1
  140. package/dist/input-files/stories/InputFiles.stories.d.ts +1 -1
  141. package/dist/input-files/stories/InputFiles.stories.d.ts.map +1 -1
  142. package/dist/input-files/stories/InputFiles.stories.js +1 -1
  143. package/dist/input-files/stories/InputFiles.stories.js.map +1 -1
  144. package/dist/input-image/index.js +1 -1
  145. package/dist/input-image/stories/InputImage.stories.d.ts.map +1 -1
  146. package/dist/input-image/stories/InputImage.stories.js +1 -1
  147. package/dist/input-image/stories/InputImage.stories.js.map +1 -1
  148. package/dist/input-search/index.js +1 -1
  149. package/dist/layout-picker/index.js +1 -1
  150. package/dist/layout-picker/stories/LayoutPicker.stories.js +1 -1
  151. package/dist/layout-picker/ui/LayoutPicker.d.ts.map +1 -1
  152. package/dist/list/List.d.ts.map +1 -1
  153. package/dist/list/index.js +5 -5
  154. package/dist/list/index.js.map +1 -1
  155. package/dist/listbox/Listbox.d.ts.map +1 -1
  156. package/dist/listbox/index.js +1 -1
  157. package/dist/listbox/stories/Listbox.stories.js +1 -1
  158. package/dist/misc/CopyTextWrapper.d.ts.map +1 -1
  159. package/dist/misc/OneStepScroller.d.ts.map +1 -1
  160. package/dist/misc/StateIcon.d.ts.map +1 -1
  161. package/dist/misc/index.js +1 -1
  162. package/dist/modal/Modal.d.ts +5 -1
  163. package/dist/modal/Modal.d.ts.map +1 -1
  164. package/dist/modal/index.js +1 -1
  165. package/dist/modal/stories/Modal.stories.js +2 -2
  166. package/dist/multi-select/index.js +1130 -24
  167. package/dist/multi-select/index.js.map +1 -1
  168. package/dist/multi-select/model/useODataMultiSelect.d.ts +23 -0
  169. package/dist/multi-select/model/useODataMultiSelect.d.ts.map +1 -0
  170. package/dist/multi-select/ui/MultiSelect.d.ts +1 -1
  171. package/dist/multi-select/ui/MultiSelect.d.ts.map +1 -1
  172. package/dist/multi-select/ui/ODataDependentMultiSelect.d.ts +20 -0
  173. package/dist/multi-select/ui/ODataDependentMultiSelect.d.ts.map +1 -0
  174. package/dist/multi-select/ui/ODataDependentSegmentMultiSelect.d.ts +21 -0
  175. package/dist/multi-select/ui/ODataDependentSegmentMultiSelect.d.ts.map +1 -0
  176. package/dist/multi-select/ui/ODataMultiSelect.d.ts +7 -0
  177. package/dist/multi-select/ui/ODataMultiSelect.d.ts.map +1 -0
  178. package/dist/multi-select/ui/SerializableMultiSelect.d.ts.map +1 -1
  179. package/dist/multi-select/ui/index.d.ts +3 -0
  180. package/dist/multi-select/ui/index.d.ts.map +1 -1
  181. package/dist/multi-select/ui/stories/MultiSelect.stories.js +1 -1
  182. package/dist/multi-select/ui/stories/ODataMultiSelect.stories.d.ts +44 -0
  183. package/dist/multi-select/ui/stories/ODataMultiSelect.stories.d.ts.map +1 -0
  184. package/dist/notifications/index.js +1 -1
  185. package/dist/notifications/model/NotificationsProvider.d.ts.map +1 -1
  186. package/dist/notifications/ui/NotificationsHost.d.ts.map +1 -1
  187. package/dist/notifications/ui/stories/NotificationsHost.stories.js +1 -1
  188. package/dist/period-select/PeriodSelect.d.ts +1 -1
  189. package/dist/period-select/PeriodSelect.d.ts.map +1 -1
  190. package/dist/period-select/index.js.map +1 -1
  191. package/dist/period-select/lib/periodSelect.d.ts.map +1 -1
  192. package/dist/period-select/stories/PeriodSelect.stories.d.ts.map +1 -1
  193. package/dist/period-select/stories/PeriodSelect.stories.js +1 -1
  194. package/dist/period-select/stories/PeriodSelect.stories.js.map +1 -1
  195. package/dist/picker/PickerPopup.d.ts.map +1 -1
  196. package/dist/picker/PickerTriggerActions.d.ts.map +1 -1
  197. package/dist/picker/index.js +1 -1
  198. package/dist/picker/model/usePickerFloatingListbox.d.ts.map +1 -1
  199. package/dist/popover/FloatingPopover.d.ts.map +1 -1
  200. package/dist/popover/components/PopoverContent.d.ts.map +1 -1
  201. package/dist/popover/components/PopoverContext.d.ts.map +1 -1
  202. package/dist/popover/stories/Popover.stories.js +1 -1
  203. package/dist/preset-range-date-input/index.js +1 -1
  204. package/dist/preset-range-date-input/ui/stories/PresetRangeDateInput.stories.js +1 -1
  205. package/dist/preset-select/index.js +1 -1
  206. package/dist/radio-button/RadioButton.d.ts.map +1 -1
  207. package/dist/radio-button/index.js +1 -1
  208. package/dist/radio-button/stories/RadioButton.stories.js +1 -1
  209. package/dist/select/ODataSelect.d.ts +9 -0
  210. package/dist/select/ODataSelect.d.ts.map +1 -0
  211. package/dist/select/Select.d.ts.map +1 -1
  212. package/dist/select/index.js +2 -2
  213. package/dist/select/model/useODataSelect.d.ts +25 -0
  214. package/dist/select/model/useODataSelect.d.ts.map +1 -0
  215. package/dist/select/model/useODataSelectBase.d.ts +24 -0
  216. package/dist/select/model/useODataSelectBase.d.ts.map +1 -0
  217. package/dist/select/stories/ODataSelect.stories.d.ts +46 -0
  218. package/dist/select/stories/ODataSelect.stories.d.ts.map +1 -0
  219. package/dist/select/stories/Select.stories.js +1 -1
  220. package/dist/select/stories/SerializableSelect.stories.js +1 -1
  221. package/dist/select/stories/odataStoryCollection.d.ts +2 -0
  222. package/dist/select/stories/odataStoryCollection.d.ts.map +1 -0
  223. package/dist/select/stories/odataStoryFixtures.d.ts +35 -0
  224. package/dist/select/stories/odataStoryFixtures.d.ts.map +1 -0
  225. package/dist/simple-table/index.js +1 -1
  226. package/dist/simple-table/index.js.map +1 -1
  227. package/dist/slider/Slider.d.ts.map +1 -1
  228. package/dist/slider/index.js +1 -1
  229. package/dist/slider/stories/Slider.stories.js +1 -1
  230. package/dist/slider/stories/SliderInput.stories.js +1 -1
  231. package/dist/sortable/Sortable.d.ts.map +1 -1
  232. package/dist/sortable/SortableDragHandle.d.ts.map +1 -1
  233. package/dist/sortable/index.js +1 -1
  234. package/dist/sortable/stories/Sortable.stories.js +1 -1
  235. package/dist/state-select/index.js +1 -1
  236. package/dist/state-select/stories/StateSelect.stories.d.ts.map +1 -1
  237. package/dist/state-select/stories/StateSelect.stories.js +1 -1
  238. package/dist/state-select/stories/StateSelect.stories.js.map +1 -1
  239. package/dist/switch/Switch.d.ts.map +1 -1
  240. package/dist/switch/index.js +1 -1
  241. package/dist/switch/stories/Switch.stories.js +1 -1
  242. package/dist/table/Table.d.ts +1 -1
  243. package/dist/table/Table.d.ts.map +1 -1
  244. package/dist/table/index.js +1 -1
  245. package/dist/table/stories/Table.stories.d.ts +155 -0
  246. package/dist/table/stories/Table.stories.d.ts.map +1 -0
  247. package/dist/table-column-interactions/TableHeaderInteractionCell.d.ts.map +1 -1
  248. package/dist/tabs/index.js +1 -1
  249. package/dist/tabs/stories/Tabs.stories.d.ts.map +1 -1
  250. package/dist/tabs/stories/Tabs.stories.js +2 -2
  251. package/dist/tabs/stories/Tabs.stories.js.map +1 -1
  252. package/dist/text/TextOverflow.d.ts.map +1 -1
  253. package/dist/text/index.js.map +1 -1
  254. package/dist/text-editor/TextEditorLexicalClient.d.ts.map +1 -1
  255. package/dist/text-editor/index.js +2 -2
  256. package/dist/textarea/index.js +1 -1
  257. package/dist/textarea/stories/Textarea.stories.js +1 -1
  258. package/dist/tree-select/ODataTreeMultiSelect.d.ts +12 -0
  259. package/dist/tree-select/ODataTreeMultiSelect.d.ts.map +1 -0
  260. package/dist/tree-select/ODataTreeSelect.d.ts +13 -0
  261. package/dist/tree-select/ODataTreeSelect.d.ts.map +1 -0
  262. package/dist/tree-select/TreeNodeContent.d.ts.map +1 -1
  263. package/dist/tree-select/TreePickerBase.d.ts.map +1 -1
  264. package/dist/tree-select/index.js +2 -2
  265. package/dist/tree-select/model/buildODataTreeNodes.d.ts +12 -0
  266. package/dist/tree-select/model/buildODataTreeNodes.d.ts.map +1 -0
  267. package/dist/tree-select/model/resolveOrderedTreeSegmentItems.d.ts +4 -0
  268. package/dist/tree-select/model/resolveOrderedTreeSegmentItems.d.ts.map +1 -0
  269. package/dist/tree-select/model/useODataTreeData.d.ts +11 -0
  270. package/dist/tree-select/model/useODataTreeData.d.ts.map +1 -0
  271. package/dist/tree-select/stories/ODataTreeMultiSelect.stories.d.ts +55 -0
  272. package/dist/tree-select/stories/ODataTreeMultiSelect.stories.d.ts.map +1 -0
  273. package/dist/tree-select/stories/ODataTreeSelect.stories.d.ts +54 -0
  274. package/dist/tree-select/stories/ODataTreeSelect.stories.d.ts.map +1 -0
  275. package/dist/tree-select/stories/TreeMultiSelect.stories.js +1 -1
  276. package/dist/tree-select/stories/TreeSelect.stories.js +1 -1
  277. package/dist/tree-table/TreeTable.d.ts +1 -1
  278. package/dist/tree-table/TreeTable.d.ts.map +1 -1
  279. package/dist/tree-table/index.js +2 -2
  280. package/dist/tree-table/index.js.map +1 -1
  281. package/dist/tree-table/stories/TreeTable.stories.d.ts +158 -0
  282. package/dist/tree-table/stories/TreeTable.stories.d.ts.map +1 -0
  283. package/dist/types.d.ts +1 -1
  284. package/dist/types.d.ts.map +1 -1
  285. package/dist/types.js +0 -0
  286. package/package.json +15 -7
  287. package/dist/chunks/BadgeList-DHW_Ktr3.js.map +0 -1
  288. package/dist/chunks/CheckBox-Cck5w1Ud.js.map +0 -1
  289. package/dist/chunks/DateInput-CINDYueM.js.map +0 -1
  290. package/dist/chunks/DisclosureGroup-0BtaXO54.js.map +0 -1
  291. package/dist/chunks/DropZone-hf7Em__0.js.map +0 -1
  292. package/dist/chunks/Input-Ce2HXBUc.js.map +0 -1
  293. package/dist/chunks/InputFile-ga5yJmdZ.js.map +0 -1
  294. package/dist/chunks/InputFiles-Or2Nvfgk.js.map +0 -1
  295. package/dist/chunks/LabeledExpandableActionPanel-Bx-DWmYz.js.map +0 -1
  296. package/dist/chunks/Listbox-CY1wQOCP.js.map +0 -1
  297. package/dist/chunks/NotificationsHost-BQc-zOr2.js.map +0 -1
  298. package/dist/chunks/RadioButton-DJp31HFR.js.map +0 -1
  299. package/dist/chunks/Select-B7k_8_Lf.js.map +0 -1
  300. package/dist/chunks/SingleDateTimeInput-CwvIbwje.js.map +0 -1
  301. package/dist/chunks/Switch-B476FBUD.js.map +0 -1
  302. package/dist/chunks/TreePickerBase-DYzTsSBQ.js.map +0 -1
  303. package/dist/chunks/base-table-DVje02Zi.js.map +0 -1
  304. package/dist/chunks/layout-picker-BA9vA8JI.js.map +0 -1
  305. package/dist/chunks/misc-DrmMj8GO.js.map +0 -1
  306. package/dist/chunks/modal-DqVcZws_.js.map +0 -1
  307. package/dist/chunks/picker-Cj4RnJh6.js.map +0 -1
  308. package/dist/chunks/slider-34wxzKkG.js.map +0 -1
  309. package/dist/chunks/sortable-CwDHC3CA.js.map +0 -1
  310. package/dist/chunks/table-BYA0hCj7.js.map +0 -1
@@ -1,12 +1,12 @@
1
1
  import { Text as e } from "../text/index.js";
2
2
  import { t } from "./ui.module-BisoTevy.js";
3
3
  import { t as n } from "./Grid-ByIIytjh.js";
4
- import { t as r } from "./CheckBox-Cck5w1Ud.js";
5
- import { a as i, c as a, d as o, f as s, i as ee, l as te, n as ne, r as c, t as re, u as l } from "./picker-Cj4RnJh6.js";
4
+ import { t as r } from "./CheckBox-CulnjNvJ.js";
5
+ import { a as i, c as a, d as o, f as s, i as ee, l as te, n as ne, r as c, t as re, u as l } from "./picker-gIUs0nE_.js";
6
6
  import { t as u } from "./separator-CIqnk2z9.js";
7
7
  import { t as d } from "./SelectOptionContent-CI7wq9Oi.js";
8
- import { XIcon as f } from "lucide-react";
9
- import { cn as p } from "@ryuzaki13/react-foundation-lib/utils";
8
+ import { cn as f } from "@ryuzaki13/react-foundation-lib/utils";
9
+ import { XIcon as p } from "lucide-react";
10
10
  import { Fragment as m, jsx as h, jsxs as g } from "react/jsx-runtime";
11
11
  import { forwardRef as _, useCallback as ie, useMemo as v, useRef as ae, useState as oe } from "react";
12
12
  //#region src/multi-select/ui/MultiSelectOption.tsx
@@ -129,14 +129,14 @@ function me(e, t, n) {
129
129
  }
130
130
  function E({ entries: e, listId: n, activeIndex: i, selectedKeys: a, codeKey: o, query: s, highlightQuery: ee, getOptionDisabled: te, getOptionId: ne, setOptionRef: c, toggleOption: re, selectOnlyOption: l, renderItem: u }) {
131
131
  return e.map(({ item: e, index: d }) => {
132
- let f = d === i, m = a.has(T(e, o)), _ = te?.(e) ?? !1;
132
+ let p = d === i, m = a.has(T(e, o)), _ = te?.(e) ?? !1;
133
133
  return /* @__PURE__ */ g("div", {
134
134
  id: ne(n, d),
135
135
  ref: (e) => c(d, e),
136
136
  role: "option",
137
137
  "aria-selected": m,
138
138
  "aria-disabled": _ || void 0,
139
- className: p(t.uiSelectOption, _ && t.disabled, m && t.selected, f && t.uiPopupOptionActive),
139
+ className: f(t.uiSelectOption, _ && t.disabled, m && t.selected, p && t.uiPopupOptionActive),
140
140
  onMouseDown: (e) => {
141
141
  e.preventDefault();
142
142
  },
@@ -164,7 +164,7 @@ function E({ entries: e, listId: n, activeIndex: i, selectedKeys: a, codeKey: o,
164
164
  },
165
165
  children: u(e, {
166
166
  selected: m,
167
- active: f,
167
+ active: p,
168
168
  disabled: _,
169
169
  query: s,
170
170
  highlightQuery: ee
@@ -173,7 +173,7 @@ function E({ entries: e, listId: n, activeIndex: i, selectedKeys: a, codeKey: o,
173
173
  }, `${T(e, o)}-${d}`);
174
174
  });
175
175
  }
176
- var D = _(({ codeKey: e, textKey: n, hideCode: r, items: l, value: d, onChange: p, label: _, description: y, placeholder: x, size: S, query: se, defaultQuery: w, highlightQuery: D, onQuery: he, defaultFilter: O = !0, onOpen: ge, onClose: _e, getOptionDisabled: k, disabled: A, error: j, isLoading: M, renderToken: N, renderToolbar: P, renderItem: ve }, F) => {
176
+ var D = _(({ codeKey: e, textKey: n, hideCode: r, items: l, value: d, onChange: f, label: _, description: y, placeholder: x, size: S, query: se, defaultQuery: w, highlightQuery: D, onQuery: he, defaultFilter: O = !0, onOpen: ge, onClose: _e, getOptionDisabled: k, disabled: A, error: j, isLoading: M, renderToken: N, renderToolbar: P, renderItem: ve }, F) => {
177
177
  let I = ae(null), [L, ye] = oe(!1), R = "search-multi", z = d ?? fe, be = v(() => new Set(z.map((t) => T(t, e))), [e, z]), xe = v(() => l.filter((t) => !be.has(T(t, e))), [
178
178
  e,
179
179
  be,
@@ -202,7 +202,7 @@ var D = _(({ codeKey: e, textKey: n, hideCode: r, items: l, value: d, onChange:
202
202
  }), W = v(() => [...H, ...U], [U, H]), Ce = H.length > 0 ? 0 : -1, { draftValue: G, setDraftValue: K, prepareOpen: we } = ne({
203
203
  value: z,
204
204
  open: L,
205
- onCommit: p,
205
+ onCommit: f,
206
206
  onOpen: ge,
207
207
  onClose: _e,
208
208
  isEqual: (t, n) => me(t, n, e)
@@ -237,7 +237,7 @@ var D = _(({ codeKey: e, textKey: n, hideCode: r, items: l, value: d, onChange:
237
237
  }
238
238
  F && (F.current = e);
239
239
  }, He = () => {
240
- K([]), L || p([]);
240
+ K([]), L || f([]);
241
241
  }, Ue = () => {
242
242
  K((t) => {
243
243
  let n = [...t], r = new Set(t.map((t) => T(t, e)));
@@ -327,7 +327,7 @@ var D = _(({ codeKey: e, textKey: n, hideCode: r, items: l, value: d, onChange:
327
327
  "data-action": "clear-multi-select",
328
328
  onClick: He,
329
329
  "aria-label": "Очистить все",
330
- children: /* @__PURE__ */ h(f, {})
330
+ children: /* @__PURE__ */ h(p, {})
331
331
  })]
332
332
  }),
333
333
  onChange: (e) => {
@@ -419,4 +419,4 @@ D.displayName = "MultiSelect";
419
419
  //#endregion
420
420
  export { S as n, D as t };
421
421
 
422
- //# sourceMappingURL=MultiSelect-CBqTylqO.js.map
422
+ //# sourceMappingURL=MultiSelect-CUXA8gx-.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MultiSelect-CBqTylqO.js","names":[],"sources":["../../src/multi-select/ui/MultiSelectOption.tsx","../../src/multi-select/ui/MultiSelect.module.scss","../../src/multi-select/ui/MultiSelectOptionsToolbar.tsx","../../src/multi-select/ui/MultiSelectToken.tsx","../../src/multi-select/ui/defaultRenderers.tsx","../../src/multi-select/ui/MultiSelectOptionSkeleton.tsx","../../src/multi-select/ui/MultiSelect.tsx"],"sourcesContent":["import { CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata\";\n\nimport { SelectOptionContent } from \"../../select/SelectOptionContent\";\n\ninterface MultiSelectOptionProps {\n\titem: CollectionItem;\n\ttextKey: string;\n\tcodeKey?: string;\n\thighlight?: string;\n\tselected: boolean;\n}\n\n/**\n * Отдельная опция внутри `MultiSelect`. Отрисовывает состояние выбора и подсветку текста для найденных совпадений.\n */\nexport function MultiSelectOption({ item, textKey, codeKey, highlight }: MultiSelectOptionProps) {\n\treturn <SelectOptionContent label={item[textKey]} code={codeKey && item[codeKey]} highlight={highlight} />;\n}\n","@use \"@/styles/mixins\" as *;\n\n.multiSelect {\n\t// Общий контейнер\n\tpadding: 0;\n}\n\n.multiSelectTokens {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: flex-end;\n\n\theight: calc(100% - var(--space-sm));\n\tmax-width: calc(100% - var(--control-height) * 2);\n\n\t// overflow: hidden;\n\n\t&:empty {\n\t\tdisplay: none;\n\t}\n}\n\n.multiSelectToken {\n\t// font-size: var(--font-size-sm);\n\n\t// flex: 1 1 0%;\n\t// min-width: 0;\n\tmax-width: 70%;\n\n\toverflow: hidden;\n\twhite-space: nowrap;\n\tword-break: normal;\n\ttext-overflow: ellipsis;\n\n\tpointer-events: none;\n}\n\n.selectAllButton {\n\t// font-size: var(--font-size-sm);\n\tpadding-block: var(--space-xs);\n\tborder-radius: var(--radius-sm);\n\n\t&:hover {\n\t\t// color: var(--content-accent);\n\t\tbackground-color: var(--surface-2);\n\t}\n}\n","import { Grid } from \"../../grid\";\n\nimport styles from \"./MultiSelect.module.scss\";\n\n/**\n * Панель массовых действий для `MultiSelect`. Позволяет быстро выбрать все доступные элементы или снять выбор.\n */\nexport function MultiSelectOptionsToolbar({ onSelectAll, onDeselectAll }: { onSelectAll: () => void; onDeselectAll: () => void }) {\n\treturn (\n\t\t<Grid.Container gap=\"xs\" templateColumns=\"1fr 1fr\">\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.selectAllButton}\n\t\t\t\tonClick={onSelectAll}\n\t\t\t\tdata-ui=\"multi-select-select-all\"\n\t\t\t\tdata-action=\"select-all\">\n\t\t\t\tВыбрать все\n\t\t\t</button>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.selectAllButton}\n\t\t\t\tonClick={onDeselectAll}\n\t\t\t\tdata-ui=\"multi-select-deselect-all\"\n\t\t\t\tdata-action=\"deselect-all\">\n\t\t\t\tСнять выбор\n\t\t\t</button>\n\t\t</Grid.Container>\n\t);\n}\n","import styles from \"./MultiSelect.module.scss\";\n\ninterface MultiSelectTokenProps {\n\tvalue: string | undefined;\n}\n\n/**\n * Токен выбранного значения в `MultiSelect`. Показывает выбранный элемент и кнопку его удаления из текущего набора.\n */\nexport function MultiSelectToken({ value }: MultiSelectTokenProps) {\n\tif (!value) return null;\n\n\treturn (\n\t\t<div className={styles.multiSelectTokens}>\n\t\t\t<div className={styles.multiSelectToken}>{value}</div>\n\t\t</div>\n\t);\n}\n","import { CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata\";\n\nimport { MultiSelectOption } from \"./MultiSelectOption\";\nimport { MultiSelectOptionsToolbar } from \"./MultiSelectOptionsToolbar\";\nimport { MultiSelectToken } from \"./MultiSelectToken\";\n\nimport type { MultiSelectItemState, MultiSelectRenderContext } from \"./MultiSelect\";\n\ninterface MultiSelectRendererConfig {\n\tcodeKey: string;\n\ttextKey?: string;\n\thideCode?: boolean;\n}\n\nexport function resolveMultiSelectTextKey(items: CollectionItem[], codeKey: string, textKey?: string) {\n\tif (textKey) {\n\t\treturn textKey;\n\t}\n\n\tconst sampleItem = items[0];\n\n\tif (!sampleItem) {\n\t\treturn codeKey;\n\t}\n\n\treturn Object.keys(sampleItem).find((key) => key !== codeKey) ?? codeKey;\n}\n\nexport function getDefaultMultiSelectTokenValue(items: CollectionItem[], codeKey: string, textKey?: string) {\n\tif (items.length === 0) {\n\t\treturn undefined;\n\t}\n\n\tif (items.length > 1) {\n\t\treturn `${items.length} элемент${items.length > 5 ? \"ов\" : \"а\"})`;\n\t}\n\n\tconst resolvedTextKey = resolveMultiSelectTextKey(items, codeKey, textKey);\n\treturn items[0]?.[resolvedTextKey] ?? items[0]?.[codeKey];\n}\n\nexport function createDefaultMultiSelectTokenRenderer(config: MultiSelectRendererConfig) {\n\treturn function renderDefaultToken(context: MultiSelectRenderContext) {\n\t\treturn <MultiSelectToken value={getDefaultMultiSelectTokenValue(context.selectedItems, config.codeKey, config.textKey)} />;\n\t};\n}\n\nexport function renderDefaultMultiSelectToolbar(context: MultiSelectRenderContext) {\n\treturn <MultiSelectOptionsToolbar onSelectAll={context.selectAll} onDeselectAll={context.deselectAll} />;\n}\n\nexport function createDefaultMultiSelectItemRenderer(config: MultiSelectRendererConfig) {\n\treturn function renderDefaultItem(item: CollectionItem, state: MultiSelectItemState) {\n\t\treturn (\n\t\t\t<MultiSelectOption\n\t\t\t\titem={item}\n\t\t\t\tselected={state.selected}\n\t\t\t\thighlight={state.highlightQuery}\n\t\t\t\ttextKey={resolveMultiSelectTextKey([item], config.codeKey, config.textKey)}\n\t\t\t\tcodeKey={config.hideCode ? undefined : config.codeKey}\n\t\t\t/>\n\t\t);\n\t};\n}\n","import { Text } from \"../../text\";\nimport uiStyles from \"../../ui.module.scss\";\n\ninterface MultiSelectOptionSkeletonProps {\n\ttext: string;\n\tisError?: boolean;\n}\n\n/**\n * Скелетон строки опции для `MultiSelect`. Используется во время загрузки или при отображении ошибок получения списка.\n */\nexport function MultiSelectOptionSkeleton({ text, isError }: MultiSelectOptionSkeletonProps) {\n\treturn (\n\t\t<div className={uiStyles.uiPopupOption}>\n\t\t\t<span className={uiStyles.uiPopupOptionIcon}></span>\n\t\t\t<Text color={isError ? \"error\" : \"primary\"}>{text}</Text>\n\t\t</div>\n\t);\n}\n","import React, { forwardRef, type PropsWithChildren, useCallback, useMemo, useRef, useState } from \"react\";\n\nimport { XIcon } from \"lucide-react\";\n\nimport type { CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { CheckBox } from \"../../check-box\";\nimport {\n\tPickerField,\n\tPickerPopup,\n\tPickerStatus,\n\tPickerTriggerActions,\n\tPickerTriggerInput,\n\tusePickerDefaultFilter,\n\tusePickerFloatingListbox,\n\tusePickerQuery,\n\tusePickerSelectionLifecycle,\n\tusePickerTriggerController\n} from \"../../picker\";\nimport { Separator } from \"../../separator\";\nimport { type UiBaseProps } from \"../../types\";\nimport uiStyles from \"../../ui.module.scss\";\n\nimport {\n\tcreateDefaultMultiSelectItemRenderer,\n\tcreateDefaultMultiSelectTokenRenderer,\n\trenderDefaultMultiSelectToolbar,\n\tresolveMultiSelectTextKey\n} from \"./defaultRenderers\";\nimport styles from \"./MultiSelect.module.scss\";\nimport { MultiSelectOptionSkeleton } from \"./MultiSelectOptionSkeleton\";\n\ninterface MultiSelectOptionsProps extends PropsWithChildren {\n\tisNoData?: boolean;\n\tisLoading?: boolean;\n\terror?: string;\n}\n\nfunction MultiSelectOptionsWrapper({ isNoData, isLoading, error, children }: MultiSelectOptionsProps) {\n\tif (isNoData) return <PickerStatus emptyState={<MultiSelectOptionSkeleton text=\"Нет данных\" />} />;\n\tif (isLoading) return <PickerStatus loadingState={<MultiSelectOptionSkeleton text=\"Загрузка...\" />} />;\n\tif (error) return <PickerStatus errorState={<MultiSelectOptionSkeleton isError text=\"Ошибка загрузки\" />} />;\n\n\treturn <>{children}</>;\n}\n\nexport interface MultiSelectItemState {\n\tselected: boolean;\n\tactive: boolean;\n\tdisabled: boolean;\n\tquery: string;\n\thighlightQuery: string;\n}\n\nexport interface MultiSelectRenderContext {\n\tselectedItems: CollectionItem[];\n\tcommittedSelectedItems: CollectionItem[];\n\tavailableItems: CollectionItem[];\n\tquery: string;\n\topen: boolean;\n\tclearSelection: () => void;\n\tselectAll: () => void;\n\tdeselectAll: () => void;\n}\n\nexport interface MultiSelectOptionDisableContext {\n\tselectedItems: CollectionItem[];\n\tcommittedSelectedItems: CollectionItem[];\n\tselectedKeys: ReadonlySet<string>;\n\topen: boolean;\n}\n\ntype MultiSelectOptionalRenderer<TContext> = ((context: TContext) => React.ReactNode) | null | false;\n\ninterface MultiSelectRenderers {\n\trenderToken?: MultiSelectOptionalRenderer<MultiSelectRenderContext>;\n\trenderToolbar?: MultiSelectOptionalRenderer<MultiSelectRenderContext>;\n\trenderItem?: (item: CollectionItem, state: MultiSelectItemState) => React.ReactNode;\n}\n\nexport interface MultiSelectProps<TOption extends Record<string, string> = CollectionItem>\n\textends MultiSelectRenderers, UiBaseProps<TOption[]> {\n\tcodeKey: string;\n\ttextKey?: string;\n\thideCode?: boolean;\n\tquery?: string;\n\tdefaultQuery?: string;\n\thighlightQuery?: string;\n\tonQuery?: (value: string) => void;\n\tdefaultFilter?: boolean;\n\titems: TOption[];\n\tgetOptionDisabled?: (item: TOption, context: MultiSelectOptionDisableContext) => boolean;\n\tonOpen?: () => void;\n\tonClose?: (value: TOption[]) => void;\n\terror?: string;\n\tisLoading?: boolean;\n}\n\nconst fallback: CollectionItem[] = [];\n\nfunction getItemKey(item: CollectionItem, codeKey: string) {\n\treturn item[codeKey];\n}\n\nfunction getItemSearchParts(item: CollectionItem, codeKey: string, textKey: string) {\n\treturn Array.from(new Set([item[textKey], item[codeKey], ...Object.values(item)]));\n}\n\nfunction areSelectionsEqual(left: CollectionItem[], right: CollectionItem[], codeKey: string) {\n\tif (left.length !== right.length) {\n\t\treturn false;\n\t}\n\n\tconst rightKeys = new Set(right.map((item) => getItemKey(item, codeKey)));\n\n\treturn left.every((item) => rightKeys.has(getItemKey(item, codeKey)));\n}\n\ninterface MultiSelectOptionEntry {\n\titem: CollectionItem;\n\tindex: number;\n}\n\ninterface MultiSelectOptionGroupProps {\n\tentries: MultiSelectOptionEntry[];\n\tlistId: string;\n\tactiveIndex: number;\n\tselectedKeys: Set<string>;\n\tcodeKey: string;\n\tquery: string;\n\thighlightQuery: string;\n\tgetOptionDisabled?: (item: CollectionItem) => boolean;\n\tgetOptionId: (listId: string, index: number) => string;\n\tsetOptionRef: (index: number, node: HTMLElement | null) => void;\n\ttoggleOption: (item: CollectionItem) => void;\n\tselectOnlyOption: (item: CollectionItem) => void;\n\trenderItem: (item: CollectionItem, state: MultiSelectItemState) => React.ReactNode;\n}\n\nfunction MultiSelectOptionGroup({\n\tentries,\n\tlistId,\n\tactiveIndex,\n\tselectedKeys,\n\tcodeKey,\n\tquery,\n\thighlightQuery,\n\tgetOptionDisabled,\n\tgetOptionId,\n\tsetOptionRef,\n\ttoggleOption,\n\tselectOnlyOption,\n\trenderItem\n}: MultiSelectOptionGroupProps) {\n\treturn entries.map(({ item, index }) => {\n\t\tconst active = index === activeIndex;\n\t\tconst selected = selectedKeys.has(getItemKey(item, codeKey));\n\t\tconst optionDisabled = getOptionDisabled?.(item) ?? false;\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tkey={`${getItemKey(item, codeKey)}-${index}`}\n\t\t\t\tid={getOptionId(listId, index)}\n\t\t\t\tref={(node) => setOptionRef(index, node)}\n\t\t\t\trole=\"option\"\n\t\t\t\taria-selected={selected}\n\t\t\t\taria-disabled={optionDisabled || undefined}\n\t\t\t\tclassName={cn(\n\t\t\t\t\tuiStyles.uiSelectOption,\n\t\t\t\t\toptionDisabled && uiStyles.disabled,\n\t\t\t\t\tselected && uiStyles.selected,\n\t\t\t\t\tactive && uiStyles.uiPopupOptionActive\n\t\t\t\t)}\n\t\t\t\tonMouseDown={(event) => {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}}>\n\t\t\t\t<div\n\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}}>\n\t\t\t\t\t<CheckBox\n\t\t\t\t\t\tvalue={selected}\n\t\t\t\t\t\tdisabled={optionDisabled}\n\t\t\t\t\t\tonChange={() => {\n\t\t\t\t\t\t\tif (!optionDisabled) {\n\t\t\t\t\t\t\t\ttoggleOption(item);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonMouseDown={(event) => {\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"overflowHidden\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tif (!optionDisabled) {\n\t\t\t\t\t\t\tselectOnlyOption(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t}}>\n\t\t\t\t\t{renderItem(item, { selected, active, disabled: optionDisabled, query, highlightQuery })}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t});\n}\n\n/**\n * Поле множественного выбора с внутренним черновиком значений и подтверждением выбора при закрытии списка.\n * Подходит как для самостоятельного использования, так и как базовый слой для OData-оберток.\n */\nexport const MultiSelect = forwardRef<HTMLInputElement, MultiSelectProps>(\n\t(\n\t\t{\n\t\t\tcodeKey,\n\t\t\ttextKey,\n\t\t\thideCode,\n\t\t\titems,\n\t\t\tvalue,\n\t\t\tonChange,\n\t\t\tlabel,\n\t\t\tdescription,\n\t\t\tplaceholder,\n\t\t\tsize,\n\t\t\tquery,\n\t\t\tdefaultQuery,\n\t\t\thighlightQuery,\n\t\t\tonQuery,\n\t\t\tdefaultFilter = true,\n\t\t\tonOpen,\n\t\t\tonClose,\n\t\t\tgetOptionDisabled,\n\t\t\tdisabled,\n\t\t\terror,\n\t\t\tisLoading,\n\t\t\trenderToken,\n\t\t\trenderToolbar,\n\t\t\trenderItem\n\t\t},\n\t\tref\n\t) => {\n\t\tconst inputRef = useRef<HTMLInputElement | null>(null);\n\t\tconst [open, setOpen] = useState(false);\n\t\tconst triggerMode = \"search-multi\";\n\t\tconst committedSelectedItems = value ?? fallback;\n\t\tconst committedSelectedKeys = useMemo(\n\t\t\t() => new Set(committedSelectedItems.map((item) => getItemKey(item, codeKey))),\n\t\t\t[codeKey, committedSelectedItems]\n\t\t);\n\t\tconst availableItems = useMemo(\n\t\t\t() => items.filter((item) => !committedSelectedKeys.has(getItemKey(item, codeKey))),\n\t\t\t[codeKey, committedSelectedKeys, items]\n\t\t);\n\t\tconst resolvedTextKey = useMemo(\n\t\t\t() => resolveMultiSelectTextKey([...committedSelectedItems, ...items], codeKey, textKey),\n\t\t\t[codeKey, committedSelectedItems, items, textKey]\n\t\t);\n\t\tconst { query: currentQuery, setQuery } = usePickerQuery({\n\t\t\topen,\n\t\t\tquery,\n\t\t\tdefaultQuery,\n\t\t\tonQuery,\n\t\t\ttriggerMode\n\t\t});\n\t\tconst filteredCommittedSelectedItems = usePickerDefaultFilter({\n\t\t\toptions: committedSelectedItems,\n\t\t\tquery: currentQuery,\n\t\t\tenabled: defaultFilter,\n\t\t\tgetSearchText: (item) => getItemSearchParts(item, codeKey, resolvedTextKey)\n\t\t});\n\t\tconst filteredAvailableItems = usePickerDefaultFilter({\n\t\t\toptions: availableItems,\n\t\t\tquery: currentQuery,\n\t\t\tenabled: defaultFilter,\n\t\t\tgetSearchText: (item) => getItemSearchParts(item, codeKey, resolvedTextKey)\n\t\t});\n\t\tconst visibleOptions = useMemo(\n\t\t\t() => [...filteredCommittedSelectedItems, ...filteredAvailableItems],\n\t\t\t[filteredAvailableItems, filteredCommittedSelectedItems]\n\t\t);\n\t\tconst selectedIndex = filteredCommittedSelectedItems.length > 0 ? 0 : -1;\n\t\tconst {\n\t\t\tdraftValue: draftSelectedItems,\n\t\t\tsetDraftValue: setDraftSelectedItems,\n\t\t\tprepareOpen\n\t\t} = usePickerSelectionLifecycle({\n\t\t\tvalue: committedSelectedItems,\n\t\t\topen,\n\t\t\tonCommit: onChange,\n\t\t\tonOpen,\n\t\t\tonClose,\n\t\t\tisEqual: (left, right) => areSelectionsEqual(left, right, codeKey)\n\t\t});\n\t\tconst selectedKeys = useMemo(\n\t\t\t() => new Set(draftSelectedItems.map((item) => getItemKey(item, codeKey))),\n\t\t\t[codeKey, draftSelectedItems]\n\t\t);\n\t\tconst optionDisableContext = useMemo<MultiSelectOptionDisableContext>(\n\t\t\t() => ({\n\t\t\t\tselectedItems: draftSelectedItems,\n\t\t\t\tcommittedSelectedItems,\n\t\t\t\tselectedKeys,\n\t\t\t\topen\n\t\t\t}),\n\t\t\t[committedSelectedItems, draftSelectedItems, open, selectedKeys]\n\t\t);\n\t\tconst isOptionDisabled = useCallback(\n\t\t\t(item: CollectionItem) => getOptionDisabled?.(item, optionDisableContext) ?? false,\n\t\t\t[getOptionDisabled, optionDisableContext]\n\t\t);\n\t\tconst {\n\t\t\tactiveIndex,\n\t\t\tcontext,\n\t\t\tfloatingStyles,\n\t\t\tgetFloatingProps,\n\t\t\tsetReference,\n\t\t\tsetFloating,\n\t\t\tsetOptionRef,\n\t\t\tclose,\n\t\t\topenList,\n\t\t\ttoggleOpen,\n\t\t\tselectActiveOption,\n\t\t\thandleReferenceKeyDown,\n\t\t\thandleFloatingKeyDown,\n\t\t\tgetOptionId,\n\t\t\tgetActiveOptionId\n\t\t} = usePickerFloatingListbox({\n\t\t\toptions: visibleOptions,\n\t\t\tselectedIndex,\n\t\t\topen,\n\t\t\tonOpenChange: setOpen,\n\t\t\tonSelect: undefined,\n\t\t\tdisabled,\n\t\t\tgetOptionDisabled: isOptionDisabled,\n\t\t\tcloseOnSelect: false,\n\t\t\tallowOpenWithoutOptions: true,\n\t\t\ttriggerMode\n\t\t});\n\n\t\tconst currentHighlightQuery = highlightQuery ?? currentQuery;\n\t\tconst toggleDraftSelection = (item: CollectionItem) => {\n\t\t\tconst itemKey = getItemKey(item, codeKey);\n\n\t\t\tsetDraftSelectedItems((currentItems) => {\n\t\t\t\tconst isSelected = currentItems.some((selectedItem) => getItemKey(selectedItem, codeKey) === itemKey);\n\n\t\t\t\tif (isSelected) {\n\t\t\t\t\treturn currentItems.filter((selectedItem) => getItemKey(selectedItem, codeKey) !== itemKey);\n\t\t\t\t}\n\n\t\t\t\tif (isOptionDisabled(item)) {\n\t\t\t\t\treturn currentItems;\n\t\t\t\t}\n\n\t\t\t\treturn [...currentItems, item];\n\t\t\t});\n\t\t};\n\n\t\tconst setInputNode = (node: HTMLInputElement | null) => {\n\t\t\tinputRef.current = node;\n\n\t\t\tif (typeof ref === \"function\") {\n\t\t\t\tref(node);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (ref) {\n\t\t\t\tref.current = node;\n\t\t\t}\n\t\t};\n\n\t\tconst clearSelection = () => {\n\t\t\tsetDraftSelectedItems([]);\n\n\t\t\tif (!open) {\n\t\t\t\tonChange([]);\n\t\t\t}\n\t\t};\n\n\t\tconst selectAll = () => {\n\t\t\tsetDraftSelectedItems((currentItems) => {\n\t\t\t\tconst nextItems = [...currentItems];\n\t\t\t\tconst selectedKeys = new Set(currentItems.map((item) => getItemKey(item, codeKey)));\n\n\t\t\t\tfor (const item of visibleOptions) {\n\t\t\t\t\tconst itemKey = getItemKey(item, codeKey);\n\n\t\t\t\t\tif (!selectedKeys.has(itemKey) && !isOptionDisabled(item)) {\n\t\t\t\t\t\tselectedKeys.add(itemKey);\n\t\t\t\t\t\tnextItems.push(item);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn nextItems;\n\t\t\t});\n\t\t};\n\n\t\tconst deselectAll = () => {\n\t\t\tsetDraftSelectedItems([]);\n\t\t};\n\n\t\tconst selectOnlyOption = (item: CollectionItem) => {\n\t\t\tif (isOptionDisabled(item)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetDraftSelectedItems([item]);\n\t\t\tclose();\n\t\t};\n\n\t\tconst currentSelectedItems = open ? draftSelectedItems : committedSelectedItems;\n\t\tconst hasSelectedItems = currentSelectedItems.length > 0;\n\t\tconst renderContext: MultiSelectRenderContext = {\n\t\t\tselectedItems: currentSelectedItems,\n\t\t\tcommittedSelectedItems,\n\t\t\tavailableItems: filteredAvailableItems,\n\t\t\tquery: currentQuery,\n\t\t\topen,\n\t\t\tclearSelection,\n\t\t\tselectAll,\n\t\t\tdeselectAll\n\t\t};\n\t\tconst tokenRenderer =\n\t\t\trenderToken === undefined ? createDefaultMultiSelectTokenRenderer({ codeKey, textKey: resolvedTextKey }) : renderToken;\n\t\tconst toolbarRenderer = renderToolbar === undefined ? renderDefaultMultiSelectToolbar : renderToolbar;\n\t\tconst itemRenderer =\n\t\t\trenderItem ??\n\t\t\tcreateDefaultMultiSelectItemRenderer({\n\t\t\t\tcodeKey,\n\t\t\t\ttextKey: resolvedTextKey,\n\t\t\t\thideCode\n\t\t\t});\n\t\tconst tokenNode = typeof tokenRenderer === \"function\" ? tokenRenderer(renderContext) : null;\n\t\tconst toolbarNode = typeof toolbarRenderer === \"function\" ? toolbarRenderer(renderContext) : null;\n\t\t// const hasToken = tokenNode !== null && tokenNode !== undefined;\n\t\tconst selectedEntries = filteredCommittedSelectedItems.map((item, index) => ({ item, index }));\n\t\tconst itemEntries = filteredAvailableItems.map((item, index) => ({ item, index: index + selectedEntries.length }));\n\t\tconst isNoData = !isLoading && !error && visibleOptions.length === 0;\n\t\tconst triggerController = usePickerTriggerController({\n\t\t\tmode: triggerMode,\n\t\t\topen,\n\t\t\tcurrentQuery,\n\t\t\thasDisplayValue: false,\n\t\t\tinputRef,\n\t\t\tsetQuery,\n\t\t\topenList,\n\t\t\tclose,\n\t\t\ttoggleOpen,\n\t\t\tonBeforeOpen: () => {\n\t\t\t\tif (!open) {\n\t\t\t\t\tprepareOpen();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn (\n\t\t\t<PickerField\n\t\t\t\tlabel={label}\n\t\t\t\tdescription={description}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tplaceholder={placeholder}\n\t\t\t\tsize={size}\n\t\t\t\tclassName={styles.multiSelect}>\n\t\t\t\t{({ controlId, labelId, describedBy }) => {\n\t\t\t\t\tconst listId = `${controlId}-listbox`;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<PickerTriggerInput\n\t\t\t\t\t\t\t\tref={setInputNode}\n\t\t\t\t\t\t\t\trootRef={setReference}\n\t\t\t\t\t\t\t\tid={controlId}\n\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\tvalue={currentQuery}\n\t\t\t\t\t\t\t\tplaceholder={hasSelectedItems ? undefined : placeholder}\n\t\t\t\t\t\t\t\taria-labelledby={labelId}\n\t\t\t\t\t\t\t\taria-describedby={describedBy}\n\t\t\t\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t\t\t\t\taria-expanded={open}\n\t\t\t\t\t\t\t\taria-controls={open ? listId : undefined}\n\t\t\t\t\t\t\t\taria-autocomplete=\"list\"\n\t\t\t\t\t\t\t\taria-activedescendant={open ? getActiveOptionId(listId) : undefined}\n\t\t\t\t\t\t\t\trootClassName=\"flex alignItemsCenter\"\n\t\t\t\t\t\t\t\tendAdornment={\n\t\t\t\t\t\t\t\t\t<PickerTriggerActions\n\t\t\t\t\t\t\t\t\t\topen={open}\n\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\t\tonToggleMouseDown={triggerController.handleToggleMouseDown}\n\t\t\t\t\t\t\t\t\t\tonToggleClick={triggerController.handleToggleClick}>\n\t\t\t\t\t\t\t\t\t\t{tokenNode}\n\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tdisabled={!hasSelectedItems}\n\t\t\t\t\t\t\t\t\t\t\tclassName={uiStyles.uiClearButton}\n\t\t\t\t\t\t\t\t\t\t\tdata-ui=\"multi-select-clear-button\"\n\t\t\t\t\t\t\t\t\t\t\tdata-action=\"clear-multi-select\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={clearSelection}\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Очистить все\">\n\t\t\t\t\t\t\t\t\t\t\t<XIcon />\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t</PickerTriggerActions>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonChange={(event) => {\n\t\t\t\t\t\t\t\t\ttriggerController.handleTriggerInputChange(event.target.value);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonClick={triggerController.handleTriggerClick}\n\t\t\t\t\t\t\t\tonFocus={(event) => {\n\t\t\t\t\t\t\t\t\ttriggerController.handleTriggerFocus(event.currentTarget);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonKeyDown={(event) => {\n\t\t\t\t\t\t\t\t\thandleReferenceKeyDown(event);\n\n\t\t\t\t\t\t\t\t\tif (event.defaultPrevented) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\ttriggerController.handleTriggerKeyDown({\n\t\t\t\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t\t\t\tonActivateWhenOpen: () => {\n\t\t\t\t\t\t\t\t\t\t\tif (activeIndex >= 0) {\n\t\t\t\t\t\t\t\t\t\t\t\tconst activeItem = visibleOptions[activeIndex];\n\t\t\t\t\t\t\t\t\t\t\t\tif (activeItem) {\n\t\t\t\t\t\t\t\t\t\t\t\t\ttoggleDraftSelection(activeItem);\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tselectActiveOption();\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tenableClosedArrowDownOpen: true,\n\t\t\t\t\t\t\t\t\t\tsuppressClosedArrowUp: true\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t<PickerPopup\n\t\t\t\t\t\t\t\topen={open}\n\t\t\t\t\t\t\t\tcontext={context}\n\t\t\t\t\t\t\t\tfloatingStyles={floatingStyles}\n\t\t\t\t\t\t\t\tlistId={listId}\n\t\t\t\t\t\t\t\tlabelId={labelId}\n\t\t\t\t\t\t\t\tdescriptionId={describedBy}\n\t\t\t\t\t\t\t\tactiveOptionId={open ? getActiveOptionId(listId) : undefined}\n\t\t\t\t\t\t\t\tsetFloating={setFloating}\n\t\t\t\t\t\t\t\tgetFloatingProps={getFloatingProps}\n\t\t\t\t\t\t\t\tonKeyDown={handleFloatingKeyDown}\n\t\t\t\t\t\t\t\tinitialFocus={-1}\n\t\t\t\t\t\t\t\treturnFocus={false}\n\t\t\t\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\t\t\t\tclassName={uiStyles.uiPopupOptions}\n\t\t\t\t\t\t\t\theader={toolbarNode}>\n\t\t\t\t\t\t\t\t<MultiSelectOptionsWrapper isNoData={isNoData} isLoading={isLoading} error={error}>\n\t\t\t\t\t\t\t\t\t<div className=\"scrollable h100\">\n\t\t\t\t\t\t\t\t\t\t<MultiSelectOptionGroup\n\t\t\t\t\t\t\t\t\t\t\tentries={selectedEntries}\n\t\t\t\t\t\t\t\t\t\t\tlistId={listId}\n\t\t\t\t\t\t\t\t\t\t\tactiveIndex={activeIndex}\n\t\t\t\t\t\t\t\t\t\t\tselectedKeys={selectedKeys}\n\t\t\t\t\t\t\t\t\t\t\tcodeKey={codeKey}\n\t\t\t\t\t\t\t\t\t\t\tquery={currentQuery}\n\t\t\t\t\t\t\t\t\t\t\thighlightQuery={currentHighlightQuery}\n\t\t\t\t\t\t\t\t\t\t\tgetOptionDisabled={isOptionDisabled}\n\t\t\t\t\t\t\t\t\t\t\tgetOptionId={getOptionId}\n\t\t\t\t\t\t\t\t\t\t\tsetOptionRef={setOptionRef}\n\t\t\t\t\t\t\t\t\t\t\ttoggleOption={toggleDraftSelection}\n\t\t\t\t\t\t\t\t\t\t\tselectOnlyOption={selectOnlyOption}\n\t\t\t\t\t\t\t\t\t\t\trenderItem={itemRenderer}\n\t\t\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t\t\t{selectedEntries.length > 0 && availableItems.length > 0 && <Separator className=\"marginBlockSm\" />}\n\n\t\t\t\t\t\t\t\t\t\t<MultiSelectOptionGroup\n\t\t\t\t\t\t\t\t\t\t\tentries={itemEntries}\n\t\t\t\t\t\t\t\t\t\t\tlistId={listId}\n\t\t\t\t\t\t\t\t\t\t\tactiveIndex={activeIndex}\n\t\t\t\t\t\t\t\t\t\t\tselectedKeys={selectedKeys}\n\t\t\t\t\t\t\t\t\t\t\tcodeKey={codeKey}\n\t\t\t\t\t\t\t\t\t\t\tquery={currentQuery}\n\t\t\t\t\t\t\t\t\t\t\thighlightQuery={currentHighlightQuery}\n\t\t\t\t\t\t\t\t\t\t\tgetOptionDisabled={isOptionDisabled}\n\t\t\t\t\t\t\t\t\t\t\tgetOptionId={getOptionId}\n\t\t\t\t\t\t\t\t\t\t\tsetOptionRef={setOptionRef}\n\t\t\t\t\t\t\t\t\t\t\ttoggleOption={toggleDraftSelection}\n\t\t\t\t\t\t\t\t\t\t\tselectOnlyOption={selectOnlyOption}\n\t\t\t\t\t\t\t\t\t\t\trenderItem={itemRenderer}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</MultiSelectOptionsWrapper>\n\t\t\t\t\t\t\t</PickerPopup>\n\t\t\t\t\t\t</>\n\t\t\t\t\t);\n\t\t\t\t}}\n\t\t\t</PickerField>\n\t\t);\n\t}\n);\n\nMultiSelect.displayName = \"MultiSelect\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"MultiSelect-CUXA8gx-.js","names":[],"sources":["../../src/multi-select/ui/MultiSelectOption.tsx","../../src/multi-select/ui/MultiSelect.module.scss","../../src/multi-select/ui/MultiSelectOptionsToolbar.tsx","../../src/multi-select/ui/MultiSelectToken.tsx","../../src/multi-select/ui/defaultRenderers.tsx","../../src/multi-select/ui/MultiSelectOptionSkeleton.tsx","../../src/multi-select/ui/MultiSelect.tsx"],"sourcesContent":["import { CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata\";\n\nimport { SelectOptionContent } from \"../../select/SelectOptionContent\";\n\ninterface MultiSelectOptionProps {\n\titem: CollectionItem;\n\ttextKey: string;\n\tcodeKey?: string;\n\thighlight?: string;\n\tselected: boolean;\n}\n\n/**\n * Отдельная опция внутри `MultiSelect`. Отрисовывает состояние выбора и подсветку текста для найденных совпадений.\n */\nexport function MultiSelectOption({ item, textKey, codeKey, highlight }: MultiSelectOptionProps) {\n\treturn <SelectOptionContent label={item[textKey]} code={codeKey && item[codeKey]} highlight={highlight} />;\n}\n","@use \"@/styles/mixins\" as *;\n\n.multiSelect {\n\t// Общий контейнер\n\tpadding: 0;\n}\n\n.multiSelectTokens {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: flex-end;\n\n\theight: calc(100% - var(--space-sm));\n\tmax-width: calc(100% - var(--control-height) * 2);\n\n\t// overflow: hidden;\n\n\t&:empty {\n\t\tdisplay: none;\n\t}\n}\n\n.multiSelectToken {\n\t// font-size: var(--font-size-sm);\n\n\t// flex: 1 1 0%;\n\t// min-width: 0;\n\tmax-width: 70%;\n\n\toverflow: hidden;\n\twhite-space: nowrap;\n\tword-break: normal;\n\ttext-overflow: ellipsis;\n\n\tpointer-events: none;\n}\n\n.selectAllButton {\n\t// font-size: var(--font-size-sm);\n\tpadding-block: var(--space-xs);\n\tborder-radius: var(--radius-sm);\n\n\t&:hover {\n\t\t// color: var(--content-accent);\n\t\tbackground-color: var(--surface-2);\n\t}\n}\n","import { Grid } from \"../../grid\";\n\nimport styles from \"./MultiSelect.module.scss\";\n\n/**\n * Панель массовых действий для `MultiSelect`. Позволяет быстро выбрать все доступные элементы или снять выбор.\n */\nexport function MultiSelectOptionsToolbar({ onSelectAll, onDeselectAll }: { onSelectAll: () => void; onDeselectAll: () => void }) {\n\treturn (\n\t\t<Grid.Container gap=\"xs\" templateColumns=\"1fr 1fr\">\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.selectAllButton}\n\t\t\t\tonClick={onSelectAll}\n\t\t\t\tdata-ui=\"multi-select-select-all\"\n\t\t\t\tdata-action=\"select-all\">\n\t\t\t\tВыбрать все\n\t\t\t</button>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.selectAllButton}\n\t\t\t\tonClick={onDeselectAll}\n\t\t\t\tdata-ui=\"multi-select-deselect-all\"\n\t\t\t\tdata-action=\"deselect-all\">\n\t\t\t\tСнять выбор\n\t\t\t</button>\n\t\t</Grid.Container>\n\t);\n}\n","import styles from \"./MultiSelect.module.scss\";\n\ninterface MultiSelectTokenProps {\n\tvalue: string | undefined;\n}\n\n/**\n * Токен выбранного значения в `MultiSelect`. Показывает выбранный элемент и кнопку его удаления из текущего набора.\n */\nexport function MultiSelectToken({ value }: MultiSelectTokenProps) {\n\tif (!value) return null;\n\n\treturn (\n\t\t<div className={styles.multiSelectTokens}>\n\t\t\t<div className={styles.multiSelectToken}>{value}</div>\n\t\t</div>\n\t);\n}\n","import { CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata\";\n\nimport { MultiSelectOption } from \"./MultiSelectOption\";\nimport { MultiSelectOptionsToolbar } from \"./MultiSelectOptionsToolbar\";\nimport { MultiSelectToken } from \"./MultiSelectToken\";\n\nimport type { MultiSelectItemState, MultiSelectRenderContext } from \"./MultiSelect\";\n\ninterface MultiSelectRendererConfig {\n\tcodeKey: string;\n\ttextKey?: string;\n\thideCode?: boolean;\n}\n\nexport function resolveMultiSelectTextKey(items: CollectionItem[], codeKey: string, textKey?: string) {\n\tif (textKey) {\n\t\treturn textKey;\n\t}\n\n\tconst sampleItem = items[0];\n\n\tif (!sampleItem) {\n\t\treturn codeKey;\n\t}\n\n\treturn Object.keys(sampleItem).find((key) => key !== codeKey) ?? codeKey;\n}\n\nexport function getDefaultMultiSelectTokenValue(items: CollectionItem[], codeKey: string, textKey?: string) {\n\tif (items.length === 0) {\n\t\treturn undefined;\n\t}\n\n\tif (items.length > 1) {\n\t\treturn `${items.length} элемент${items.length > 5 ? \"ов\" : \"а\"})`;\n\t}\n\n\tconst resolvedTextKey = resolveMultiSelectTextKey(items, codeKey, textKey);\n\treturn items[0]?.[resolvedTextKey] ?? items[0]?.[codeKey];\n}\n\nexport function createDefaultMultiSelectTokenRenderer(config: MultiSelectRendererConfig) {\n\treturn function renderDefaultToken(context: MultiSelectRenderContext) {\n\t\treturn <MultiSelectToken value={getDefaultMultiSelectTokenValue(context.selectedItems, config.codeKey, config.textKey)} />;\n\t};\n}\n\nexport function renderDefaultMultiSelectToolbar(context: MultiSelectRenderContext) {\n\treturn <MultiSelectOptionsToolbar onSelectAll={context.selectAll} onDeselectAll={context.deselectAll} />;\n}\n\nexport function createDefaultMultiSelectItemRenderer(config: MultiSelectRendererConfig) {\n\treturn function renderDefaultItem(item: CollectionItem, state: MultiSelectItemState) {\n\t\treturn (\n\t\t\t<MultiSelectOption\n\t\t\t\titem={item}\n\t\t\t\tselected={state.selected}\n\t\t\t\thighlight={state.highlightQuery}\n\t\t\t\ttextKey={resolveMultiSelectTextKey([item], config.codeKey, config.textKey)}\n\t\t\t\tcodeKey={config.hideCode ? undefined : config.codeKey}\n\t\t\t/>\n\t\t);\n\t};\n}\n","import { Text } from \"../../text\";\nimport uiStyles from \"../../ui.module.scss\";\n\ninterface MultiSelectOptionSkeletonProps {\n\ttext: string;\n\tisError?: boolean;\n}\n\n/**\n * Скелетон строки опции для `MultiSelect`. Используется во время загрузки или при отображении ошибок получения списка.\n */\nexport function MultiSelectOptionSkeleton({ text, isError }: MultiSelectOptionSkeletonProps) {\n\treturn (\n\t\t<div className={uiStyles.uiPopupOption}>\n\t\t\t<span className={uiStyles.uiPopupOptionIcon}></span>\n\t\t\t<Text color={isError ? \"error\" : \"primary\"}>{text}</Text>\n\t\t</div>\n\t);\n}\n","import React, { forwardRef, type PropsWithChildren, useCallback, useMemo, useRef, useState } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { XIcon } from \"lucide-react\";\n\nimport { CheckBox } from \"../../check-box\";\nimport {\n\tPickerField,\n\tPickerPopup,\n\tPickerStatus,\n\tPickerTriggerActions,\n\tPickerTriggerInput,\n\tusePickerDefaultFilter,\n\tusePickerFloatingListbox,\n\tusePickerQuery,\n\tusePickerSelectionLifecycle,\n\tusePickerTriggerController\n} from \"../../picker\";\nimport { Separator } from \"../../separator\";\nimport { type UiBaseProps } from \"../../types\";\nimport uiStyles from \"../../ui.module.scss\";\n\nimport {\n\tcreateDefaultMultiSelectItemRenderer,\n\tcreateDefaultMultiSelectTokenRenderer,\n\trenderDefaultMultiSelectToolbar,\n\tresolveMultiSelectTextKey\n} from \"./defaultRenderers\";\nimport styles from \"./MultiSelect.module.scss\";\nimport { MultiSelectOptionSkeleton } from \"./MultiSelectOptionSkeleton\";\n\nimport type { CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata\";\n\ninterface MultiSelectOptionsProps extends PropsWithChildren {\n\tisNoData?: boolean;\n\tisLoading?: boolean;\n\terror?: string;\n}\n\nfunction MultiSelectOptionsWrapper({ isNoData, isLoading, error, children }: MultiSelectOptionsProps) {\n\tif (isNoData) return <PickerStatus emptyState={<MultiSelectOptionSkeleton text=\"Нет данных\" />} />;\n\tif (isLoading) return <PickerStatus loadingState={<MultiSelectOptionSkeleton text=\"Загрузка...\" />} />;\n\tif (error) return <PickerStatus errorState={<MultiSelectOptionSkeleton isError text=\"Ошибка загрузки\" />} />;\n\n\treturn <>{children}</>;\n}\n\nexport interface MultiSelectItemState {\n\tselected: boolean;\n\tactive: boolean;\n\tdisabled: boolean;\n\tquery: string;\n\thighlightQuery: string;\n}\n\nexport interface MultiSelectRenderContext {\n\tselectedItems: CollectionItem[];\n\tcommittedSelectedItems: CollectionItem[];\n\tavailableItems: CollectionItem[];\n\tquery: string;\n\topen: boolean;\n\tclearSelection: () => void;\n\tselectAll: () => void;\n\tdeselectAll: () => void;\n}\n\nexport interface MultiSelectOptionDisableContext {\n\tselectedItems: CollectionItem[];\n\tcommittedSelectedItems: CollectionItem[];\n\tselectedKeys: ReadonlySet<string>;\n\topen: boolean;\n}\n\ntype MultiSelectOptionalRenderer<TContext> = ((context: TContext) => React.ReactNode) | null | false;\n\ninterface MultiSelectRenderers {\n\trenderToken?: MultiSelectOptionalRenderer<MultiSelectRenderContext>;\n\trenderToolbar?: MultiSelectOptionalRenderer<MultiSelectRenderContext>;\n\trenderItem?: (item: CollectionItem, state: MultiSelectItemState) => React.ReactNode;\n}\n\nexport interface MultiSelectProps<TOption extends Record<string, string> = CollectionItem>\n\textends MultiSelectRenderers, UiBaseProps<TOption[]> {\n\tcodeKey: string;\n\ttextKey?: string;\n\thideCode?: boolean;\n\tquery?: string;\n\tdefaultQuery?: string;\n\thighlightQuery?: string;\n\tonQuery?: (value: string) => void;\n\tdefaultFilter?: boolean;\n\titems: TOption[];\n\tgetOptionDisabled?: (item: TOption, context: MultiSelectOptionDisableContext) => boolean;\n\tonOpen?: () => void;\n\tonClose?: (value: TOption[]) => void;\n\terror?: string;\n\tisLoading?: boolean;\n}\n\nconst fallback: CollectionItem[] = [];\n\nfunction getItemKey(item: CollectionItem, codeKey: string) {\n\treturn item[codeKey];\n}\n\nfunction getItemSearchParts(item: CollectionItem, codeKey: string, textKey: string) {\n\treturn Array.from(new Set([item[textKey], item[codeKey], ...Object.values(item)]));\n}\n\nfunction areSelectionsEqual(left: CollectionItem[], right: CollectionItem[], codeKey: string) {\n\tif (left.length !== right.length) {\n\t\treturn false;\n\t}\n\n\tconst rightKeys = new Set(right.map((item) => getItemKey(item, codeKey)));\n\n\treturn left.every((item) => rightKeys.has(getItemKey(item, codeKey)));\n}\n\ninterface MultiSelectOptionEntry {\n\titem: CollectionItem;\n\tindex: number;\n}\n\ninterface MultiSelectOptionGroupProps {\n\tentries: MultiSelectOptionEntry[];\n\tlistId: string;\n\tactiveIndex: number;\n\tselectedKeys: Set<string>;\n\tcodeKey: string;\n\tquery: string;\n\thighlightQuery: string;\n\tgetOptionDisabled?: (item: CollectionItem) => boolean;\n\tgetOptionId: (listId: string, index: number) => string;\n\tsetOptionRef: (index: number, node: HTMLElement | null) => void;\n\ttoggleOption: (item: CollectionItem) => void;\n\tselectOnlyOption: (item: CollectionItem) => void;\n\trenderItem: (item: CollectionItem, state: MultiSelectItemState) => React.ReactNode;\n}\n\nfunction MultiSelectOptionGroup({\n\tentries,\n\tlistId,\n\tactiveIndex,\n\tselectedKeys,\n\tcodeKey,\n\tquery,\n\thighlightQuery,\n\tgetOptionDisabled,\n\tgetOptionId,\n\tsetOptionRef,\n\ttoggleOption,\n\tselectOnlyOption,\n\trenderItem\n}: MultiSelectOptionGroupProps) {\n\treturn entries.map(({ item, index }) => {\n\t\tconst active = index === activeIndex;\n\t\tconst selected = selectedKeys.has(getItemKey(item, codeKey));\n\t\tconst optionDisabled = getOptionDisabled?.(item) ?? false;\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tkey={`${getItemKey(item, codeKey)}-${index}`}\n\t\t\t\tid={getOptionId(listId, index)}\n\t\t\t\tref={(node) => setOptionRef(index, node)}\n\t\t\t\trole=\"option\"\n\t\t\t\taria-selected={selected}\n\t\t\t\taria-disabled={optionDisabled || undefined}\n\t\t\t\tclassName={cn(\n\t\t\t\t\tuiStyles.uiSelectOption,\n\t\t\t\t\toptionDisabled && uiStyles.disabled,\n\t\t\t\t\tselected && uiStyles.selected,\n\t\t\t\t\tactive && uiStyles.uiPopupOptionActive\n\t\t\t\t)}\n\t\t\t\tonMouseDown={(event) => {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}}>\n\t\t\t\t<div\n\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}}>\n\t\t\t\t\t<CheckBox\n\t\t\t\t\t\tvalue={selected}\n\t\t\t\t\t\tdisabled={optionDisabled}\n\t\t\t\t\t\tonChange={() => {\n\t\t\t\t\t\t\tif (!optionDisabled) {\n\t\t\t\t\t\t\t\ttoggleOption(item);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonMouseDown={(event) => {\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"overflowHidden\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tif (!optionDisabled) {\n\t\t\t\t\t\t\tselectOnlyOption(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t}}>\n\t\t\t\t\t{renderItem(item, { selected, active, disabled: optionDisabled, query, highlightQuery })}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t});\n}\n\n/**\n * Поле множественного выбора с внутренним черновиком значений и подтверждением выбора при закрытии списка.\n * Подходит как для самостоятельного использования, так и как базовый слой для OData-оберток.\n */\nexport const MultiSelect = forwardRef<HTMLInputElement, MultiSelectProps>(\n\t(\n\t\t{\n\t\t\tcodeKey,\n\t\t\ttextKey,\n\t\t\thideCode,\n\t\t\titems,\n\t\t\tvalue,\n\t\t\tonChange,\n\t\t\tlabel,\n\t\t\tdescription,\n\t\t\tplaceholder,\n\t\t\tsize,\n\t\t\tquery,\n\t\t\tdefaultQuery,\n\t\t\thighlightQuery,\n\t\t\tonQuery,\n\t\t\tdefaultFilter = true,\n\t\t\tonOpen,\n\t\t\tonClose,\n\t\t\tgetOptionDisabled,\n\t\t\tdisabled,\n\t\t\terror,\n\t\t\tisLoading,\n\t\t\trenderToken,\n\t\t\trenderToolbar,\n\t\t\trenderItem\n\t\t},\n\t\tref\n\t) => {\n\t\tconst inputRef = useRef<HTMLInputElement | null>(null);\n\t\tconst [open, setOpen] = useState(false);\n\t\tconst triggerMode = \"search-multi\";\n\t\tconst committedSelectedItems = value ?? fallback;\n\t\tconst committedSelectedKeys = useMemo(\n\t\t\t() => new Set(committedSelectedItems.map((item) => getItemKey(item, codeKey))),\n\t\t\t[codeKey, committedSelectedItems]\n\t\t);\n\t\tconst availableItems = useMemo(\n\t\t\t() => items.filter((item) => !committedSelectedKeys.has(getItemKey(item, codeKey))),\n\t\t\t[codeKey, committedSelectedKeys, items]\n\t\t);\n\t\tconst resolvedTextKey = useMemo(\n\t\t\t() => resolveMultiSelectTextKey([...committedSelectedItems, ...items], codeKey, textKey),\n\t\t\t[codeKey, committedSelectedItems, items, textKey]\n\t\t);\n\t\tconst { query: currentQuery, setQuery } = usePickerQuery({\n\t\t\topen,\n\t\t\tquery,\n\t\t\tdefaultQuery,\n\t\t\tonQuery,\n\t\t\ttriggerMode\n\t\t});\n\t\tconst filteredCommittedSelectedItems = usePickerDefaultFilter({\n\t\t\toptions: committedSelectedItems,\n\t\t\tquery: currentQuery,\n\t\t\tenabled: defaultFilter,\n\t\t\tgetSearchText: (item) => getItemSearchParts(item, codeKey, resolvedTextKey)\n\t\t});\n\t\tconst filteredAvailableItems = usePickerDefaultFilter({\n\t\t\toptions: availableItems,\n\t\t\tquery: currentQuery,\n\t\t\tenabled: defaultFilter,\n\t\t\tgetSearchText: (item) => getItemSearchParts(item, codeKey, resolvedTextKey)\n\t\t});\n\t\tconst visibleOptions = useMemo(\n\t\t\t() => [...filteredCommittedSelectedItems, ...filteredAvailableItems],\n\t\t\t[filteredAvailableItems, filteredCommittedSelectedItems]\n\t\t);\n\t\tconst selectedIndex = filteredCommittedSelectedItems.length > 0 ? 0 : -1;\n\t\tconst {\n\t\t\tdraftValue: draftSelectedItems,\n\t\t\tsetDraftValue: setDraftSelectedItems,\n\t\t\tprepareOpen\n\t\t} = usePickerSelectionLifecycle({\n\t\t\tvalue: committedSelectedItems,\n\t\t\topen,\n\t\t\tonCommit: onChange,\n\t\t\tonOpen,\n\t\t\tonClose,\n\t\t\tisEqual: (left, right) => areSelectionsEqual(left, right, codeKey)\n\t\t});\n\t\tconst selectedKeys = useMemo(\n\t\t\t() => new Set(draftSelectedItems.map((item) => getItemKey(item, codeKey))),\n\t\t\t[codeKey, draftSelectedItems]\n\t\t);\n\t\tconst optionDisableContext = useMemo<MultiSelectOptionDisableContext>(\n\t\t\t() => ({\n\t\t\t\tselectedItems: draftSelectedItems,\n\t\t\t\tcommittedSelectedItems,\n\t\t\t\tselectedKeys,\n\t\t\t\topen\n\t\t\t}),\n\t\t\t[committedSelectedItems, draftSelectedItems, open, selectedKeys]\n\t\t);\n\t\tconst isOptionDisabled = useCallback(\n\t\t\t(item: CollectionItem) => getOptionDisabled?.(item, optionDisableContext) ?? false,\n\t\t\t[getOptionDisabled, optionDisableContext]\n\t\t);\n\t\tconst {\n\t\t\tactiveIndex,\n\t\t\tcontext,\n\t\t\tfloatingStyles,\n\t\t\tgetFloatingProps,\n\t\t\tsetReference,\n\t\t\tsetFloating,\n\t\t\tsetOptionRef,\n\t\t\tclose,\n\t\t\topenList,\n\t\t\ttoggleOpen,\n\t\t\tselectActiveOption,\n\t\t\thandleReferenceKeyDown,\n\t\t\thandleFloatingKeyDown,\n\t\t\tgetOptionId,\n\t\t\tgetActiveOptionId\n\t\t} = usePickerFloatingListbox({\n\t\t\toptions: visibleOptions,\n\t\t\tselectedIndex,\n\t\t\topen,\n\t\t\tonOpenChange: setOpen,\n\t\t\tonSelect: undefined,\n\t\t\tdisabled,\n\t\t\tgetOptionDisabled: isOptionDisabled,\n\t\t\tcloseOnSelect: false,\n\t\t\tallowOpenWithoutOptions: true,\n\t\t\ttriggerMode\n\t\t});\n\n\t\tconst currentHighlightQuery = highlightQuery ?? currentQuery;\n\t\tconst toggleDraftSelection = (item: CollectionItem) => {\n\t\t\tconst itemKey = getItemKey(item, codeKey);\n\n\t\t\tsetDraftSelectedItems((currentItems) => {\n\t\t\t\tconst isSelected = currentItems.some((selectedItem) => getItemKey(selectedItem, codeKey) === itemKey);\n\n\t\t\t\tif (isSelected) {\n\t\t\t\t\treturn currentItems.filter((selectedItem) => getItemKey(selectedItem, codeKey) !== itemKey);\n\t\t\t\t}\n\n\t\t\t\tif (isOptionDisabled(item)) {\n\t\t\t\t\treturn currentItems;\n\t\t\t\t}\n\n\t\t\t\treturn [...currentItems, item];\n\t\t\t});\n\t\t};\n\n\t\tconst setInputNode = (node: HTMLInputElement | null) => {\n\t\t\tinputRef.current = node;\n\n\t\t\tif (typeof ref === \"function\") {\n\t\t\t\tref(node);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (ref) {\n\t\t\t\tref.current = node;\n\t\t\t}\n\t\t};\n\n\t\tconst clearSelection = () => {\n\t\t\tsetDraftSelectedItems([]);\n\n\t\t\tif (!open) {\n\t\t\t\tonChange([]);\n\t\t\t}\n\t\t};\n\n\t\tconst selectAll = () => {\n\t\t\tsetDraftSelectedItems((currentItems) => {\n\t\t\t\tconst nextItems = [...currentItems];\n\t\t\t\tconst selectedKeys = new Set(currentItems.map((item) => getItemKey(item, codeKey)));\n\n\t\t\t\tfor (const item of visibleOptions) {\n\t\t\t\t\tconst itemKey = getItemKey(item, codeKey);\n\n\t\t\t\t\tif (!selectedKeys.has(itemKey) && !isOptionDisabled(item)) {\n\t\t\t\t\t\tselectedKeys.add(itemKey);\n\t\t\t\t\t\tnextItems.push(item);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn nextItems;\n\t\t\t});\n\t\t};\n\n\t\tconst deselectAll = () => {\n\t\t\tsetDraftSelectedItems([]);\n\t\t};\n\n\t\tconst selectOnlyOption = (item: CollectionItem) => {\n\t\t\tif (isOptionDisabled(item)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetDraftSelectedItems([item]);\n\t\t\tclose();\n\t\t};\n\n\t\tconst currentSelectedItems = open ? draftSelectedItems : committedSelectedItems;\n\t\tconst hasSelectedItems = currentSelectedItems.length > 0;\n\t\tconst renderContext: MultiSelectRenderContext = {\n\t\t\tselectedItems: currentSelectedItems,\n\t\t\tcommittedSelectedItems,\n\t\t\tavailableItems: filteredAvailableItems,\n\t\t\tquery: currentQuery,\n\t\t\topen,\n\t\t\tclearSelection,\n\t\t\tselectAll,\n\t\t\tdeselectAll\n\t\t};\n\t\tconst tokenRenderer =\n\t\t\trenderToken === undefined ? createDefaultMultiSelectTokenRenderer({ codeKey, textKey: resolvedTextKey }) : renderToken;\n\t\tconst toolbarRenderer = renderToolbar === undefined ? renderDefaultMultiSelectToolbar : renderToolbar;\n\t\tconst itemRenderer =\n\t\t\trenderItem ??\n\t\t\tcreateDefaultMultiSelectItemRenderer({\n\t\t\t\tcodeKey,\n\t\t\t\ttextKey: resolvedTextKey,\n\t\t\t\thideCode\n\t\t\t});\n\t\tconst tokenNode = typeof tokenRenderer === \"function\" ? tokenRenderer(renderContext) : null;\n\t\tconst toolbarNode = typeof toolbarRenderer === \"function\" ? toolbarRenderer(renderContext) : null;\n\t\t// const hasToken = tokenNode !== null && tokenNode !== undefined;\n\t\tconst selectedEntries = filteredCommittedSelectedItems.map((item, index) => ({ item, index }));\n\t\tconst itemEntries = filteredAvailableItems.map((item, index) => ({ item, index: index + selectedEntries.length }));\n\t\tconst isNoData = !isLoading && !error && visibleOptions.length === 0;\n\t\tconst triggerController = usePickerTriggerController({\n\t\t\tmode: triggerMode,\n\t\t\topen,\n\t\t\tcurrentQuery,\n\t\t\thasDisplayValue: false,\n\t\t\tinputRef,\n\t\t\tsetQuery,\n\t\t\topenList,\n\t\t\tclose,\n\t\t\ttoggleOpen,\n\t\t\tonBeforeOpen: () => {\n\t\t\t\tif (!open) {\n\t\t\t\t\tprepareOpen();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn (\n\t\t\t<PickerField\n\t\t\t\tlabel={label}\n\t\t\t\tdescription={description}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tplaceholder={placeholder}\n\t\t\t\tsize={size}\n\t\t\t\tclassName={styles.multiSelect}>\n\t\t\t\t{({ controlId, labelId, describedBy }) => {\n\t\t\t\t\tconst listId = `${controlId}-listbox`;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<PickerTriggerInput\n\t\t\t\t\t\t\t\tref={setInputNode}\n\t\t\t\t\t\t\t\trootRef={setReference}\n\t\t\t\t\t\t\t\tid={controlId}\n\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\tvalue={currentQuery}\n\t\t\t\t\t\t\t\tplaceholder={hasSelectedItems ? undefined : placeholder}\n\t\t\t\t\t\t\t\taria-labelledby={labelId}\n\t\t\t\t\t\t\t\taria-describedby={describedBy}\n\t\t\t\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t\t\t\t\taria-expanded={open}\n\t\t\t\t\t\t\t\taria-controls={open ? listId : undefined}\n\t\t\t\t\t\t\t\taria-autocomplete=\"list\"\n\t\t\t\t\t\t\t\taria-activedescendant={open ? getActiveOptionId(listId) : undefined}\n\t\t\t\t\t\t\t\trootClassName=\"flex alignItemsCenter\"\n\t\t\t\t\t\t\t\tendAdornment={\n\t\t\t\t\t\t\t\t\t<PickerTriggerActions\n\t\t\t\t\t\t\t\t\t\topen={open}\n\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\t\tonToggleMouseDown={triggerController.handleToggleMouseDown}\n\t\t\t\t\t\t\t\t\t\tonToggleClick={triggerController.handleToggleClick}>\n\t\t\t\t\t\t\t\t\t\t{tokenNode}\n\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tdisabled={!hasSelectedItems}\n\t\t\t\t\t\t\t\t\t\t\tclassName={uiStyles.uiClearButton}\n\t\t\t\t\t\t\t\t\t\t\tdata-ui=\"multi-select-clear-button\"\n\t\t\t\t\t\t\t\t\t\t\tdata-action=\"clear-multi-select\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={clearSelection}\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Очистить все\">\n\t\t\t\t\t\t\t\t\t\t\t<XIcon />\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t</PickerTriggerActions>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonChange={(event) => {\n\t\t\t\t\t\t\t\t\ttriggerController.handleTriggerInputChange(event.target.value);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonClick={triggerController.handleTriggerClick}\n\t\t\t\t\t\t\t\tonFocus={(event) => {\n\t\t\t\t\t\t\t\t\ttriggerController.handleTriggerFocus(event.currentTarget);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonKeyDown={(event) => {\n\t\t\t\t\t\t\t\t\thandleReferenceKeyDown(event);\n\n\t\t\t\t\t\t\t\t\tif (event.defaultPrevented) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\ttriggerController.handleTriggerKeyDown({\n\t\t\t\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t\t\t\tonActivateWhenOpen: () => {\n\t\t\t\t\t\t\t\t\t\t\tif (activeIndex >= 0) {\n\t\t\t\t\t\t\t\t\t\t\t\tconst activeItem = visibleOptions[activeIndex];\n\t\t\t\t\t\t\t\t\t\t\t\tif (activeItem) {\n\t\t\t\t\t\t\t\t\t\t\t\t\ttoggleDraftSelection(activeItem);\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tselectActiveOption();\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tenableClosedArrowDownOpen: true,\n\t\t\t\t\t\t\t\t\t\tsuppressClosedArrowUp: true\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t<PickerPopup\n\t\t\t\t\t\t\t\topen={open}\n\t\t\t\t\t\t\t\tcontext={context}\n\t\t\t\t\t\t\t\tfloatingStyles={floatingStyles}\n\t\t\t\t\t\t\t\tlistId={listId}\n\t\t\t\t\t\t\t\tlabelId={labelId}\n\t\t\t\t\t\t\t\tdescriptionId={describedBy}\n\t\t\t\t\t\t\t\tactiveOptionId={open ? getActiveOptionId(listId) : undefined}\n\t\t\t\t\t\t\t\tsetFloating={setFloating}\n\t\t\t\t\t\t\t\tgetFloatingProps={getFloatingProps}\n\t\t\t\t\t\t\t\tonKeyDown={handleFloatingKeyDown}\n\t\t\t\t\t\t\t\tinitialFocus={-1}\n\t\t\t\t\t\t\t\treturnFocus={false}\n\t\t\t\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\t\t\t\tclassName={uiStyles.uiPopupOptions}\n\t\t\t\t\t\t\t\theader={toolbarNode}>\n\t\t\t\t\t\t\t\t<MultiSelectOptionsWrapper isNoData={isNoData} isLoading={isLoading} error={error}>\n\t\t\t\t\t\t\t\t\t<div className=\"scrollable h100\">\n\t\t\t\t\t\t\t\t\t\t<MultiSelectOptionGroup\n\t\t\t\t\t\t\t\t\t\t\tentries={selectedEntries}\n\t\t\t\t\t\t\t\t\t\t\tlistId={listId}\n\t\t\t\t\t\t\t\t\t\t\tactiveIndex={activeIndex}\n\t\t\t\t\t\t\t\t\t\t\tselectedKeys={selectedKeys}\n\t\t\t\t\t\t\t\t\t\t\tcodeKey={codeKey}\n\t\t\t\t\t\t\t\t\t\t\tquery={currentQuery}\n\t\t\t\t\t\t\t\t\t\t\thighlightQuery={currentHighlightQuery}\n\t\t\t\t\t\t\t\t\t\t\tgetOptionDisabled={isOptionDisabled}\n\t\t\t\t\t\t\t\t\t\t\tgetOptionId={getOptionId}\n\t\t\t\t\t\t\t\t\t\t\tsetOptionRef={setOptionRef}\n\t\t\t\t\t\t\t\t\t\t\ttoggleOption={toggleDraftSelection}\n\t\t\t\t\t\t\t\t\t\t\tselectOnlyOption={selectOnlyOption}\n\t\t\t\t\t\t\t\t\t\t\trenderItem={itemRenderer}\n\t\t\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t\t\t{selectedEntries.length > 0 && availableItems.length > 0 && <Separator className=\"marginBlockSm\" />}\n\n\t\t\t\t\t\t\t\t\t\t<MultiSelectOptionGroup\n\t\t\t\t\t\t\t\t\t\t\tentries={itemEntries}\n\t\t\t\t\t\t\t\t\t\t\tlistId={listId}\n\t\t\t\t\t\t\t\t\t\t\tactiveIndex={activeIndex}\n\t\t\t\t\t\t\t\t\t\t\tselectedKeys={selectedKeys}\n\t\t\t\t\t\t\t\t\t\t\tcodeKey={codeKey}\n\t\t\t\t\t\t\t\t\t\t\tquery={currentQuery}\n\t\t\t\t\t\t\t\t\t\t\thighlightQuery={currentHighlightQuery}\n\t\t\t\t\t\t\t\t\t\t\tgetOptionDisabled={isOptionDisabled}\n\t\t\t\t\t\t\t\t\t\t\tgetOptionId={getOptionId}\n\t\t\t\t\t\t\t\t\t\t\tsetOptionRef={setOptionRef}\n\t\t\t\t\t\t\t\t\t\t\ttoggleOption={toggleDraftSelection}\n\t\t\t\t\t\t\t\t\t\t\tselectOnlyOption={selectOnlyOption}\n\t\t\t\t\t\t\t\t\t\t\trenderItem={itemRenderer}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</MultiSelectOptionsWrapper>\n\t\t\t\t\t\t\t</PickerPopup>\n\t\t\t\t\t\t</>\n\t\t\t\t\t);\n\t\t\t\t}}\n\t\t\t</PickerField>\n\t\t);\n\t}\n);\n\nMultiSelect.displayName = \"MultiSelect\";\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { i as e } from "./Flex-DbBdq336.js";
2
2
  import { t } from "./Button-BZ_b-Kin.js";
3
- import { AlertCircleIcon as n, CheckCircle2Icon as r, InfoIcon as i, TriangleAlertIcon as a, XIcon as o } from "lucide-react";
4
- import { cn as s } from "@ryuzaki13/react-foundation-lib/utils";
3
+ import { cn as n } from "@ryuzaki13/react-foundation-lib/utils";
4
+ import { AlertCircleIcon as r, CheckCircle2Icon as i, InfoIcon as a, TriangleAlertIcon as o, XIcon as s } from "lucide-react";
5
5
  import { jsx as c, jsxs as l } from "react/jsx-runtime";
6
6
  import { createContext as u, useContext as d, useEffect as f, useMemo as p } from "react";
7
7
  import { createMissingContextError as m } from "@ryuzaki13/react-foundation-lib/error";
@@ -62,34 +62,34 @@ var w = {
62
62
  }, T = {
63
63
  info: {
64
64
  title: "Информация",
65
- Icon: i
65
+ Icon: a
66
66
  },
67
67
  success: {
68
68
  title: "Успешно",
69
- Icon: r
69
+ Icon: i
70
70
  },
71
71
  warning: {
72
72
  title: "Предупреждение",
73
- Icon: a
73
+ Icon: o
74
74
  },
75
75
  error: {
76
76
  title: "Ошибка",
77
- Icon: n
77
+ Icon: r
78
78
  }
79
79
  };
80
80
  function E() {
81
- let n = x(), { dismiss: r } = S();
81
+ let r = x(), { dismiss: i } = S();
82
82
  return /* @__PURE__ */ c("div", {
83
83
  className: w.container,
84
84
  "aria-label": "Область уведомлений",
85
85
  "aria-live": "polite",
86
86
  "aria-relevant": "additions text",
87
- children: n.map((n) => {
88
- let i = T[n.type], a = n.title ?? i.title, u = i.Icon;
87
+ children: r.map((r) => {
88
+ let a = T[r.type], o = r.title ?? a.title, u = a.Icon;
89
89
  return /* @__PURE__ */ c("article", {
90
- role: n.type === "error" ? "alert" : "status",
90
+ role: r.type === "error" ? "alert" : "status",
91
91
  "aria-atomic": "true",
92
- className: s(w.card, w[n.type]),
92
+ className: n(w.card, w[r.type]),
93
93
  children: /* @__PURE__ */ l(e, {
94
94
  align: "start",
95
95
  justify: "between",
@@ -108,20 +108,20 @@ function E() {
108
108
  children: [
109
109
  /* @__PURE__ */ c("div", {
110
110
  className: w.kicker,
111
- children: i.title
111
+ children: a.title
112
112
  }),
113
- n.title ? /* @__PURE__ */ c("div", {
113
+ r.title ? /* @__PURE__ */ c("div", {
114
114
  className: w.title,
115
- children: a
115
+ children: o
116
116
  }) : null,
117
117
  /* @__PURE__ */ c("div", {
118
118
  className: w.message,
119
- children: n.message
119
+ children: r.message
120
120
  }),
121
- n.actions?.length ? /* @__PURE__ */ c("div", {
121
+ r.actions?.length ? /* @__PURE__ */ c("div", {
122
122
  className: w.actions,
123
- children: n.actions.map((e) => /* @__PURE__ */ c(t, {
124
- tone: e.tone ?? n.type,
123
+ children: r.actions.map((e) => /* @__PURE__ */ c(t, {
124
+ tone: e.tone ?? r.type,
125
125
  appearance: "outline",
126
126
  "data-ui": "notification-action-button",
127
127
  "data-action": "notification-action",
@@ -131,21 +131,21 @@ function E() {
131
131
  }) : null
132
132
  ]
133
133
  })]
134
- }), n.dismissible === !1 ? null : /* @__PURE__ */ c(t, {
135
- icon: /* @__PURE__ */ c(o, {}),
134
+ }), r.dismissible === !1 ? null : /* @__PURE__ */ c(t, {
135
+ icon: /* @__PURE__ */ c(s, {}),
136
136
  appearance: "ghost",
137
- tone: n.type,
138
- onClick: () => r(n.id),
137
+ tone: r.type,
138
+ onClick: () => i(r.id),
139
139
  "aria-label": "Закрыть уведомление",
140
140
  "data-ui": "notification-dismiss-button",
141
141
  "data-action": "dismiss-notification"
142
142
  })]
143
143
  })
144
- }, n.id);
144
+ }, r.id);
145
145
  })
146
146
  });
147
147
  }
148
148
  //#endregion
149
149
  export { S as a, x as i, y as n, C as r, E as t };
150
150
 
151
- //# sourceMappingURL=NotificationsHost-BQc-zOr2.js.map
151
+ //# sourceMappingURL=NotificationsHost-Bnq7xFKO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotificationsHost-Bnq7xFKO.js","names":[],"sources":["../../src/notifications/model/NotificationsProvider.tsx","../../src/notifications/ui/Notification.module.scss","../../src/notifications/ui/NotificationsHost.tsx"],"sourcesContent":["/* eslint-disable react-refresh/only-export-components */\nimport { createContext, PropsWithChildren, useContext, useEffect, useMemo } from \"react\";\n\nimport { createMissingContextError } from \"@ryuzaki13/react-foundation-lib/error\";\nimport {\n\tbindNotifications,\n\tcreateNotificationsStore,\n\tNotificationId,\n\tNotificationPushInput,\n\tNotificationsStoreApi,\n\tNotificationType\n} from \"@ryuzaki13/react-foundation-lib/notifications\";\nimport { useStore } from \"zustand\";\n\nconst NotificationsContext = createContext<NotificationsStoreApi | null>(null);\n\n/**\n * Провайдер уведомлений приложения. Хранит состояние списка уведомлений и предоставляет хуки доступа к нему.\n */\nexport function NotificationsProvider({ children }: PropsWithChildren) {\n\tconst store = useMemo(() => createNotificationsStore(), []);\n\n\tuseEffect(() => {\n\t\treturn bindNotifications(store);\n\t}, [store]);\n\n\treturn <NotificationsContext.Provider value={store}>{children}</NotificationsContext.Provider>;\n}\n\nfunction useNotificationApi() {\n\tconst ctx = useContext(NotificationsContext);\n\tif (!ctx) {\n\t\tthrow createMissingContextError({\n\t\t\thookName: \"useNotificationApi\",\n\t\t\tproviderName: \"NotificationsProvider\"\n\t\t});\n\t}\n\treturn ctx;\n}\n\nexport function useNotifications() {\n\tconst api = useNotificationApi();\n\treturn useStore(api, (s) => s.items);\n}\n\nexport function useNotify() {\n\tconst api = useNotificationApi();\n\tconst actions = useStore(api, (s) => s.actions);\n\n\tconst mk = (type: NotificationType) => (message: string, opts?: Omit<NotificationPushInput, \"type\" | \"message\">) =>\n\t\tactions.push({ type, message, ...opts });\n\n\treturn {\n\t\t...actions,\n\t\tsuccess: mk(\"success\"),\n\t\tinfo: mk(\"info\"),\n\t\twarning: mk(\"warning\"),\n\t\terror: mk(\"error\")\n\t};\n}\n\nexport function useNotificationById(id: NotificationId) {\n\tconst api = useNotificationApi();\n\treturn useStore(api, (s) => s.items.find((n) => n.id === id));\n}\n","@use \"@/styles/mixins\" as *;\n\n.container {\n\tposition: fixed;\n\tz-index: var(--z-notify);\n\tbottom: 0;\n\tleft: 0;\n\tdisplay: grid;\n\tgap: var(--space-sm);\n\tpadding: var(--space-lg);\n\twidth: min(28em, calc(100dvw - var(--space-lg) * 2));\n\tpointer-events: none;\n}\n\n.card {\n\t--notify-accent: var(--border-1);\n\t--notify-accent-surface: var(--surface-1);\n\t--notify-accent-text: var(--content-accent);\n\n\tposition: relative;\n\toverflow: hidden;\n\tpointer-events: auto;\n\twidth: 100%;\n\tpadding: var(--space-md);\n\t// border: var(--border);\n\tborder-left: 0.3125em solid var(--notify-accent);\n\tborder-radius: var(--radius-md);\n\tbackground: linear-gradient(37deg, var(--notify-accent-surface), var(--surface-0));\n\tcolor: var(--content-0);\n\tbox-shadow: var(--shadow-md);\n}\n\n.info {\n\t--notify-accent: var(--status-info-border);\n\t--notify-accent-surface: var(--status-info-soft);\n\t--notify-accent-text: var(--status-info-text);\n}\n\n.success {\n\t--notify-accent: var(--status-success-border);\n\t--notify-accent-surface: var(--status-success-soft);\n\t--notify-accent-text: var(--status-success-text);\n}\n\n.warning {\n\t--notify-accent: var(--status-warning-border);\n\t--notify-accent-surface: var(--status-warning-soft);\n\t--notify-accent-text: var(--status-warning-text);\n}\n\n.error {\n\t--notify-accent: var(--status-error-border);\n\t--notify-accent-surface: var(--status-error-soft);\n\t--notify-accent-text: var(--status-error-text);\n}\n\n.header,\n.content,\n.copy {\n\tmin-width: 0;\n}\n\n.content {\n\tmin-width: 0;\n\tflex: 1;\n}\n\n.icon {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tflex-shrink: 0;\n\twidth: var(--control-height);\n\theight: var(--control-height);\n\tborder-radius: 50%;\n\tbackground-color: var(--notify-accent-surface);\n\tcolor: var(--notify-accent-text);\n\tborder: var(--border-width) solid color-mix(in srgb, var(--notify-accent) 22%, transparent);\n\n\tsvg {\n\t\twidth: 1.125em;\n\t\theight: 1.125em;\n\t}\n}\n\n.kicker {\n\tmargin-bottom: var(--space-xs);\n\tcolor: var(--notify-accent-text);\n\tfont-size: var(--font-size-xs);\n\tfont-weight: 600;\n\tfont-variation-settings: \"wght\" 600;\n\tletter-spacing: 0.04em;\n\ttext-transform: uppercase;\n}\n\n.title {\n\tcolor: var(--notify-accent-text);\n\tfont-weight: 600;\n\tfont-variation-settings: \"wght\" 600;\n}\n\n.message {\n\tmargin-top: var(--space-xs);\n\tcolor: var(--content-0);\n\twhite-space: pre-wrap;\n\tword-break: break-word;\n}\n\n.actions {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tgap: var(--space-xs);\n\tmargin-top: var(--space-sm);\n}\n\n@include mobile {\n\t.container {\n\t\tpadding: var(--space-md);\n\t\twidth: min(100dvw, calc(100dvw - var(--space-md) * 2));\n\t}\n}\n","import { NotificationType } from \"@ryuzaki13/react-foundation-lib/notifications\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { AlertCircleIcon, CheckCircle2Icon, InfoIcon, TriangleAlertIcon, XIcon } from \"lucide-react\";\n\nimport { Button } from \"../../button\";\nimport { FlexContainer } from \"../../flex\";\nimport { useNotifications, useNotify } from \"../model/NotificationsProvider\";\n\nimport styles from \"./Notification.module.scss\";\n\nconst notificationConfig: Record<\n\tNotificationType,\n\t{\n\t\ttitle: string;\n\t\tIcon: typeof InfoIcon;\n\t}\n> = {\n\tinfo: {\n\t\ttitle: \"Информация\",\n\t\tIcon: InfoIcon\n\t},\n\tsuccess: {\n\t\ttitle: \"Успешно\",\n\t\tIcon: CheckCircle2Icon\n\t},\n\twarning: {\n\t\ttitle: \"Предупреждение\",\n\t\tIcon: TriangleAlertIcon\n\t},\n\terror: {\n\t\ttitle: \"Ошибка\",\n\t\tIcon: AlertCircleIcon\n\t}\n};\n\n/**\n * Хост для визуального отображения очереди уведомлений.\n * Обычно монтируется один раз на уровне приложения рядом с провайдером уведомлений.\n */\nexport function NotificationsHost() {\n\tconst items = useNotifications();\n\tconst { dismiss } = useNotify();\n\n\treturn (\n\t\t<div className={styles.container} aria-label=\"Область уведомлений\" aria-live=\"polite\" aria-relevant=\"additions text\">\n\t\t\t{items.map((notification) => {\n\t\t\t\tconst config = notificationConfig[notification.type];\n\t\t\t\tconst title = notification.title ?? config.title;\n\t\t\t\tconst Icon = config.Icon;\n\n\t\t\t\treturn (\n\t\t\t\t\t<article\n\t\t\t\t\t\tkey={notification.id}\n\t\t\t\t\t\trole={notification.type === \"error\" ? \"alert\" : \"status\"}\n\t\t\t\t\t\taria-atomic=\"true\"\n\t\t\t\t\t\tclassName={cn(styles.card, styles[notification.type])}>\n\t\t\t\t\t\t<FlexContainer align=\"start\" justify=\"between\" gap=\"sm\" className={styles.header}>\n\t\t\t\t\t\t\t<FlexContainer align=\"start\" gap=\"sm\" className={styles.content}>\n\t\t\t\t\t\t\t\t<span className={styles.icon} aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t<Icon />\n\t\t\t\t\t\t\t\t</span>\n\n\t\t\t\t\t\t\t\t<div className={styles.copy}>\n\t\t\t\t\t\t\t\t\t<div className={styles.kicker}>{config.title}</div>\n\t\t\t\t\t\t\t\t\t{notification.title ? <div className={styles.title}>{title}</div> : null}\n\t\t\t\t\t\t\t\t\t<div className={styles.message}>{notification.message}</div>\n\n\t\t\t\t\t\t\t\t\t{notification.actions?.length ? (\n\t\t\t\t\t\t\t\t\t\t<div className={styles.actions}>\n\t\t\t\t\t\t\t\t\t\t\t{notification.actions.map((action) => (\n\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\tkey={action.label}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttone={action.tone ?? notification.type}\n\t\t\t\t\t\t\t\t\t\t\t\t\tappearance=\"outline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tdata-ui=\"notification-action-button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tdata-action=\"notification-action\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => void action.onClick()}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{action.label}\n\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</FlexContainer>\n\n\t\t\t\t\t\t\t{notification.dismissible !== false ? (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\ticon={<XIcon />}\n\t\t\t\t\t\t\t\t\tappearance=\"ghost\"\n\t\t\t\t\t\t\t\t\ttone={notification.type}\n\t\t\t\t\t\t\t\t\tonClick={() => dismiss(notification.id)}\n\t\t\t\t\t\t\t\t\taria-label=\"Закрыть уведомление\"\n\t\t\t\t\t\t\t\t\tdata-ui=\"notification-dismiss-button\"\n\t\t\t\t\t\t\t\t\tdata-action=\"dismiss-notification\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</FlexContainer>\n\t\t\t\t\t</article>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { i as e } from "./Flex-DbBdq336.js";
2
- import { t } from "./DateInput-CINDYueM.js";
2
+ import { t } from "./DateInput-LSSvObtg.js";
3
3
  import { c as n, l as r, r as i, s as a, t as o, u as s } from "./DateRangePresetSelect-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";
@@ -50,4 +50,4 @@ function h({ value: h, onChange: g, presetId: _, onPresetIdChange: v, referenceD
50
50
  //#endregion
51
51
  export { h as t };
52
52
 
53
- //# sourceMappingURL=PresetRangeDateInput-YBQm_4Fb.js.map
53
+ //# sourceMappingURL=PresetRangeDateInput-B_8jsilZ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PresetRangeDateInput-YBQm_4Fb.js","names":[],"sources":["../../src/preset-range-date-input/ui/PresetRangeDateInput.tsx"],"sourcesContent":["import { useCallback, useMemo, useRef, useState, type ReactNode } from \"react\";\n\nimport { NullableDateRange } from \"@ryuzaki13/react-foundation-lib/formatters\";\n\nimport { RangeDateInput, type DateRangeInputProps } from \"../../date-input\";\nimport {\n\tDateRangePresetOption,\n\tDateRangePresetSelect,\n\tDEFAULT_DATE_RANGE_PRESET_IDS,\n\tnormalizeDateRangePresetIds,\n\tresolveDateRangePresetIdByRange,\n\tresolveDateRangePresetOptionsByIds,\n\tresolveDateRangePresetPayload\n} from \"../../date-range-preset-select\";\nimport { FlexContainer } from \"../../flex\";\n\nexport interface PresetRangeDateInputProps extends Omit<DateRangeInputProps, \"selectsRange\"> {\n\tpresetId?: DateRangePresetOption[\"id\"] | null;\n\tonPresetIdChange?: (presetId: DateRangePresetOption[\"id\"] | null) => void;\n\treferenceDate?: Date;\n\tpresetIds?: readonly DateRangePresetOption[\"id\"][];\n\tpresetOptions?: readonly DateRangePresetOption[];\n\tpresetLabel?: ReactNode;\n\tpresetDescription?: string;\n\tpresetPlaceholder?: string;\n\tpresetDisabled?: boolean;\n}\n\n/**\n * Строит сигнатуру пресета для защиты от повторной синхронизации.\n */\nfunction getPresetSignature(presetId: DateRangePresetOption[\"id\"] | null): string {\n\treturn presetId ?? \"__empty__\";\n}\n\n/**\n * Составной компонент выбора диапазона дат через пресет или ручной ввод.\n */\nexport function PresetRangeDateInput({\n\tvalue,\n\tonChange,\n\tpresetId,\n\tonPresetIdChange,\n\treferenceDate,\n\tpresetIds,\n\tpresetOptions,\n\tpresetLabel,\n\tpresetDescription,\n\tpresetPlaceholder = \"Выберите пресет диапазона\",\n\tpresetDisabled,\n\t...rangeDateInputProps\n}: PresetRangeDateInputProps) {\n\tconst [defaultReferenceDate] = useState(() => new Date());\n\tconst resolvedReferenceDate = referenceDate ?? defaultReferenceDate;\n\tconst resolvedPresetOptions = useMemo(\n\t\t() => presetOptions ?? resolveDateRangePresetOptionsByIds(normalizeDateRangePresetIds(presetIds, DEFAULT_DATE_RANGE_PRESET_IDS)),\n\t\t[presetIds, presetOptions]\n\t);\n\tconst controlledValue = value ?? null;\n\tconst matchedPresetId = useMemo(\n\t\t() => resolveDateRangePresetIdByRange(controlledValue, resolvedReferenceDate, resolvedPresetOptions),\n\t\t[controlledValue, resolvedPresetOptions, resolvedReferenceDate]\n\t);\n\tconst selectedPresetId = presetId ?? matchedPresetId ?? undefined;\n\tconst lastPresetSignatureRef = useRef<string>(\"\");\n\n\t/**\n\t * Сообщает наружу только реальное изменение `presetId`.\n\t */\n\tconst emitPresetIdChange = useCallback(\n\t\t(nextPresetId: DateRangePresetOption[\"id\"] | null) => {\n\t\t\tif (!onPresetIdChange) return;\n\n\t\t\tconst nextSignature = getPresetSignature(nextPresetId);\n\t\t\tif (nextSignature === lastPresetSignatureRef.current) return;\n\n\t\t\tlastPresetSignatureRef.current = nextSignature;\n\t\t\tonPresetIdChange(nextPresetId);\n\t\t},\n\t\t[onPresetIdChange]\n\t);\n\n\t/**\n\t * Обрабатывает выбор пресета и переводит его в диапазон дат.\n\t */\n\tconst handlePresetChange = (nextPresetId: DateRangePresetOption[\"id\"] | undefined) => {\n\t\tconst nextPayload = resolveDateRangePresetPayload(nextPresetId, resolvedReferenceDate, resolvedPresetOptions);\n\t\tif (!nextPayload) {\n\t\t\temitPresetIdChange(null);\n\t\t\treturn;\n\t\t}\n\n\t\temitPresetIdChange(nextPayload.id);\n\t\tonChange(nextPayload.range);\n\t};\n\n\t/**\n\t * Обрабатывает ручное изменение диапазона и подбирает подходящий пресет.\n\t */\n\tconst handleRangeChange = (nextRange: NullableDateRange | null) => {\n\t\tonChange(nextRange);\n\t\temitPresetIdChange(resolveDateRangePresetIdByRange(nextRange, resolvedReferenceDate, resolvedPresetOptions));\n\t};\n\n\treturn (\n\t\t<FlexContainer gap=\"sm\" align=\"end\">\n\t\t\t<DateRangePresetSelect\n\t\t\t\tsize=\"md\"\n\t\t\t\tlabel={presetLabel}\n\t\t\t\tdescription={presetDescription}\n\t\t\t\tplaceholder={presetPlaceholder}\n\t\t\t\tdisabled={presetDisabled ?? rangeDateInputProps.disabled}\n\t\t\t\tvalue={selectedPresetId}\n\t\t\t\tonChange={handlePresetChange}\n\t\t\t\toptions={resolvedPresetOptions}\n\t\t\t\treferenceDate={resolvedReferenceDate}\n\t\t\t/>\n\n\t\t\t<RangeDateInput {...rangeDateInputProps} size=\"md\" value={controlledValue} onChange={handleRangeChange} />\n\t\t</FlexContainer>\n\t);\n}\n"],"mappings":";;;;;;AA+BA,SAAS,EAAmB,GAAsD;CACjF,OAAO,KAAY;AACpB;AAKA,SAAgB,EAAqB,EACpC,UACA,aACA,aACA,qBACA,kBACA,cACA,kBACA,gBACA,sBACA,uBAAoB,6BACpB,mBACA,GAAG,KAC0B;CAC7B,IAAM,CAAC,KAAwB,wBAAe,IAAI,KAAK,CAAC,GAClD,IAAwB,KAAiB,GACzC,IAAwB,QACvB,KAAiB,EAAmC,EAA4B,GAAW,CAA6B,CAAC,GAC/H,CAAC,GAAW,CAAa,CAC1B,GACM,IAAkB,KAAS,MAC3B,IAAkB,QACjB,EAAgC,GAAiB,GAAuB,CAAqB,GACnG;EAAC;EAAiB;EAAuB;CAAqB,CAC/D,GACM,IAAmB,KAAY,KAAmB,KAAA,GAClD,IAAyB,EAAe,EAAE,GAK1C,IAAqB,GACzB,MAAqD;EACrD,IAAI,CAAC,GAAkB;EAEvB,IAAM,IAAgB,EAAmB,CAAY;EACjD,MAAkB,EAAuB,YAE7C,EAAuB,UAAU,GACjC,EAAiB,CAAY;CAC9B,GACA,CAAC,CAAgB,CAClB,GAKM,KAAsB,MAA0D;EACrF,IAAM,IAAc,EAA8B,GAAc,GAAuB,CAAqB;EAC5G,IAAI,CAAC,GAAa;GACjB,EAAmB,IAAI;GACvB;EACD;EAGA,AADA,EAAmB,EAAY,EAAE,GACjC,EAAS,EAAY,KAAK;CAC3B,GAKM,KAAqB,MAAwC;EAElE,AADA,EAAS,CAAS,GAClB,EAAmB,EAAgC,GAAW,GAAuB,CAAqB,CAAC;CAC5G;CAEA,OACC,kBAAC,GAAD;EAAe,KAAI;EAAK,OAAM;YAA9B,CACC,kBAAC,GAAD;GACC,MAAK;GACL,OAAO;GACP,aAAa;GACb,aAAa;GACb,UAAU,KAAkB,EAAoB;GAChD,OAAO;GACP,UAAU;GACV,SAAS;GACT,eAAe;EACf,CAAA,GAED,kBAAC,GAAD;GAAgB,GAAI;GAAqB,MAAK;GAAK,OAAO;GAAiB,UAAU;EAAoB,CAAA,CAC3F;;AAEjB"}
1
+ {"version":3,"file":"PresetRangeDateInput-B_8jsilZ.js","names":[],"sources":["../../src/preset-range-date-input/ui/PresetRangeDateInput.tsx"],"sourcesContent":["import { useCallback, useMemo, useRef, useState, type ReactNode } from \"react\";\n\nimport { NullableDateRange } from \"@ryuzaki13/react-foundation-lib/formatters\";\n\nimport { RangeDateInput, type DateRangeInputProps } from \"../../date-input\";\nimport {\n\tDateRangePresetOption,\n\tDateRangePresetSelect,\n\tDEFAULT_DATE_RANGE_PRESET_IDS,\n\tnormalizeDateRangePresetIds,\n\tresolveDateRangePresetIdByRange,\n\tresolveDateRangePresetOptionsByIds,\n\tresolveDateRangePresetPayload\n} from \"../../date-range-preset-select\";\nimport { FlexContainer } from \"../../flex\";\n\nexport interface PresetRangeDateInputProps extends Omit<DateRangeInputProps, \"selectsRange\"> {\n\tpresetId?: DateRangePresetOption[\"id\"] | null;\n\tonPresetIdChange?: (presetId: DateRangePresetOption[\"id\"] | null) => void;\n\treferenceDate?: Date;\n\tpresetIds?: readonly DateRangePresetOption[\"id\"][];\n\tpresetOptions?: readonly DateRangePresetOption[];\n\tpresetLabel?: ReactNode;\n\tpresetDescription?: string;\n\tpresetPlaceholder?: string;\n\tpresetDisabled?: boolean;\n}\n\n/**\n * Строит сигнатуру пресета для защиты от повторной синхронизации.\n */\nfunction getPresetSignature(presetId: DateRangePresetOption[\"id\"] | null): string {\n\treturn presetId ?? \"__empty__\";\n}\n\n/**\n * Составной компонент выбора диапазона дат через пресет или ручной ввод.\n */\nexport function PresetRangeDateInput({\n\tvalue,\n\tonChange,\n\tpresetId,\n\tonPresetIdChange,\n\treferenceDate,\n\tpresetIds,\n\tpresetOptions,\n\tpresetLabel,\n\tpresetDescription,\n\tpresetPlaceholder = \"Выберите пресет диапазона\",\n\tpresetDisabled,\n\t...rangeDateInputProps\n}: PresetRangeDateInputProps) {\n\tconst [defaultReferenceDate] = useState(() => new Date());\n\tconst resolvedReferenceDate = referenceDate ?? defaultReferenceDate;\n\tconst resolvedPresetOptions = useMemo(\n\t\t() => presetOptions ?? resolveDateRangePresetOptionsByIds(normalizeDateRangePresetIds(presetIds, DEFAULT_DATE_RANGE_PRESET_IDS)),\n\t\t[presetIds, presetOptions]\n\t);\n\tconst controlledValue = value ?? null;\n\tconst matchedPresetId = useMemo(\n\t\t() => resolveDateRangePresetIdByRange(controlledValue, resolvedReferenceDate, resolvedPresetOptions),\n\t\t[controlledValue, resolvedPresetOptions, resolvedReferenceDate]\n\t);\n\tconst selectedPresetId = presetId ?? matchedPresetId ?? undefined;\n\tconst lastPresetSignatureRef = useRef<string>(\"\");\n\n\t/**\n\t * Сообщает наружу только реальное изменение `presetId`.\n\t */\n\tconst emitPresetIdChange = useCallback(\n\t\t(nextPresetId: DateRangePresetOption[\"id\"] | null) => {\n\t\t\tif (!onPresetIdChange) return;\n\n\t\t\tconst nextSignature = getPresetSignature(nextPresetId);\n\t\t\tif (nextSignature === lastPresetSignatureRef.current) return;\n\n\t\t\tlastPresetSignatureRef.current = nextSignature;\n\t\t\tonPresetIdChange(nextPresetId);\n\t\t},\n\t\t[onPresetIdChange]\n\t);\n\n\t/**\n\t * Обрабатывает выбор пресета и переводит его в диапазон дат.\n\t */\n\tconst handlePresetChange = (nextPresetId: DateRangePresetOption[\"id\"] | undefined) => {\n\t\tconst nextPayload = resolveDateRangePresetPayload(nextPresetId, resolvedReferenceDate, resolvedPresetOptions);\n\t\tif (!nextPayload) {\n\t\t\temitPresetIdChange(null);\n\t\t\treturn;\n\t\t}\n\n\t\temitPresetIdChange(nextPayload.id);\n\t\tonChange(nextPayload.range);\n\t};\n\n\t/**\n\t * Обрабатывает ручное изменение диапазона и подбирает подходящий пресет.\n\t */\n\tconst handleRangeChange = (nextRange: NullableDateRange | null) => {\n\t\tonChange(nextRange);\n\t\temitPresetIdChange(resolveDateRangePresetIdByRange(nextRange, resolvedReferenceDate, resolvedPresetOptions));\n\t};\n\n\treturn (\n\t\t<FlexContainer gap=\"sm\" align=\"end\">\n\t\t\t<DateRangePresetSelect\n\t\t\t\tsize=\"md\"\n\t\t\t\tlabel={presetLabel}\n\t\t\t\tdescription={presetDescription}\n\t\t\t\tplaceholder={presetPlaceholder}\n\t\t\t\tdisabled={presetDisabled ?? rangeDateInputProps.disabled}\n\t\t\t\tvalue={selectedPresetId}\n\t\t\t\tonChange={handlePresetChange}\n\t\t\t\toptions={resolvedPresetOptions}\n\t\t\t\treferenceDate={resolvedReferenceDate}\n\t\t\t/>\n\n\t\t\t<RangeDateInput {...rangeDateInputProps} size=\"md\" value={controlledValue} onChange={handleRangeChange} />\n\t\t</FlexContainer>\n\t);\n}\n"],"mappings":";;;;;;AA+BA,SAAS,EAAmB,GAAsD;CACjF,OAAO,KAAY;AACpB;AAKA,SAAgB,EAAqB,EACpC,UACA,aACA,aACA,qBACA,kBACA,cACA,kBACA,gBACA,sBACA,uBAAoB,6BACpB,mBACA,GAAG,KAC0B;CAC7B,IAAM,CAAC,KAAwB,wBAAe,IAAI,KAAK,CAAC,GAClD,IAAwB,KAAiB,GACzC,IAAwB,QACvB,KAAiB,EAAmC,EAA4B,GAAW,CAA6B,CAAC,GAC/H,CAAC,GAAW,CAAa,CAC1B,GACM,IAAkB,KAAS,MAC3B,IAAkB,QACjB,EAAgC,GAAiB,GAAuB,CAAqB,GACnG;EAAC;EAAiB;EAAuB;CAAqB,CAC/D,GACM,IAAmB,KAAY,KAAmB,KAAA,GAClD,IAAyB,EAAe,EAAE,GAK1C,IAAqB,GACzB,MAAqD;EACrD,IAAI,CAAC,GAAkB;EAEvB,IAAM,IAAgB,EAAmB,CAAY;EACjD,MAAkB,EAAuB,YAE7C,EAAuB,UAAU,GACjC,EAAiB,CAAY;CAC9B,GACA,CAAC,CAAgB,CAClB,GAKM,KAAsB,MAA0D;EACrF,IAAM,IAAc,EAA8B,GAAc,GAAuB,CAAqB;EAC5G,IAAI,CAAC,GAAa;GACjB,EAAmB,IAAI;GACvB;EACD;EAGA,AADA,EAAmB,EAAY,EAAE,GACjC,EAAS,EAAY,KAAK;CAC3B,GAKM,KAAqB,MAAwC;EAElE,AADA,EAAS,CAAS,GAClB,EAAmB,EAAgC,GAAW,GAAuB,CAAqB,CAAC;CAC5G;CAEA,OACC,kBAAC,GAAD;EAAe,KAAI;EAAK,OAAM;YAA9B,CACC,kBAAC,GAAD;GACC,MAAK;GACL,OAAO;GACP,aAAa;GACb,aAAa;GACb,UAAU,KAAkB,EAAoB;GAChD,OAAO;GACP,UAAU;GACV,SAAS;GACT,eAAe;EACf,CAAA,GAED,kBAAC,GAAD;GAAgB,GAAI;GAAqB,MAAK;GAAK,OAAO;GAAiB,UAAU;EAAoB,CAAA,CAC3F;;AAEjB"}
@@ -1,18 +1,18 @@
1
1
  import { t as e } from "./ui.module-BisoTevy.js";
2
2
  import { n as t } from "./uiClasses-BNjBunnY.js";
3
3
  import { t as n } from "./CheckBox.module-D0Ze9qh3.js";
4
- import { CircleIcon as r } from "lucide-react";
5
- import { cn as i } from "@ryuzaki13/react-foundation-lib/utils";
4
+ import { cn as r } from "@ryuzaki13/react-foundation-lib/utils";
5
+ import { CircleIcon as i } from "lucide-react";
6
6
  import { jsx as a, jsxs as o } from "react/jsx-runtime";
7
7
  import { useId as s } from "react";
8
8
  var c = { radioInput: "gu8UMB" }, l = ({ label: l, description: u, placeholder: d, disabled: f, size: p, className: m, onChange: h, value: g, id: _, tone: v = "neutral", ...y }) => {
9
9
  let b = s(), x = _ ?? b, S = u ? `${x}-description` : void 0, C = l ?? d, w = g ?? !1;
10
10
  return /* @__PURE__ */ o("div", {
11
- className: i(e.uiElement, p && e.uiSizable, p && e[p], f && e.disabled, m),
11
+ className: r(e.uiElement, p && e.uiSizable, p && e[p], f && e.disabled, m),
12
12
  children: [/* @__PURE__ */ o("div", {
13
13
  className: n.row,
14
14
  children: [/* @__PURE__ */ o("div", {
15
- className: i(n.wrapper, t(v)),
15
+ className: r(n.wrapper, t(v)),
16
16
  children: [/* @__PURE__ */ a("input", {
17
17
  ...y,
18
18
  id: x,
@@ -23,12 +23,12 @@ var c = { radioInput: "gu8UMB" }, l = ({ label: l, description: u, placeholder:
23
23
  "aria-disabled": f,
24
24
  "aria-checked": w,
25
25
  "aria-describedby": S,
26
- className: i(e.uiSelectionControl, n.input, c.radioInput),
26
+ className: r(e.uiSelectionControl, n.input, c.radioInput),
27
27
  onChange: () => h?.(!w)
28
28
  }), /* @__PURE__ */ a("div", {
29
- className: i(e.uiSelectionIcon, n.icon),
29
+ className: r(e.uiSelectionIcon, n.icon),
30
30
  "aria-hidden": "true",
31
- children: /* @__PURE__ */ a(r, {})
31
+ children: /* @__PURE__ */ a(i, {})
32
32
  })]
33
33
  }), C && /* @__PURE__ */ a("label", {
34
34
  htmlFor: x,
@@ -45,4 +45,4 @@ var c = { radioInput: "gu8UMB" }, l = ({ label: l, description: u, placeholder:
45
45
  //#endregion
46
46
  export { l as t };
47
47
 
48
- //# sourceMappingURL=RadioButton-DJp31HFR.js.map
48
+ //# sourceMappingURL=RadioButton-D5vPW4Yr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RadioButton-D5vPW4Yr.js","names":[],"sources":["../../src/radio-button/RadioButton.module.scss","../../src/radio-button/RadioButton.tsx"],"sourcesContent":[".radioInput {\n\tborder-radius: 50%;\n}\n","import React, { useId } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { CircleIcon } from \"lucide-react\";\n\nimport baseStyles from \"../check-box/CheckBox.module.scss\";\nimport uiStyles from \"../ui.module.scss\";\nimport { getUiToneClassName } from \"../uiClasses\";\n\nimport styles from \"./RadioButton.module.scss\";\n\nimport type { UiBaseProps, UiTone } from \"../types\";\n\nexport interface RadioButtonProps\n\textends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\" | \"checked\" | \"value\" | \"onChange\" | \"type\">, UiBaseProps<boolean> {\n\ttone?: UiTone;\n}\n\n/**\n * Компонент радиокнопки для выбора одного варианта.\n * Поддерживает tone + appearance и использует общие selection utility-классы из ui.module.scss.\n */\nexport const RadioButton: React.FC<RadioButtonProps> = ({\n\tlabel,\n\tdescription,\n\tplaceholder,\n\tdisabled,\n\tsize,\n\tclassName,\n\tonChange,\n\tvalue,\n\tid: externalId,\n\ttone = \"neutral\",\n\t...props\n}) => {\n\tconst autoId = useId();\n\tconst id = externalId ?? autoId;\n\tconst descriptionId = description ? `${id}-description` : undefined;\n\tconst text = label ?? placeholder;\n\tconst checked = value ?? false;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\tuiStyles.uiElement,\n\t\t\t\tsize && uiStyles.uiSizable,\n\t\t\t\tsize && uiStyles[size],\n\t\t\t\tdisabled && uiStyles.disabled,\n\t\t\t\tclassName\n\t\t\t)}>\n\t\t\t<div className={baseStyles.row}>\n\t\t\t\t<div className={cn(baseStyles.wrapper, getUiToneClassName(tone))}>\n\t\t\t\t\t<input\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t\tid={id}\n\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\trole=\"radio\"\n\t\t\t\t\t\tchecked={checked}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\taria-disabled={disabled}\n\t\t\t\t\t\taria-checked={checked}\n\t\t\t\t\t\taria-describedby={descriptionId}\n\t\t\t\t\t\tclassName={cn(uiStyles.uiSelectionControl, baseStyles.input, styles.radioInput)}\n\t\t\t\t\t\tonChange={() => onChange?.(!checked)}\n\t\t\t\t\t/>\n\t\t\t\t\t<div className={cn(uiStyles.uiSelectionIcon, baseStyles.icon)} aria-hidden=\"true\">\n\t\t\t\t\t\t<CircleIcon />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t{text && (\n\t\t\t\t\t<label htmlFor={id} className={uiStyles.uiLabel}>\n\t\t\t\t\t\t{text}\n\t\t\t\t\t</label>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t{description && (\n\t\t\t\t<p id={descriptionId} className={uiStyles.uiDescription}>\n\t\t\t\t\t{description}\n\t\t\t\t</p>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n"],"mappings":";;;;;;;kCCsBa,KAA2C,EACvD,UACA,gBACA,gBACA,aACA,SACA,cACA,aACA,UACA,IAAI,GACJ,UAAO,WACP,GAAG,QACE;CACL,IAAM,IAAS,EAAM,GACf,IAAK,KAAc,GACnB,IAAgB,IAAc,GAAG,EAAG,gBAAgB,KAAA,GACpD,IAAO,KAAS,GAChB,IAAU,KAAS;CAEzB,OACC,kBAAC,OAAD;EACC,WAAW,EACV,EAAS,WACT,KAAQ,EAAS,WACjB,KAAQ,EAAS,IACjB,KAAY,EAAS,UACrB,CACD;YAPD,CAQC,kBAAC,OAAD;GAAK,WAAW,EAAW;aAA3B,CACC,kBAAC,OAAD;IAAK,WAAW,EAAG,EAAW,SAAS,EAAmB,CAAI,CAAC;cAA/D,CACC,kBAAC,SAAD;KACC,GAAI;KACA;KACJ,MAAK;KACL,MAAK;KACI;KACC;KACV,iBAAe;KACf,gBAAc;KACd,oBAAkB;KAClB,WAAW,EAAG,EAAS,oBAAoB,EAAW,OAAO,EAAO,UAAU;KAC9E,gBAAgB,IAAW,CAAC,CAAO;IACnC,CAAA,GACD,kBAAC,OAAD;KAAK,WAAW,EAAG,EAAS,iBAAiB,EAAW,IAAI;KAAG,eAAY;eAC1E,kBAAC,GAAD,CAAa,CAAA;IACT,CAAA,CACD;OACJ,KACA,kBAAC,SAAD;IAAO,SAAS;IAAI,WAAW,EAAS;cACtC;GACK,CAAA,CAEJ;MACJ,KACA,kBAAC,KAAD;GAAG,IAAI;GAAe,WAAW,EAAS;aACxC;EACC,CAAA,CAEA;;AAEP"}
@@ -1,7 +1,7 @@
1
1
  import { t as e } from "./ui.module-BisoTevy.js";
2
- import { a as t, c as n, d as r, f as i, i as a, l as o, o as s, r as c, t as l, u } from "./picker-Cj4RnJh6.js";
3
- import { CheckIcon as d, XIcon as ee } from "lucide-react";
4
- import { cn as f } from "@ryuzaki13/react-foundation-lib/utils";
2
+ import { a as t, c as n, d as r, f as i, i as a, l as o, o as s, r as c, t as l, u } from "./picker-gIUs0nE_.js";
3
+ import { cn as d } from "@ryuzaki13/react-foundation-lib/utils";
4
+ import { CheckIcon as ee, XIcon as f } from "lucide-react";
5
5
  import { Fragment as p, jsx as m, jsxs as h } from "react/jsx-runtime";
6
6
  import { useRef as te, useState as ne } from "react";
7
7
  //#region src/select/lib/getOptionSearchText.ts
@@ -85,7 +85,7 @@ function v({ label: g, description: v, disabled: y, placeholder: b, size: ie, op
85
85
  "aria-controls": L ? s : void 0,
86
86
  "aria-autocomplete": A ? "list" : "none",
87
87
  "aria-activedescendant": L ? K(s) : void 0,
88
- inputClassName: f(Q && _.inputWithOverlay, ce, "textOverflow"),
88
+ inputClassName: d(Q && _.inputWithOverlay, ce, "textOverflow"),
89
89
  overlay: Q ? /* @__PURE__ */ m("div", {
90
90
  className: _.valueOverlay,
91
91
  children: Y
@@ -107,7 +107,7 @@ function v({ label: g, description: v, disabled: y, placeholder: b, size: ie, op
107
107
  e.preventDefault(), e.stopPropagation(), Pe();
108
108
  },
109
109
  "aria-label": "Очистить выбор",
110
- children: /* @__PURE__ */ m(ee, {})
110
+ children: /* @__PURE__ */ m(f, {})
111
111
  }) : null
112
112
  }),
113
113
  onChange: (e) => {
@@ -135,10 +135,10 @@ function v({ label: g, description: v, disabled: y, placeholder: b, size: ie, op
135
135
  setFloating: xe,
136
136
  getFloatingProps: ye,
137
137
  onKeyDown: Oe,
138
- className: f(e.uiPopupOptions, le),
138
+ className: d(e.uiPopupOptions, le),
139
139
  header: he,
140
140
  children: /* @__PURE__ */ m("div", {
141
- className: f(ue, "h100 scrollable"),
141
+ className: d(ue, "h100 scrollable"),
142
142
  children: q ? W.map((t, n) => {
143
143
  let r = w(t), i = B !== void 0 && r === B, a = n === ge, o = D?.(t) ?? !1, c = {
144
144
  active: a,
@@ -152,10 +152,10 @@ function v({ label: g, description: v, disabled: y, placeholder: b, size: ie, op
152
152
  "aria-selected": i,
153
153
  "aria-disabled": o || void 0,
154
154
  "aria-label": ae?.(t),
155
- className: f(e.uiPopupOption, o && e.disabled, a && e.uiPopupOptionActive, i && e.selected, oe?.(t, c)),
155
+ className: d(e.uiPopupOption, o && e.disabled, a && e.uiPopupOptionActive, i && e.selected, oe?.(t, c)),
156
156
  onClick: () => Te(t),
157
157
  children: O ? O(t, c) : /* @__PURE__ */ h(p, { children: [
158
- m(i ? d : "span", { className: e.uiPopupOptionIcon }),
158
+ m(i ? ee : "span", { className: e.uiPopupOptionIcon }),
159
159
  /* @__PURE__ */ m("div", {
160
160
  className: e.uiOptionText,
161
161
  children: T(t)
@@ -179,4 +179,4 @@ function v({ label: g, description: v, disabled: y, placeholder: b, size: ie, op
179
179
  //#endregion
180
180
  export { g as n, v as t };
181
181
 
182
- //# sourceMappingURL=Select-B7k_8_Lf.js.map
182
+ //# sourceMappingURL=Select-CoAYWNOn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select-CoAYWNOn.js","names":[],"sources":["../../src/select/lib/getOptionSearchText.ts","../../src/select/Select.module.scss","../../src/select/Select.tsx"],"sourcesContent":["import { ReactNode } from \"react\";\n\nimport { InputType } from \"@ryuzaki13/react-foundation-lib/types\";\n\nimport { extractPickerTextContent } from \"../../picker\";\n\nexport function getOptionSearchText<T extends InputType>({\n\toption,\n\tgetOptionLabel,\n\tgetOptionCode\n}: {\n\toption: T;\n\tgetOptionLabel: (option: T) => ReactNode;\n\tgetOptionCode?: (option: T) => ReactNode;\n}) {\n\treturn [extractPickerTextContent(getOptionLabel(option)), extractPickerTextContent(getOptionCode?.(option))]\n\t\t.filter((part): part is string => Boolean(part))\n\t\t.join(\" \")\n\t\t.toLowerCase();\n}\n\n/** Находит selected option по value и возвращает fallback, если значение еще не нормализовано. */\nexport function resolveSelectedOption<TOption extends { value: string }>(\n\toptions: readonly TOption[],\n\tvalue: string,\n\tfallback: TOption\n): TOption {\n\treturn options.find((option) => option.value === value) ?? fallback;\n}\n",".inputWithOverlay {\n\tcolor: transparent;\n\tcaret-color: transparent;\n}\n\n.valueOverlay {\n\tposition: absolute;\n\tinset: 0 calc(var(--control-height) + var(--space-xs)) 0 var(--space-md);\n\tdisplay: flex;\n\talign-items: center;\n\tpointer-events: none;\n\toverflow: hidden;\n}\n","import { ReactNode, useRef, useState } from \"react\";\n\nimport { Placement } from \"@floating-ui/react\";\nimport { InputType } from \"@ryuzaki13/react-foundation-lib/types\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { CheckIcon, XIcon } from \"lucide-react\";\n\nimport {\n\textractPickerTextContent,\n\tPickerField,\n\tPickerPopup,\n\tPickerStatus,\n\tPickerTriggerActions,\n\tPickerTriggerInput,\n\tusePickerDefaultFilter,\n\tusePickerFloatingListbox,\n\tusePickerQuery,\n\tusePickerTriggerController\n} from \"../picker\";\nimport { UiBaseProps } from \"../types\";\nimport uiStyles from \"../ui.module.scss\";\n\nimport { getOptionSearchText } from \"./lib\";\nimport styles from \"./Select.module.scss\";\n\nexport type SelectOptionKey = string | number;\n\nexport type SelectOptionState = {\n\tactive: boolean;\n\tselected: boolean;\n\tdisabled: boolean;\n};\n\nexport interface SelectProps<TOption extends InputType, TChangeValue extends TOption | undefined = TOption> extends UiBaseProps<\n\tTChangeValue,\n\tTOption | undefined\n> {\n\toptions: readonly TOption[];\n\tgetOptionKey: (option: TOption) => SelectOptionKey;\n\tgetOptionLabel: (option: TOption) => ReactNode;\n\tgetOptionCode?: (option: TOption) => ReactNode;\n\tgetOptionDisabled?: (option: TOption) => boolean;\n\tgetOptionAriaLabel?: (option: TOption) => string;\n\tgetOptionClassName?: (option: TOption, state: SelectOptionState) => string | undefined;\n\trenderOption?: (option: TOption, state: SelectOptionState) => ReactNode;\n\trenderValue?: (option: TOption) => ReactNode;\n\tclassName?: string;\n\tbuttonClassName?: string;\n\toptionsClassName?: string;\n\toptionsContentClassName?: string;\n\tsearchable?: boolean;\n\tquery?: string;\n\tdefaultQuery?: string;\n\tonQuery?: (value: string) => void;\n\tdefaultFilter?: boolean;\n\trenderPopupHeader?: ReactNode;\n\temptyState?: ReactNode;\n\tloadingState?: ReactNode;\n\terrorState?: ReactNode;\n\tplacement?: Placement;\n\tclearable?: boolean;\n}\n\n/**\n * Выпадающий список выбора значения из набора опций. Подходит для форм, фильтров и простых справочников.\n */\nexport function Select<TOption extends InputType, TChangeValue extends TOption | undefined = TOption>({\n\tlabel,\n\tdescription,\n\tdisabled,\n\tplaceholder,\n\tsize,\n\toptions,\n\tvalue,\n\tonChange,\n\tgetOptionKey,\n\tgetOptionLabel,\n\tgetOptionCode,\n\tgetOptionDisabled,\n\tgetOptionAriaLabel,\n\tgetOptionClassName,\n\trenderOption,\n\trenderValue,\n\tclassName,\n\tbuttonClassName,\n\toptionsClassName,\n\toptionsContentClassName,\n\tsearchable = false,\n\tdefaultFilter = true,\n\tquery,\n\tdefaultQuery,\n\tonQuery,\n\trenderPopupHeader,\n\temptyState,\n\tloadingState,\n\terrorState,\n\tplacement = \"bottom-start\",\n\tclearable = false\n}: SelectProps<TOption, TChangeValue>) {\n\tconst inputRef = useRef<HTMLInputElement | null>(null);\n\tconst [open, setOpen] = useState(false);\n\tconst triggerMode = searchable ? \"search-single\" : \"display\";\n\tconst selectedKey = value === undefined ? undefined : getOptionKey(value);\n\tconst selectedOption =\n\t\tselectedKey === undefined ? undefined : (options.find((option) => getOptionKey(option) === selectedKey) ?? value);\n\tconst { query: currentQuery, setQuery } = usePickerQuery({\n\t\topen,\n\t\tquery,\n\t\tdefaultQuery,\n\t\tonQuery,\n\t\ttriggerMode\n\t});\n\tconst visibleOptions = usePickerDefaultFilter({\n\t\toptions,\n\t\tquery: currentQuery,\n\t\tenabled: searchable && defaultFilter,\n\t\tgetSearchText: (option) =>\n\t\t\tgetOptionSearchText({\n\t\t\t\toption,\n\t\t\t\tgetOptionLabel,\n\t\t\t\tgetOptionCode\n\t\t\t})\n\t});\n\tconst selectedIndex = selectedKey === undefined ? -1 : visibleOptions.findIndex((option) => getOptionKey(option) === selectedKey);\n\tconst {\n\t\tactiveIndex,\n\t\tcontext,\n\t\tfloatingStyles,\n\t\tgetFloatingProps,\n\t\tsetReference,\n\t\tsetFloating,\n\t\tsetOptionRef,\n\t\tclose,\n\t\topenList,\n\t\ttoggleOpen,\n\t\tselectOption,\n\t\tselectActiveOption,\n\t\thandleReferenceKeyDown,\n\t\thandleFloatingKeyDown,\n\t\tgetOptionId,\n\t\tgetActiveOptionId\n\t} = usePickerFloatingListbox({\n\t\toptions: visibleOptions,\n\t\tselectedIndex,\n\t\topen,\n\t\tonOpenChange: setOpen,\n\t\tgetOptionDisabled,\n\t\tonSelect: (option) => onChange(option as TChangeValue),\n\t\tdisabled,\n\t\tplacement,\n\t\ttriggerMode\n\t});\n\n\tconst hasOptions = visibleOptions.length > 0;\n\tconst labelContent = selectedOption !== undefined ? getOptionLabel(selectedOption) : undefined;\n\tconst displayContent = selectedOption !== undefined ? (renderValue ? renderValue(selectedOption) : labelContent) : undefined;\n\tconst labelText = extractPickerTextContent(labelContent);\n\tconst codeText = selectedOption !== undefined ? extractPickerTextContent(getOptionCode?.(selectedOption)) : undefined;\n\tconst displayText =\n\t\textractPickerTextContent(displayContent) ?? labelText ?? codeText ?? (selectedKey !== undefined ? String(selectedKey) : \"\");\n\tconst showSearchValue = searchable && (open || currentQuery.length > 0);\n\tconst inputValue = showSearchValue ? currentQuery : selectedOption !== undefined ? displayText : \"\";\n\tconst showDisplayOverlay =\n\t\tselectedOption !== undefined &&\n\t\tdisplayContent !== undefined &&\n\t\textractPickerTextContent(displayContent) === undefined &&\n\t\t!showSearchValue;\n\tconst triggerController = usePickerTriggerController({\n\t\tmode: triggerMode,\n\t\topen,\n\t\tcurrentQuery,\n\t\thasDisplayValue: selectedOption !== undefined,\n\t\tinputRef,\n\t\tsetQuery,\n\t\topenList,\n\t\tclose,\n\t\ttoggleOpen\n\t});\n\tconst setInputNode = (node: HTMLInputElement | null) => {\n\t\tinputRef.current = node;\n\t};\n\tconst handleClear = () => {\n\t\tif (clearable) {\n\t\t\tonChange(undefined as TChangeValue);\n\t\t}\n\n\t\tsetQuery(\"\");\n\t\tclose();\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\tplaceholder={placeholder}\n\t\t\tsize={size}\n\t\t\tclassName={className}>\n\t\t\t{({ controlId, labelId, describedBy }) => {\n\t\t\t\tconst listId = `${controlId}-listbox`;\n\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<PickerTriggerInput\n\t\t\t\t\t\t\tref={setInputNode}\n\t\t\t\t\t\t\trootRef={setReference}\n\t\t\t\t\t\t\tid={controlId}\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\treadOnly={!searchable}\n\t\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\t\tvalue={inputValue}\n\t\t\t\t\t\t\tplaceholder={selectedOption === undefined || showSearchValue ? placeholder : undefined}\n\t\t\t\t\t\t\taria-labelledby={labelId}\n\t\t\t\t\t\t\taria-describedby={describedBy}\n\t\t\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t\t\t\taria-expanded={open}\n\t\t\t\t\t\t\taria-controls={open ? listId : undefined}\n\t\t\t\t\t\t\taria-autocomplete={searchable ? \"list\" : \"none\"}\n\t\t\t\t\t\t\taria-activedescendant={open ? getActiveOptionId(listId) : undefined}\n\t\t\t\t\t\t\tinputClassName={cn(showDisplayOverlay && styles.inputWithOverlay, buttonClassName, \"textOverflow\")}\n\t\t\t\t\t\t\toverlay={showDisplayOverlay ? <div className={styles.valueOverlay}>{displayContent}</div> : undefined}\n\t\t\t\t\t\t\tendAdornment={\n\t\t\t\t\t\t\t\t<PickerTriggerActions\n\t\t\t\t\t\t\t\t\topen={open}\n\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\tonToggleMouseDown={triggerController.handleToggleMouseDown}\n\t\t\t\t\t\t\t\t\tonToggleClick={triggerController.handleToggleClick}>\n\t\t\t\t\t\t\t\t\t{clearable && selectedOption !== undefined && !disabled ? (\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tclassName={uiStyles.uiClearButton}\n\t\t\t\t\t\t\t\t\t\t\tdata-ui=\"select-clear-button\"\n\t\t\t\t\t\t\t\t\t\t\tdata-action=\"clear-select\"\n\t\t\t\t\t\t\t\t\t\t\tonMouseDown={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\thandleClear();\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Очистить выбор\">\n\t\t\t\t\t\t\t\t\t\t\t<XIcon />\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t</PickerTriggerActions>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonChange={(event) => {\n\t\t\t\t\t\t\t\tif (!searchable) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ttriggerController.handleTriggerInputChange(event.target.value);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonClick={triggerController.handleTriggerClick}\n\t\t\t\t\t\t\tonFocus={(event) => {\n\t\t\t\t\t\t\t\ttriggerController.handleTriggerFocus(event.currentTarget);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonKeyDown={(event) => {\n\t\t\t\t\t\t\t\thandleReferenceKeyDown(event);\n\n\t\t\t\t\t\t\t\tif (event.defaultPrevented) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ttriggerController.handleTriggerKeyDown({\n\t\t\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t\t\tonActivateWhenOpen: selectActiveOption,\n\t\t\t\t\t\t\t\t\tenableSpaceActivation: !searchable\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<PickerPopup\n\t\t\t\t\t\t\topen={open}\n\t\t\t\t\t\t\tcontext={context}\n\t\t\t\t\t\t\tfloatingStyles={floatingStyles}\n\t\t\t\t\t\t\tlistId={listId}\n\t\t\t\t\t\t\tlabelId={labelId}\n\t\t\t\t\t\t\tdescriptionId={describedBy}\n\t\t\t\t\t\t\tactiveOptionId={hasOptions ? getActiveOptionId(listId) : undefined}\n\t\t\t\t\t\t\tsetFloating={setFloating}\n\t\t\t\t\t\t\tgetFloatingProps={getFloatingProps}\n\t\t\t\t\t\t\tonKeyDown={handleFloatingKeyDown}\n\t\t\t\t\t\t\tclassName={cn(uiStyles.uiPopupOptions, optionsClassName)}\n\t\t\t\t\t\t\theader={renderPopupHeader}>\n\t\t\t\t\t\t\t<div className={cn(optionsContentClassName, \"h100 scrollable\")}>\n\t\t\t\t\t\t\t\t{hasOptions ? (\n\t\t\t\t\t\t\t\t\tvisibleOptions.map((option, index) => {\n\t\t\t\t\t\t\t\t\t\tconst optionKey = getOptionKey(option);\n\t\t\t\t\t\t\t\t\t\tconst selected = selectedKey !== undefined && optionKey === selectedKey;\n\t\t\t\t\t\t\t\t\t\tconst active = index === activeIndex;\n\t\t\t\t\t\t\t\t\t\tconst optionDisabled = getOptionDisabled?.(option) ?? false;\n\t\t\t\t\t\t\t\t\t\tconst optionState = { active, selected, disabled: optionDisabled };\n\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tkey={optionKey}\n\t\t\t\t\t\t\t\t\t\t\t\tid={getOptionId(listId, index)}\n\t\t\t\t\t\t\t\t\t\t\t\tref={(node) => setOptionRef(index, node)}\n\t\t\t\t\t\t\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\t\t\t\t\t\t\taria-selected={selected}\n\t\t\t\t\t\t\t\t\t\t\t\taria-disabled={optionDisabled || undefined}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label={getOptionAriaLabel?.(option)}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\tuiStyles.uiPopupOption,\n\t\t\t\t\t\t\t\t\t\t\t\t\toptionDisabled && uiStyles.disabled,\n\t\t\t\t\t\t\t\t\t\t\t\t\tactive && uiStyles.uiPopupOptionActive,\n\t\t\t\t\t\t\t\t\t\t\t\t\tselected && uiStyles.selected,\n\t\t\t\t\t\t\t\t\t\t\t\t\tgetOptionClassName?.(option, optionState)\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => selectOption(option)}>\n\t\t\t\t\t\t\t\t\t\t\t\t{renderOption ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\trenderOption(option, optionState)\n\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{selected ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<CheckIcon className={uiStyles.uiPopupOptionIcon} />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className={uiStyles.uiPopupOptionIcon} />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className={uiStyles.uiOptionText}>{getOptionLabel(option)}</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{getOptionCode && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className={uiStyles.uiOptionCode}>{getOptionCode(option)}</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t</div>\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) : (\n\t\t\t\t\t\t\t\t\t<PickerStatus emptyState={emptyState} loadingState={loadingState} errorState={errorState} />\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</PickerPopup>\n\t\t\t\t\t</>\n\t\t\t\t);\n\t\t\t}}\n\t\t</PickerField>\n\t);\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { t as e } from "./Select-B7k_8_Lf.js";
1
+ import { t as e } from "./Select-CoAYWNOn.js";
2
2
  import { jsx as t } from "react/jsx-runtime";
3
3
  //#region src/select/SerializableSelect.tsx
4
4
  function n(e, t) {
@@ -30,4 +30,4 @@ function i({ label: i, description: a, disabled: o, placeholder: s, size: c, opt
30
30
  //#endregion
31
31
  export { i as t };
32
32
 
33
- //# sourceMappingURL=SerializableSelect-53uNCqdE.js.map
33
+ //# sourceMappingURL=SerializableSelect-awBOWKTj.js.map