@ryuzaki13/react-foundation-ui 1.0.18 → 1.0.19

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 (188) hide show
  1. package/dist/chunks/{select-CFbZS7fx.js → select-CniUoHU_.js} +115 -77
  2. package/dist/chunks/select-CniUoHU_.js.map +1 -0
  3. package/dist/preset-select/index.js +1 -1
  4. package/dist/select/Select.d.ts +3 -2
  5. package/dist/select/Select.d.ts.map +1 -1
  6. package/dist/select/SelectOptionGroup.d.ts +11 -0
  7. package/dist/select/SelectOptionGroup.d.ts.map +1 -0
  8. package/dist/select/index.js +1 -1
  9. package/dist/select/lib/createSelectOptionSections.d.ts +14 -0
  10. package/dist/select/lib/createSelectOptionSections.d.ts.map +1 -0
  11. package/dist/select/lib/getOptionSearchText.d.ts +3 -1
  12. package/dist/select/lib/getOptionSearchText.d.ts.map +1 -1
  13. package/dist/state-select/index.js +1 -1
  14. package/package.json +1 -1
  15. package/storybook-static/assets/{Badge-DWmXvSEt.js → Badge-D_WmNn4y.js} +1 -1
  16. package/storybook-static/assets/{Badge.stories-DrUkR5Kt.js → Badge.stories-U00ZjiZG.js} +1 -1
  17. package/storybook-static/assets/{Button-gqIyGTVm.js → Button-CSAUZh28.js} +1 -1
  18. package/storybook-static/assets/{Button-CBzJWtGT.js → Button-D6lDbX3u.js} +1 -1
  19. package/storybook-static/assets/{Button.stories-DarSDitm.js → Button.stories-BoqlEzDC.js} +1 -1
  20. package/storybook-static/assets/{CheckBox-CClp47K7.js → CheckBox-D5RDuslx.js} +1 -1
  21. package/storybook-static/assets/{CheckBox-Be5y5Yaf.js → CheckBox-O0Riv4G0.js} +1 -1
  22. package/storybook-static/assets/{CheckBox.stories-D-XTwN4w.js → CheckBox.stories-C5vwe09O.js} +1 -1
  23. package/storybook-static/assets/{Color-KMSTOMOX-Pv032miJ.js → Color-KMSTOMOX-BPWB1F58.js} +1 -1
  24. package/storybook-static/assets/{ContextMenu-BkVTXUpG.js → ContextMenu-C7VPqNQh.js} +1 -1
  25. package/storybook-static/assets/{ContextMenu.stories-DtvzPaIF.js → ContextMenu.stories-DMJS0eVK.js} +1 -1
  26. package/storybook-static/assets/{DateInput-6pvp1eRu.js → DateInput-BTsGvu-I.js} +1 -1
  27. package/storybook-static/assets/{DateInput-CbQwETpT.js → DateInput-D2Y798Qp.js} +1 -1
  28. package/storybook-static/assets/{DateInput.stories-DRcN3ybd.js → DateInput.stories-UVnlKxGm.js} +1 -1
  29. package/storybook-static/assets/{DateRangePresetSelect-CAB32ti_.js → DateRangePresetSelect-BrHpjOGn.js} +1 -1
  30. package/storybook-static/assets/{DateRangePresetSelect-D6q7Kef5.js → DateRangePresetSelect-CgneHL9m.js} +1 -1
  31. package/storybook-static/assets/{DateRangePresetSelect.stories-DN6TkVtw.js → DateRangePresetSelect.stories-ax9vHEAe.js} +1 -1
  32. package/storybook-static/assets/{Detail-CphbEg1M.js → Detail-DsUqYKBL.js} +1 -1
  33. package/storybook-static/assets/{Detail.stories-Dc5Rx4u4.js → Detail.stories-BfLSCMUs.js} +1 -1
  34. package/storybook-static/assets/{Dialog-ndurUKqc.js → Dialog-BH4bk-0Z.js} +1 -1
  35. package/storybook-static/assets/{Dialog.stories-BvLARKjm.js → Dialog.stories-BnVA_xxd.js} +1 -1
  36. package/storybook-static/assets/{Disclosure-2VsNuiNF.js → Disclosure-Y5wcCyNo.js} +1 -1
  37. package/storybook-static/assets/{Disclosure.stories-eGJxzZmh.js → Disclosure.stories-Cj-6MIBl.js} +1 -1
  38. package/storybook-static/assets/{DocsRenderer-JROSPFPF-CpVFRA5Y.js → DocsRenderer-JROSPFPF-DBs6q2X7.js} +2 -2
  39. package/storybook-static/assets/{DropZone-B8a2PM2e.js → DropZone-CoHuwX-b.js} +1 -1
  40. package/storybook-static/assets/{DropZone.stories-DoBeAZdH.js → DropZone.stories-CRo1gU6s.js} +1 -1
  41. package/storybook-static/assets/{DropdownMenu-Dyi86Exa.js → DropdownMenu-B4k8SvXE.js} +1 -1
  42. package/storybook-static/assets/{ExpandableActionPanel.stories-BDyx4-Wf.js → ExpandableActionPanel.stories-BzCwb5XY.js} +1 -1
  43. package/storybook-static/assets/{Flex-B71m7CmC.js → Flex-DAlPnoyb.js} +1 -1
  44. package/storybook-static/assets/{Flex-DycwM4Fy.js → Flex-_SHSjraN.js} +1 -1
  45. package/storybook-static/assets/{Flex.stories-DNNoTDfs.js → Flex.stories-CoFPyXJs.js} +1 -1
  46. package/storybook-static/assets/{Grid-DzNawx4O.js → Grid-DcybsfOE.js} +1 -1
  47. package/storybook-static/assets/{Grid-CCVTg58v.js → Grid-Iuqk9TTe.js} +1 -1
  48. package/storybook-static/assets/{Grid.stories-D62x4nnt.js → Grid.stories-Bk96A8KC.js} +1 -1
  49. package/storybook-static/assets/{ImageCropper.stories-BkBPtN0b.js → ImageCropper.stories-ByrSBnja.js} +1 -1
  50. package/storybook-static/assets/{ImageRenderer-BNrfKcoR.js → ImageRenderer-gf_q-ONP.js} +1 -1
  51. package/storybook-static/assets/{ImageRenderer.stories-DQpqGfZ5.js → ImageRenderer.stories-BLYBSARQ.js} +1 -1
  52. package/storybook-static/assets/{ImageView.stories-DzCNwypO.js → ImageView.stories-titYp-MM.js} +1 -1
  53. package/storybook-static/assets/{Input-D7RhI3F_.js → Input-BUCw6LuQ.js} +1 -1
  54. package/storybook-static/assets/{Input-DEvutRWc.js → Input-DQAmwpKH.js} +1 -1
  55. package/storybook-static/assets/{Input.stories-CQtNzJ2d.js → Input.stories-BxQePDp5.js} +1 -1
  56. package/storybook-static/assets/{InputDateTime-2xC784cj.js → InputDateTime-Ddecrzyl.js} +1 -1
  57. package/storybook-static/assets/{InputDateTime.stories-DtYUywAW.js → InputDateTime.stories-DureL-Mi.js} +1 -1
  58. package/storybook-static/assets/{InputFile-LuB6ELgM.js → InputFile-CMaET8Mf.js} +1 -1
  59. package/storybook-static/assets/{InputFile.stories-psIGnnDp.js → InputFile.stories-DjcYO4oK.js} +1 -1
  60. package/storybook-static/assets/{InputFiles-C71LfhQ3.js → InputFiles-CJP_43yk.js} +1 -1
  61. package/storybook-static/assets/{InputFiles-DRacqAIw.js → InputFiles-D4QBkXR-.js} +1 -1
  62. package/storybook-static/assets/{InputFiles.stories-BAO31sqC.js → InputFiles.stories-D59JNRfr.js} +1 -1
  63. package/storybook-static/assets/{InputImage-vZyjm8oI.js → InputImage-CD6r23HA.js} +1 -1
  64. package/storybook-static/assets/{InputImage.stories-B9rN6Rxs.js → InputImage.stories-MSQPxiUk.js} +1 -1
  65. package/storybook-static/assets/{LayoutPicker-CxDe5Gw8.js → LayoutPicker-bfpPHWZQ.js} +1 -1
  66. package/storybook-static/assets/{LayoutPicker.stories-D8cCxXXP.js → LayoutPicker.stories-C4mw3v4r.js} +1 -1
  67. package/storybook-static/assets/{Listbox-5iar6ma8.js → Listbox-B48HH949.js} +1 -1
  68. package/storybook-static/assets/{Listbox.stories-COp6WiMB.js → Listbox.stories-P6m6Xtp9.js} +1 -1
  69. package/storybook-static/assets/{Modal-zV3K6vvv.js → Modal-60wYxR1C.js} +1 -1
  70. package/storybook-static/assets/{Modal.stories-CYmv-FaJ.js → Modal.stories-CW75CTPA.js} +1 -1
  71. package/storybook-static/assets/{MultiSelect-UizFi3d9.js → MultiSelect-1FTahVkX.js} +1 -1
  72. package/storybook-static/assets/{MultiSelect-D41OCY5x.js → MultiSelect-DbkLpHKL.js} +1 -1
  73. package/storybook-static/assets/{MultiSelect.stories-u0AlSlZp.js → MultiSelect.stories-DtNSoSgt.js} +1 -1
  74. package/storybook-static/assets/{NotificationsHost-hQChUMce.js → NotificationsHost-Cons6grm.js} +1 -1
  75. package/storybook-static/assets/{NotificationsHost.stories-D6g7WJjS.js → NotificationsHost.stories-BOwlyZjS.js} +1 -1
  76. package/storybook-static/assets/{ODataMultiSelect-CiamQM6C.js → ODataMultiSelect-DfnQQURe.js} +1 -1
  77. package/storybook-static/assets/{ODataMultiSelect.stories-5eDEemGQ.js → ODataMultiSelect.stories-DXFgJSI2.js} +1 -1
  78. package/storybook-static/assets/{ODataSelect-BiWVXqPq.js → ODataSelect-BT-65yUm.js} +1 -1
  79. package/storybook-static/assets/{ODataSelect-CLx5JSMi.js → ODataSelect-YSvYEbvr.js} +1 -1
  80. package/storybook-static/assets/{ODataSelect.stories-GwKgtC-N.js → ODataSelect.stories-CvGMCPLU.js} +1 -1
  81. package/storybook-static/assets/{ODataTreeMultiSelect-CzMZie_w.js → ODataTreeMultiSelect-C2Md-SrL.js} +1 -1
  82. package/storybook-static/assets/{ODataTreeMultiSelect.stories-Da6MlEkV.js → ODataTreeMultiSelect.stories-C8ApR1Sv.js} +1 -1
  83. package/storybook-static/assets/{ODataTreeSelect-CK7MxVU8.js → ODataTreeSelect-x8sFI-u2.js} +1 -1
  84. package/storybook-static/assets/{ODataTreeSelect.stories-D8CwVfe-.js → ODataTreeSelect.stories-CPriRr5I.js} +1 -1
  85. package/storybook-static/assets/{PeriodSelect-DqP0nweD.js → PeriodSelect-BZJyFSdN.js} +1 -1
  86. package/storybook-static/assets/{PeriodSelect.stories-BJXRGemD.js → PeriodSelect.stories-CtX4Ibbs.js} +1 -1
  87. package/storybook-static/assets/{Popover-D6qr-zdh.js → Popover-DaeR4BV_.js} +1 -1
  88. package/storybook-static/assets/{Popover.stories-wr4nVVeK.js → Popover.stories-C63N21sy.js} +1 -1
  89. package/storybook-static/assets/{PresetRangeDateInput-CX-JBXWg.js → PresetRangeDateInput-aaXvHNQh.js} +1 -1
  90. package/storybook-static/assets/{PresetRangeDateInput.stories-CiMPYtxH.js → PresetRangeDateInput.stories-BM34C5xi.js} +1 -1
  91. package/storybook-static/assets/{RadioButton-CAE1c9uv.js → RadioButton-mvrQ8VSg.js} +1 -1
  92. package/storybook-static/assets/{RadioButton.stories-BysL-Bxz.js → RadioButton.stories-ROTAgef0.js} +1 -1
  93. package/storybook-static/assets/{RadioGroup-DxUA0aFk.js → RadioGroup-BcUi-6jJ.js} +1 -1
  94. package/storybook-static/assets/{RadioGroup-B1xxoy7T.js → RadioGroup-D8X2vCGo.js} +1 -1
  95. package/storybook-static/assets/{RadioGroup.stories-Dhx6ULhk.js → RadioGroup.stories-D_XdSCvW.js} +1 -1
  96. package/storybook-static/assets/Select-B3mAjoSF.js +12 -0
  97. package/storybook-static/assets/Select-DshPuDqw.js +60 -0
  98. package/storybook-static/assets/Select.stories-B0CUlClA.js +46 -0
  99. package/storybook-static/assets/{SelectOptionContent-DXQBspsR.js → SelectOptionContent-Bp6u5oGr.js} +1 -1
  100. package/storybook-static/assets/{SerializableSelect-b8rZxZBe.js → SerializableSelect-BaC_djq_.js} +1 -1
  101. package/storybook-static/assets/{SerializableSelect-Byb9ssGD.js → SerializableSelect-DxFWB3Yw.js} +1 -1
  102. package/storybook-static/assets/{SerializableSelect.stories-D4pNvhz2.js → SerializableSelect.stories-CxBEpJLW.js} +1 -1
  103. package/storybook-static/assets/{SingleDateTimeInput-Dx8iPd-Q.js → SingleDateTimeInput-BSH4emHu.js} +1 -1
  104. package/storybook-static/assets/{SingleDateTimeInput.stories-B2fchXdY.js → SingleDateTimeInput.stories-cYnhzTMl.js} +1 -1
  105. package/storybook-static/assets/{Slider-CFQMYiQq.js → Slider-DkjesSkp.js} +1 -1
  106. package/storybook-static/assets/{Slider.stories-EcLVbioI.js → Slider.stories-DLUrasL5.js} +1 -1
  107. package/storybook-static/assets/{SliderInput-CGhUFTU0.js → SliderInput-CmPkAcqZ.js} +1 -1
  108. package/storybook-static/assets/{SliderInput.stories-D_WSCFgt.js → SliderInput.stories-Fv5urNKI.js} +1 -1
  109. package/storybook-static/assets/{Sortable-BsOnR1uN.js → Sortable-BSnDSyV0.js} +1 -1
  110. package/storybook-static/assets/{Sortable.stories-CPDoci0O.js → Sortable.stories-BE3qPo0z.js} +1 -1
  111. package/storybook-static/assets/{Splitter-CYyV_8Pq.js → Splitter-AiSG0IlN.js} +1 -1
  112. package/storybook-static/assets/{Splitter.stories-DiVFmplz.js → Splitter.stories-CULtDRbv.js} +1 -1
  113. package/storybook-static/assets/{StateSelect-C9MDIBO7.js → StateSelect-BOK8WQ0m.js} +1 -1
  114. package/storybook-static/assets/{StateSelect.stories-snID0UC6.js → StateSelect.stories-9EwRNcC9.js} +1 -1
  115. package/storybook-static/assets/{Switch-BBFxT8_x.js → Switch-6vYGq9ue.js} +1 -1
  116. package/storybook-static/assets/{Switch.stories-BC53wJqW.js → Switch.stories-Ce72-4pP.js} +1 -1
  117. package/storybook-static/assets/{Table-BnfSUBvR.js → Table-p190sNTC.js} +1 -1
  118. package/storybook-static/assets/{Table.stories-2RTRdgpI.js → Table.stories-CmvShH-p.js} +1 -1
  119. package/storybook-static/assets/{Tabs-dXKmtWm1.js → Tabs-wkUiX8Um.js} +1 -1
  120. package/storybook-static/assets/{Tabs.stories-CEp6vYMd.js → Tabs.stories-Byc-KGY4.js} +1 -1
  121. package/storybook-static/assets/{Textarea-C9LTwBnP.js → Textarea-B7q_RUGj.js} +1 -1
  122. package/storybook-static/assets/{Textarea.stories-DuNG4Fxg.js → Textarea.stories-CKjpOMUz.js} +1 -1
  123. package/storybook-static/assets/{TimePanel-nrNpgIYg.js → TimePanel-CnKzYllv.js} +1 -1
  124. package/storybook-static/assets/{TimePanel.stories-CymqeBQ6.js → TimePanel.stories-B46ia-wr.js} +1 -1
  125. package/storybook-static/assets/{Toggle-BrZsGFyh.js → Toggle-5uy0fJIB.js} +1 -1
  126. package/storybook-static/assets/{Toggle.stories-CnRLuZ1B.js → Toggle.stories-DqX_UZ8G.js} +1 -1
  127. package/storybook-static/assets/{TreeMultiSelect-Dp-JxGpF.js → TreeMultiSelect-DHrLU10w.js} +1 -1
  128. package/storybook-static/assets/{TreeMultiSelect-BBris-Xx.js → TreeMultiSelect-DL_QLoGE.js} +1 -1
  129. package/storybook-static/assets/{TreeMultiSelect.stories-Dn_39X3q.js → TreeMultiSelect.stories-B-1UUmQx.js} +1 -1
  130. package/storybook-static/assets/{TreePickerBase-DIQdSZhJ.js → TreePickerBase-G2hDDb9o.js} +1 -1
  131. package/storybook-static/assets/{TreeSelect-CCksSJfk.js → TreeSelect-CgrwO1Mj.js} +1 -1
  132. package/storybook-static/assets/{TreeSelect-ltX2lBAg.js → TreeSelect-D1vY-eaq.js} +1 -1
  133. package/storybook-static/assets/{TreeSelect.stories-BPEYOY-m.js → TreeSelect.stories-Dyaq1OjM.js} +1 -1
  134. package/storybook-static/assets/{TreeTable-Dc-Y0m3q.js → TreeTable-DHvrer9V.js} +1 -1
  135. package/storybook-static/assets/{TreeTable.stories-C2r_nF0e.js → TreeTable.stories-DPDIRJL3.js} +1 -1
  136. package/storybook-static/assets/{WithTooltip-7X4HQR7L-DK8uQ8Cn.js → WithTooltip-7X4HQR7L-DaLQMgLn.js} +1 -1
  137. package/storybook-static/assets/{base-table-Bx2k5lGS.js → base-table-BsLxwUBH.js} +1 -1
  138. package/storybook-static/assets/{blocks-C7Q8GMMo.js → blocks-DsR25Fmw.js} +6 -6
  139. package/storybook-static/assets/{button-wXbhbl78.js → button-aRaBdQCW.js} +1 -1
  140. package/storybook-static/assets/{check-box-C8FJKjhC.js → check-box-DSDs6bO5.js} +1 -1
  141. package/storybook-static/assets/{chunk-3LY4VQVK-uSlGTJmP.js → chunk-3LY4VQVK-M6BQinGY.js} +1 -1
  142. package/storybook-static/assets/{chunk-LITCR56V-FSgu6Y64.js → chunk-LITCR56V-CSkoC43Y.js} +1 -1
  143. package/storybook-static/assets/{contextMenu-DduWXaL3.js → contextMenu-DchOLs7K.js} +1 -1
  144. package/storybook-static/assets/{error-uQ2DxuVX.js → error-CK7Ijx9I.js} +1 -1
  145. package/storybook-static/assets/{flex-DkVQD9fQ.js → flex-DjjdXv7K.js} +1 -1
  146. package/storybook-static/assets/{floating-ui.react-jQBFyt86.js → floating-ui.react-D6FeyKn7.js} +1 -1
  147. package/storybook-static/assets/formatter-L2YTDE3Q-gZmLdNYr.js +1 -0
  148. package/storybook-static/assets/{formatters-BloK5ams.js → formatters-CGNSDKn9.js} +1 -1
  149. package/storybook-static/assets/grid-x1BgS-2p.js +1 -0
  150. package/storybook-static/assets/{hooks-DFj5VG2H.js → hooks-DSj02t4H.js} +1 -1
  151. package/storybook-static/assets/{iframe-BdBCyVHz.js → iframe-DLkjf7A9.js} +3 -3
  152. package/storybook-static/assets/{input-ddHVF6FV.js → input-TIwx4iZp.js} +1 -1
  153. package/storybook-static/assets/{lucide-react-CkksFLP-.js → lucide-react-p2Eti-TY.js} +1 -1
  154. package/storybook-static/assets/{mdx-react-shim-DeqTfg7V.js → mdx-react-shim-R_VK5jlr.js} +1 -1
  155. package/storybook-static/assets/{media-DrShSQO0.js → media-bpDsa4CN.js} +1 -1
  156. package/storybook-static/assets/{misc-CFwTrVHp.js → misc-DSA_vfBB.js} +1 -1
  157. package/storybook-static/assets/{notifications-gnKM3wlP.js → notifications-3_qt4j1E.js} +1 -1
  158. package/storybook-static/assets/{odata-C4pua5YA.js → odata-Cdpm4W6w.js} +1 -1
  159. package/storybook-static/assets/odata-service-CK4udXRv.js +1 -0
  160. package/storybook-static/assets/{odataStoryFixtures-CfzrHuke.js → odataStoryFixtures-DpHrb-x0.js} +1 -1
  161. package/storybook-static/assets/{picker-CO2rQx7C.js → picker-DiKffa5D.js} +1 -1
  162. package/storybook-static/assets/{popover-Dr7yuAT9.js → popover-CQelsqcy.js} +1 -1
  163. package/storybook-static/assets/{preset-select-CkU9ddp8.js → preset-select-DIzVw_fy.js} +1 -1
  164. package/storybook-static/assets/{react-18-Cxgo9w_S.js → react-18-D0MFaVsj.js} +1 -1
  165. package/storybook-static/assets/{react-CP3pw4PB.js → react-CyKnGS7r.js} +1 -1
  166. package/storybook-static/assets/{react-dom-BrHiwR18.js → react-dom-DafrFoS3.js} +1 -1
  167. package/storybook-static/assets/select-3BhbB83-.js +1 -0
  168. package/storybook-static/assets/{slider-Cen5Jymh.js → slider-B1Jh8YgP.js} +1 -1
  169. package/storybook-static/assets/{sortable-Dme5pcO0.js → sortable-Dw0f2WU0.js} +1 -1
  170. package/storybook-static/assets/{syntaxhighlighter-RTCFPKCB-B8bc6fVI.js → syntaxhighlighter-RTCFPKCB-3G4G11vY.js} +1 -1
  171. package/storybook-static/assets/{text-DrGSUN96.js → text-j7jiqOeo.js} +1 -1
  172. package/storybook-static/assets/{theming-0pJkCK9X.js → theming-DobiTi6v.js} +1 -1
  173. package/storybook-static/assets/ui-awvruYe3.js +1 -0
  174. package/storybook-static/assets/{useODataSelectBase-DwrfQAdM.js → useODataSelectBase-CnyHkhKg.js} +1 -1
  175. package/storybook-static/assets/{useODataTreeData-DNpvGMOY.js → useODataTreeData-DQ9adG05.js} +1 -1
  176. package/storybook-static/assets/{utils-CYGhZ88S.js → utils-5U72nYIV.js} +1 -1
  177. package/storybook-static/iframe.html +1 -1
  178. package/storybook-static/index.json +1 -1
  179. package/storybook-static/project.json +1 -1
  180. package/dist/chunks/select-CFbZS7fx.js.map +0 -1
  181. package/storybook-static/assets/Select-C8dnQPHr.js +0 -57
  182. package/storybook-static/assets/Select-DTyFJMMc.js +0 -9
  183. package/storybook-static/assets/Select.stories-CvSTPVuR.js +0 -37
  184. package/storybook-static/assets/formatter-L2YTDE3Q-CK2g4idL.js +0 -1
  185. package/storybook-static/assets/grid-CZAlVfwE.js +0 -1
  186. package/storybook-static/assets/odata-service-YWH6p1Lv.js +0 -1
  187. package/storybook-static/assets/select-CXrVs_FQ.js +0 -1
  188. package/storybook-static/assets/ui-CxfY9QDr.js +0 -1
@@ -3,13 +3,17 @@ import { t as n } from "./ui.module-BisoTevy.js";
3
3
  import { c as r } from "./input-CZLUUggm.js";
4
4
  import { a as i, c as a, d as o, f as s, i as c, l, o as u, r as d, t as f, u as p } from "./picker-beNX-cW9.js";
5
5
  import { n as m } from "./useODataSelectBase-BxAvhDww.js";
6
- import { useMemo as h, useRef as g, useState as ee } from "react";
6
+ import { Fragment as h, useMemo as g, useRef as ee, useState as te } from "react";
7
7
  import { cn as _ } from "@ryuzaki13/react-foundation-lib/utils";
8
- import { CheckIcon as te, XIcon as ne } from "lucide-react";
8
+ import { CheckIcon as ne, XIcon as re } from "lucide-react";
9
9
  import { Fragment as v, jsx as y, jsxs as b } from "react/jsx-runtime";
10
10
  //#region src/select/lib/getOptionSearchText.ts
11
- function re({ option: e, getOptionLabel: t, getOptionCode: n }) {
12
- return [u(t(e)), u(n?.(e))].filter((e) => !!e).join(" ").toLowerCase();
11
+ function ie({ option: e, getOptionLabel: t, getOptionCode: n, getOptionGroup: r }) {
12
+ return [
13
+ u(t(e)),
14
+ u(n?.(e)),
15
+ u(r?.(e)?.label)
16
+ ].filter((e) => !!e).join(" ").toLowerCase();
13
17
  }
14
18
  function x(e, t, n) {
15
19
  return e.find((e) => e.value === t) ?? n;
@@ -23,7 +27,7 @@ function S({ odata: e, segment: t, model: n, value: r, dependencies: i, onChange
23
27
  model: n,
24
28
  value: r ? [r] : [],
25
29
  dependencies: i
26
- }), s = o.selectedItems[0], c = h(() => s ? [s, ...o.filteredItems] : o.filteredItems, [o.filteredItems, s]), l = (e) => {
30
+ }), s = o.selectedItems[0], c = g(() => s ? [s, ...o.filteredItems] : o.filteredItems, [o.filteredItems, s]), l = (e) => {
27
31
  a(e?.[o.selectionKey]);
28
32
  };
29
33
  return {
@@ -33,6 +37,28 @@ function S({ odata: e, segment: t, model: n, value: r, dependencies: i, onChange
33
37
  handleChange: l
34
38
  };
35
39
  }
40
+ //#endregion
41
+ //#region src/select/lib/createSelectOptionSections.ts
42
+ function ae(e, t) {
43
+ let n = [];
44
+ return e.forEach((e, r) => {
45
+ let i = t?.(e), a = n.at(-1), o = a?.group?.key === i?.key;
46
+ if (a && o) {
47
+ a.items.push({
48
+ option: e,
49
+ index: r
50
+ });
51
+ return;
52
+ }
53
+ n.push({
54
+ group: i,
55
+ items: [{
56
+ option: e,
57
+ index: r
58
+ }]
59
+ });
60
+ }), n;
61
+ }
36
62
  var C = {
37
63
  inputWithOverlay: "aEEqH1",
38
64
  valueOverlay: "_4HQKa7"
@@ -40,77 +66,78 @@ var C = {
40
66
  //#endregion
41
67
  //#region src/select/Select.tsx
42
68
  function w(e) {
43
- let { label: t, description: r, disabled: m, placeholder: h, size: x, options: S, value: w, onChange: T, getOptionKey: E, getOptionLabel: D, getOptionCode: O, getOptionDisabled: k, getOptionAriaLabel: A, getOptionClassName: j, renderOption: M, renderValue: N, className: ie, buttonClassName: ae, optionsClassName: oe, optionsContentClassName: se, searchable: P = !1, defaultFilter: ce = !0, query: le, defaultQuery: ue, onQuery: de, renderPopupHeader: fe, emptyState: pe, loadingState: me, errorState: he, placement: ge = "bottom-start", clearable: F = !1 } = e, I = T, L = g(null), [R, _e] = ee(!1), z = P ? "search-single" : "display", B = w === void 0 ? void 0 : E(w), V = B === void 0 ? void 0 : S.find((e) => E(e) === B) ?? w, { query: H, setQuery: U } = d({
69
+ let { label: t, description: r, disabled: m, placeholder: g, size: x, options: S, value: w, onChange: T, getOptionKey: E, getOptionLabel: D, getOptionCode: O, getOptionDisabled: k, getOptionAriaLabel: oe, getOptionGroup: A, getOptionClassName: se, renderOption: j, renderValue: M, className: ce, buttonClassName: le, optionsClassName: ue, optionsContentClassName: de, searchable: N = !1, defaultFilter: fe = !0, query: pe, defaultQuery: me, onQuery: he, renderPopupHeader: ge, emptyState: _e, loadingState: ve, errorState: ye, placement: P = "bottom-start", clearable: F = !1 } = e, I = T, L = ee(null), [R, be] = te(!1), z = N ? "search-single" : "display", B = w === void 0 ? void 0 : E(w), V = B === void 0 ? void 0 : S.find((e) => E(e) === B) ?? w, { query: H, setQuery: U } = d({
44
70
  open: R,
45
- query: le,
46
- defaultQuery: ue,
47
- onQuery: de,
71
+ query: pe,
72
+ defaultQuery: me,
73
+ onQuery: he,
48
74
  triggerMode: z
49
75
  }), W = i({
50
76
  options: S,
51
77
  query: H,
52
- enabled: P && ce,
53
- getSearchText: (e) => re({
78
+ enabled: N && fe,
79
+ getSearchText: (e) => ie({
54
80
  option: e,
55
81
  getOptionLabel: D,
56
- getOptionCode: O
82
+ getOptionCode: O,
83
+ getOptionGroup: A
57
84
  })
58
- }), { activeIndex: ve, context: ye, floatingStyles: be, getFloatingProps: xe, setReference: Se, setFloating: Ce, setOptionRef: we, close: G, openList: Te, toggleOpen: Ee, selectOption: De, selectActiveOption: Oe, handleReferenceKeyDown: ke, handleFloatingKeyDown: Ae, getOptionId: je, getActiveOptionId: K } = c({
85
+ }), xe = ae(W, A), { activeIndex: Se, context: Ce, floatingStyles: we, getFloatingProps: Te, setReference: Ee, setFloating: De, setOptionRef: Oe, close: G, openList: ke, toggleOpen: Ae, selectOption: je, selectActiveOption: Me, handleReferenceKeyDown: Ne, handleFloatingKeyDown: Pe, getOptionId: K, getActiveOptionId: q } = c({
59
86
  options: W,
60
87
  selectedIndex: B === void 0 ? -1 : W.findIndex((e) => E(e) === B),
61
88
  open: R,
62
- onOpenChange: _e,
89
+ onOpenChange: be,
63
90
  getOptionDisabled: k,
64
91
  onSelect: I,
65
92
  disabled: m,
66
- placement: ge,
93
+ placement: P,
67
94
  triggerMode: z
68
- }), q = W.length > 0, J = V === void 0 ? void 0 : D(V), Y = V === void 0 ? void 0 : N ? N(V) : J, Me = u(J), Ne = V === void 0 ? void 0 : u(O?.(V)), X = u(Y) ?? Me ?? Ne ?? (B === void 0 ? "" : String(B)), Z = P && (R || H.length > 0), Pe = Z ? H : V === void 0 ? "" : X, Q = V !== void 0 && Y !== void 0 && u(Y) === void 0 && !Z, $ = f({
95
+ }), J = W.length > 0, Y = V === void 0 ? void 0 : D(V), X = V === void 0 ? void 0 : M ? M(V) : Y, Fe = u(Y), Ie = V === void 0 ? void 0 : u(O?.(V)), Le = u(X) ?? Fe ?? Ie ?? (B === void 0 ? "" : String(B)), Z = N && (R || H.length > 0), Re = Z ? H : V === void 0 ? "" : Le, Q = V !== void 0 && X !== void 0 && u(X) === void 0 && !Z, $ = f({
69
96
  mode: z,
70
97
  open: R,
71
98
  currentQuery: H,
72
99
  hasDisplayValue: V !== void 0,
73
100
  inputRef: L,
74
101
  setQuery: U,
75
- openList: Te,
102
+ openList: ke,
76
103
  close: G,
77
- toggleOpen: Ee
78
- }), Fe = (e) => {
104
+ toggleOpen: Ae
105
+ }), ze = (e) => {
79
106
  L.current = e;
80
- }, Ie = () => {
107
+ }, Be = () => {
81
108
  F && I(void 0), U(""), G();
82
109
  };
83
110
  return /* @__PURE__ */ y(s, {
84
111
  label: t,
85
112
  description: r,
86
113
  disabled: m,
87
- placeholder: h,
114
+ placeholder: g,
88
115
  size: x,
89
- className: ie,
116
+ className: ce,
90
117
  children: ({ controlId: e, labelId: t, describedBy: r }) => {
91
118
  let i = `${e}-listbox`;
92
119
  return /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ y(a, {
93
- ref: Fe,
94
- rootRef: Se,
120
+ ref: ze,
121
+ rootRef: Ee,
95
122
  id: e,
96
123
  type: "text",
97
124
  disabled: m,
98
- readOnly: !P,
125
+ readOnly: !N,
99
126
  autoComplete: "off",
100
127
  role: "combobox",
101
- value: Pe,
102
- placeholder: V === void 0 || Z ? h : void 0,
128
+ value: Re,
129
+ placeholder: V === void 0 || Z ? g : void 0,
103
130
  "aria-labelledby": t,
104
131
  "aria-describedby": r,
105
132
  "aria-haspopup": "listbox",
106
133
  "aria-expanded": R,
107
134
  "aria-controls": R ? i : void 0,
108
- "aria-autocomplete": P ? "list" : "none",
109
- "aria-activedescendant": R ? K(i) : void 0,
110
- inputClassName: _(Q && C.inputWithOverlay, ae, "textOverflow"),
135
+ "aria-autocomplete": N ? "list" : "none",
136
+ "aria-activedescendant": R ? q(i) : void 0,
137
+ inputClassName: _(Q && C.inputWithOverlay, le, "textOverflow"),
111
138
  overlay: Q ? /* @__PURE__ */ y("div", {
112
139
  className: C.valueOverlay,
113
- children: Y
140
+ children: X
114
141
  }) : void 0,
115
142
  endAdornment: /* @__PURE__ */ y(l, {
116
143
  open: R,
@@ -126,72 +153,83 @@ function w(e) {
126
153
  e.preventDefault(), e.stopPropagation();
127
154
  },
128
155
  onClick: (e) => {
129
- e.preventDefault(), e.stopPropagation(), Ie();
156
+ e.preventDefault(), e.stopPropagation(), Be();
130
157
  },
131
158
  "aria-label": "Очистить выбор",
132
- children: /* @__PURE__ */ y(ne, {})
159
+ children: /* @__PURE__ */ y(re, {})
133
160
  }) : null
134
161
  }),
135
162
  onChange: (e) => {
136
- P && $.handleTriggerInputChange(e.target.value);
163
+ N && $.handleTriggerInputChange(e.target.value);
137
164
  },
138
165
  onClick: $.handleTriggerClick,
139
166
  onFocus: (e) => {
140
167
  $.handleTriggerFocus(e.currentTarget);
141
168
  },
142
169
  onKeyDown: (e) => {
143
- ke(e), !e.defaultPrevented && $.handleTriggerKeyDown({
170
+ Ne(e), !e.defaultPrevented && $.handleTriggerKeyDown({
144
171
  event: e,
145
- onActivateWhenOpen: Oe,
146
- enableSpaceActivation: !P
172
+ onActivateWhenOpen: Me,
173
+ enableSpaceActivation: !N
147
174
  });
148
175
  }
149
176
  }), /* @__PURE__ */ y(o, {
150
177
  open: R,
151
- context: ye,
152
- floatingStyles: be,
178
+ context: Ce,
179
+ floatingStyles: we,
153
180
  listId: i,
154
181
  labelId: t,
155
182
  descriptionId: r,
156
- activeOptionId: q ? K(i) : void 0,
157
- setFloating: Ce,
158
- getFloatingProps: xe,
159
- onKeyDown: Ae,
160
- className: _(n.uiPopupOptions, oe),
161
- header: fe,
183
+ activeOptionId: J ? q(i) : void 0,
184
+ setFloating: De,
185
+ getFloatingProps: Te,
186
+ onKeyDown: Pe,
187
+ className: _(n.uiPopupOptions, ue),
188
+ header: ge,
162
189
  children: /* @__PURE__ */ y("div", {
163
- className: _(se, "h100 scrollable"),
164
- children: q ? W.map((e, t) => {
165
- let r = E(e), a = B !== void 0 && r === B, o = t === ve, s = k?.(e) ?? !1, c = {
166
- active: o,
167
- selected: a,
168
- disabled: s
169
- };
170
- return /* @__PURE__ */ y("div", {
171
- id: je(i, t),
172
- ref: (e) => we(t, e),
173
- role: "option",
174
- "aria-selected": a,
175
- "aria-disabled": s || void 0,
176
- "aria-label": A?.(e),
177
- className: _(n.uiPopupOption, s && n.disabled, o && n.uiPopupOptionActive, a && n.selected, j?.(e, c)),
178
- onClick: () => De(e),
179
- children: M ? M(e, c) : /* @__PURE__ */ b(v, { children: [
180
- y(a ? te : "span", { className: n.uiPopupOptionIcon }),
181
- /* @__PURE__ */ y("div", {
182
- className: n.uiOptionText,
183
- children: D(e)
184
- }),
185
- O && /* @__PURE__ */ y("div", {
186
- className: n.uiOptionCode,
187
- children: O(e)
188
- })
189
- ] })
190
- }, r);
190
+ className: _(de, "h100 scrollable"),
191
+ children: J ? xe.map((e, t) => {
192
+ let r = e.group ? `${i}-group-${t}` : void 0, a = e.items.map(({ option: e, index: t }) => {
193
+ let r = E(e), a = B !== void 0 && r === B, o = t === Se, s = k?.(e) ?? !1, c = {
194
+ active: o,
195
+ selected: a,
196
+ disabled: s
197
+ };
198
+ return /* @__PURE__ */ y("div", {
199
+ id: K(i, t),
200
+ ref: (e) => Oe(t, e),
201
+ role: "option",
202
+ "aria-selected": a,
203
+ "aria-disabled": s || void 0,
204
+ "aria-label": oe?.(e),
205
+ className: _(n.uiPopupOption, s && n.disabled, o && n.uiPopupOptionActive, a && n.selected, se?.(e, c)),
206
+ onClick: () => je(e),
207
+ children: j ? j(e, c) : /* @__PURE__ */ b(v, { children: [
208
+ y(a ? ne : "span", { className: n.uiPopupOptionIcon }),
209
+ /* @__PURE__ */ y("div", {
210
+ className: n.uiOptionText,
211
+ children: D(e)
212
+ }),
213
+ O && /* @__PURE__ */ y("div", {
214
+ className: n.uiOptionCode,
215
+ children: O(e)
216
+ })
217
+ ] })
218
+ }, r);
219
+ });
220
+ return e.group ? /* @__PURE__ */ b("div", {
221
+ role: "group",
222
+ "aria-labelledby": r,
223
+ children: [/* @__PURE__ */ y("div", {
224
+ id: r,
225
+ className: n.uiPopupGroupLabel,
226
+ children: e.group.label
227
+ }), a]
228
+ }, `group-${String(e.group.key)}-${t}`) : /* @__PURE__ */ y(h, { children: a }, `options-${t}`);
191
229
  }) : /* @__PURE__ */ y(p, {
192
- emptyState: pe,
193
- loadingState: me,
194
- errorState: he
230
+ emptyState: _e,
231
+ loadingState: ve,
232
+ errorState: ye
195
233
  })
196
234
  })
197
235
  })] });
@@ -281,4 +319,4 @@ function k({ label: e, description: t, disabled: n, placeholder: r, size: i, opt
281
319
  //#endregion
282
320
  export { x as i, E as n, w as r, k as t };
283
321
 
284
- //# sourceMappingURL=select-CFbZS7fx.js.map
322
+ //# sourceMappingURL=select-CniUoHU_.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-CniUoHU_.js","names":[],"sources":["../../src/select/lib/getOptionSearchText.ts","../../src/select/model/useODataSelect.ts","../../src/select/lib/createSelectOptionSections.ts","../../src/select/Select.module.scss","../../src/select/Select.tsx","../../src/select/ODataSelect.tsx","../../src/select/SerializableSelect.tsx"],"sourcesContent":["import { ReactNode } from \"react\";\n\nimport { InputType } from \"@ryuzaki13/react-foundation-lib/types\";\n\nimport { extractPickerTextContent } from \"../../picker\";\nimport { type SelectOptionGroup } from \"../SelectOptionGroup\";\n\nexport function getOptionSearchText<T extends InputType>({\n\toption,\n\tgetOptionLabel,\n\tgetOptionCode,\n\tgetOptionGroup\n}: {\n\toption: T;\n\tgetOptionLabel: (option: T) => ReactNode;\n\tgetOptionCode?: (option: T) => ReactNode;\n\tgetOptionGroup?: (option: T) => SelectOptionGroup | undefined;\n}) {\n\treturn [\n\t\textractPickerTextContent(getOptionLabel(option)),\n\t\textractPickerTextContent(getOptionCode?.(option)),\n\t\textractPickerTextContent(getOptionGroup?.(option)?.label)\n\t]\n\t\t.filter((part): part is string => Boolean(part))\n\t\t.join(\" \")\n\t\t.toLowerCase();\n}\n\n/** Находит selected option по value и возвращает fallback, если значение еще не нормализовано. */\nexport function resolveSelectedOption<TOption extends { value: string }>(\n\toptions: readonly TOption[],\n\tvalue: string,\n\tfallback: TOption\n): TOption {\n\treturn options.find((option) => option.value === value) ?? fallback;\n}\n","import { useMemo } from \"react\";\n\nimport { ODataCollectionModel, ODataSingleSelectProps } from \"@ryuzaki13/react-foundation-api/odata\";\nimport { CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata\";\n\nimport { useODataSelectBase } from \"./useODataSelectBase\";\n\ninterface UseODataSelectOptions extends Omit<ODataSingleSelectProps, \"model\"> {\n\tmodel: Required<ODataCollectionModel>;\n\tonChange: (value: string | undefined) => void;\n}\n\nexport function useODataSelect({ odata, segment, model, value, dependencies, onChange }: UseODataSelectOptions) {\n\tconst odataModel = useODataSelectBase({\n\t\todata,\n\t\tsegment,\n\t\tmodel,\n\t\tvalue: value ? [value] : [],\n\t\tdependencies\n\t});\n\n\tconst selectedItem = odataModel.selectedItems[0];\n\tconst options = useMemo(() => {\n\t\tif (!selectedItem) {\n\t\t\treturn odataModel.filteredItems;\n\t\t}\n\n\t\treturn [selectedItem, ...odataModel.filteredItems];\n\t}, [odataModel.filteredItems, selectedItem]);\n\n\tconst handleChange = (item: CollectionItem | undefined) => {\n\t\tonChange(item?.[odataModel.selectionKey]);\n\t};\n\n\treturn {\n\t\t...odataModel,\n\t\tselectedItem,\n\t\toptions,\n\t\thandleChange\n\t};\n}\n","import { type SelectOptionGroup } from \"../SelectOptionGroup\";\n\nexport type SelectOptionSectionItem<TOption> = {\n\treadonly option: TOption;\n\treadonly index: number;\n};\n\nexport type SelectOptionSection<TOption> = {\n\treadonly group: SelectOptionGroup | undefined;\n\treadonly items: readonly SelectOptionSectionItem<TOption>[];\n};\n\n/**\n * Собирает соседние опции с одинаковым group key в секции, сохраняя исходные индексы для клавиатурной навигации listbox.\n */\nexport function createSelectOptionSections<TOption>(\n\toptions: readonly TOption[],\n\tgetOptionGroup: ((option: TOption) => SelectOptionGroup | undefined) | undefined\n): readonly SelectOptionSection<TOption>[] {\n\tconst sections: Array<{ group: SelectOptionGroup | undefined; items: SelectOptionSectionItem<TOption>[] }> = [];\n\n\toptions.forEach((option, index) => {\n\t\tconst group = getOptionGroup?.(option);\n\t\tconst currentSection = sections.at(-1);\n\t\tconst belongsToCurrentSection = currentSection?.group?.key === group?.key;\n\n\t\tif (currentSection && belongsToCurrentSection) {\n\t\t\tcurrentSection.items.push({ option, index });\n\t\t\treturn;\n\t\t}\n\n\t\tsections.push({\n\t\t\tgroup,\n\t\t\titems: [{ option, index }]\n\t\t});\n\t});\n\n\treturn sections;\n}\n",".inputWithOverlay {\n\tcolor: transparent;\n\tcaret-color: transparent;\n}\n\n.valueOverlay {\n\tposition: absolute;\n\tinset: 0 calc(var(--control-height) + var(--space-xs)) 0 var(--space-md);\n\tdisplay: flex;\n\talign-items: center;\n\tpointer-events: none;\n\toverflow: hidden;\n}\n","import { Fragment, 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 { ChangeHandler, UiBaseProps } from \"../types\";\nimport uiStyles from \"../ui.module.scss\";\n\nimport { getOptionSearchText } from \"./lib\";\nimport { createSelectOptionSections } from \"./lib/createSelectOptionSections\";\nimport styles from \"./Select.module.scss\";\nimport { type SelectOptionGroup, type SelectOptionKey } from \"./SelectOptionGroup\";\n\nexport { type SelectOptionGroup, type SelectOptionKey } from \"./SelectOptionGroup\";\n\nexport type SelectOptionState = {\n\tactive: boolean;\n\tselected: boolean;\n\tdisabled: boolean;\n};\n\ntype SelectSharedProps<TOption extends InputType> = Omit<UiBaseProps<TOption, TOption | undefined>, \"onChange\"> & {\n\toptions: readonly TOption[];\n\tgetOptionKey: (option: TOption) => SelectOptionKey;\n\tgetOptionLabel: (option: TOption) => ReactNode;\n\tgetOptionCode?: (option: TOption) => ReactNode;\n\tgetOptionDisabled?: (option: TOption) => boolean;\n\tgetOptionAriaLabel?: (option: TOption) => string;\n\tgetOptionGroup?: (option: TOption) => SelectOptionGroup | undefined;\n\tgetOptionClassName?: (option: TOption, state: SelectOptionState) => string | undefined;\n\trenderOption?: (option: TOption, state: SelectOptionState) => ReactNode;\n\trenderValue?: (option: TOption) => ReactNode;\n\tclassName?: string;\n\tbuttonClassName?: string;\n\toptionsClassName?: string;\n\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};\n\ntype SelectChangeValue<TOption extends InputType, TClearable extends boolean | undefined> = true extends TClearable\n\t? TOption | undefined\n\t: TOption;\n\nexport type SelectProps<TOption extends InputType, TClearable extends boolean | undefined = false> = SelectSharedProps<TOption> & {\n\tclearable?: TClearable;\n\tonChange: ChangeHandler<SelectChangeValue<TOption, TClearable>>;\n};\n\n/**\n * Выпадающий список выбора значения из набора опций. Подходит для форм, фильтров и простых справочников.\n */\nexport function Select<TOption extends InputType, TClearable extends boolean | undefined = false>(props: SelectProps<TOption, TClearable>) {\n\tconst {\n\t\tlabel,\n\t\tdescription,\n\t\tdisabled,\n\t\tplaceholder,\n\t\tsize,\n\t\toptions,\n\t\tvalue,\n\t\tonChange,\n\t\tgetOptionKey,\n\t\tgetOptionLabel,\n\t\tgetOptionCode,\n\t\tgetOptionDisabled,\n\t\tgetOptionAriaLabel,\n\t\tgetOptionGroup,\n\t\tgetOptionClassName,\n\t\trenderOption,\n\t\trenderValue,\n\t\tclassName,\n\t\tbuttonClassName,\n\t\toptionsClassName,\n\t\toptionsContentClassName,\n\t\tsearchable = false,\n\t\tdefaultFilter = true,\n\t\tquery,\n\t\tdefaultQuery,\n\t\tonQuery,\n\t\trenderPopupHeader,\n\t\temptyState,\n\t\tloadingState,\n\t\terrorState,\n\t\tplacement = \"bottom-start\",\n\t\tclearable = false\n\t} = props;\n\tconst emitChange = onChange as ChangeHandler<TOption | undefined>;\n\n\tconst inputRef = useRef<HTMLInputElement | null>(null);\n\tconst [open, setOpen] = useState(false);\n\tconst triggerMode = searchable ? \"search-single\" : \"display\";\n\tconst selectedKey = value === undefined ? undefined : getOptionKey(value);\n\tconst selectedOption =\n\t\tselectedKey === undefined ? undefined : (options.find((option) => getOptionKey(option) === selectedKey) ?? value);\n\tconst { 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\tgetOptionGroup\n\t\t\t})\n\t});\n\tconst optionSections = createSelectOptionSections(visibleOptions, getOptionGroup);\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: emitChange,\n\t\tdisabled,\n\t\tplacement,\n\t\ttriggerMode\n\t});\n\n\tconst hasOptions = visibleOptions.length > 0;\n\tconst labelContent = selectedOption !== undefined ? getOptionLabel(selectedOption) : undefined;\n\tconst displayContent = selectedOption !== undefined ? (renderValue ? renderValue(selectedOption) : labelContent) : undefined;\n\tconst labelText = extractPickerTextContent(labelContent);\n\tconst codeText = selectedOption !== undefined ? extractPickerTextContent(getOptionCode?.(selectedOption)) : undefined;\n\tconst displayText =\n\t\textractPickerTextContent(displayContent) ?? labelText ?? codeText ?? (selectedKey !== undefined ? String(selectedKey) : \"\");\n\tconst showSearchValue = searchable && (open || currentQuery.length > 0);\n\tconst inputValue = showSearchValue ? currentQuery : selectedOption !== undefined ? displayText : \"\";\n\tconst showDisplayOverlay =\n\t\tselectedOption !== undefined &&\n\t\tdisplayContent !== undefined &&\n\t\textractPickerTextContent(displayContent) === undefined &&\n\t\t!showSearchValue;\n\tconst triggerController = usePickerTriggerController({\n\t\tmode: triggerMode,\n\t\topen,\n\t\tcurrentQuery,\n\t\thasDisplayValue: selectedOption !== undefined,\n\t\tinputRef,\n\t\tsetQuery,\n\t\topenList,\n\t\tclose,\n\t\ttoggleOpen\n\t});\n\tconst setInputNode = (node: HTMLInputElement | null) => {\n\t\tinputRef.current = node;\n\t};\n\tconst handleClear = () => {\n\t\tif (clearable) {\n\t\t\temitChange(undefined);\n\t\t}\n\n\t\tsetQuery(\"\");\n\t\tclose();\n\t};\n\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\toptionSections.map((section, sectionIndex) => {\n\t\t\t\t\t\t\t\t\t\tconst groupLabelId = section.group ? `${listId}-group-${sectionIndex}` : undefined;\n\t\t\t\t\t\t\t\t\t\tconst optionNodes = section.items.map(({ option, index }) => {\n\t\t\t\t\t\t\t\t\t\t\tconst optionKey = getOptionKey(option);\n\t\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\t\tconst active = index === activeIndex;\n\t\t\t\t\t\t\t\t\t\t\tconst optionDisabled = getOptionDisabled?.(option) ?? false;\n\t\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\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\tkey={optionKey}\n\t\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\t\tref={(node) => setOptionRef(index, node)}\n\t\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\t\taria-selected={selected}\n\t\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\t\taria-label={getOptionAriaLabel?.(option)}\n\t\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\t\tuiStyles.uiPopupOption,\n\t\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\t\tactive && uiStyles.uiPopupOptionActive,\n\t\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\t\tgetOptionClassName?.(option, optionState)\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\tonClick={() => selectOption(option)}>\n\t\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\t\trenderOption(option, optionState)\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<>\n\t\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\t<CheckIcon className={uiStyles.uiPopupOptionIcon} />\n\t\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\t<span className={uiStyles.uiPopupOptionIcon} />\n\t\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<div className={uiStyles.uiOptionText}>{getOptionLabel(option)}</div>\n\t\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\t<div className={uiStyles.uiOptionCode}>{getOptionCode(option)}</div>\n\t\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</>\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</div>\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\treturn section.group ? (\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={`group-${String(section.group.key)}-${sectionIndex}`}\n\t\t\t\t\t\t\t\t\t\t\t\trole=\"group\"\n\t\t\t\t\t\t\t\t\t\t\t\taria-labelledby={groupLabelId}>\n\t\t\t\t\t\t\t\t\t\t\t\t<div id={groupLabelId} className={uiStyles.uiPopupGroupLabel}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{section.group.label}\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t{optionNodes}\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\t\t<Fragment key={`options-${sectionIndex}`}>{optionNodes}</Fragment>\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","import React from \"react\";\n\nimport { ODataSingleSelectProps, useODataCollectionModel } from \"@ryuzaki13/react-foundation-api/odata\";\nimport { CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata\";\n\nimport { InputUILoading } from \"../input\";\nimport { UiBaseProps } from \"../types\";\n\nimport { useODataSelect } from \"./model/useODataSelect\";\nimport { Select } from \"./Select\";\nimport { SelectOptionContent } from \"./SelectOptionContent\";\n\ntype ODataSelectProps = Omit<ODataSingleSelectProps, \"value\"> & UiBaseProps<string | undefined> & { clearable?: boolean };\n\nfunction getODataOptionTextKey(item: CollectionItem | undefined, textKey: string, codeKey: string) {\n\tif (!item) {\n\t\treturn textKey || codeKey;\n\t}\n\n\treturn textKey || Object.keys(item).find((key) => key !== codeKey) || codeKey;\n}\n\nexport const ODataSelect: React.FC<ODataSelectProps> = ({\n\todata,\n\tsegment,\n\tmodel: initialModel,\n\tsize,\n\tlabel,\n\tdescription,\n\tdisabled,\n\tvalue,\n\tdependencies,\n\tonChange,\n\tclearable\n}) => {\n\tconst model = useODataCollectionModel(initialModel);\n\tconst odataModel = useODataSelect({\n\t\todata,\n\t\tsegment,\n\t\tmodel,\n\t\tvalue,\n\t\tdependencies,\n\t\tonChange\n\t});\n\n\tif (odataModel.isLoading) {\n\t\treturn <InputUILoading size={size} label={label} description={description} />;\n\t}\n\n\tconst hideCode = segment.hideCode ?? odata.hideCode;\n\tconst resolvedTextKey = getODataOptionTextKey(odataModel.selectedItem ?? odataModel.options[0], odataModel.textKey, odataModel.codeKey);\n\n\treturn (\n\t\t<Select\n\t\t\tsize={size}\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\toptions={odataModel.options}\n\t\t\tvalue={odataModel.selectedItem}\n\t\t\tonChange={odataModel.handleChange}\n\t\t\tgetOptionKey={(item) => item[odataModel.codeKey]}\n\t\t\tgetOptionLabel={(item) => item[resolvedTextKey]}\n\t\t\tgetOptionCode={hideCode ? undefined : (item) => item[odataModel.codeKey]}\n\t\t\tgetOptionAriaLabel={(item) =>\n\t\t\t\thideCode || item[resolvedTextKey] === item[odataModel.codeKey]\n\t\t\t\t\t? String(item[resolvedTextKey])\n\t\t\t\t\t: `${item[resolvedTextKey]} ${item[odataModel.codeKey]}`\n\t\t\t}\n\t\t\trenderValue={(item) => (\n\t\t\t\t<SelectOptionContent label={item[resolvedTextKey]} code={hideCode ? undefined : item[odataModel.codeKey]} />\n\t\t\t)}\n\t\t\trenderOption={(item) => (\n\t\t\t\t<SelectOptionContent\n\t\t\t\t\tlabel={item[resolvedTextKey]}\n\t\t\t\t\tcode={hideCode ? undefined : item[odataModel.codeKey]}\n\t\t\t\t\thighlight={odataModel.debouncedQuery}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\tsearchable\n\t\t\tquery={odataModel.query}\n\t\t\tonQuery={odataModel.setQuery}\n\t\t\tdefaultFilter={false}\n\t\t\tdisabled={disabled || odataModel.isLoading}\n\t\t\tplaceholder={odataModel.placeholder}\n\t\t\tloadingState=\"Загрузка...\"\n\t\t\terrorState={odataModel.isError ? \"Ошибка загрузки\" : undefined}\n\t\t\temptyState={!odataModel.isLoading && !odataModel.isError ? \"Нет данных\" : undefined}\n\t\t\tclearable={clearable}\n\t\t/>\n\t);\n};\n","import { Select } from \"./Select\";\n\nimport type { UiBaseProps } from \"../types\";\nimport type { SelectOptionKey } from \"./Select\";\n\ntype SerializableOptionRecord = Record<string, unknown>;\n\ntype SerializableOptionKeyField<TOption extends SerializableOptionRecord> = {\n\t[K in keyof TOption]: Extract<TOption[K], SelectOptionKey> extends never ? never : K;\n}[keyof TOption];\n\ntype SerializableOptionValue<TOption extends SerializableOptionRecord, TOptionKey extends SerializableOptionKeyField<TOption>> = Extract<\n\tTOption[TOptionKey],\n\tSelectOptionKey\n>;\n\nexport interface SerializableSelectProps<\n\tTOption extends SerializableOptionRecord,\n\tTOptionKey extends SerializableOptionKeyField<TOption>,\n\tTOptionLabel extends keyof TOption\n> extends Omit<UiBaseProps<SerializableOptionValue<TOption, TOptionKey> | undefined>, \"onChange\"> {\n\toptions: readonly TOption[];\n\tonChange: (value: SerializableOptionValue<TOption, TOptionKey> | undefined) => void;\n\toptionKey: TOptionKey;\n\toptionLabel: TOptionLabel;\n\trenderCode?: true;\n\tclassName?: string;\n\tclearable?: boolean;\n}\n\nfunction getSerializableOptionKey<TOption extends SerializableOptionRecord, TOptionKey extends SerializableOptionKeyField<TOption>>(\n\toption: TOption,\n\toptionKey: TOptionKey\n): Extract<TOption[TOptionKey], SelectOptionKey> {\n\treturn option[optionKey] as Extract<TOption[TOptionKey], SelectOptionKey>;\n}\n\nfunction getSerializableOptionLabel<\n\tTOption extends SerializableOptionRecord,\n\tTOptionKey extends SerializableOptionKeyField<TOption>,\n\tTOptionLabel extends keyof TOption\n>(option: TOption, optionLabel: TOptionLabel, optionKey: TOptionKey): string | number {\n\tconst label = option[optionLabel];\n\n\tif (typeof label === \"string\" || typeof label === \"number\") {\n\t\treturn label;\n\t}\n\n\tconst key = getSerializableOptionKey(option, optionKey);\n\treturn typeof key === \"string\" || typeof key === \"number\" ? key : String(key);\n}\n\nexport function SerializableSelect<\n\tTOption extends SerializableOptionRecord,\n\tTOptionKey extends SerializableOptionKeyField<TOption>,\n\tTOptionLabel extends keyof TOption\n>({\n\tlabel,\n\tdescription,\n\tdisabled,\n\tplaceholder,\n\tsize,\n\toptions,\n\tvalue,\n\tonChange,\n\toptionKey,\n\toptionLabel,\n\trenderCode,\n\tclassName,\n\tclearable\n}: SerializableSelectProps<TOption, TOptionKey, TOptionLabel>) {\n\tconst selectedOption =\n\t\tvalue === undefined ? undefined : options.find((option) => getSerializableOptionKey(option, optionKey) === value);\n\n\treturn (\n\t\t<Select\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\tdisabled={disabled}\n\t\t\tplaceholder={placeholder}\n\t\t\tsize={size}\n\t\t\toptions={options}\n\t\t\tvalue={selectedOption}\n\t\t\tonChange={(option: TOption | undefined) => onChange(option ? getSerializableOptionKey(option, optionKey) : undefined)}\n\t\t\tgetOptionKey={(option: TOption) => getSerializableOptionKey(option, optionKey)}\n\t\t\tgetOptionLabel={(option: TOption) => getSerializableOptionLabel(option, optionLabel, optionKey)}\n\t\t\tgetOptionCode={renderCode ? (option: TOption) => getSerializableOptionKey(option, optionKey) : undefined}\n\t\t\tclassName={className}\n\t\t\tclearable={clearable}\n\t\t/>\n\t);\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { r as e } from "../chunks/select-CFbZS7fx.js";
1
+ import { r as e } from "../chunks/select-CniUoHU_.js";
2
2
  import { jsx as t } from "react/jsx-runtime";
3
3
  import { getPresetOption as n } from "@ryuzaki13/react-foundation-lib/presets";
4
4
  //#region src/preset-select/PresetSelect.tsx
@@ -2,7 +2,8 @@ import { ReactNode } from "react";
2
2
  import { Placement } from "@floating-ui/react";
3
3
  import { InputType } from "@ryuzaki13/react-foundation-lib/types";
4
4
  import { ChangeHandler, UiBaseProps } from "../types";
5
- export type SelectOptionKey = string | number;
5
+ import { type SelectOptionGroup, type SelectOptionKey } from "./SelectOptionGroup";
6
+ export { type SelectOptionGroup, type SelectOptionKey } from "./SelectOptionGroup";
6
7
  export type SelectOptionState = {
7
8
  active: boolean;
8
9
  selected: boolean;
@@ -15,6 +16,7 @@ type SelectSharedProps<TOption extends InputType> = Omit<UiBaseProps<TOption, TO
15
16
  getOptionCode?: (option: TOption) => ReactNode;
16
17
  getOptionDisabled?: (option: TOption) => boolean;
17
18
  getOptionAriaLabel?: (option: TOption) => string;
19
+ getOptionGroup?: (option: TOption) => SelectOptionGroup | undefined;
18
20
  getOptionClassName?: (option: TOption, state: SelectOptionState) => string | undefined;
19
21
  renderOption?: (option: TOption, state: SelectOptionState) => ReactNode;
20
22
  renderValue?: (option: TOption) => ReactNode;
@@ -42,5 +44,4 @@ export type SelectProps<TOption extends InputType, TClearable extends boolean |
42
44
  * Выпадающий список выбора значения из набора опций. Подходит для форм, фильтров и простых справочников.
43
45
  */
44
46
  export declare function Select<TOption extends InputType, TClearable extends boolean | undefined = false>(props: SelectProps<TOption, TClearable>): import("react").JSX.Element;
45
- export {};
46
47
  //# sourceMappingURL=Select.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../src/select/Select.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAoB,MAAM,OAAO,CAAC;AAEpD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAgBlE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAMtD,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,CAAC;AAE9C,MAAM,MAAM,iBAAiB,GAAG;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,KAAK,iBAAiB,CAAC,OAAO,SAAS,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC,EAAE,UAAU,CAAC,GAAG;IACjH,OAAO,EAAE,SAAS,OAAO,EAAE,CAAC;IAC5B,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,eAAe,CAAC;IACnD,cAAc,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,SAAS,CAAC;IAC/C,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,SAAS,CAAC;IAC/C,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;IACjD,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,CAAC;IACjD,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,KAAK,MAAM,GAAG,SAAS,CAAC;IACvF,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,KAAK,SAAS,CAAC;IACxE,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,SAAS,CAAC;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAC9B,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,SAAS,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,KAAK,iBAAiB,CAAC,OAAO,SAAS,SAAS,EAAE,UAAU,SAAS,OAAO,GAAG,SAAS,IAAI,IAAI,SAAS,UAAU,GAChH,OAAO,GAAG,SAAS,GACnB,OAAO,CAAC;AAEX,MAAM,MAAM,WAAW,CAAC,OAAO,SAAS,SAAS,EAAE,UAAU,SAAS,OAAO,GAAG,SAAS,GAAG,KAAK,IAAI,iBAAiB,CAAC,OAAO,CAAC,GAAG;IACjI,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,aAAa,CAAC,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;CAChE,CAAC;AAEF;;GAEG;AACH,wBAAgB,MAAM,CAAC,OAAO,SAAS,SAAS,EAAE,UAAU,SAAS,OAAO,GAAG,SAAS,GAAG,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,+BAwRxI"}
1
+ {"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../src/select/Select.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { ReactNode } from "react";
2
+ export type SelectOptionKey = string | number;
3
+ /**
4
+ * Описывает визуальную группу опций Select.
5
+ * Одинаковый ключ объединяет соседние опции под одним доступным заголовком, а undefined оставляет опцию без группы.
6
+ */
7
+ export type SelectOptionGroup = {
8
+ readonly key: SelectOptionKey;
9
+ readonly label: ReactNode;
10
+ };
11
+ //# sourceMappingURL=SelectOptionGroup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectOptionGroup.d.ts","sourceRoot":"","sources":["../../src/select/SelectOptionGroup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,CAAC;AAE9C;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC/B,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;CAC1B,CAAC"}
@@ -1,2 +1,2 @@
1
- import { i as e, n as t, r as n, t as r } from "../chunks/select-CFbZS7fx.js";
1
+ import { i as e, n as t, r as n, t as r } from "../chunks/select-CniUoHU_.js";
2
2
  export { t as ODataSelect, n as Select, r as SerializableSelect, e as resolveSelectedOption };
@@ -0,0 +1,14 @@
1
+ import { type SelectOptionGroup } from "../SelectOptionGroup";
2
+ export type SelectOptionSectionItem<TOption> = {
3
+ readonly option: TOption;
4
+ readonly index: number;
5
+ };
6
+ export type SelectOptionSection<TOption> = {
7
+ readonly group: SelectOptionGroup | undefined;
8
+ readonly items: readonly SelectOptionSectionItem<TOption>[];
9
+ };
10
+ /**
11
+ * Собирает соседние опции с одинаковым group key в секции, сохраняя исходные индексы для клавиатурной навигации listbox.
12
+ */
13
+ export declare function createSelectOptionSections<TOption>(options: readonly TOption[], getOptionGroup: ((option: TOption) => SelectOptionGroup | undefined) | undefined): readonly SelectOptionSection<TOption>[];
14
+ //# sourceMappingURL=createSelectOptionSections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createSelectOptionSections.d.ts","sourceRoot":"","sources":["../../../src/select/lib/createSelectOptionSections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,MAAM,MAAM,uBAAuB,CAAC,OAAO,IAAI;IAC9C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,mBAAmB,CAAC,OAAO,IAAI;IAC1C,QAAQ,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,KAAK,EAAE,SAAS,uBAAuB,CAAC,OAAO,CAAC,EAAE,CAAC;CAC5D,CAAC;AAEF;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EACjD,OAAO,EAAE,SAAS,OAAO,EAAE,EAC3B,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,KAAK,iBAAiB,GAAG,SAAS,CAAC,GAAG,SAAS,GAC9E,SAAS,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAoBzC"}
@@ -1,9 +1,11 @@
1
1
  import { ReactNode } from "react";
2
2
  import { InputType } from "@ryuzaki13/react-foundation-lib/types";
3
- export declare function getOptionSearchText<T extends InputType>({ option, getOptionLabel, getOptionCode }: {
3
+ import { type SelectOptionGroup } from "../SelectOptionGroup";
4
+ export declare function getOptionSearchText<T extends InputType>({ option, getOptionLabel, getOptionCode, getOptionGroup }: {
4
5
  option: T;
5
6
  getOptionLabel: (option: T) => ReactNode;
6
7
  getOptionCode?: (option: T) => ReactNode;
8
+ getOptionGroup?: (option: T) => SelectOptionGroup | undefined;
7
9
  }): string;
8
10
  /** Находит selected option по value и возвращает fallback, если значение еще не нормализовано. */
9
11
  export declare function resolveSelectedOption<TOption extends {
@@ -1 +1 @@
1
- {"version":3,"file":"getOptionSearchText.d.ts","sourceRoot":"","sources":["../../../src/select/lib/getOptionSearchText.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAIlE,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,SAAS,EAAE,EACxD,MAAM,EACN,cAAc,EACd,aAAa,EACb,EAAE;IACF,MAAM,EAAE,CAAC,CAAC;IACV,cAAc,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,SAAS,CAAC;IACzC,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,SAAS,CAAC;CACzC,UAKA;AAED,kGAAkG;AAClG,wBAAgB,qBAAqB,CAAC,OAAO,SAAS;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,EACtE,OAAO,EAAE,SAAS,OAAO,EAAE,EAC3B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,OAAO,GACf,OAAO,CAET"}
1
+ {"version":3,"file":"getOptionSearchText.d.ts","sourceRoot":"","sources":["../../../src/select/lib/getOptionSearchText.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAGlE,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,SAAS,EAAE,EACxD,MAAM,EACN,cAAc,EACd,aAAa,EACb,cAAc,EACd,EAAE;IACF,MAAM,EAAE,CAAC,CAAC;IACV,cAAc,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,SAAS,CAAC;IACzC,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,SAAS,CAAC;IACzC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,iBAAiB,GAAG,SAAS,CAAC;CAC9D,UASA;AAED,kGAAkG;AAClG,wBAAgB,qBAAqB,CAAC,OAAO,SAAS;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,EACtE,OAAO,EAAE,SAAS,OAAO,EAAE,EAC3B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,OAAO,GACf,OAAO,CAET"}
@@ -1,4 +1,4 @@
1
- import { r as e } from "../chunks/select-CFbZS7fx.js";
1
+ import { r as e } from "../chunks/select-CniUoHU_.js";
2
2
  import { useMemo as t } from "react";
3
3
  import { cn as n } from "@ryuzaki13/react-foundation-lib/utils";
4
4
  import { DEFAULT_VALUE_STATES as r, VALUE_STATE_COLOR_TOKENS as i } from "@ryuzaki13/react-foundation-lib/formatters";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ryuzaki13/react-foundation-ui",
3
- "version": "1.0.18",
3
+ "version": "1.0.19",
4
4
  "description": "Reusable React foundation UI primitives and Storybook stories.",
5
5
  "license": "MIT",
6
6
  "author": "Ryuzaki13",
@@ -1,4 +1,4 @@
1
- import{i as e}from"./preload-helper-B45gAKPr.js";import{E as t,a as n,d as r,f as i,l as a,m as o,n as s,p as c,r as l,u}from"./blocks-C7Q8GMMo.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-DeqTfg7V.js";import{Appearances as p,Basic as m,RemovableList as h,Sizes as g,Tones as _,n as v,t as y}from"./Badge.stories-DrUkR5Kt.js";function b(e){let o={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...t(),...e.components};return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(a,{of:y,parameters:{atomicCanvas:!0,layout:`padded`,docs:{toc:!0}}}),`
1
+ import{i as e}from"./preload-helper-B45gAKPr.js";import{E as t,a as n,d as r,f as i,l as a,m as o,n as s,p as c,r as l,u}from"./blocks-DsR25Fmw.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-R_VK5jlr.js";import{Appearances as p,Basic as m,RemovableList as h,Sizes as g,Tones as _,n as v,t as y}from"./Badge.stories-U00ZjiZG.js";function b(e){let o={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...t(),...e.components};return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(a,{of:y,parameters:{atomicCanvas:!0,layout:`padded`,docs:{toc:!0}}}),`
2
2
  `,(0,S.jsx)(c,{children:`Badge`}),`
3
3
  `,(0,S.jsx)(i,{children:`Компактная текстовая метка для статусов, категорий, фильтров и коротких служебных пометок`}),`
4
4
  `,(0,S.jsx)(o.p,{children:`Badge подходит для коротких подписей, которые должны быстро читаться и не перегружать интерфейс:`}),`
@@ -1,4 +1,4 @@
1
- import{a as e,c as t,i as n}from"./preload-helper-B45gAKPr.js";import{C as r}from"./iframe-BdBCyVHz.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{a,i as o}from"./utils-CYGhZ88S.js";import{n as s,t as c}from"./lucide-react-CkksFLP-.js";import{n as l,t as u}from"./text-DrGSUN96.js";import{i as d,n as f,r as p,t as m}from"./uiClasses-CZ_HVS3Y.js";import{o as h}from"./Flex-DycwM4Fy.js";import{t as g}from"./flex-DkVQD9fQ.js";var _,v,y,b,x,S,C,w,T,E,D=n((()=>{_=`qBtmnH`,v=`p-HsHY`,y=`u9tQAE`,b=`FRScRz`,x=`W13uQO`,S=`_3IRcM9`,C=`R3ybI7`,w=`DdWAaC`,T=`_5cXBQF`,E={badge:_,passive:v,sizeXs:y,sizeSm:b,sizeMd:x,sizeLg:S,sizeXl:C,content:w,removeButton:T}}));function O({children:e,size:t=`sm`,tone:n,appearance:r,className:i,onRemove:o}){let c=n??`neutral`,u=d({tone:n,appearance:r,fallbackTone:c,fallbackAppearance:c===`neutral`?`outline`:`solid`});return(0,k.jsxs)(`div`,{className:a(E.badge,A[t],f(u.tone),m(u.appearance),!o&&E.passive,i),children:[(0,k.jsx)(l,{maxChar:25,placement:`top`,block:!0,textWrapProps:{className:E.content},children:String(e)}),o&&(0,k.jsx)(`button`,{type:`button`,onClick:o,className:E.removeButton,"aria-label":`Удалить бейдж`,"data-ui":`badge-remove-button`,"data-action":`remove-badge`,children:(0,k.jsx)(s,{})})]})}var k,A,j=n((()=>{o(),c(),u(),p(),D(),k=i(),A={xs:E.sizeXs,sm:E.sizeSm,md:E.sizeMd,lg:E.sizeLg,xl:E.sizeXl},O.__docgenInfo={description:`Компактный индикатор для статусов, категорий и коротких служебных меток.`,methods:[],displayName:`Badge`,props:{children:{required:!0,tsType:{name:`union`,raw:`string | number`,elements:[{name:`string`},{name:`number`}]},description:``},size:{required:!1,tsType:{name:`union`,raw:`"xs" | "sm" | "md" | "lg" | "xl"`,elements:[{name:`literal`,value:`"xs"`},{name:`literal`,value:`"sm"`},{name:`literal`,value:`"md"`},{name:`literal`,value:`"lg"`},{name:`literal`,value:`"xl"`}]},description:``,defaultValue:{value:`"sm"`,computed:!1}},tone:{required:!1,tsType:{name:`union`,raw:`"neutral" | "error" | "warning" | "success" | "info"`,elements:[{name:`literal`,value:`"neutral"`},{name:`literal`,value:`"error"`},{name:`literal`,value:`"warning"`},{name:`literal`,value:`"success"`},{name:`literal`,value:`"info"`}]},description:``},appearance:{required:!1,tsType:{name:`union`,raw:`"solid" | "outline" | "ghost" | "transparent"`,elements:[{name:`literal`,value:`"solid"`},{name:`literal`,value:`"outline"`},{name:`literal`,value:`"ghost"`},{name:`literal`,value:`"transparent"`}]},description:``},className:{required:!1,tsType:{name:`string`},description:``},onRemove:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``}}}}));function M({children:e}){return(0,P.jsx)(h,{inline:!0,wrap:!0,gap:`sm`,align:`baseline`,children:N.Children.map(e,(e,t)=>(0,P.jsx)(N.Fragment,{children:e},t))})}var N,P,F=n((()=>{N=t(r(),1),g(),P=i(),M.__docgenInfo={description:"Контейнер для группы `Badge`, который выстраивает элементы в единый список с предсказуемыми отступами. Используется для компактного вывода набора меток или фильтров.",methods:[],displayName:`BadgeList`,props:{children:{required:!0,tsType:{name:`Array`,elements:[{name:`ReactElement`,elements:[{name:`union`,raw:`typeof Badge | null | undefined | false`,elements:[{name:`Badge`},{name:`null`},{name:`undefined`},{name:`literal`,value:`false`}]}],raw:`ReactElement<typeof Badge | null | undefined | false>`}],raw:`ReactElement<typeof Badge | null | undefined | false>[]`},description:``}}}})),I=e({Appearances:()=>H,Basic:()=>B,RemovableList:()=>W,Sizes:()=>U,Tones:()=>V,__namedExportsOrder:()=>G,default:()=>z}),L,R,z,B,V,H,U,W,G,K=n((()=>{L=t(r(),1),j(),F(),R=i(),z={title:`Shared/UI/Badge`,component:O,args:{children:`Новый`,size:`md`,tone:`info`,appearance:`solid`},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{children:{description:`Текст внутри бейджа.`,control:`text`},size:{description:`Размер бейджа.`,control:`inline-radio`,options:[`sm`,`md`,`lg`]},tone:{description:`Семантический тон бейджа.`,control:`inline-radio`,options:[`neutral`,`success`,`warning`,`error`,`info`]},appearance:{description:`Форма бейджа.`,control:`inline-radio`,options:[`solid`,`outline`,`ghost`,`transparent`]},onRemove:{description:`Показывает кнопку удаления и вызывает обработчик по клику.`,control:!1},className:{description:`Дополнительный CSS-класс контейнера.`,control:`text`}}},B={},V={render:()=>(0,R.jsxs)(M,{children:[(0,R.jsx)(O,{tone:`neutral`,appearance:`outline`,children:`Neutral`}),(0,R.jsx)(O,{tone:`success`,appearance:`solid`,children:`Успешно`}),(0,R.jsx)(O,{tone:`warning`,appearance:`solid`,children:`Внимание`}),(0,R.jsx)(O,{tone:`error`,appearance:`solid`,children:`Ошибка`}),(0,R.jsx)(O,{tone:`info`,appearance:`solid`,children:`Информация`})]})},H={render:()=>(0,R.jsxs)(M,{children:[(0,R.jsx)(O,{tone:`neutral`,appearance:`solid`,children:`Solid`}),(0,R.jsx)(O,{tone:`neutral`,appearance:`outline`,children:`Outline`}),(0,R.jsx)(O,{tone:`info`,appearance:`ghost`,children:`Ghost`}),(0,R.jsx)(O,{tone:`warning`,appearance:`transparent`,children:`Transparent`})]})},U={render:()=>(0,R.jsxs)(M,{children:[(0,R.jsx)(O,{size:`xs`,children:`Extra Small`}),(0,R.jsx)(O,{size:`sm`,children:`Small`}),(0,R.jsx)(O,{size:`md`,children:`Medium`}),(0,R.jsx)(O,{size:`lg`,children:`Large`}),(0,R.jsx)(O,{size:`xl`,children:`Extra Large`})]})},W={render:()=>{let[e,t]=(0,L.useState)([`Фильтр A`,`Фильтр B`,`Фильтр C`]);return(0,R.jsx)(M,{children:e.map(e=>(0,R.jsx)(O,{tone:`info`,appearance:`outline`,onRemove:()=>t(t=>t.filter(t=>t!==e)),children:e},e))})}},B.parameters={...B.parameters,docs:{...B.parameters?.docs,source:{originalSource:`{}`,...B.parameters?.docs?.source}}},V.parameters={...V.parameters,docs:{...V.parameters?.docs,source:{originalSource:`{
1
+ import{a as e,c as t,i as n}from"./preload-helper-B45gAKPr.js";import{C as r}from"./iframe-DLkjf7A9.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{a,i as o}from"./utils-5U72nYIV.js";import{n as s,t as c}from"./lucide-react-p2Eti-TY.js";import{n as l,t as u}from"./text-j7jiqOeo.js";import{i as d,n as f,r as p,t as m}from"./uiClasses-CZ_HVS3Y.js";import{o as h}from"./Flex-_SHSjraN.js";import{t as g}from"./flex-DjjdXv7K.js";var _,v,y,b,x,S,C,w,T,E,D=n((()=>{_=`qBtmnH`,v=`p-HsHY`,y=`u9tQAE`,b=`FRScRz`,x=`W13uQO`,S=`_3IRcM9`,C=`R3ybI7`,w=`DdWAaC`,T=`_5cXBQF`,E={badge:_,passive:v,sizeXs:y,sizeSm:b,sizeMd:x,sizeLg:S,sizeXl:C,content:w,removeButton:T}}));function O({children:e,size:t=`sm`,tone:n,appearance:r,className:i,onRemove:o}){let c=n??`neutral`,u=d({tone:n,appearance:r,fallbackTone:c,fallbackAppearance:c===`neutral`?`outline`:`solid`});return(0,k.jsxs)(`div`,{className:a(E.badge,A[t],f(u.tone),m(u.appearance),!o&&E.passive,i),children:[(0,k.jsx)(l,{maxChar:25,placement:`top`,block:!0,textWrapProps:{className:E.content},children:String(e)}),o&&(0,k.jsx)(`button`,{type:`button`,onClick:o,className:E.removeButton,"aria-label":`Удалить бейдж`,"data-ui":`badge-remove-button`,"data-action":`remove-badge`,children:(0,k.jsx)(s,{})})]})}var k,A,j=n((()=>{o(),c(),u(),p(),D(),k=i(),A={xs:E.sizeXs,sm:E.sizeSm,md:E.sizeMd,lg:E.sizeLg,xl:E.sizeXl},O.__docgenInfo={description:`Компактный индикатор для статусов, категорий и коротких служебных меток.`,methods:[],displayName:`Badge`,props:{children:{required:!0,tsType:{name:`union`,raw:`string | number`,elements:[{name:`string`},{name:`number`}]},description:``},size:{required:!1,tsType:{name:`union`,raw:`"xs" | "sm" | "md" | "lg" | "xl"`,elements:[{name:`literal`,value:`"xs"`},{name:`literal`,value:`"sm"`},{name:`literal`,value:`"md"`},{name:`literal`,value:`"lg"`},{name:`literal`,value:`"xl"`}]},description:``,defaultValue:{value:`"sm"`,computed:!1}},tone:{required:!1,tsType:{name:`union`,raw:`"neutral" | "error" | "warning" | "success" | "info"`,elements:[{name:`literal`,value:`"neutral"`},{name:`literal`,value:`"error"`},{name:`literal`,value:`"warning"`},{name:`literal`,value:`"success"`},{name:`literal`,value:`"info"`}]},description:``},appearance:{required:!1,tsType:{name:`union`,raw:`"solid" | "outline" | "ghost" | "transparent"`,elements:[{name:`literal`,value:`"solid"`},{name:`literal`,value:`"outline"`},{name:`literal`,value:`"ghost"`},{name:`literal`,value:`"transparent"`}]},description:``},className:{required:!1,tsType:{name:`string`},description:``},onRemove:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``}}}}));function M({children:e}){return(0,P.jsx)(h,{inline:!0,wrap:!0,gap:`sm`,align:`baseline`,children:N.Children.map(e,(e,t)=>(0,P.jsx)(N.Fragment,{children:e},t))})}var N,P,F=n((()=>{N=t(r(),1),g(),P=i(),M.__docgenInfo={description:"Контейнер для группы `Badge`, который выстраивает элементы в единый список с предсказуемыми отступами. Используется для компактного вывода набора меток или фильтров.",methods:[],displayName:`BadgeList`,props:{children:{required:!0,tsType:{name:`Array`,elements:[{name:`ReactElement`,elements:[{name:`union`,raw:`typeof Badge | null | undefined | false`,elements:[{name:`Badge`},{name:`null`},{name:`undefined`},{name:`literal`,value:`false`}]}],raw:`ReactElement<typeof Badge | null | undefined | false>`}],raw:`ReactElement<typeof Badge | null | undefined | false>[]`},description:``}}}})),I=e({Appearances:()=>H,Basic:()=>B,RemovableList:()=>W,Sizes:()=>U,Tones:()=>V,__namedExportsOrder:()=>G,default:()=>z}),L,R,z,B,V,H,U,W,G,K=n((()=>{L=t(r(),1),j(),F(),R=i(),z={title:`Shared/UI/Badge`,component:O,args:{children:`Новый`,size:`md`,tone:`info`,appearance:`solid`},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{children:{description:`Текст внутри бейджа.`,control:`text`},size:{description:`Размер бейджа.`,control:`inline-radio`,options:[`sm`,`md`,`lg`]},tone:{description:`Семантический тон бейджа.`,control:`inline-radio`,options:[`neutral`,`success`,`warning`,`error`,`info`]},appearance:{description:`Форма бейджа.`,control:`inline-radio`,options:[`solid`,`outline`,`ghost`,`transparent`]},onRemove:{description:`Показывает кнопку удаления и вызывает обработчик по клику.`,control:!1},className:{description:`Дополнительный CSS-класс контейнера.`,control:`text`}}},B={},V={render:()=>(0,R.jsxs)(M,{children:[(0,R.jsx)(O,{tone:`neutral`,appearance:`outline`,children:`Neutral`}),(0,R.jsx)(O,{tone:`success`,appearance:`solid`,children:`Успешно`}),(0,R.jsx)(O,{tone:`warning`,appearance:`solid`,children:`Внимание`}),(0,R.jsx)(O,{tone:`error`,appearance:`solid`,children:`Ошибка`}),(0,R.jsx)(O,{tone:`info`,appearance:`solid`,children:`Информация`})]})},H={render:()=>(0,R.jsxs)(M,{children:[(0,R.jsx)(O,{tone:`neutral`,appearance:`solid`,children:`Solid`}),(0,R.jsx)(O,{tone:`neutral`,appearance:`outline`,children:`Outline`}),(0,R.jsx)(O,{tone:`info`,appearance:`ghost`,children:`Ghost`}),(0,R.jsx)(O,{tone:`warning`,appearance:`transparent`,children:`Transparent`})]})},U={render:()=>(0,R.jsxs)(M,{children:[(0,R.jsx)(O,{size:`xs`,children:`Extra Small`}),(0,R.jsx)(O,{size:`sm`,children:`Small`}),(0,R.jsx)(O,{size:`md`,children:`Medium`}),(0,R.jsx)(O,{size:`lg`,children:`Large`}),(0,R.jsx)(O,{size:`xl`,children:`Extra Large`})]})},W={render:()=>{let[e,t]=(0,L.useState)([`Фильтр A`,`Фильтр B`,`Фильтр C`]);return(0,R.jsx)(M,{children:e.map(e=>(0,R.jsx)(O,{tone:`info`,appearance:`outline`,onRemove:()=>t(t=>t.filter(t=>t!==e)),children:e},e))})}},B.parameters={...B.parameters,docs:{...B.parameters?.docs,source:{originalSource:`{}`,...B.parameters?.docs?.source}}},V.parameters={...V.parameters,docs:{...V.parameters?.docs,source:{originalSource:`{
2
2
  render: () => <BadgeList>
3
3
  <Badge tone="neutral" appearance="outline">
4
4
  Neutral
@@ -1,4 +1,4 @@
1
- import{c as e,i as t}from"./preload-helper-B45gAKPr.js";import{C as n}from"./iframe-BdBCyVHz.js";import{t as r}from"./jsx-runtime-BBQGix-2.js";import{a as i,i as a}from"./utils-CYGhZ88S.js";import{n as o,t as s}from"./popover-Dr7yuAT9.js";import{n as c,t as l}from"./ui.module-DS2qtZts.js";import{i as u,n as d,r as f,t as p}from"./uiClasses-CZ_HVS3Y.js";var m,h,g,_,v,y=t((()=>{m=`wLOHwj`,h=`lFsM-Y`,g=`LPob63`,_=`tsaGtv`,v={button:m,iconOnly:h,buttonInner:g,buttonIcon:_}})),b,x,S,C=t((()=>{b=e(n(),1),a(),s(),l(),f(),y(),x=r(),S=(0,b.forwardRef)(function({children:e,disabled:t,className:n,icon:r,iconEnd:a,title:s,variant:l,tone:f,appearance:m,type:h=`button`,"aria-label":g,..._},y){let S=b.Children.count(e)>0,C=!!r&&!S,w=u({variant:l,tone:f,appearance:m,fallbackAppearance:f&&f!==`neutral`?`solid`:`outline`}),T=C?g??s:g,E=(0,x.jsx)(`button`,{..._,ref:y,type:h,disabled:t,"aria-label":T,className:i(c.uiElement,c.uiInputControl,v.button,d(w.tone),p(w.appearance),C?v.iconOnly:``,`textNoWrap`,n??``),children:(0,x.jsxs)(`span`,{className:v.buttonInner,children:[r&&!a&&(0,x.jsx)(`span`,{"aria-hidden":`true`,className:v.buttonIcon,children:r}),S&&(0,x.jsx)(`span`,{className:`flexEllipsis`,children:e}),r&&a&&(0,x.jsx)(`span`,{"aria-hidden":`true`,className:v.buttonIcon,children:r})]})});return s?(0,x.jsx)(o,{placement:`bottom`,tooltip:!0,content:(0,x.jsx)(x.Fragment,{children:s}),children:E}):E}),S.__docgenInfo={description:'Базовая кнопка дизайн-системы для пользовательских действий.\nПоддерживает состояния, tone + appearance, иконки и безопасный `type="button"` по умолчанию.',methods:[],displayName:`Button`,props:{variant:{required:!1,tsType:{name:`union`,raw:`| "transparent"
1
+ import{c as e,i as t}from"./preload-helper-B45gAKPr.js";import{C as n}from"./iframe-DLkjf7A9.js";import{t as r}from"./jsx-runtime-BBQGix-2.js";import{a as i,i as a}from"./utils-5U72nYIV.js";import{n as o,t as s}from"./popover-CQelsqcy.js";import{n as c,t as l}from"./ui.module-DS2qtZts.js";import{i as u,n as d,r as f,t as p}from"./uiClasses-CZ_HVS3Y.js";var m,h,g,_,v,y=t((()=>{m=`wLOHwj`,h=`lFsM-Y`,g=`LPob63`,_=`tsaGtv`,v={button:m,iconOnly:h,buttonInner:g,buttonIcon:_}})),b,x,S,C=t((()=>{b=e(n(),1),a(),s(),l(),f(),y(),x=r(),S=(0,b.forwardRef)(function({children:e,disabled:t,className:n,icon:r,iconEnd:a,title:s,variant:l,tone:f,appearance:m,type:h=`button`,"aria-label":g,..._},y){let S=b.Children.count(e)>0,C=!!r&&!S,w=u({variant:l,tone:f,appearance:m,fallbackAppearance:f&&f!==`neutral`?`solid`:`outline`}),T=C?g??s:g,E=(0,x.jsx)(`button`,{..._,ref:y,type:h,disabled:t,"aria-label":T,className:i(c.uiElement,c.uiInputControl,v.button,d(w.tone),p(w.appearance),C?v.iconOnly:``,`textNoWrap`,n??``),children:(0,x.jsxs)(`span`,{className:v.buttonInner,children:[r&&!a&&(0,x.jsx)(`span`,{"aria-hidden":`true`,className:v.buttonIcon,children:r}),S&&(0,x.jsx)(`span`,{className:`flexEllipsis`,children:e}),r&&a&&(0,x.jsx)(`span`,{"aria-hidden":`true`,className:v.buttonIcon,children:r})]})});return s?(0,x.jsx)(o,{placement:`bottom`,tooltip:!0,content:(0,x.jsx)(x.Fragment,{children:s}),children:E}):E}),S.__docgenInfo={description:'Базовая кнопка дизайн-системы для пользовательских действий.\nПоддерживает состояния, tone + appearance, иконки и безопасный `type="button"` по умолчанию.',methods:[],displayName:`Button`,props:{variant:{required:!1,tsType:{name:`union`,raw:`| "transparent"
2
2
  | "ghost"
3
3
  | "neutral"
4
4
  | "error"
@@ -1,4 +1,4 @@
1
- import{i as e}from"./preload-helper-B45gAKPr.js";import{E as t,a as n,d as r,f as i,l as a,m as o,n as s,p as c,r as l,u}from"./blocks-C7Q8GMMo.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-DeqTfg7V.js";import{Basic as p,ComposableScheme as m,Variants as h,WithIcons as g,n as _,t as v}from"./Button.stories-DarSDitm.js";function y(e){let o={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...t(),...e.components};return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(a,{of:v,parameters:{atomicCanvas:!0,layout:`padded`,docs:{toc:!0}}}),`
1
+ import{i as e}from"./preload-helper-B45gAKPr.js";import{E as t,a as n,d as r,f as i,l as a,m as o,n as s,p as c,r as l,u}from"./blocks-DsR25Fmw.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-R_VK5jlr.js";import{Basic as p,ComposableScheme as m,Variants as h,WithIcons as g,n as _,t as v}from"./Button.stories-BoqlEzDC.js";function y(e){let o={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...t(),...e.components};return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(a,{of:v,parameters:{atomicCanvas:!0,layout:`padded`,docs:{toc:!0}}}),`
2
2
  `,(0,x.jsx)(c,{children:`Button`}),`
3
3
  `,(0,x.jsx)(i,{children:`Базовая action-кнопка дизайн-системы для пользовательских действий, подтверждений и быстрых операций`}),`
4
4
  `,(0,x.jsxs)(o.p,{children:[(0,x.jsx)(o.code,{children:`Button`}),` используется как универсальная кнопка интерфейса: в формах, тулбарах, модальных окнах, карточках, таблицах и компактных icon-only сценариях.`]}),`
@@ -1,4 +1,4 @@
1
- import{a as e,i as t}from"./preload-helper-B45gAKPr.js";import{t as n}from"./jsx-runtime-BBQGix-2.js";import{P as r,b as i,mt as a,t as o,ut as s}from"./lucide-react-CkksFLP-.js";import{n as c,t as l}from"./Button-gqIyGTVm.js";var u=e({Basic:()=>m,ComposableScheme:()=>g,Variants:()=>h,WithIcons:()=>_,__namedExportsOrder:()=>v,default:()=>p}),d,f,p,m,h,g,_,v,y=t((()=>{o(),c(),d=n(),{fn:f}=__STORYBOOK_MODULE_TEST__,p={title:`Shared/UI/Button`,component:l,args:{children:`Действие`,variant:`neutralOutline`,disabled:!1,iconEnd:!1,onClick:f()},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{children:{description:`Текстовое содержимое кнопки.`,control:`text`},variant:{description:"Готовая схема для обратной совместимости. Если заданы `tone` или `appearance`, они имеют приоритет.",control:`select`,options:[`neutral`,`neutralOutline`,`ghost`,`error`,`warning`,`success`,`info`,`errorOutline`,`warningOutline`,`successOutline`,`infoOutline`,`transparent`]},tone:{description:`Семантический тон кнопки.`,control:`inline-radio`,options:[`neutral`,`error`,`warning`,`success`,`info`]},appearance:{description:`Визуальная форма кнопки.`,control:`inline-radio`,options:[`solid`,`outline`,`ghost`,`transparent`]},icon:{description:`Иконка слева или справа от текста.`,control:!1},iconEnd:{description:`Перемещает иконку в конец кнопки.`,control:`boolean`},title:{description:"Текст тултипа и `aria-label` для кнопки.",control:`text`},disabled:{description:`Блокирует нажатие.`,control:`boolean`},onClick:{description:`Вызывается при нажатии на кнопку.`,control:!1},className:{description:`Дополнительный CSS-класс.`,control:`text`}}},m={},h={render:()=>(0,d.jsxs)(`div`,{style:{display:`grid`,gap:12,gridTemplateColumns:`repeat(auto-fit, minmax(180px, 1fr))`},children:[(0,d.jsx)(l,{variant:`neutral`,children:`Neutral Solid`}),(0,d.jsx)(l,{variant:`neutralOutline`,children:`Neutral Outline`}),(0,d.jsx)(l,{variant:`ghost`,children:`Ghost`}),(0,d.jsx)(l,{variant:`info`,children:`Info Solid`}),(0,d.jsx)(l,{variant:`success`,children:`Success Solid`}),(0,d.jsx)(l,{variant:`warning`,children:`Warning Solid`}),(0,d.jsx)(l,{variant:`error`,children:`Error Solid`}),(0,d.jsx)(l,{variant:`infoOutline`,children:`Info Outline`}),(0,d.jsx)(l,{variant:`successOutline`,children:`Success Outline`}),(0,d.jsx)(l,{variant:`warningOutline`,children:`Warning Outline`}),(0,d.jsx)(l,{variant:`errorOutline`,children:`Error Outline`}),(0,d.jsx)(l,{variant:`transparent`,children:`Transparent`})]}),args:{children:`Действие`}},g={render:()=>(0,d.jsxs)(`div`,{style:{display:`grid`,gap:12,gridTemplateColumns:`repeat(auto-fit, minmax(180px, 1fr))`},children:[(0,d.jsx)(l,{tone:`neutral`,appearance:`solid`,children:`Neutral Solid`}),(0,d.jsx)(l,{tone:`neutral`,appearance:`outline`,children:`Neutral Outline`}),(0,d.jsx)(l,{tone:`neutral`,appearance:`ghost`,children:`Neutral Ghost`}),(0,d.jsx)(l,{tone:`info`,appearance:`outline`,children:`Info Outline`}),(0,d.jsx)(l,{tone:`success`,appearance:`solid`,children:`Success Solid`}),(0,d.jsx)(l,{tone:`error`,appearance:`transparent`,children:`Error Transparent`})]})},_={render:()=>(0,d.jsxs)(`div`,{style:{display:`flex`,gap:12,flexWrap:`wrap`},children:[(0,d.jsx)(l,{icon:(0,d.jsx)(r,{}),children:`Скачать`}),(0,d.jsx)(l,{icon:(0,d.jsx)(i,{}),tone:`info`,appearance:`solid`,children:`Создать`}),(0,d.jsx)(l,{icon:(0,d.jsx)(s,{}),iconEnd:!0,tone:`success`,appearance:`solid`,children:`Подтвердить`}),(0,d.jsx)(l,{icon:(0,d.jsx)(a,{}),title:`Уведомления`})]}),args:{children:`Действие`}},m.parameters={...m.parameters,docs:{...m.parameters?.docs,source:{originalSource:`{
1
+ import{a as e,i as t}from"./preload-helper-B45gAKPr.js";import{t as n}from"./jsx-runtime-BBQGix-2.js";import{P as r,b as i,mt as a,t as o,ut as s}from"./lucide-react-p2Eti-TY.js";import{n as c,t as l}from"./Button-CSAUZh28.js";var u=e({Basic:()=>m,ComposableScheme:()=>g,Variants:()=>h,WithIcons:()=>_,__namedExportsOrder:()=>v,default:()=>p}),d,f,p,m,h,g,_,v,y=t((()=>{o(),c(),d=n(),{fn:f}=__STORYBOOK_MODULE_TEST__,p={title:`Shared/UI/Button`,component:l,args:{children:`Действие`,variant:`neutralOutline`,disabled:!1,iconEnd:!1,onClick:f()},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{children:{description:`Текстовое содержимое кнопки.`,control:`text`},variant:{description:"Готовая схема для обратной совместимости. Если заданы `tone` или `appearance`, они имеют приоритет.",control:`select`,options:[`neutral`,`neutralOutline`,`ghost`,`error`,`warning`,`success`,`info`,`errorOutline`,`warningOutline`,`successOutline`,`infoOutline`,`transparent`]},tone:{description:`Семантический тон кнопки.`,control:`inline-radio`,options:[`neutral`,`error`,`warning`,`success`,`info`]},appearance:{description:`Визуальная форма кнопки.`,control:`inline-radio`,options:[`solid`,`outline`,`ghost`,`transparent`]},icon:{description:`Иконка слева или справа от текста.`,control:!1},iconEnd:{description:`Перемещает иконку в конец кнопки.`,control:`boolean`},title:{description:"Текст тултипа и `aria-label` для кнопки.",control:`text`},disabled:{description:`Блокирует нажатие.`,control:`boolean`},onClick:{description:`Вызывается при нажатии на кнопку.`,control:!1},className:{description:`Дополнительный CSS-класс.`,control:`text`}}},m={},h={render:()=>(0,d.jsxs)(`div`,{style:{display:`grid`,gap:12,gridTemplateColumns:`repeat(auto-fit, minmax(180px, 1fr))`},children:[(0,d.jsx)(l,{variant:`neutral`,children:`Neutral Solid`}),(0,d.jsx)(l,{variant:`neutralOutline`,children:`Neutral Outline`}),(0,d.jsx)(l,{variant:`ghost`,children:`Ghost`}),(0,d.jsx)(l,{variant:`info`,children:`Info Solid`}),(0,d.jsx)(l,{variant:`success`,children:`Success Solid`}),(0,d.jsx)(l,{variant:`warning`,children:`Warning Solid`}),(0,d.jsx)(l,{variant:`error`,children:`Error Solid`}),(0,d.jsx)(l,{variant:`infoOutline`,children:`Info Outline`}),(0,d.jsx)(l,{variant:`successOutline`,children:`Success Outline`}),(0,d.jsx)(l,{variant:`warningOutline`,children:`Warning Outline`}),(0,d.jsx)(l,{variant:`errorOutline`,children:`Error Outline`}),(0,d.jsx)(l,{variant:`transparent`,children:`Transparent`})]}),args:{children:`Действие`}},g={render:()=>(0,d.jsxs)(`div`,{style:{display:`grid`,gap:12,gridTemplateColumns:`repeat(auto-fit, minmax(180px, 1fr))`},children:[(0,d.jsx)(l,{tone:`neutral`,appearance:`solid`,children:`Neutral Solid`}),(0,d.jsx)(l,{tone:`neutral`,appearance:`outline`,children:`Neutral Outline`}),(0,d.jsx)(l,{tone:`neutral`,appearance:`ghost`,children:`Neutral Ghost`}),(0,d.jsx)(l,{tone:`info`,appearance:`outline`,children:`Info Outline`}),(0,d.jsx)(l,{tone:`success`,appearance:`solid`,children:`Success Solid`}),(0,d.jsx)(l,{tone:`error`,appearance:`transparent`,children:`Error Transparent`})]})},_={render:()=>(0,d.jsxs)(`div`,{style:{display:`flex`,gap:12,flexWrap:`wrap`},children:[(0,d.jsx)(l,{icon:(0,d.jsx)(r,{}),children:`Скачать`}),(0,d.jsx)(l,{icon:(0,d.jsx)(i,{}),tone:`info`,appearance:`solid`,children:`Создать`}),(0,d.jsx)(l,{icon:(0,d.jsx)(s,{}),iconEnd:!0,tone:`success`,appearance:`solid`,children:`Подтвердить`}),(0,d.jsx)(l,{icon:(0,d.jsx)(a,{}),title:`Уведомления`})]}),args:{children:`Действие`}},m.parameters={...m.parameters,docs:{...m.parameters?.docs,source:{originalSource:`{
2
2
  // play: async function ({ args, canvas, userEvent }) {
3
3
  // const button = canvas.getByRole("button", { name: /button/i });
4
4
  // // 👇 Simulate behavior