@ryuzaki13/react-foundation-ui 3.8.3 → 3.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (389) hide show
  1. package/dist/base-table/index.js +1 -1
  2. package/dist/chunks/{TextEditorLexicalClient-U-sTxmCU.js → TextEditorLexicalClient-BQH41FFT.js} +2 -2
  3. package/dist/chunks/{TextEditorLexicalClient-U-sTxmCU.js.map → TextEditorLexicalClient-BQH41FFT.js.map} +1 -1
  4. package/dist/chunks/{base-table-BMesCx6H.js → base-table-9H5YuVvB.js} +2 -2
  5. package/dist/chunks/{base-table-BMesCx6H.js.map → base-table-9H5YuVvB.js.map} +1 -1
  6. package/dist/chunks/{context-menu-CrSXJxQL.js → context-menu-BV8636Ou.js} +2 -2
  7. package/dist/chunks/{context-menu-CrSXJxQL.js.map → context-menu-BV8636Ou.js.map} +1 -1
  8. package/dist/chunks/{date-input-CzCDou4s.js → date-input-B7iG9cA7.js} +2 -2
  9. package/dist/chunks/{date-input-CzCDou4s.js.map → date-input-B7iG9cA7.js.map} +1 -1
  10. package/dist/chunks/{input-CuRK9Vbz.js → input-KXI7o06g.js} +7 -7
  11. package/dist/chunks/input-KXI7o06g.js.map +1 -0
  12. package/dist/chunks/{input-files-B8j6Pb_M.js → input-files-CnBNlJo0.js} +2 -2
  13. package/dist/chunks/{input-files-B8j6Pb_M.js.map → input-files-CnBNlJo0.js.map} +1 -1
  14. package/dist/chunks/{picker-SJXnHwsj.js → picker-DagDe9OH.js} +17 -16
  15. package/dist/chunks/picker-DagDe9OH.js.map +1 -0
  16. package/dist/chunks/select-C-1U-ujV.js +368 -0
  17. package/dist/chunks/select-C-1U-ujV.js.map +1 -0
  18. package/dist/chunks/{table-OvvWkKfy.js → table-BRC1OTyE.js} +2 -2
  19. package/dist/chunks/{table-OvvWkKfy.js.map → table-BRC1OTyE.js.map} +1 -1
  20. package/dist/context-menu/index.js +1 -1
  21. package/dist/date-input/index.js +1 -1
  22. package/dist/date-time-input/index.js +1 -1
  23. package/dist/drop-zone/index.js +1 -1
  24. package/dist/image/index.js +2 -2
  25. package/dist/input/Input.d.ts +2 -2
  26. package/dist/input/Input.d.ts.map +1 -1
  27. package/dist/input/index.js +1 -1
  28. package/dist/input-date-time/index.js +1 -1
  29. package/dist/input-file/index.js +1 -1
  30. package/dist/input-files/index.js +1 -1
  31. package/dist/input-image/index.js +1 -1
  32. package/dist/input-search/index.js +1 -1
  33. package/dist/layout-picker/index.js +1 -1
  34. package/dist/listbox/index.js +1 -1
  35. package/dist/multi-select/index.js +171 -161
  36. package/dist/multi-select/index.js.map +1 -1
  37. package/dist/multi-select/ui/DeprecatedMultiSelect.d.ts +2 -0
  38. package/dist/multi-select/ui/DeprecatedMultiSelect.d.ts.map +1 -1
  39. package/dist/multi-select/ui/MultiSelect.d.ts +3 -0
  40. package/dist/multi-select/ui/MultiSelect.d.ts.map +1 -1
  41. package/dist/multi-select/ui/MultiSelectCore.d.ts +1 -1
  42. package/dist/multi-select/ui/MultiSelectCore.d.ts.map +1 -1
  43. package/dist/multi-select/ui/ODataDependentSegmentMultiSelect.d.ts.map +1 -1
  44. package/dist/multi-select/ui/ODataMultiSelect.d.ts +5 -2
  45. package/dist/multi-select/ui/ODataMultiSelect.d.ts.map +1 -1
  46. package/dist/multi-select/ui/SerializableMultiSelect.d.ts +3 -1
  47. package/dist/multi-select/ui/SerializableMultiSelect.d.ts.map +1 -1
  48. package/dist/odata-dependent/ODataDependentSegmentControlProps.d.ts +4 -0
  49. package/dist/odata-dependent/ODataDependentSegmentControlProps.d.ts.map +1 -1
  50. package/dist/period-select/PeriodSelect.d.ts +2 -0
  51. package/dist/period-select/PeriodSelect.d.ts.map +1 -1
  52. package/dist/period-select/index.js.map +1 -1
  53. package/dist/picker/PickerField.d.ts +1 -1
  54. package/dist/picker/PickerField.d.ts.map +1 -1
  55. package/dist/picker/PickerTriggerInput.d.ts.map +1 -1
  56. package/dist/picker/index.js +1 -1
  57. package/dist/picker/types.d.ts +2 -0
  58. package/dist/picker/types.d.ts.map +1 -1
  59. package/dist/preset-range-date-input/index.js +1 -1
  60. package/dist/preset-select/PresetSelect.d.ts +2 -0
  61. package/dist/preset-select/PresetSelect.d.ts.map +1 -1
  62. package/dist/preset-select/index.js +1 -1
  63. package/dist/preset-select/index.js.map +1 -1
  64. package/dist/select/ODataDependentSegmentSelect.d.ts.map +1 -1
  65. package/dist/select/ODataSelect.d.ts +3 -1
  66. package/dist/select/ODataSelect.d.ts.map +1 -1
  67. package/dist/select/Select.d.ts +3 -0
  68. package/dist/select/Select.d.ts.map +1 -1
  69. package/dist/select/SerializableSelect.d.ts +3 -1
  70. package/dist/select/SerializableSelect.d.ts.map +1 -1
  71. package/dist/select/index.js +1 -1
  72. package/dist/simple-table/index.js +1 -1
  73. package/dist/slider/index.js +2 -2
  74. package/dist/state-select/StateSelect.d.ts +3 -1
  75. package/dist/state-select/StateSelect.d.ts.map +1 -1
  76. package/dist/state-select/index.js +10 -8
  77. package/dist/state-select/index.js.map +1 -1
  78. package/dist/table/index.js +1 -1
  79. package/dist/table-editor/index.js +1 -1
  80. package/dist/table-sorting/index.js +1 -1
  81. package/dist/tag-input/index.js +1 -1
  82. package/dist/text-editor/index.js +1 -1
  83. package/dist/textarea/index.js +1 -1
  84. package/dist/tree-select/ODataTreeMultiSelect.d.ts +3 -1
  85. package/dist/tree-select/ODataTreeMultiSelect.d.ts.map +1 -1
  86. package/dist/tree-select/ODataTreeSelect.d.ts +3 -1
  87. package/dist/tree-select/ODataTreeSelect.d.ts.map +1 -1
  88. package/dist/tree-select/TreeMultiSelect.d.ts +4 -1
  89. package/dist/tree-select/TreeMultiSelect.d.ts.map +1 -1
  90. package/dist/tree-select/TreePickerBase.d.ts +3 -1
  91. package/dist/tree-select/TreePickerBase.d.ts.map +1 -1
  92. package/dist/tree-select/TreeSelect.d.ts +4 -1
  93. package/dist/tree-select/TreeSelect.d.ts.map +1 -1
  94. package/dist/tree-select/index.js +271 -259
  95. package/dist/tree-select/index.js.map +1 -1
  96. package/dist/tree-table/index.js +1 -1
  97. package/package.json +1 -1
  98. package/storybook-static/assets/{Badge-Exgo2liR.js → Badge-CL58JilM.js} +1 -1
  99. package/storybook-static/assets/{Badge.stories-BSZPB2hP.js → Badge.stories-CXFTvV3D.js} +1 -1
  100. package/storybook-static/assets/{BadgeList-vXAflISJ.js → BadgeList-DLssobfd.js} +1 -1
  101. package/storybook-static/assets/{BarcodeScannerDialog.stories-B5JJTqxe.js → BarcodeScannerDialog.stories-CpMywpKq.js} +1 -1
  102. package/storybook-static/assets/{Button-W5ftYk1w.js → Button-CSbLv1K7.js} +1 -1
  103. package/storybook-static/assets/{Button-BzRtAjtM.js → Button-DMAPWgMI.js} +1 -1
  104. package/storybook-static/assets/{Button.stories-DcuEJMqp.js → Button.stories-CU1kYMvA.js} +1 -1
  105. package/storybook-static/assets/{CalendarView-C8taheM_.js → CalendarView-DuCLo_x5.js} +1 -1
  106. package/storybook-static/assets/{CheckBox-C-EWY4_-.js → CheckBox-BBPasWSk.js} +1 -1
  107. package/storybook-static/assets/{CheckBox-Cahw6EU8.js → CheckBox-Bfcdvr2o.js} +1 -1
  108. package/storybook-static/assets/{CheckBox.stories-DL49eu_s.js → CheckBox.stories-sGH6EuU4.js} +1 -1
  109. package/storybook-static/assets/{Color-6AOWCN3U-B0iuSBAP.js → Color-6AOWCN3U-5NJhf8m9.js} +1 -1
  110. package/storybook-static/assets/{ContextMenu-DqLKk-wW.js → ContextMenu-CxuYkXjJ.js} +1 -1
  111. package/storybook-static/assets/{ContextMenu-k1Mubm6h.js → ContextMenu-z6NKmD0I.js} +1 -1
  112. package/storybook-static/assets/{ContextMenu.stories-CNnrfTxO.js → ContextMenu.stories-CI5IW_KX.js} +1 -1
  113. package/storybook-static/assets/{DateInput-CgBBiqYK.js → DateInput-A8NURpCX.js} +1 -1
  114. package/storybook-static/assets/{DateInput-NSuuc0Vu.js → DateInput-BkCbK0M5.js} +1 -1
  115. package/storybook-static/assets/{DateInput.stories-eWY9Pqwp.js → DateInput.stories-DnzeyBpg.js} +1 -1
  116. package/storybook-static/assets/{DateRangePresetSelect-Ch6rsktY.js → DateRangePresetSelect-Bh7qMFTr.js} +1 -1
  117. package/storybook-static/assets/{DateRangePresetSelect-DibXoV_U.js → DateRangePresetSelect-CGZkf8Ty.js} +1 -1
  118. package/storybook-static/assets/{DateRangePresetSelect.stories-B8yndfPd.js → DateRangePresetSelect.stories-Drm2FCnJ.js} +1 -1
  119. package/storybook-static/assets/{DeprecatedMultiSelect-D8BCr3qw.js → DeprecatedMultiSelect-8TWWhsLi.js} +1 -1
  120. package/storybook-static/assets/{DeprecatedMultiSelect-1K4GSVRr.js → DeprecatedMultiSelect-BebYsPmQ.js} +1 -1
  121. package/storybook-static/assets/{DeprecatedMultiSelect.stories-DH7fIprL.js → DeprecatedMultiSelect.stories-7iL6YOgh.js} +1 -1
  122. package/storybook-static/assets/{Detail-CzQ7DLhL.js → Detail-BOZkPwOI.js} +1 -1
  123. package/storybook-static/assets/{Detail.stories-DzmSAGkt.js → Detail.stories-RZALoKmD.js} +1 -1
  124. package/storybook-static/assets/{Dialog-DEDDnDtQ.js → Dialog-BsslYClj.js} +1 -1
  125. package/storybook-static/assets/{Dialog-Cm7gLcJI.js → Dialog-CeukIYpx.js} +1 -1
  126. package/storybook-static/assets/{Dialog.stories-BzvBjaiX.js → Dialog.stories-y7MpdGQr.js} +1 -1
  127. package/storybook-static/assets/{Disclosure-Bpji7KuP.js → Disclosure-CiTnWx5y.js} +1 -1
  128. package/storybook-static/assets/{Disclosure.stories-Bwuzf5fl.js → Disclosure.stories-UWW9oheF.js} +1 -1
  129. package/storybook-static/assets/{DisclosureGroup-bCpsF5YE.js → DisclosureGroup-CT3BdQXr.js} +1 -1
  130. package/storybook-static/assets/{DocsRenderer-JROSPFPF-DQRIOLjc.js → DocsRenderer-JROSPFPF-x50rjjKP.js} +1 -1
  131. package/storybook-static/assets/{DropZone-Diu_Hlgs.js → DropZone-DUn9vW2w.js} +1 -1
  132. package/storybook-static/assets/{DropZone-qvCLdJmm.js → DropZone-gWSeoAx6.js} +1 -1
  133. package/storybook-static/assets/{DropZone.stories-DHgexefI.js → DropZone.stories-CmaVl9to.js} +1 -1
  134. package/storybook-static/assets/{DropdownMenu-Bl2IPF3Q.js → DropdownMenu-DkeS8gOF.js} +1 -1
  135. package/storybook-static/assets/{ExpandableActionPanel-B3iQGrX8.js → ExpandableActionPanel-DdqWZDe2.js} +1 -1
  136. package/storybook-static/assets/{ExpandableActionPanel.stories-DRnMPxSP.js → ExpandableActionPanel.stories-CA-dpb07.js} +1 -1
  137. package/storybook-static/assets/{Flex-CrWmRoxc.js → Flex-DpQpF63N.js} +1 -1
  138. package/storybook-static/assets/{Flex.stories-Db20If9k.js → Flex.stories-DtlKiJno.js} +1 -1
  139. package/storybook-static/assets/{FlexContainer-YYPiKtpT.js → FlexContainer-C1d63I55.js} +1 -1
  140. package/storybook-static/assets/{FlexItem-CXY6tvoB.js → FlexItem-DsoW-br3.js} +1 -1
  141. package/storybook-static/assets/{FloatingPopover-DSRofmW2.js → FloatingPopover-7MpESGU4.js} +1 -1
  142. package/storybook-static/assets/{FormattedTableCell-B-t0D2oX.js → FormattedTableCell-B4RRbSFK.js} +1 -1
  143. package/storybook-static/assets/{Grid-Ad2q9giD.js → Grid-DsCUaz46.js} +1 -1
  144. package/storybook-static/assets/{Grid-CUmJniwF.js → Grid-eqZxtRIA.js} +1 -1
  145. package/storybook-static/assets/{Grid.stories-CsohhjMJ.js → Grid.stories-DAGg0GWi.js} +1 -1
  146. package/storybook-static/assets/{GridContainer-DfZnU_h-.js → GridContainer-B9JaLUGE.js} +1 -1
  147. package/storybook-static/assets/{ImageCropper.stories-Bdg7E1B6.js → ImageCropper.stories-W76XOOMv.js} +1 -1
  148. package/storybook-static/assets/{ImageRenderer-DEsg7Nf5.js → ImageRenderer-DYg7BkPO.js} +1 -1
  149. package/storybook-static/assets/{ImageRenderer.stories-C2uPYFbK.js → ImageRenderer.stories-rgJV0OBp.js} +1 -1
  150. package/storybook-static/assets/{ImageView.stories-qFIo_3jG.js → ImageView.stories-D9h6sg3j.js} +1 -1
  151. package/storybook-static/assets/{ImageViewer.stories-D6RoxWRG.js → ImageViewer.stories-Bd0WJOp1.js} +2 -2
  152. package/storybook-static/assets/{ImageViewerRuntime-DEVRfnpp.js → ImageViewerRuntime-DOjvjbv0.js} +1 -1
  153. package/storybook-static/assets/Input-7N70tL0u.js +3 -0
  154. package/storybook-static/assets/{Input-CXSVW4qb.js → Input-BxrxwNyD.js} +1 -1
  155. package/storybook-static/assets/{Input.stories-CKUo8mda.js → Input.stories-Df1j802b.js} +1 -1
  156. package/storybook-static/assets/{InputDateTime-CBgevl2k.js → InputDateTime-UdemHZXV.js} +1 -1
  157. package/storybook-static/assets/{InputDateTime.stories-Dc_yRirT.js → InputDateTime.stories-yRwAe5_5.js} +1 -1
  158. package/storybook-static/assets/{InputFile-VkGuvstd.js → InputFile-5LpFR1Fq.js} +1 -1
  159. package/storybook-static/assets/{InputFile-BX9qIipq.js → InputFile-DDhf7A_J.js} +1 -1
  160. package/storybook-static/assets/{InputFile.stories-VernHNAn.js → InputFile.stories-BVDT-BAx.js} +1 -1
  161. package/storybook-static/assets/{InputFiles-BpSb2G11.js → InputFiles-CgM2BwNO.js} +1 -1
  162. package/storybook-static/assets/{InputFiles-CRFuNd-6.js → InputFiles-D3CPIXiK.js} +1 -1
  163. package/storybook-static/assets/{InputFiles.stories-CfrGV2lA.js → InputFiles.stories-XMHBA9Fn.js} +1 -1
  164. package/storybook-static/assets/{InputFilesList-BoL4jQmC.js → InputFilesList-DSivq9iT.js} +1 -1
  165. package/storybook-static/assets/{InputImage-BKfXCZHx.js → InputImage-BG_QyAh3.js} +1 -1
  166. package/storybook-static/assets/{InputImage-BcUm7aKp.js → InputImage-CY0A9Xz-.js} +1 -1
  167. package/storybook-static/assets/{InputImage.stories-l1xnaTXn.js → InputImage.stories-DiGXytZU.js} +1 -1
  168. package/storybook-static/assets/{InteractiveComponents-DKix-b3k.js → InteractiveComponents-Bf9KitNR.js} +5 -5
  169. package/storybook-static/assets/{InteractiveComponents.stories-CK118Tbj.js → InteractiveComponents.stories-TwALUGGN.js} +1 -1
  170. package/storybook-static/assets/{LayoutPicker-Ca57uusp.js → LayoutPicker-BLrNe8g_.js} +1 -1
  171. package/storybook-static/assets/{LayoutPicker-BqI2-D2r.js → LayoutPicker-MhA9N4WI.js} +1 -1
  172. package/storybook-static/assets/{LayoutPicker.stories-BDRBBnj-.js → LayoutPicker.stories-BCME5Ogr.js} +1 -1
  173. package/storybook-static/assets/{Listbox-lrvI9Fx9.js → Listbox-B8F2xWvs.js} +1 -1
  174. package/storybook-static/assets/{Listbox-D_Qgzkw1.js → Listbox-y_3VijHU.js} +1 -1
  175. package/storybook-static/assets/{Listbox.stories-Djb1uju9.js → Listbox.stories-mp0p0NpO.js} +1 -1
  176. package/storybook-static/assets/{Modal-BpqYaQXu.js → Modal-DgEV0vBs.js} +1 -1
  177. package/storybook-static/assets/{Modal-CLZFIZH2.js → Modal-qIsW7BkG.js} +1 -1
  178. package/storybook-static/assets/{Modal.stories-DNpMq9oL.js → Modal.stories-CQ-Hn4GK.js} +1 -1
  179. package/storybook-static/assets/{ModalManagerProvider-DMlNCo5h.js → ModalManagerProvider-DEoq4q_O.js} +1 -1
  180. package/storybook-static/assets/MultiSelect-D-6XHQUG.js +79 -0
  181. package/storybook-static/assets/{MultiSelect-C593f3VV.js → MultiSelect-PGooEkAK.js} +1 -1
  182. package/storybook-static/assets/MultiSelect.stories-B0JzMViN.js +81 -0
  183. package/storybook-static/assets/MultiSelectCore-B0VbnEBc.js +3 -0
  184. package/storybook-static/assets/{NoData-Bvl_1jH4.js → NoData-DCuuvSoD.js} +1 -1
  185. package/storybook-static/assets/{NotificationsHost-CdPm_hcB.js → NotificationsHost-CWqG91Yh.js} +1 -1
  186. package/storybook-static/assets/{NotificationsHost.stories-Bo_dwZZe.js → NotificationsHost.stories-CEp-AppV.js} +1 -1
  187. package/storybook-static/assets/{ODataMultiSelect-BVlJ8U90.js → ODataMultiSelect-CwVneYzi.js} +1 -1
  188. package/storybook-static/assets/{ODataMultiSelect.stories-CqHpctYU.js → ODataMultiSelect.stories-BRnVOZsK.js} +1 -1
  189. package/storybook-static/assets/{ODataSelect-BCl-z6Sg.js → ODataSelect-DyKTFqk7.js} +1 -1
  190. package/storybook-static/assets/ODataSelect.stories-B-3GaeU4.js +148 -0
  191. package/storybook-static/assets/{ODataTreeMultiSelect-1CrmEPOx.js → ODataTreeMultiSelect-16xNi9qI.js} +1 -1
  192. package/storybook-static/assets/{ODataTreeMultiSelect.stories-B2YMNMyr.js → ODataTreeMultiSelect.stories-DI9tH2qD.js} +1 -1
  193. package/storybook-static/assets/{ODataTreeSelect-BqP9H4QH.js → ODataTreeSelect-Dk262plK.js} +1 -1
  194. package/storybook-static/assets/{ODataTreeSelect.stories-x_GCdGW8.js → ODataTreeSelect.stories-DfaL0dci.js} +1 -1
  195. package/storybook-static/assets/{OneStepScroller-B1H-Yg0P.js → OneStepScroller-DI8qlm5c.js} +1 -1
  196. package/storybook-static/assets/{Option-ChGr-plg.js → Option-CG3bU2cY.js} +1 -1
  197. package/storybook-static/assets/{OptionButton-D6mT04a1.js → OptionButton-DF0E8aU5.js} +1 -1
  198. package/storybook-static/assets/{OptionContent-CXc6K3fK.js → OptionContent-BZ3FiJQ4.js} +1 -1
  199. package/storybook-static/assets/{OptionContentContainer-D0p7mbft.js → OptionContentContainer-CyI5IfqU.js} +1 -1
  200. package/storybook-static/assets/{PeriodSelect-CpnYgcOA.js → PeriodSelect-_gAbt3E6.js} +1 -1
  201. package/storybook-static/assets/{PeriodSelect-Bm9WdjpG.js → PeriodSelect-uR-Xk4vQ.js} +1 -1
  202. package/storybook-static/assets/{PeriodSelect.stories-4Im6GLjq.js → PeriodSelect.stories-D-Lp7QtA.js} +1 -1
  203. package/storybook-static/assets/PickerField-CByAoAAO.js +1 -0
  204. package/storybook-static/assets/{PickerTriggerActions-BCupttoF.js → PickerTriggerActions-CYM-UvRz.js} +1 -1
  205. package/storybook-static/assets/{Popover-CbgP8DJy.js → Popover-CRcVoLur.js} +1 -1
  206. package/storybook-static/assets/{Popover-CCHTXorF.js → Popover-CdnsB1ss.js} +1 -1
  207. package/storybook-static/assets/{Popover.stories-zZ2fYcQb.js → Popover.stories-Dxdt7Jc5.js} +1 -1
  208. package/storybook-static/assets/{PresetRangeDateInput-D-Xf5CL3.js → PresetRangeDateInput-BQkK3Nmd.js} +1 -1
  209. package/storybook-static/assets/{PresetRangeDateInput-cmWbFoHz.js → PresetRangeDateInput-BmAGj8ye.js} +1 -1
  210. package/storybook-static/assets/{PresetRangeDateInput.stories-C3VxU77P.js → PresetRangeDateInput.stories-CUIwCB6T.js} +1 -1
  211. package/storybook-static/assets/{PresetSelect-BmTJNeUt.js → PresetSelect-C7HG9CjN.js} +2 -2
  212. package/storybook-static/assets/{README-Bl2m1JMK.js → README-9DTI05kd.js} +1 -1
  213. package/storybook-static/assets/{README-DEOe-D4O.js → README-B-ihyEBx.js} +1 -1
  214. package/storybook-static/assets/{README-B_TP46xP.js → README-B0iHgO_3.js} +1 -1
  215. package/storybook-static/assets/{README-DcMAIy3x.js → README-B1GSwjas.js} +1 -1
  216. package/storybook-static/assets/{README-lHhj1ioe.js → README-BAjs7T_d.js} +1 -1
  217. package/storybook-static/assets/{README-BcSaq4c4.js → README-BEYMpavt.js} +1 -1
  218. package/storybook-static/assets/{README-DVPc9Io_.js → README-BL0-uTlP.js} +1 -1
  219. package/storybook-static/assets/{README-EmDsFxzc.js → README-BR8bdUjV.js} +1 -1
  220. package/storybook-static/assets/{README-jg6CIybs.js → README-BUnl1FiN.js} +1 -1
  221. package/storybook-static/assets/{README-BC4nu9of.js → README-BbUo3mGT.js} +1 -1
  222. package/storybook-static/assets/{README-BiyBf-O3.js → README-Bdir2bPK.js} +1 -1
  223. package/storybook-static/assets/{README-BMXu-jQk.js → README-BmwSZfOQ.js} +1 -1
  224. package/storybook-static/assets/{README-IkL3xuvr.js → README-BquP2lux.js} +1 -1
  225. package/storybook-static/assets/{README-Cu9QJjVK.js → README-BurB0dhj.js} +1 -1
  226. package/storybook-static/assets/{README-DLtEU6xV.js → README-ByIhL9zr.js} +1 -1
  227. package/storybook-static/assets/{README-DFF21yas.js → README-ByT9u_7g.js} +1 -1
  228. package/storybook-static/assets/{README-BkJ_PjJk.js → README-C41zKsq6.js} +1 -1
  229. package/storybook-static/assets/{README-HRwASuVm.js → README-C5-oc7fP.js} +1 -1
  230. package/storybook-static/assets/{README-CnX5IOsQ.js → README-C7NhXX-n.js} +1 -1
  231. package/storybook-static/assets/{README-T35eDlrl.js → README-C8jcwgeL.js} +1 -1
  232. package/storybook-static/assets/{README-DkgiAGPo.js → README-CNnGqdkH.js} +1 -1
  233. package/storybook-static/assets/{README-B7kN5fdq.js → README-CQlujiXR.js} +1 -1
  234. package/storybook-static/assets/{README-BZW-Ku8G.js → README-CTBkJ27k.js} +1 -1
  235. package/storybook-static/assets/{README-BsvaCxyJ.js → README-CTGZXXVP.js} +1 -1
  236. package/storybook-static/assets/{README-B3bdpv3F.js → README-CUghXL33.js} +1 -1
  237. package/storybook-static/assets/{README-xMu2rAZ4.js → README-CiJ5wkhQ.js} +1 -1
  238. package/storybook-static/assets/{README-CaZGDS4o.js → README-CoENtXo_.js} +1 -1
  239. package/storybook-static/assets/{README-UcG-T3oc.js → README-CoQeAVdv.js} +1 -1
  240. package/storybook-static/assets/{README-k2-wWcjY.js → README-CpJmZHQJ.js} +1 -1
  241. package/storybook-static/assets/{README-zF7TglyH.js → README-CtZBJdo2.js} +1 -1
  242. package/storybook-static/assets/{README-BfbEWAVW.js → README-CvP9yRMR.js} +1 -1
  243. package/storybook-static/assets/{README-CLTYPp6T.js → README-D-urpNSn.js} +1 -1
  244. package/storybook-static/assets/{README-3VGZSgWz.js → README-DAH3lVWd.js} +1 -1
  245. package/storybook-static/assets/{README-CXLnU8PY.js → README-DCWk-Vga.js} +1 -1
  246. package/storybook-static/assets/{README-5uy1ulgc.js → README-DMZYAdN0.js} +1 -1
  247. package/storybook-static/assets/{README-C_zVigpw.js → README-DNrPuueH.js} +1 -1
  248. package/storybook-static/assets/{README-D7IHIZJQ.js → README-DQ1aeQ_i.js} +1 -1
  249. package/storybook-static/assets/{README-vCy3YlCq.js → README-DTMZk60G.js} +1 -1
  250. package/storybook-static/assets/{README-CwqRXSIJ.js → README-DY7lgi4q.js} +1 -1
  251. package/storybook-static/assets/{README-Bc63jJ_g.js → README-DaaS2c7L.js} +1 -1
  252. package/storybook-static/assets/{README-Dv4LnFqu.js → README-De3j71sQ.js} +1 -1
  253. package/storybook-static/assets/{README-DnkVTJ7s.js → README-DevTRU4A.js} +1 -1
  254. package/storybook-static/assets/{README-CZciBX1A.js → README-DfRan6KR.js} +1 -1
  255. package/storybook-static/assets/{README-C4vu077M.js → README-Dhptn6UE.js} +1 -1
  256. package/storybook-static/assets/{README-BRE26E-6.js → README-DxTRj-9a.js} +1 -1
  257. package/storybook-static/assets/{README-Bfp-2y9L.js → README-DyKegKG_.js} +1 -1
  258. package/storybook-static/assets/{README-BW8ukk_3.js → README-KCmlmH_Z.js} +1 -1
  259. package/storybook-static/assets/{README-Iwf47F8s.js → README-VNB_Dj5F.js} +1 -1
  260. package/storybook-static/assets/{README-DXajBW2j.js → README-_8pxMMC7.js} +1 -1
  261. package/storybook-static/assets/{README-BeMdGWkW.js → README-j-Czw7ww.js} +1 -1
  262. package/storybook-static/assets/{README-DEtA9vXg.js → README-n4utUGcX.js} +1 -1
  263. package/storybook-static/assets/{README-Bf9aqOSG.js → README-xrMkjHIm.js} +1 -1
  264. package/storybook-static/assets/{README-CjwMWiHf.js → README-zlaX5PMG.js} +1 -1
  265. package/storybook-static/assets/{RadioButton-Cy_jQtud.js → RadioButton-CDIyYuS9.js} +1 -1
  266. package/storybook-static/assets/{RadioButton-BBfQWcy3.js → RadioButton-DV8K96H6.js} +1 -1
  267. package/storybook-static/assets/{RadioButton.stories-9V4bon68.js → RadioButton.stories-CRNqKsyz.js} +1 -1
  268. package/storybook-static/assets/{RadioGroup-TwFpisuE.js → RadioGroup-BnYFRvmn.js} +1 -1
  269. package/storybook-static/assets/{RadioGroup-BndgLwX8.js → RadioGroup-CIIw962S.js} +1 -1
  270. package/storybook-static/assets/{RadioGroup.stories-DJLxesgz.js → RadioGroup.stories-K4AidbLa.js} +1 -1
  271. package/storybook-static/assets/{Scrollable-DtB02dAG.js → Scrollable-BI1k9ogH.js} +1 -1
  272. package/storybook-static/assets/{Scrollable-pBI6H_we.js → Scrollable-DAghtYuE.js} +1 -1
  273. package/storybook-static/assets/{Scrollable.stories-CahJ5rFA.js → Scrollable.stories-B6Doakiv.js} +1 -1
  274. package/storybook-static/assets/Select-BNHTGJqG.js +66 -0
  275. package/storybook-static/assets/Select-BlnKV8rc.js +12 -0
  276. package/storybook-static/assets/Select.stories-DZPAoL4J.js +86 -0
  277. package/storybook-static/assets/{Separator-BQlVHMcy.js → Separator-BCUzEQRV.js} +1 -1
  278. package/storybook-static/assets/{Separator-BdOz35ux.js → Separator-CiETy9yM.js} +1 -1
  279. package/storybook-static/assets/{Separator.stories-DRmR0Kda.js → Separator.stories-DTzurpM_.js} +1 -1
  280. package/storybook-static/assets/{SerializableSelect-ClSz_VvD.js → SerializableSelect-CnQurr7F.js} +1 -1
  281. package/storybook-static/assets/SerializableSelect.stories-qJaV_fjJ.js +73 -0
  282. package/storybook-static/assets/{ShimmerText-CuhrU7uk.js → ShimmerText-I292TqXa.js} +1 -1
  283. package/storybook-static/assets/{ShimmerText.stories-Djb6DvbN.js → ShimmerText.stories-AKqXqp1k.js} +1 -1
  284. package/storybook-static/assets/{SingleDateTimeInput-hC1Ft3qs.js → SingleDateTimeInput-BrNi93tH.js} +1 -1
  285. package/storybook-static/assets/{SingleDateTimeInput-C4jzvJ05.js → SingleDateTimeInput-DSn0vaW-.js} +1 -1
  286. package/storybook-static/assets/{SingleDateTimeInput.stories-D-HmSpnz.js → SingleDateTimeInput.stories-C910kkYc.js} +1 -1
  287. package/storybook-static/assets/{Slider-u0qKNrgI.js → Slider-CXA5Zwku.js} +1 -1
  288. package/storybook-static/assets/{Slider-WLUfmHyw.js → Slider-DO460-pY.js} +1 -1
  289. package/storybook-static/assets/{Slider.stories-CX8fS5Ax.js → Slider.stories-B874XxeK.js} +1 -1
  290. package/storybook-static/assets/{SliderInput-BEirf0Ys.js → SliderInput-DTidinPI.js} +1 -1
  291. package/storybook-static/assets/{SliderInput-ibTyal5l.js → SliderInput-DsV8o7Yy.js} +1 -1
  292. package/storybook-static/assets/{SliderInput.stories-xuycnRN_.js → SliderInput.stories-CDWNO90y.js} +1 -1
  293. package/storybook-static/assets/{Sortable-p0kUHa8E.js → Sortable-CML34YIF.js} +1 -1
  294. package/storybook-static/assets/{Sortable.stories-BdCtmfnr.js → Sortable.stories-C-_fvnHM.js} +1 -1
  295. package/storybook-static/assets/{Splitter-BzAg1cZ0.js → Splitter-BcuA2qce.js} +1 -1
  296. package/storybook-static/assets/{Splitter.stories-C5zZ4lHf.js → Splitter.stories-CA0-L_Ja.js} +1 -1
  297. package/storybook-static/assets/StateSelect--FDEb4-v.js +4 -0
  298. package/storybook-static/assets/{StateSelect-CyjHfKNv.js → StateSelect-B23bb_PO.js} +1 -1
  299. package/storybook-static/assets/{StateSelect.stories-D94g21N9.js → StateSelect.stories-CEVPThtC.js} +1 -1
  300. package/storybook-static/assets/{StatusIndicator-ylfiroPh.js → StatusIndicator-BbTCS7Ku.js} +1 -1
  301. package/storybook-static/assets/{StatusIndicator.stories-BB7y4KGW.js → StatusIndicator.stories-BIps_Ecm.js} +1 -1
  302. package/storybook-static/assets/{StringToggle.stories-BwuTZAGa.js → StringToggle.stories-vhOfzslq.js} +1 -1
  303. package/storybook-static/assets/{Switch-BXWiUOXs.js → Switch-DibS4nSc.js} +1 -1
  304. package/storybook-static/assets/{Switch-DRLWRp0P.js → Switch-jJgwtWFK.js} +1 -1
  305. package/storybook-static/assets/{Switch.stories-taC_bi5a.js → Switch.stories-Cvky3KQz.js} +1 -1
  306. package/storybook-static/assets/{Table-BYiIQfjA.js → Table-DcNGLEI6.js} +1 -1
  307. package/storybook-static/assets/{Table.stories-B9u81cAN.js → Table.stories-DbEzudxD.js} +1 -1
  308. package/storybook-static/assets/{TableEditor.stories-CG0ULNok.js → TableEditor.stories-Be9nCkds.js} +1 -1
  309. package/storybook-static/assets/{Tabs-BYp06IN2.js → Tabs-CTL4MnkZ.js} +1 -1
  310. package/storybook-static/assets/{Tabs.stories-BCkUYsqs.js → Tabs.stories-CIVbz7kW.js} +1 -1
  311. package/storybook-static/assets/{TabsBox-DBm2a1iA.js → TabsBox-C9g1p4du.js} +1 -1
  312. package/storybook-static/assets/{TagInput-D9gedxBU.js → TagInput-DuJLeiyT.js} +1 -1
  313. package/storybook-static/assets/{TagInput.stories-6eOGQ16t.js → TagInput.stories-BLVFWr-T.js} +1 -1
  314. package/storybook-static/assets/{Text-CcgH9LXI.js → Text-Cr_TUUgL.js} +1 -1
  315. package/storybook-static/assets/{Textarea-DXOTj2Y7.js → Textarea-BImI6Q6v.js} +1 -1
  316. package/storybook-static/assets/{Textarea-aGrLpQXu.js → Textarea-DGaanGLG.js} +1 -1
  317. package/storybook-static/assets/{Textarea.stories-BwqxG2lk.js → Textarea.stories-DvQ2dDNh.js} +1 -1
  318. package/storybook-static/assets/{TimePanel-DroAbbvD.js → TimePanel-Cg2G5Hab.js} +1 -1
  319. package/storybook-static/assets/{TimePanel.stories-DgU6ia4A.js → TimePanel.stories-qy5mb3YN.js} +1 -1
  320. package/storybook-static/assets/{Toggle-BUSzQ1ww.js → Toggle-CroC7YOK.js} +1 -1
  321. package/storybook-static/assets/{Toggle-B7MbU9HB.js → Toggle-Dj8Ic_Ak.js} +1 -1
  322. package/storybook-static/assets/{Toggle.stories-BYU9hS62.js → Toggle.stories-CmyyubM8.js} +1 -1
  323. package/storybook-static/assets/TreeMultiSelect-BHNmPW50.js +1 -0
  324. package/storybook-static/assets/TreeMultiSelect-DBQYLjnA.js +22 -0
  325. package/storybook-static/assets/TreeMultiSelect.stories-BNsE1zgF.js +68 -0
  326. package/storybook-static/assets/TreePickerBase-ZEBy3EVT.js +76 -0
  327. package/storybook-static/assets/TreeSelect-T7G2pkyK.js +1 -0
  328. package/storybook-static/assets/TreeSelect-aiPeW2uJ.js +19 -0
  329. package/storybook-static/assets/TreeSelect.stories-E6ObkYJe.js +40 -0
  330. package/storybook-static/assets/{TreeTable-AIcYVdfl.js → TreeTable-C0ORe5Pe.js} +1 -1
  331. package/storybook-static/assets/{TreeTable.stories-BKbbLMK7.js → TreeTable.stories-PtGT_1X5.js} +1 -1
  332. package/storybook-static/assets/{blocks-Bdsl8TP-.js → blocks-DR4JL0hD.js} +3 -3
  333. package/storybook-static/assets/{check-DGqyuB4O.js → check-PtABqMc1.js} +1 -1
  334. package/storybook-static/assets/{chevron-down-BykqjXRq.js → chevron-down-BaujB0G_.js} +1 -1
  335. package/storybook-static/assets/{chevron-left-Z5uCO076.js → chevron-left-C1SZ4PrE.js} +1 -1
  336. package/storybook-static/assets/{chevron-right-C8yfwmkk.js → chevron-right-CfCjHN8b.js} +1 -1
  337. package/storybook-static/assets/{chunk-W22LQPXL-hfBk2z5K.js → chunk-W22LQPXL-Cis7lFT9.js} +1 -1
  338. package/storybook-static/assets/{circle-alert-C9sxb8DT.js → circle-alert-Mymt-6wl.js} +1 -1
  339. package/storybook-static/assets/{circle-check-BLrYJ_8h.js → circle-check-DzqMvzJX.js} +1 -1
  340. package/storybook-static/assets/{components-xYnqEbBt.js → components-Do91qDh3.js} +3 -3
  341. package/storybook-static/assets/{contextMenu-C-b4jBpY.js → contextMenu-8NKKgKoy.js} +1 -1
  342. package/storybook-static/assets/{download-g1fk8W6J.js → download-Cn6H3Bnv.js} +1 -1
  343. package/storybook-static/assets/{floating-ui.react-cCWtY5RA.js → floating-ui.react-BFqa49jG.js} +1 -1
  344. package/storybook-static/assets/{foundationApi-Ci5vPKh_.js → foundationApi-CChPwNx-.js} +1 -1
  345. package/storybook-static/assets/{foundationLib-DNlIsEyf.js → foundationLib-ClEyfTpa.js} +1 -1
  346. package/storybook-static/assets/{hooks-XqeLihmr.js → hooks-DUKyfcb_.js} +1 -1
  347. package/storybook-static/assets/{iframe-ltYEol2F.js → iframe-1Nw_zWMi.js} +3 -3
  348. package/storybook-static/assets/iframe-BgBwFMGW.js +1 -0
  349. package/storybook-static/assets/{info-CBSXRv7d.js → info-DMI56qGy.js} +1 -1
  350. package/storybook-static/assets/{odata-Dd_3_5NS.js → odata-D9M3xPIL.js} +1 -1
  351. package/storybook-static/assets/{odataStoryFixtures-3lOfs9T6.js → odataStoryFixtures-eHJgW7OK.js} +1 -1
  352. package/storybook-static/assets/{react-BxWB81Qy.js → react-DidV4ORc.js} +1 -1
  353. package/storybook-static/assets/{refresh-cw-FKHfW9eG.js → refresh-cw-B1ChlhvT.js} +1 -1
  354. package/storybook-static/assets/{settings-2-Cz1PtqGa.js → settings-2-BxwqnB9r.js} +1 -1
  355. package/storybook-static/assets/{sortable-BelHSus7.js → sortable-DMBM69Jm.js} +1 -1
  356. package/storybook-static/assets/{syntaxhighlighter-QEQV7K2Y-gGot_qSq.js → syntaxhighlighter-QEQV7K2Y-BJZNAUo-.js} +1 -1
  357. package/storybook-static/assets/{trash-2-BT2kW3r-.js → trash-2-B768_PZU.js} +1 -1
  358. package/storybook-static/assets/{triangle-alert-CPiJJHYc.js → triangle-alert-B8H-k2Bq.js} +1 -1
  359. package/storybook-static/assets/{useODataSelectBase-bPN0T_Xm.js → useODataSelectBase-BKAZcf4R.js} +1 -1
  360. package/storybook-static/assets/{useODataTreeData-CIpE4LZu.js → useODataTreeData-Bxlcmpg8.js} +1 -1
  361. package/storybook-static/assets/{usePickerQuery-OTz4Oze6.js → usePickerQuery-DJj2HmX9.js} +1 -1
  362. package/storybook-static/assets/{usePickerTriggerController-vNC5e_t0.js → usePickerTriggerController-CiD33ccS.js} +2 -2
  363. package/storybook-static/assets/{x-BdAuXjBq.js → x-Dt9SO3SL.js} +1 -1
  364. package/storybook-static/iframe.html +2 -2
  365. package/storybook-static/index.json +1 -1
  366. package/storybook-static/project.json +1 -1
  367. package/dist/chunks/input-CuRK9Vbz.js.map +0 -1
  368. package/dist/chunks/picker-SJXnHwsj.js.map +0 -1
  369. package/dist/chunks/select--oIrv7SC.js +0 -357
  370. package/dist/chunks/select--oIrv7SC.js.map +0 -1
  371. package/storybook-static/assets/Input-b2F0zrLw.js +0 -3
  372. package/storybook-static/assets/MultiSelect-DmC3DaMc.js +0 -76
  373. package/storybook-static/assets/MultiSelect.stories-R6JTKnFI.js +0 -64
  374. package/storybook-static/assets/MultiSelectCore-BaRmQrD-.js +0 -3
  375. package/storybook-static/assets/ODataSelect.stories-Cm-Xkq40.js +0 -148
  376. package/storybook-static/assets/PickerField-w1JCZyzA.js +0 -1
  377. package/storybook-static/assets/Select-BOnv-Uuv.js +0 -63
  378. package/storybook-static/assets/Select-CClfxa48.js +0 -12
  379. package/storybook-static/assets/Select.stories-C0X5pvUk.js +0 -69
  380. package/storybook-static/assets/SerializableSelect.stories-DozN_Quy.js +0 -73
  381. package/storybook-static/assets/StateSelect-bHA1Vf6z.js +0 -4
  382. package/storybook-static/assets/TreeMultiSelect-BhFYUbr0.js +0 -1
  383. package/storybook-static/assets/TreeMultiSelect-CZIyMaIZ.js +0 -20
  384. package/storybook-static/assets/TreeMultiSelect.stories-DG_mdSkQ.js +0 -60
  385. package/storybook-static/assets/TreePickerBase-CbULuQpp.js +0 -76
  386. package/storybook-static/assets/TreeSelect-CMSolQHr.js +0 -17
  387. package/storybook-static/assets/TreeSelect-Cu1BsepL.js +0 -1
  388. package/storybook-static/assets/TreeSelect.stories-B2J0N4ke.js +0 -32
  389. package/storybook-static/assets/iframe-TsWsvoxA.js +0 -1
@@ -1 +1 @@
1
- {"generatedAt":1789825825107,"hasCustomBabel":false,"hasCustomWebpack":false,"hasStaticDirs":false,"hasStorybookEslint":false,"refCount":0,"metaFramework":{"name":"tanstack-react","packageName":"@tanstack/react-router","version":"1.170.32"},"knownPackages":{"testPackages":{"@chromatic-com/storybook":"5.3.0","@storybook/addon-vitest":"10.5.10","@testing-library/dom":"10.4.1","@testing-library/react":"16.3.3","@testing-library/user-event":"^14.6.1","@vitest/browser":"4.1.11","playwright":"1.62.1","vitest":"4.1.11"},"stateManagementPackages":{"zustand":"5.0.0"},"dataFetchingPackages":{"@tanstack/react-query":"5.101.4"},"routerPackages":{"@tanstack/react-router":"1.170.23"}},"hasRouterPackage":false,"packageManager":{"type":"npm","version":"11.7.0","agent":"npm","nodeLinker":"node_modules"},"preview":{"usesGlobals":false},"framework":{"name":"@storybook/react-vite","options":{}},"builder":"@storybook/builder-vite","renderer":"@storybook/react","portableStoriesFileCount":1,"applicationFileCount":9,"storybookVersion":"10.5.10","storybookVersionSpecifier":"^10.5.5","language":"typescript","storybookPackages":{"@storybook/react-vite":{"version":"10.5.10"},"storybook":{}},"addons":{"@chromatic-com/storybook":{"version":"5.3.0"},"@storybook/addon-docs":{"version":"10.5.10"},"@storybook/addon-a11y":{"version":"10.5.10"},"@storybook/addon-vitest":{"version":"10.5.10"}},"packageJsonType":"module"}
1
+ {"generatedAt":1789918585209,"hasCustomBabel":false,"hasCustomWebpack":false,"hasStaticDirs":false,"hasStorybookEslint":false,"refCount":0,"metaFramework":{"name":"tanstack-react","packageName":"@tanstack/react-router","version":"1.170.32"},"knownPackages":{"testPackages":{"@chromatic-com/storybook":"5.3.0","@storybook/addon-vitest":"10.5.10","@testing-library/dom":"10.4.1","@testing-library/react":"16.3.3","@testing-library/user-event":"^14.6.1","@vitest/browser":"4.1.11","playwright":"1.62.1","vitest":"4.1.11"},"stateManagementPackages":{"zustand":"5.0.0"},"dataFetchingPackages":{"@tanstack/react-query":"5.101.4"},"routerPackages":{"@tanstack/react-router":"1.170.23"}},"hasRouterPackage":false,"packageManager":{"type":"npm","version":"11.7.0","agent":"npm","nodeLinker":"node_modules"},"preview":{"usesGlobals":false},"framework":{"name":"@storybook/react-vite","options":{}},"builder":"@storybook/builder-vite","renderer":"@storybook/react","portableStoriesFileCount":1,"applicationFileCount":9,"storybookVersion":"10.5.10","storybookVersionSpecifier":"^10.5.5","language":"typescript","storybookPackages":{"@storybook/react-vite":{"version":"10.5.10"},"storybook":{}},"addons":{"@chromatic-com/storybook":{"version":"5.3.0"},"@storybook/addon-docs":{"version":"10.5.10"},"@storybook/addon-a11y":{"version":"10.5.10"},"@storybook/addon-vitest":{"version":"10.5.10"}},"packageJsonType":"module"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"input-CuRK9Vbz.js","names":[],"sources":["../../src/input/Input.module.scss","../../src/input/lib/useInputFieldIds.ts","../../src/input/Input.tsx","../../src/input/InputErrorComponent.tsx"],"sourcesContent":["@use \"@/styles/mixins\" as *;\n\n.controlLayout {\n\tposition: relative;\n\twidth: 100%;\n}\n\n.inputUI {\n\t--button-size: calc(var(--control-height) - var(--border-width) * 4);\n}\n\n.input {\n\theight: var(--control-height);\n\twidth: 100%;\n\tpadding: var(--space-xs) var(--space-sm);\n\tfont-size: var(--font-size-md);\n\n\t--ui-color: var(--content-0);\n\t--ui-color-hover: var(--content-0);\n\t--ui-color-active: var(--content-0);\n}\n\n.inputNumber {\n\tappearance: textfield;\n\t-moz-appearance: textfield;\n\n\t&::-webkit-inner-spin-button,\n\t&::-webkit-outer-spin-button {\n\t\t-webkit-appearance: none;\n\t\tmargin: 0;\n\t}\n}\n\n.controlWithEndAdornment {\n\tpadding-right: calc(var(--input-end-adornment-width, var(--control-height)) + var(--space-sm));\n}\n\n.controlEndAdornment {\n\tposition: absolute;\n\theight: 100%;\n\ttop: 0;\n\tright: calc(var(--border-width) * 2);\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: flex-end;\n\tmax-width: calc(100% - var(--space-md));\n}\n\n.endAdornmentGroup {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--space-xs);\n}\n\n.clearButton {\n\twidth: var(--button-size);\n\theight: var(--button-size);\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tborder: none;\n\tborder-radius: var(--radius-sm);\n\n\tbackground: transparent;\n\tcolor: var(--content-2);\n\n\ttransition:\n\t\tcolor var(--transition-fast) ease,\n\t\tbackground-color var(--transition-fast) ease;\n\n\t&:hover {\n\t\tcolor: var(--accent-text);\n\t}\n\n\t&:focus-visible {\n\t\t@include focusVisible;\n\t}\n\n\t&:disabled {\n\t\tpointer-events: none;\n\t\topacity: var(--disabled-opacity);\n\t}\n}\n\n.error {\n\tposition: absolute;\n\tz-index: 11;\n\tbottom: calc(var(--space-xs) * -1);\n\tleft: 0;\n\tright: 0;\n\ttransform: translateY(100%);\n\t// font-size: var(--font-size-sm);\n\tcolor: var(--error-on-fill);\n\tbackground: var(--error-fill);\n\tborder-radius: var(--radius-sm);\n\tpadding: var(--space-xs) var(--space-sm);\n\tbox-shadow: var(--shadow-sm);\n\topacity: 0.9;\n}\n","import { useId } from \"react\";\n\nexport interface UseInputFieldIdsOptions {\n\tid?: string;\n\thasLabel?: boolean;\n\thasDescription?: boolean;\n\thasError?: boolean;\n}\n\nexport interface InputFieldIds {\n\tcontrolId: string;\n\tlabelId?: string;\n\tdescriptionId?: string;\n\terrorId?: string;\n\tdescribedBy?: string;\n}\n\nexport function useInputFieldIds({ id: externalId, hasLabel, hasDescription, hasError }: UseInputFieldIdsOptions): InputFieldIds {\n\tconst autoId = useId();\n\tconst controlId = externalId ?? autoId;\n\tconst labelId = hasLabel ? `${controlId}-label` : undefined;\n\tconst descriptionId = hasDescription ? `${controlId}-description` : undefined;\n\tconst errorId = hasError ? `${controlId}-error` : undefined;\n\tconst describedBy = [descriptionId, errorId].filter(Boolean).join(\" \") || undefined;\n\n\treturn {\n\t\tcontrolId,\n\t\tlabelId,\n\t\tdescriptionId,\n\t\terrorId,\n\t\tdescribedBy\n\t};\n}\n","import React, { CSSProperties, InputHTMLAttributes, ReactNode, useLayoutEffect, useRef, useState } from \"react\";\n\nimport { toFiniteNumber } from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { XIcon } from \"lucide-react\";\n\nimport { UiBaseProps, UiSize } from \"../types\";\nimport uiStyles from \"../ui.module.scss\";\n\nimport styles from \"./Input.module.scss\";\nimport { useInputFieldIds } from \"./lib/useInputFieldIds\";\n\nexport interface InputUIProps extends Omit<UiBaseProps<never>, \"value\" | \"onChange\"> {\n\tclassName?: string;\n\terror?: string;\n\tcontrolId?: string;\n\tlabelId?: string;\n\tdescriptionId?: string;\n\terrorId?: string;\n\trequired?: boolean;\n\tchildren: React.ReactNode;\n}\n\nexport interface InputControlRenderProps {\n\tcontrolClassName?: string;\n}\n\nexport interface InputControlProps {\n\tclassName?: string;\n\tendAdornment?: ReactNode;\n\tendAdornmentClassName?: string;\n\tendAdornmentWidth?: string;\n\tchildren: (props: InputControlRenderProps) => ReactNode;\n}\n\nexport interface InputClearButtonProps {\n\tonClick?: () => void;\n\tdisabled?: boolean;\n\tclassName?: string;\n\tariaLabel?: string;\n}\n\nfunction InputLabel({ label, controlId, labelId }: { label: React.ReactNode; controlId?: string; labelId?: string }) {\n\treturn (\n\t\t<label id={labelId} htmlFor={controlId} className={uiStyles.uiLabel}>\n\t\t\t{label}\n\t\t</label>\n\t);\n}\n\nexport function InputLoadingFrame() {\n\treturn <div className={cn(uiStyles.uiInputControlFake, \"skeletonLine\")} />;\n}\n\nexport function InputUIFrame({\n\tlabel,\n\tdescription,\n\tsize,\n\tdisabled,\n\tisLoading,\n\tclassName\n}: Pick<InputUIProps, \"label\" | \"description\" | \"size\" | \"disabled\" | \"className\"> & { isLoading?: boolean }) {\n\tconst { controlId, labelId, descriptionId } = useInputFieldIds({\n\t\thasLabel: label !== undefined && label !== null,\n\t\thasDescription: !!description\n\t});\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(uiStyles.uiElement, uiStyles.uiSizable, size && uiStyles[size as UiSize], uiStyles.disabled, className)}\n\t\t\taria-disabled={disabled || undefined}>\n\t\t\t{label && <InputLabel label={label} controlId={controlId} labelId={labelId} />}\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\t<div className={cn(uiStyles.uiInputControlFake, isLoading && \"skeletonLine\")} />\n\t\t</div>\n\t);\n}\n\nexport function InputUILoading(props: Pick<InputUIProps, \"label\" | \"description\" | \"size\" | \"disabled\" | \"className\">) {\n\treturn <InputUIFrame {...props} isLoading />;\n}\n\n/**\n * Низкоуровневая оболочка поля ввода с общими элементами оформления.\n */\nexport function InputUI({\n\tlabel,\n\tdescription,\n\tdisabled,\n\tclassName,\n\terror,\n\tsize,\n\tcontrolId,\n\tlabelId,\n\tdescriptionId,\n\terrorId,\n\trequired,\n\tchildren\n}: InputUIProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\tstyles.inputUI,\n\t\t\t\tuiStyles.uiElement,\n\t\t\t\tuiStyles.uiSizable,\n\t\t\t\tsize && uiStyles[size as UiSize],\n\t\t\t\tdisabled && uiStyles.disabled,\n\t\t\t\trequired && uiStyles.required,\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\taria-disabled={disabled || undefined}>\n\t\t\t{label && <InputLabel label={label} controlId={controlId} labelId={labelId} />}\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\t<div className={styles.controlLayout}>\n\t\t\t\t{children}\n\n\t\t\t\t{error && (\n\t\t\t\t\t<p id={errorId} className={styles.error} role=\"alert\">\n\t\t\t\t\t\t{error}\n\t\t\t\t\t</p>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nexport function InputControl({ className, endAdornment, endAdornmentClassName, endAdornmentWidth, children }: InputControlProps) {\n\tconst hasEndAdornment = endAdornment !== undefined && endAdornment !== null;\n\tconst style =\n\t\thasEndAdornment && endAdornmentWidth ? ({ \"--input-end-adornment-width\": endAdornmentWidth } as CSSProperties) : undefined;\n\n\treturn (\n\t\t<div className={cn(styles.controlLayout, className)} style={style}>\n\t\t\t{children({ controlClassName: hasEndAdornment ? styles.controlWithEndAdornment : undefined })}\n\t\t\t{hasEndAdornment && <div className={cn(styles.controlEndAdornment, endAdornmentClassName)}>{endAdornment}</div>}\n\t\t</div>\n\t);\n}\n\nexport function InputClearButton({ onClick, disabled, className, ariaLabel = \"Очистить значение\" }: InputClearButtonProps) {\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tdisabled={disabled || !onClick}\n\t\t\tclassName={cn(styles.clearButton, className)}\n\t\t\tonClick={onClick}\n\t\t\taria-label={ariaLabel}>\n\t\t\t<XIcon />\n\t\t</button>\n\t);\n}\n\nfunction resolveEndAdornmentWidth(hasAdornment: boolean, hasClearAction: boolean, explicitWidth?: string) {\n\tif (explicitWidth) {\n\t\treturn explicitWidth;\n\t}\n\n\tif (hasAdornment && hasClearAction) {\n\t\treturn \"calc((var(--control-height) * 2) + var(--space-xs))\";\n\t}\n\n\tif (hasAdornment || hasClearAction) {\n\t\treturn \"var(--control-height)\";\n\t}\n\n\treturn undefined;\n}\n\nfunction createEndAdornment({ endAdornment, onClear, disabled }: { endAdornment?: ReactNode; onClear?: () => void; disabled?: boolean }) {\n\tif ((endAdornment === undefined || endAdornment === null) && !onClear) {\n\t\treturn undefined;\n\t}\n\n\treturn (\n\t\t<div className={styles.endAdornmentGroup}>\n\t\t\t{endAdornment}\n\t\t\t{onClear && <InputClearButton onClick={onClear} disabled={disabled} />}\n\t\t</div>\n\t);\n}\n\nexport interface BaseInputProps<T extends number | string | undefined, V = T>\n\textends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\" | \"value\" | \"type\" | \"defaultValue\" | \"onChange\">, UiBaseProps<T, V> {\n\tonClear?: () => void;\n\terror?: string;\n\tonClearError?: () => void;\n\tdefaultValue?: T;\n\tendAdornment?: ReactNode;\n\tendAdornmentClassName?: string;\n\tendAdornmentWidth?: string;\n}\n\nexport interface InputTextProps extends BaseInputProps<string> {\n\ttype?: \"email\" | \"password\" | \"search\" | \"tel\" | \"text\" | \"url\";\n\n\t/**\n\t * Регулярное выражение для валидации всего введённого значения.\n\t * При несоответствии поле подсвечивается как невалидное, но текст не удаляется.\n\t * Пример: `/^\\d*$/`\n\t */\n\tallowedPattern?: RegExp;\n}\n\n/**\n * Базовое текстовое поле ввода для строковых значений.\n */\nexport function InputText({\n\tlabel,\n\tdescription,\n\tdisabled,\n\tclassName,\n\tonClear,\n\terror,\n\tonClearError,\n\tonChange,\n\tvalue,\n\tsize,\n\tallowedPattern,\n\tendAdornment,\n\tendAdornmentClassName,\n\tendAdornmentWidth,\n\ttype = \"text\",\n\t...props\n}: InputTextProps) {\n\tconst [internalInvalid, setInternalInvalid] = useState(false);\n\n\tconst handleInput = (e: React.ChangeEvent<HTMLInputElement>) => {\n\t\tconst newValue = e.target.value;\n\n\t\tif (allowedPattern !== undefined) {\n\t\t\tsetInternalInvalid(newValue !== \"\" && !allowedPattern.test(newValue));\n\t\t}\n\n\t\tonChange(newValue);\n\t\tif (error && onClearError) onClearError();\n\t};\n\n\tconst hasValue = Boolean(value && value.length > 0);\n\tconst visibleError = hasValue ? error : undefined;\n\tconst { controlId, labelId, descriptionId, errorId, describedBy } = useInputFieldIds({\n\t\tid: props.id,\n\t\thasLabel: label !== undefined && label !== null,\n\t\thasDescription: !!description,\n\t\thasError: !!visibleError\n\t});\n\tconst isInvalid = hasValue && (!!error || internalInvalid);\n\tconst resolvedEndAdornment = createEndAdornment({ endAdornment, onClear, disabled: disabled || !hasValue });\n\tconst hasCustomAdornment = endAdornment !== undefined && endAdornment !== null;\n\tconst resolvedEndAdornmentWidth = resolveEndAdornmentWidth(hasCustomAdornment, !!onClear, endAdornmentWidth);\n\n\treturn (\n\t\t<InputUI\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\tdisabled={disabled}\n\t\t\trequired={props.required}\n\t\t\tclassName={className}\n\t\t\tsize={size}\n\t\t\terror={visibleError}\n\t\t\tcontrolId={controlId}\n\t\t\tlabelId={labelId}\n\t\t\tdescriptionId={descriptionId}\n\t\t\terrorId={errorId}>\n\t\t\t<InputControl\n\t\t\t\tendAdornment={resolvedEndAdornment}\n\t\t\t\tendAdornmentClassName={endAdornmentClassName}\n\t\t\t\tendAdornmentWidth={resolvedEndAdornmentWidth}>\n\t\t\t\t{({ controlClassName }) => (\n\t\t\t\t\t<input\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t\tid={controlId}\n\t\t\t\t\t\ttype={type}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\taria-invalid={isInvalid || undefined}\n\t\t\t\t\t\taria-labelledby={labelId}\n\t\t\t\t\t\taria-describedby={describedBy}\n\t\t\t\t\t\tdata-invalid={isInvalid ? \"\" : undefined}\n\t\t\t\t\t\tclassName={cn(uiStyles.uiInputControl, styles.input, controlClassName)}\n\t\t\t\t\t\tonChange={handleInput}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</InputControl>\n\t\t</InputUI>\n\t);\n}\n\n/**\n * Числовое поле ввода с нормализацией значения и защитой от промежуточного невалидного ввода.\n */\nexport function InputNumber({\n\tlabel,\n\tdescription,\n\tdisabled,\n\tclassName,\n\tonClear,\n\terror,\n\tonClearError,\n\tonChange,\n\tvalue,\n\tsize,\n\tendAdornment,\n\tendAdornmentClassName,\n\tendAdornmentWidth,\n\t...props\n}: BaseInputProps<number | undefined>) {\n\tconst inputProps = props as InputHTMLAttributes<HTMLInputElement>;\n\tconst { controlId, labelId, descriptionId, errorId, describedBy } = useInputFieldIds({\n\t\tid: props.id,\n\t\thasLabel: label !== undefined && label !== null,\n\t\thasDescription: !!description,\n\t\thasError: !!error\n\t});\n\n\tconst inputRef = useRef<HTMLInputElement | null>(null);\n\tconst numberDraftRef = useRef<{ readonly value: number | undefined; readonly raw: string } | null>(null);\n\tconst externalRawValue = value !== undefined && typeof value === \"number\" && !isNaN(value) ? String(value) : \"\";\n\n\t/**\n\t * Числовой input хранит промежуточную строку в DOM, а controlled number остаётся\n\t * источником истины. Layout-effect синхронизирует именно внешнюю DOM-систему,\n\t * поэтому не создаёт каскадного React render и не ломает ввод неполных чисел.\n\t */\n\tuseLayoutEffect(() => {\n\t\tconst numberDraft = numberDraftRef.current;\n\t\tif (numberDraft && Object.is(numberDraft.value, value)) {\n\t\t\tif (inputRef.current && inputRef.current.value !== numberDraft.raw) {\n\t\t\t\tinputRef.current.value = numberDraft.raw;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tnumberDraftRef.current = null;\n\t\tif (inputRef.current && inputRef.current.value !== externalRawValue) {\n\t\t\tinputRef.current.value = externalRawValue;\n\t\t}\n\t}, [externalRawValue, value]);\n\n\tconst handleClear = onClear\n\t\t? () => {\n\t\t\t\tonClear();\n\t\t\t}\n\t\t: undefined;\n\n\tconst handleInput = (e: React.ChangeEvent<HTMLInputElement>) => {\n\t\tconst raw = e.target.value;\n\n\t\tconst parsed = toFiniteNumber(raw); // ?? value ?? 0;\n\t\tnumberDraftRef.current = { value: parsed, raw };\n\n\t\tonChange(parsed);\n\t\tif (error && onClearError) onClearError();\n\t};\n\n\tconst resolvedEndAdornment = createEndAdornment({ endAdornment, onClear: handleClear, disabled });\n\tconst hasCustomAdornment = endAdornment !== undefined && endAdornment !== null;\n\tconst resolvedEndAdornmentWidth = resolveEndAdornmentWidth(hasCustomAdornment, !!handleClear, endAdornmentWidth);\n\n\treturn (\n\t\t<InputUI\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\tdisabled={disabled}\n\t\t\trequired={props.required}\n\t\t\tclassName={className}\n\t\t\tsize={size}\n\t\t\terror={error}\n\t\t\tcontrolId={controlId}\n\t\t\tlabelId={labelId}\n\t\t\tdescriptionId={descriptionId}\n\t\t\terrorId={errorId}>\n\t\t\t<InputControl\n\t\t\t\tendAdornment={resolvedEndAdornment}\n\t\t\t\tendAdornmentClassName={endAdornmentClassName}\n\t\t\t\tendAdornmentWidth={resolvedEndAdornmentWidth}>\n\t\t\t\t{({ controlClassName }) => (\n\t\t\t\t\t<input\n\t\t\t\t\t\t{...inputProps}\n\t\t\t\t\t\tref={inputRef}\n\t\t\t\t\t\tid={controlId}\n\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\tinputMode=\"decimal\"\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tdefaultValue={externalRawValue}\n\t\t\t\t\t\taria-labelledby={labelId}\n\t\t\t\t\t\taria-describedby={describedBy}\n\t\t\t\t\t\tclassName={cn(uiStyles.uiInputControl, styles.input, styles.inputNumber, controlClassName)}\n\t\t\t\t\t\tonChange={handleInput}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</InputControl>\n\t\t</InputUI>\n\t);\n}\n\n/**\n * Совместимый алиас для `InputText`.\n */\nexport const Input = InputText;\n","import styles from \"../ui.module.scss\";\n\ninterface InputErrorComponentProps {\n\ttext: string;\n}\n\nexport function InputErrorComponent({ text }: InputErrorComponentProps) {\n\treturn <div className={styles.uiErrorElement}>{text}</div>;\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"picker-SJXnHwsj.js","names":[],"sources":["../../src/picker/PickerField.tsx","../../src/picker/PickerClearButton.tsx","../../src/picker/Picker.module.scss","../../src/picker/PickerSelectionToolbar.tsx","../../src/picker/PickerOptions.tsx","../../src/picker/model/extractPickerTextContent.ts","../../src/picker/PickerPlaceholder.ts","../../src/picker/PickerPopup.tsx","../../src/picker/PickerSelectedToken.tsx","../../src/picker/PickerStatus.tsx","../../src/picker/PickerTriggerActions.tsx","../../src/picker/PickerTriggerInput.tsx","../../src/picker/PickerTrigger.tsx","../../src/picker/model/createPickerTriggerPolicy.ts","../../src/picker/model/usePickerDefaultFilter.ts","../../src/picker/model/usePickerFloatingListbox.ts","../../src/picker/model/usePickerQuery.ts","../../src/picker/model/usePickerSelectionLifecycle.ts","../../src/picker/model/usePickerTriggerController.ts"],"sourcesContent":["import { InputType } from \"@ryuzaki13/react-foundation-lib/types\";\n\nimport { InputUI } from \"../input\";\nimport { useInputFieldIds } from \"../input/lib/useInputFieldIds\";\n\nimport { PickerFieldProps } from \"./types\";\n\nexport function PickerField<TValue extends InputType>({\n\tid,\n\tlabel,\n\tdescription,\n\tdisabled,\n\tsize,\n\tclassName,\n\terror,\n\tchildren\n}: PickerFieldProps<TValue>) {\n\tconst { controlId, labelId, descriptionId, errorId, describedBy } = useInputFieldIds({\n\t\tid,\n\t\thasLabel: label !== undefined && label !== null,\n\t\thasDescription: !!description,\n\t\thasError: !!error\n\t});\n\n\treturn (\n\t\t<InputUI\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\tdisabled={disabled}\n\t\t\tsize={size}\n\t\t\tclassName={className}\n\t\t\terror={error}\n\t\t\tcontrolId={controlId}\n\t\t\tlabelId={labelId}\n\t\t\tdescriptionId={descriptionId}\n\t\t\terrorId={errorId}>\n\t\t\t{children({ controlId, labelId, descriptionId, errorId, describedBy })}\n\t\t</InputUI>\n\t);\n}\n","import { type MouseEvent } from \"react\";\n\nimport { XIcon } from \"lucide-react\";\n\nimport uiStyles from \"../ui.module.scss\";\n\ntype PickerClearButtonProps = {\n\tdisabled?: boolean;\n\tariaLabel?: string;\n\tonClear: () => void;\n};\n\n/** Единое действие очистки выбранного значения во всех clearable picker-компонентах. */\nexport function PickerClearButton({ disabled, ariaLabel = \"Очистить выбор\", onClear }: PickerClearButtonProps) {\n\tconst stopTriggerInteraction = (event: MouseEvent<HTMLButtonElement>) => {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t};\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tdisabled={disabled}\n\t\t\tclassName={uiStyles.uiClearButton}\n\t\t\tdata-ui=\"picker-clear-button\"\n\t\t\tdata-action=\"clear-picker\"\n\t\t\tonMouseDown={stopTriggerInteraction}\n\t\t\tonClick={(event) => {\n\t\t\t\tstopTriggerInteraction(event);\n\t\t\t\tonClear();\n\t\t\t}}\n\t\t\taria-label={ariaLabel}>\n\t\t\t<XIcon />\n\t\t</button>\n\t);\n}\n","@use \"@/styles/mixins\" as *;\n\n.popupPositioner,\n.options {\n\toverflow: hidden;\n\tdisplay: grid;\n\tgrid-template-rows: minmax(0, 1fr);\n\tborder-radius: var(--radius-sm);\n}\n\n.popupPositioner {\n\t--anchor-gap: var(--space-xs);\n\t--anchor-padding: var(--space-xs);\n\t--anchor-offset: 0;\n\t// Минимальная ширина нужна только floating-панели. Встроенный Listbox получает ширину от UiBaseProps.size.\n\t--input-width: min(100vw, var(--base-width, 15em));\n\n\tmin-width: 0;\n\tz-index: var(--z-dropdown);\n\tbox-shadow: var(--shadow-md);\n\n\t.options {\n\t\tmin-width: var(--input-width);\n\t}\n}\n\n.options {\n\twidth: 100%;\n\tmin-height: 0;\n\tmax-height: 75vh;\n\n\tpadding: var(--space-sm);\n\tbackground-color: var(--surface-0);\n\tborder: var(--border);\n\n\t&:empty {\n\t\tvisibility: hidden;\n\t}\n\n\t&[data-has-toolbar=\"true\"] {\n\t\tgrid-template-rows: auto minmax(0, 1fr);\n\t}\n}\n\n.optionsToolbar {\n\tdisplay: grid;\n\tgap: var(--space-xs);\n\tpadding: var(--space-xs);\n}\n\n.optionsBody {\n\tmin-height: 0;\n}\n\n.status {\n\tpadding: var(--space-xs) var(--space-sm);\n\tcolor: var(--content-2);\n}\n\n.statusError {\n\tcolor: var(--error-text);\n}\n\n.triggerContainer {\n\tposition: relative;\n\n\t&[data-has-overlay=\"true\"] input {\n\t\t--ui-color: transparent;\n\t\t--ui-color-hover: transparent;\n\t\t--ui-color-active: transparent;\n\n\t\tcolor: transparent;\n\t\tcaret-color: transparent;\n\t\t-webkit-text-fill-color: transparent;\n\t}\n}\n\n.triggerHasClear {\n\t--trigger-count: 2;\n\t// Резервирует в input место для кнопок очистки и открытия списка.\n\t--input-end-adornment-width: calc(var(--control-height) * 2);\n}\n\n.selectedToken {\n\tposition: absolute;\n\tinset: 0 calc(var(--control-height) * var(--trigger-count, 1) + var(--space-sm)) 0 var(--space-sm);\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: flex-end;\n\tmin-width: 0;\n\tpointer-events: none;\n}\n\n.selectedTokenText {\n\toverflow: hidden;\n\twhite-space: nowrap;\n\ttext-overflow: ellipsis;\n}\n\n@include mobile {\n\t.popupPositioner {\n\t\t--input-width: calc(100dvw - var(--space-xl));\n\t}\n}\n\n.selectionActionButton {\n\tpadding-block: var(--space-xs);\n\tborder-radius: var(--radius-sm);\n\n\t&:hover {\n\t\tbackground-color: var(--surface-2);\n\t}\n}\n","import { type Ref } from \"react\";\n\nimport { Grid } from \"../grid\";\n\nimport styles from \"./Picker.module.scss\";\n\ntype PickerSelectionToolbarProps = {\n\tonSelectAll: () => void;\n\tonDeselectAll: () => void;\n\tselectAllButtonRef?: Ref<HTMLButtonElement>;\n};\n\n/**\n * Общая панель массовых действий для picker-компонентов с множественным выбором.\n * Компонент не знает формат значения и делегирует изменение владельцу selection-модели.\n */\nexport function PickerSelectionToolbar({ onSelectAll, onDeselectAll, selectAllButtonRef }: PickerSelectionToolbarProps) {\n\treturn (\n\t\t<Grid.Container gap=\"xs\" templateColumns=\"1fr 1fr\">\n\t\t\t<button\n\t\t\t\tref={selectAllButtonRef}\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={styles.selectionActionButton}\n\t\t\t\tonClick={onSelectAll}\n\t\t\t\tdata-ui=\"picker-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.selectionActionButton}\n\t\t\t\tonClick={onDeselectAll}\n\t\t\t\tdata-ui=\"picker-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 { type HTMLAttributes, type ReactNode, type Ref } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { Separator } from \"../separator\";\n\nimport styles from \"./Picker.module.scss\";\nimport { PickerSelectionToolbar } from \"./PickerSelectionToolbar\";\n\nexport type PickerSelectionActions = {\n\tonSelectAll: () => void;\n\tonDeselectAll: () => void;\n\tselectAllButtonRef?: Ref<HTMLButtonElement>;\n};\n\nexport interface PickerOptionsProps extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n\trootRef?: Ref<HTMLDivElement>;\n\tbodyRef?: Ref<HTMLDivElement>;\n\tbodyProps?: Omit<HTMLAttributes<HTMLDivElement>, \"children\" | \"className\">;\n\tchildren: ReactNode;\n\ttoolbar?: ReactNode | false;\n\tselectionActions?: PickerSelectionActions;\n\tlayoutClassName?: string;\n\tbodyClassName?: string;\n\tscrollable?: boolean;\n}\n\n/**\n * Единая оболочка списка опций для picker, listbox и menu. Если переданы\n * selectionActions, но не передан toolbar, компонент показывает стандартные\n * действия выбора и снятия выбора.\n */\nexport function PickerOptions({\n\trootRef,\n\tbodyRef,\n\tbodyProps,\n\tchildren,\n\ttoolbar,\n\tselectionActions,\n\tlayoutClassName,\n\tbodyClassName,\n\tscrollable = true,\n\tclassName,\n\t...props\n}: PickerOptionsProps) {\n\tconst resolvedToolbar = toolbar === undefined && selectionActions ? <PickerSelectionToolbar {...selectionActions} /> : toolbar || null;\n\n\treturn (\n\t\t<div\n\t\t\t{...props}\n\t\t\tref={rootRef}\n\t\t\tclassName={cn(styles.options, layoutClassName, className)}\n\t\t\tdata-ui=\"picker-options\"\n\t\t\tdata-has-toolbar={resolvedToolbar ? \"true\" : undefined}>\n\t\t\t{resolvedToolbar ? (\n\t\t\t\t<div className={styles.optionsToolbar}>\n\t\t\t\t\t{resolvedToolbar}\n\t\t\t\t\t<Separator />\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t\t<div\n\t\t\t\t{...bodyProps}\n\t\t\t\tref={bodyRef}\n\t\t\t\tclassName={cn(styles.optionsBody, scrollable ? \"scrollable overscroll\" : \"overflowHidden\", bodyClassName)}>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { isValidElement, type ReactNode } from \"react\";\n\nexport function extractPickerTextContent(node: ReactNode): string | undefined {\n\tif (typeof node === \"string\" || typeof node === \"number\") {\n\t\treturn String(node);\n\t}\n\n\tif (Array.isArray(node)) {\n\t\tconst values = node\n\t\t\t.map(extractPickerTextContent)\n\t\t\t.filter((value): value is string => Boolean(value))\n\t\t\t.map((value) => value.trim())\n\t\t\t.filter(Boolean);\n\t\treturn values.length ? values.join(\" \") : undefined;\n\t}\n\n\tif (isValidElement<{ children?: ReactNode; searchText?: unknown }>(node)) {\n\t\tif (typeof node.props.searchText === \"string\") {\n\t\t\treturn node.props.searchText;\n\t\t}\n\n\t\treturn extractPickerTextContent(node.props.children);\n\t}\n\n\treturn undefined;\n}\n","import { type ReactNode } from \"react\";\n\nimport { extractPickerTextContent } from \"./model/extractPickerTextContent\";\n\ntype PickerPlaceholderParams = {\n\tplaceholder?: string;\n\tlabel?: ReactNode;\n\toptionCount: number;\n\tfallback?: string;\n};\n\n/**\n * Формирует единый текст placeholder для picker-компонентов и всегда показывает\n * актуальное количество доступных вариантов.\n */\nexport function getPickerPlaceholder({ placeholder, label, optionCount, fallback = \"Выберите значение\" }: PickerPlaceholderParams) {\n\tconst labelText = extractPickerTextContent(label);\n\tconst text = placeholder ?? labelText ?? fallback;\n\n\treturn `${text} <${optionCount}>`;\n}\n","import { type CSSProperties, type FocusEvent, type KeyboardEvent, type MouseEvent, type ReactNode, useRef } from \"react\";\n\nimport { FloatingContext, FloatingFocusManager, FloatingPortal } from \"@floating-ui/react\";\nimport { AnimatePresence, motion } from \"motion/react\";\n\nimport styles from \"./Picker.module.scss\";\nimport { PickerOptions, type PickerSelectionActions } from \"./PickerOptions\";\n\ninterface PickerPopupProps {\n\topen: boolean;\n\tcontext: FloatingContext;\n\tfloatingStyles: CSSProperties;\n\tlistId: string;\n\tlabelId?: string;\n\tpopupAriaLabel?: string;\n\tdescriptionId?: string;\n\tactiveOptionId?: string;\n\tariaMultiselectable?: boolean;\n\tpopupRole?: \"listbox\" | \"tree\" | \"treegrid\" | \"grid\" | \"dialog\";\n\tsetFloating: (node: HTMLElement | null) => void;\n\tgetFloatingProps: (userProps?: Record<string, unknown>) => Record<string, unknown>;\n\tonKeyDown: (event: KeyboardEvent<HTMLElement>) => void;\n\tinitialFocus?: number;\n\treturnFocus?: boolean;\n\ttabIndex?: number;\n\tclassName?: string;\n\tmaxWidth?: CSSProperties[\"maxWidth\"];\n\tlayoutClassName?: string;\n\tbodyClassName?: string;\n\ttoolbar?: ReactNode | false;\n\tselectionActions?: PickerSelectionActions;\n\tchildren: ReactNode;\n}\n\nfunction stopNestedFloatingMouseDown(event: MouseEvent<HTMLElement>): void {\n\tevent.stopPropagation();\n}\n\nexport function PickerPopup({\n\topen,\n\tcontext,\n\tfloatingStyles,\n\tlistId,\n\tlabelId,\n\tpopupAriaLabel,\n\tdescriptionId,\n\tactiveOptionId,\n\tariaMultiselectable,\n\tpopupRole = \"listbox\",\n\tsetFloating,\n\tgetFloatingProps,\n\tonKeyDown,\n\tinitialFocus = -1,\n\treturnFocus = false,\n\ttabIndex = 0,\n\tclassName,\n\tmaxWidth,\n\tlayoutClassName,\n\tbodyClassName,\n\ttoolbar,\n\tselectionActions,\n\tchildren\n}: PickerPopupProps) {\n\tconst compositeRef = useRef<HTMLDivElement | null>(null);\n\tconst isDialog = popupRole === \"dialog\";\n\tconst compositeProps = isDialog\n\t\t? undefined\n\t\t: getFloatingProps({\n\t\t\t\tid: listId,\n\t\t\t\trole: popupRole,\n\t\t\t\ttabIndex,\n\t\t\t\t\"aria-labelledby\": labelId,\n\t\t\t\t\"aria-label\": labelId ? undefined : popupAriaLabel,\n\t\t\t\t\"aria-describedby\": descriptionId,\n\t\t\t\t\"aria-activedescendant\": activeOptionId,\n\t\t\t\t\"aria-multiselectable\": ariaMultiselectable || undefined,\n\t\t\t\tonKeyDown\n\t\t\t});\n\tconst handlePositionerFocus = (event: FocusEvent<HTMLDivElement>) => {\n\t\tif (!isDialog && event.target === event.currentTarget) {\n\t\t\tcompositeRef.current?.focus();\n\t\t}\n\t};\n\n\treturn (\n\t\t<AnimatePresence>\n\t\t\t{open && (\n\t\t\t\t<FloatingPortal preserveTabOrder={false}>\n\t\t\t\t\t<FloatingFocusManager\n\t\t\t\t\t\tcontext={context}\n\t\t\t\t\t\tmodal={false}\n\t\t\t\t\t\tguards={false}\n\t\t\t\t\t\tinitialFocus={initialFocus}\n\t\t\t\t\t\treturnFocus={returnFocus}>\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tref={setFloating}\n\t\t\t\t\t\t\tstyle={{ ...floatingStyles, maxWidth }}\n\t\t\t\t\t\t\tclassName={styles.popupPositioner}\n\t\t\t\t\t\t\tinitial={{ opacity: 0, scale: 0.95 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\t\t\t\t\texit={{ opacity: 0, scale: 0.95 }}\n\t\t\t\t\t\t\ttabIndex={isDialog ? undefined : -1}\n\t\t\t\t\t\t\tonMouseDown={stopNestedFloatingMouseDown}\n\t\t\t\t\t\t\tonFocus={isDialog ? undefined : handlePositionerFocus}\n\t\t\t\t\t\t\t{...(isDialog\n\t\t\t\t\t\t\t\t? getFloatingProps({\n\t\t\t\t\t\t\t\t\t\tid: listId,\n\t\t\t\t\t\t\t\t\t\trole: \"dialog\",\n\t\t\t\t\t\t\t\t\t\ttabIndex,\n\t\t\t\t\t\t\t\t\t\t\"aria-labelledby\": labelId,\n\t\t\t\t\t\t\t\t\t\t\"aria-label\": labelId ? undefined : popupAriaLabel,\n\t\t\t\t\t\t\t\t\t\t\"aria-describedby\": descriptionId,\n\t\t\t\t\t\t\t\t\t\tonMouseDown: stopNestedFloatingMouseDown,\n\t\t\t\t\t\t\t\t\t\tonKeyDown\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<PickerOptions\n\t\t\t\t\t\t\t\tclassName={className}\n\t\t\t\t\t\t\t\tlayoutClassName={layoutClassName}\n\t\t\t\t\t\t\t\tbodyClassName={bodyClassName}\n\t\t\t\t\t\t\t\ttoolbar={toolbar}\n\t\t\t\t\t\t\t\tselectionActions={selectionActions}\n\t\t\t\t\t\t\t\tbodyRef={isDialog ? undefined : compositeRef}\n\t\t\t\t\t\t\t\tbodyProps={isDialog ? undefined : compositeProps}\n\t\t\t\t\t\t\t\tscrollable={false}>\n\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t</PickerOptions>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t</FloatingFocusManager>\n\t\t\t\t</FloatingPortal>\n\t\t\t)}\n\t\t</AnimatePresence>\n\t);\n}\n","import { type HTMLAttributes, type ReactNode } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport styles from \"./Picker.module.scss\";\n\nexport interface PickerSelectedTokenProps extends Omit<HTMLAttributes<HTMLSpanElement>, \"children\"> {\n\tchildren: ReactNode;\n}\n\n/** Единое визуальное представление выбранного значения внутри picker-trigger. */\nexport function PickerSelectedToken({ children, className, ...props }: PickerSelectedTokenProps) {\n\treturn (\n\t\t<span {...props} className={cn(styles.selectedToken, className)} data-ui=\"picker-selected-token\">\n\t\t\t<span className={styles.selectedTokenText}>{children}</span>\n\t\t</span>\n\t);\n}\n","import { ReactNode } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport uiStyles from \"../ui.module.scss\";\n\nimport styles from \"./Picker.module.scss\";\n\ninterface PickerStatusProps {\n\temptyState?: ReactNode;\n\t// loadingState?: ReactNode;\n\terrorState?: ReactNode;\n}\n\nexport function PickerStatus({ emptyState, errorState }: PickerStatusProps) {\n\tconst content = errorState ?? emptyState;\n\n\tif (content === undefined || content === null) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div className={cn(uiStyles.uiPopupOption, styles.status, errorState !== undefined && styles.statusError)} aria-disabled={true}>\n\t\t\t{content}\n\t\t</div>\n\t);\n}\n","import { type AriaAttributes, type MouseEvent, type ReactNode } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { ChevronDownIcon } from \"lucide-react\";\n\nimport uiStyles from \"../ui.module.scss\";\n\ninterface PickerTriggerActionsProps {\n\topen: boolean;\n\tdisabled?: boolean;\n\tchildren?: ReactNode;\n\tonToggleMouseDown?: (event: MouseEvent<HTMLButtonElement>) => void;\n\tonToggleClick: () => void;\n\topenAriaLabel?: string;\n\tcloseAriaLabel?: string;\n\t/**\n\t * Передаёт ARIA-связи непосредственно кнопке раскрытия, не меняя геометрию\n\t * контейнера с adornment-действиями.\n\t */\n\ttoggleAria?: Pick<AriaAttributes, \"aria-controls\" | \"aria-expanded\" | \"aria-haspopup\">;\n}\n\nexport function PickerTriggerActions({\n\topen,\n\tdisabled,\n\tchildren,\n\tonToggleMouseDown,\n\tonToggleClick,\n\topenAriaLabel = \"Открыть список\",\n\tcloseAriaLabel = \"Закрыть список\",\n\ttoggleAria\n}: PickerTriggerActionsProps) {\n\treturn (\n\t\t<div className={uiStyles.uiToggleButtonContainer} data-disabled={disabled || undefined}>\n\t\t\t{children}\n\n\t\t\t<div className={uiStyles.uiButtonSeparator} />\n\n\t\t\t<button\n\t\t\t\t{...toggleAria}\n\t\t\t\ttype=\"button\"\n\t\t\t\tdisabled={disabled}\n\t\t\t\taria-label={open ? closeAriaLabel : openAriaLabel}\n\t\t\t\tclassName={uiStyles.uiToggleButton}\n\t\t\t\tonMouseDown={onToggleMouseDown}\n\t\t\t\tonClick={onToggleClick}>\n\t\t\t\t<ChevronDownIcon className={cn(uiStyles.uiToggleIcon, open && uiStyles.uiToggleIconOpen)} />\n\t\t\t</button>\n\t\t</div>\n\t);\n}\n","import { type ComponentPropsWithoutRef, type ReactNode, type Ref } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { InputControl, InputLoadingFrame } from \"../input\";\nimport uiStyles from \"../ui.module.scss\";\n\nimport styles from \"./Picker.module.scss\";\n\nexport interface PickerTriggerInputProps extends Omit<ComponentPropsWithoutRef<\"input\">, \"size\"> {\n\trootRef?: (node: HTMLDivElement | null) => void;\n\tendAdornment?: ReactNode;\n\toverlay?: ReactNode;\n\trootClassName?: string;\n\tinputClassName?: string;\n\tisLoading?: boolean;\n}\n\nexport function PickerTriggerInput({\n\tref,\n\trootRef,\n\tendAdornment,\n\toverlay,\n\trootClassName,\n\tinputClassName,\n\tisLoading,\n\t...props\n}: PickerTriggerInputProps & { ref?: Ref<HTMLInputElement> }) {\n\tconst hasOverlay = overlay !== undefined && overlay !== null;\n\n\treturn (\n\t\t<div\n\t\t\tref={rootRef}\n\t\t\tclassName={cn(uiStyles.uiInputContainer, styles.triggerContainer, rootClassName)}\n\t\t\tdata-has-overlay={hasOverlay || undefined}>\n\t\t\t{isLoading ? (\n\t\t\t\t<InputLoadingFrame />\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t<InputControl endAdornment={endAdornment}>\n\t\t\t\t\t\t{({ controlClassName }) => (\n\t\t\t\t\t\t\t<input {...props} ref={ref} className={cn(uiStyles.uiInputWithToggle, controlClassName, inputClassName)} />\n\t\t\t\t\t\t)}\n\t\t\t\t\t</InputControl>\n\t\t\t\t\t{hasOverlay ? overlay : null}\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nPickerTriggerInput.displayName = \"PickerTriggerInput\";\n","import { type ReactNode, type Ref } from \"react\";\n\nimport styles from \"./Picker.module.scss\";\nimport { PickerClearButton } from \"./PickerClearButton\";\nimport { getPickerPlaceholder } from \"./PickerPlaceholder\";\nimport { PickerSelectedToken } from \"./PickerSelectedToken\";\nimport { PickerTriggerActions } from \"./PickerTriggerActions\";\nimport { PickerTriggerInput, type PickerTriggerInputProps } from \"./PickerTriggerInput\";\n\nexport interface PickerTriggerProps extends Omit<PickerTriggerInputProps, \"placeholder\" | \"overlay\" | \"endAdornment\"> {\n\tref?: Ref<HTMLInputElement>;\n\topen: boolean;\n\toptionCount: number;\n\tplaceholder?: string;\n\tlabel?: ReactNode;\n\tplaceholderFallback?: string;\n\tselectedValue?: ReactNode;\n\thasSelection?: boolean;\n\tshowSelectedValue?: boolean;\n\tclearable?: boolean;\n\tonClear?: () => void;\n\tclearAriaLabel?: string;\n\tonToggleMouseDown?: PickerTriggerActionsProps[\"onToggleMouseDown\"];\n\tonToggleClick: PickerTriggerActionsProps[\"onToggleClick\"];\n\topenAriaLabel?: string;\n\tcloseAriaLabel?: string;\n}\n\ntype PickerTriggerActionsProps = Parameters<typeof PickerTriggerActions>[0];\n\n/**\n * Общая композиция picker-trigger: input, выбранное значение, очистка и кнопка\n * открытия. Владельцы picker-моделей передают только состояние и обработчики.\n */\nexport function PickerTrigger({\n\tref,\n\topen,\n\toptionCount,\n\tplaceholder,\n\tlabel,\n\tplaceholderFallback,\n\tselectedValue,\n\thasSelection,\n\tshowSelectedValue = selectedValue !== undefined && selectedValue !== null,\n\tclearable = false,\n\tonClear,\n\tclearAriaLabel,\n\tonToggleMouseDown,\n\tonToggleClick,\n\topenAriaLabel,\n\tcloseAriaLabel,\n\tdisabled,\n\tinputClassName,\n\t...inputProps\n}: PickerTriggerProps) {\n\tconst hasSelectedValue = hasSelection ?? (selectedValue !== undefined && selectedValue !== null);\n\tconst canClear = clearable && hasSelectedValue && onClear !== undefined && !disabled;\n\n\treturn (\n\t\t<PickerTriggerInput\n\t\t\t{...inputProps}\n\t\t\tref={ref}\n\t\t\tdisabled={disabled}\n\t\t\tplaceholder={\n\t\t\t\tshowSelectedValue ? undefined : getPickerPlaceholder({ placeholder, label, optionCount, fallback: placeholderFallback })\n\t\t\t}\n\t\t\tinputClassName={inputClassName}\n\t\t\trootClassName={clearable ? styles.triggerHasClear : undefined}\n\t\t\toverlay={showSelectedValue ? <PickerSelectedToken>{selectedValue}</PickerSelectedToken> : undefined}\n\t\t\tendAdornment={\n\t\t\t\t<PickerTriggerActions\n\t\t\t\t\topen={open}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonToggleMouseDown={onToggleMouseDown}\n\t\t\t\t\tonToggleClick={onToggleClick}\n\t\t\t\t\topenAriaLabel={openAriaLabel}\n\t\t\t\t\tcloseAriaLabel={closeAriaLabel}>\n\t\t\t\t\t{canClear ? <PickerClearButton ariaLabel={clearAriaLabel} onClear={onClear} /> : null}\n\t\t\t\t</PickerTriggerActions>\n\t\t\t}\n\t\t/>\n\t);\n}\n","export type PickerTriggerMode = \"display\" | \"search-single\" | \"search-multi\";\n\ninterface PickerTriggerTextFocusParams {\n\topen: boolean;\n\tcurrentQuery: string;\n\thasDisplayValue: boolean;\n}\n\nexport interface PickerTriggerPolicy {\n\tfocusFloatingOnOpen: boolean;\n\trestoreFocusOnClose: boolean;\n\tresetQueryOnClose: boolean;\n\tshouldOpenOnTriggerClick: (open: boolean) => boolean;\n\tshouldOpenOnInputChange: (open: boolean) => boolean;\n\tshouldFocusReferenceOnToggle: (open: boolean) => boolean;\n\tshouldSelectTriggerTextOnFocus: (params: PickerTriggerTextFocusParams) => boolean;\n}\n\n/**\n * Единая политика поведения trigger-input для picker-компонентов.\n * Нормализует различия между display-режимом, single-search и multi-search.\n */\nexport function createPickerTriggerPolicy(mode: PickerTriggerMode): PickerTriggerPolicy {\n\tswitch (mode) {\n\t\tcase \"search-single\":\n\t\t\treturn {\n\t\t\t\tfocusFloatingOnOpen: false,\n\t\t\t\trestoreFocusOnClose: false,\n\t\t\t\tresetQueryOnClose: true,\n\t\t\t\tshouldOpenOnTriggerClick: () => false,\n\t\t\t\tshouldOpenOnInputChange: (open) => !open,\n\t\t\t\tshouldFocusReferenceOnToggle: (open) => !open,\n\t\t\t\tshouldSelectTriggerTextOnFocus: ({ open, currentQuery, hasDisplayValue }) =>\n\t\t\t\t\t!open && currentQuery.length === 0 && hasDisplayValue\n\t\t\t};\n\t\tcase \"search-multi\":\n\t\t\treturn {\n\t\t\t\tfocusFloatingOnOpen: false,\n\t\t\t\trestoreFocusOnClose: false,\n\t\t\t\tresetQueryOnClose: true,\n\t\t\t\tshouldOpenOnTriggerClick: () => false,\n\t\t\t\tshouldOpenOnInputChange: (open) => !open,\n\t\t\t\tshouldFocusReferenceOnToggle: (open) => !open,\n\t\t\t\tshouldSelectTriggerTextOnFocus: () => false\n\t\t\t};\n\t\tcase \"display\":\n\t\tdefault:\n\t\t\treturn {\n\t\t\t\tfocusFloatingOnOpen: true,\n\t\t\t\trestoreFocusOnClose: true,\n\t\t\t\tresetQueryOnClose: false,\n\t\t\t\tshouldOpenOnTriggerClick: (open) => !open,\n\t\t\t\tshouldOpenOnInputChange: () => false,\n\t\t\t\tshouldFocusReferenceOnToggle: () => false,\n\t\t\t\tshouldSelectTriggerTextOnFocus: () => false\n\t\t\t};\n\t}\n}\n","import { useMemo } from \"react\";\n\nimport { normalizeTextToLower } from \"@ryuzaki13/react-foundation-lib/formatters\";\n\ninterface UsePickerDefaultFilterOptions<T> {\n\toptions: readonly T[];\n\tquery: string;\n\tenabled?: boolean;\n\tgetSearchText: (option: T) => unknown;\n}\n\nfunction normalizeSearchText(value: unknown) {\n\tconst parts = Array.isArray(value) ? value : [value];\n\n\treturn normalizeTextToLower(parts.filter(Boolean).join(\" \"));\n}\n\nexport function usePickerDefaultFilter<T>({ options, query, enabled = true, getSearchText }: UsePickerDefaultFilterOptions<T>) {\n\tconst normalizedQuery = normalizeTextToLower(query);\n\n\treturn useMemo(() => {\n\t\tif (!enabled || !normalizedQuery) {\n\t\t\treturn [...options];\n\t\t}\n\n\t\treturn options.filter((option) => normalizeSearchText(getSearchText(option)).includes(normalizedQuery));\n\t}, [enabled, getSearchText, normalizedQuery, options]);\n}\n","import { Placement } from \"@floating-ui/react\";\nimport {\n\ttype FloatingListboxPlacementStrategy,\n\ttype FloatingListboxSizeResolver,\n\tuseFloatingListbox\n} from \"@ryuzaki13/react-foundation-lib/hooks\";\n\nimport { PickerTriggerMode, createPickerTriggerPolicy } from \"./createPickerTriggerPolicy\";\n\ninterface UsePickerFloatingListboxParams<T> {\n\toptions: readonly T[];\n\tselectedIndex: number;\n\topen?: boolean;\n\tonOpenChange?: (open: boolean) => void;\n\tgetOptionDisabled?: (option: T) => boolean;\n\tonSelect?: (option: T) => void;\n\tdisabled?: boolean;\n\tplacement?: Placement;\n\tplacementStrategy?: FloatingListboxPlacementStrategy;\n\tcloseOnSelect?: boolean;\n\tfocusFloatingOnOpen?: boolean;\n\tallowOpenWithoutOptions?: boolean;\n\trestoreFocusOnClose?: boolean;\n\ttriggerMode?: PickerTriggerMode;\n\tresolveFloatingSize?: FloatingListboxSizeResolver;\n}\n\n/**\n * Единая точка входа для popup/listbox поведения во всех picker-компонентах.\n */\nexport function usePickerFloatingListbox<T>(params: UsePickerFloatingListboxParams<T>) {\n\tconst triggerPolicy = params.triggerMode ? createPickerTriggerPolicy(params.triggerMode) : undefined;\n\n\treturn useFloatingListbox({\n\t\t...params,\n\t\tfocusFloatingOnOpen: params.focusFloatingOnOpen ?? triggerPolicy?.focusFloatingOnOpen,\n\t\trestoreFocusOnClose: params.restoreFocusOnClose ?? triggerPolicy?.restoreFocusOnClose\n\t});\n}\n","import { useState } from \"react\";\n\nimport { PickerTriggerMode, createPickerTriggerPolicy } from \"./createPickerTriggerPolicy\";\n\ninterface UsePickerQueryOptions {\n\tquery?: string;\n\tdefaultQuery?: string;\n\tonQuery?: (value: string) => void;\n\tresetOnClose?: boolean;\n\ttriggerMode?: PickerTriggerMode;\n}\n\n/**\n * Управляет controlled/uncontrolled query и возвращает policy закрытия владельцу open-state.\n * Сброс выполняется самим владельцем в событии close, поэтому hook не зеркалит lifecycle через effect.\n */\nexport function usePickerQuery({ query, defaultQuery, onQuery, resetOnClose, triggerMode }: UsePickerQueryOptions) {\n\tconst isControlled = query !== undefined;\n\tconst [internalQuery, setInternalQuery] = useState(defaultQuery ?? \"\");\n\tconst currentQuery = isControlled ? (query ?? \"\") : internalQuery;\n\tconst resolvedResetOnClose = resetOnClose ?? (triggerMode ? createPickerTriggerPolicy(triggerMode).resetQueryOnClose : true);\n\n\tconst setQuery = (nextValue: string) => {\n\t\tif (!isControlled) {\n\t\t\tsetInternalQuery(nextValue);\n\t\t}\n\n\t\tonQuery?.(nextValue);\n\t};\n\n\treturn {\n\t\tquery: currentQuery,\n\t\tsetQuery,\n\t\tclearQuery: () => setQuery(\"\"),\n\t\tresetQueryOnClose: resolvedResetOnClose\n\t};\n}\n","import { useEffect, useRef, useState } from \"react\";\n\ninterface UsePickerSelectionLifecycleOptions<TValue> {\n\tvalue: TValue;\n\topen: boolean;\n\tonCommit: (value: TValue) => void;\n\tonOpen?: () => void;\n\tonClose?: (value: TValue) => void;\n\tisEqual: (left: TValue, right: TValue) => boolean;\n}\n\n/**\n * Общий жизненный цикл чернового выбора для picker-компонентов,\n * где изменения подтверждаются при закрытии popup.\n */\nexport function usePickerSelectionLifecycle<TValue>({\n\tvalue,\n\topen,\n\tonCommit,\n\tonOpen,\n\tonClose,\n\tisEqual\n}: UsePickerSelectionLifecycleOptions<TValue>) {\n\tconst previousOpenRef = useRef(false);\n\tconst [draftValue, setDraftValue] = useState(value);\n\n\tuseEffect(() => {\n\t\tif (previousOpenRef.current && !open) {\n\t\t\tif (!isEqual(draftValue, value)) {\n\t\t\t\tonCommit(draftValue);\n\t\t\t}\n\n\t\t\tonClose?.(draftValue);\n\t\t}\n\n\t\tpreviousOpenRef.current = open;\n\t}, [draftValue, isEqual, onClose, onCommit, open, value]);\n\n\tconst prepareOpen = () => {\n\t\tsetDraftValue(value);\n\t\tonOpen?.();\n\t};\n\n\treturn {\n\t\tdraftValue,\n\t\tsetDraftValue,\n\t\tprepareOpen\n\t};\n}\n","import { MouseEvent, RefObject } from \"react\";\n\nimport { PickerTriggerMode, createPickerTriggerPolicy } from \"./createPickerTriggerPolicy\";\n\ninterface UsePickerTriggerControllerOptions {\n\tmode: PickerTriggerMode;\n\topen: boolean;\n\tcurrentQuery: string;\n\thasDisplayValue: boolean;\n\tinputRef: RefObject<HTMLInputElement | null>;\n\tsetQuery?: (value: string) => void;\n\topenList?: () => void;\n\tclose?: () => void;\n\ttoggleOpen?: () => void;\n\tonBeforeOpen?: () => void;\n}\n\ninterface HandleTriggerKeyDownOptions {\n\tevent: React.KeyboardEvent<HTMLElement>;\n\tonActivateWhenOpen?: () => void;\n\tenableSpaceActivation?: boolean;\n\tenableClosedArrowDownOpen?: boolean;\n\tsuppressClosedArrowUp?: boolean;\n}\n\nfunction focusInput(inputRef: RefObject<HTMLInputElement | null>) {\n\trequestAnimationFrame(() => {\n\t\tinputRef.current?.focus();\n\t});\n}\n\n/**\n * Единый контроллер пользовательских действий на trigger-input.\n * Держит поведение display/search-single/search-multi в одном месте.\n */\nexport function usePickerTriggerController({\n\tmode,\n\topen,\n\tcurrentQuery,\n\thasDisplayValue,\n\tinputRef,\n\tsetQuery,\n\topenList,\n\tclose,\n\ttoggleOpen,\n\tonBeforeOpen\n}: UsePickerTriggerControllerOptions) {\n\tconst policy = createPickerTriggerPolicy(mode);\n\n\tconst openTrigger = () => {\n\t\tonBeforeOpen?.();\n\n\t\tif (openList) {\n\t\t\topenList();\n\t\t\treturn;\n\t\t}\n\n\t\ttoggleOpen?.();\n\t};\n\n\tconst closeTrigger = () => {\n\t\tif (close) {\n\t\t\tclose();\n\t\t\treturn;\n\t\t}\n\n\t\ttoggleOpen?.();\n\t};\n\n\tconst toggleTrigger = () => {\n\t\tif (open) {\n\t\t\tcloseTrigger();\n\t\t} else {\n\t\t\topenTrigger();\n\t\t}\n\n\t\tif (policy.shouldFocusReferenceOnToggle(open)) {\n\t\t\tfocusInput(inputRef);\n\t\t}\n\t};\n\n\treturn {\n\t\tpolicy,\n\t\thandleTriggerInputChange: (nextValue: string) => {\n\t\t\tsetQuery?.(nextValue);\n\n\t\t\tif (policy.shouldOpenOnInputChange(open)) {\n\t\t\t\topenTrigger();\n\t\t\t}\n\t\t},\n\t\thandleTriggerClick: () => {\n\t\t\tif (policy.shouldOpenOnTriggerClick(open)) {\n\t\t\t\topenTrigger();\n\t\t\t}\n\t\t},\n\t\thandleTriggerFocus: (input: HTMLInputElement) => {\n\t\t\tif (\n\t\t\t\tpolicy.shouldSelectTriggerTextOnFocus({\n\t\t\t\t\topen,\n\t\t\t\t\tcurrentQuery,\n\t\t\t\t\thasDisplayValue\n\t\t\t\t})\n\t\t\t) {\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tinput.select();\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\thandleToggleMouseDown: (event: MouseEvent<HTMLButtonElement>) => {\n\t\t\tevent.preventDefault();\n\t\t},\n\t\thandleToggleClick: () => {\n\t\t\ttoggleTrigger();\n\t\t},\n\t\thandleTriggerKeyDown: ({\n\t\t\tevent,\n\t\t\tonActivateWhenOpen,\n\t\t\tenableSpaceActivation = false,\n\t\t\tenableClosedArrowDownOpen = false,\n\t\t\tsuppressClosedArrowUp = false\n\t\t}: HandleTriggerKeyDownOptions) => {\n\t\t\tif (!open && suppressClosedArrowUp && event.key === \"ArrowUp\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!open && enableClosedArrowDownOpen && event.key === \"ArrowDown\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\ttoggleTrigger();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key === \"Enter\") {\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tif (open) {\n\t\t\t\t\tonActivateWhenOpen?.();\n\t\t\t\t} else {\n\t\t\t\t\ttoggleTrigger();\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (enableSpaceActivation && event.key === \" \") {\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tif (open) {\n\t\t\t\t\tonActivateWhenOpen?.();\n\t\t\t\t} else {\n\t\t\t\t\ttoggleTrigger();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttoggleTrigger\n\t};\n}\n"],"mappings":"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"}
@@ -1,357 +0,0 @@
1
- import { HighlightText as e } from "../text/index.js";
2
- import { t } from "./ui.module-oRwY3Zli.js";
3
- import { u as n } from "./input-CuRK9Vbz.js";
4
- import { a as r, f as i, i as a, m as o, r as s, s as c, t as l, u, v as d } from "./picker-SJXnHwsj.js";
5
- import { Option as f, OptionCode as p, OptionContent as m, OptionText as h } from "../option/index.js";
6
- import { t as g } from "./odata-dependent-C_DCbKY2.js";
7
- import { n as _ } from "./useODataSelectBase-DwR4Lfv-.js";
8
- import { t as v } from "./OptionContentContainer-CWHlfm5Z.js";
9
- import { cn as y } from "@ryuzaki13/react-foundation-lib/utils";
10
- import { CheckIcon as ee } from "lucide-react";
11
- import { Fragment as b, jsx as x, jsxs as S } from "react/jsx-runtime";
12
- import { Fragment as te, useCallback as C, useMemo as ne, useRef as re, useState as ie } from "react";
13
- import { useODataCollectionModel as w } from "@ryuzaki13/react-foundation-api/odata";
14
- //#region src/select/lib/getOptionSearchText.ts
15
- function ae({ option: e, getOptionLabel: t, getOptionCode: n, getOptionGroup: r }) {
16
- return [
17
- o(t(e)),
18
- o(n?.(e)),
19
- o(r?.(e)?.label)
20
- ].filter((e) => !!e).join(" ").toLowerCase();
21
- }
22
- function T(e, t, n) {
23
- return e.find((e) => e.value === t) ?? n;
24
- }
25
- //#endregion
26
- //#region src/select/model/useODataSelect.ts
27
- function E({ odata: e, segment: t, model: n, value: r, dependencies: i, onChange: a }) {
28
- let o = _({
29
- odata: e,
30
- segment: t,
31
- model: n,
32
- value: r ? [r] : [],
33
- dependencies: i
34
- }), s = o.selectedItems[0], c = ne(() => s ? [s, ...o.filteredItems] : o.filteredItems, [o.filteredItems, s]), l = (e) => {
35
- a(e?.[o.selectionKey]);
36
- };
37
- return {
38
- ...o,
39
- selectedItem: s,
40
- options: c,
41
- handleChange: l
42
- };
43
- }
44
- //#endregion
45
- //#region src/select/lib/createSelectOptionSections.ts
46
- function oe(e, t) {
47
- let n = [];
48
- return e.forEach((e, r) => {
49
- let i = t(e), a = n.at(-1), o = a?.group?.key === i?.key;
50
- if (a && o) {
51
- a.items.push({
52
- option: e,
53
- index: r
54
- });
55
- return;
56
- }
57
- n.push({
58
- group: i,
59
- items: [{
60
- option: e,
61
- index: r
62
- }]
63
- });
64
- }), n;
65
- }
66
- //#endregion
67
- //#region src/select/Select.tsx
68
- function D(e) {
69
- let { label: n, description: p, disabled: h, placeholder: g, size: _, options: w, value: T, onChange: E, getOptionKey: D, getOptionLabel: O, getOptionCode: k, getOptionSearchText: A, getOptionDisabled: j, getOptionAriaLabel: M, getOptionGroup: N, getOptionClassName: P, renderOption: F, renderValue: I, className: se, buttonClassName: ce, optionsClassName: le, optionsMaxWidth: ue, optionsContentClassName: de, searchable: L = !1, defaultFilter: fe = !0, query: pe, defaultQuery: me, onQuery: he, renderPopupHeader: ge, emptyState: _e, isLoading: ve, errorState: ye, placement: be = "bottom-start", clearable: R = !1 } = e, z = E, B = re(null), [V, xe] = ie(!1), H = L ? "search-single" : "display", U = T === void 0 ? void 0 : D(T), W = U === void 0 ? void 0 : w.find((e) => D(e) === U) ?? T, { query: G, setQuery: K, resetQueryOnClose: Se } = s({
70
- query: pe,
71
- defaultQuery: me,
72
- onQuery: he,
73
- triggerMode: H
74
- }), Ce = (e) => {
75
- V && !e && Se && K(""), xe(e);
76
- }, we = C((e) => A?.(e) ?? ae({
77
- option: e,
78
- getOptionLabel: O,
79
- getOptionCode: k,
80
- getOptionGroup: N
81
- }), [
82
- A,
83
- k,
84
- N,
85
- O
86
- ]), q = r({
87
- options: w,
88
- query: G,
89
- enabled: L && fe,
90
- getSearchText: we
91
- }), J = ne(() => N ? oe(q, N) : void 0, [N, q]), Te = U === void 0 ? -1 : q.findIndex((e) => D(e) === U), { activeIndex: Ee, context: De, floatingStyles: Oe, getFloatingProps: ke, setReference: Ae, setFloating: je, setOptionRef: Me, close: Y, openList: Ne, toggleOpen: Pe, selectOption: Fe, selectActiveOption: Ie, handleReferenceKeyDown: Le, handleFloatingKeyDown: Re, getOptionId: ze, getActiveOptionId: X } = a({
92
- options: q,
93
- selectedIndex: Te,
94
- open: V,
95
- onOpenChange: Ce,
96
- getOptionDisabled: j,
97
- onSelect: z,
98
- disabled: h,
99
- placement: be,
100
- triggerMode: H
101
- }), Z = q.length > 0, Q = W === void 0 ? void 0 : O(W), Be = W === void 0 ? void 0 : I ? I(W) : Q, Ve = o(Q), He = W === void 0 ? void 0 : o(k?.(W)), Ue = o(Be) ?? Ve ?? He ?? (U === void 0 ? "" : String(U)), We = L && (V || G.length > 0) ? G : W === void 0 ? "" : Ue, $ = l({
102
- mode: H,
103
- open: V,
104
- currentQuery: G,
105
- hasDisplayValue: W !== void 0,
106
- inputRef: B,
107
- setQuery: K,
108
- openList: Ne,
109
- close: Y,
110
- toggleOpen: Pe
111
- }), Ge = (e) => {
112
- B.current = e;
113
- }, Ke = () => {
114
- R && z(void 0), K(""), Y();
115
- }, qe = (e, t, n) => {
116
- let r = D(t), i = U !== void 0 && r === U, a = n === Ee, o = j?.(t) ?? !1, s = {
117
- active: a,
118
- selected: i,
119
- disabled: o
120
- };
121
- return /* @__PURE__ */ x(f, {
122
- id: ze(e, n),
123
- ref: (e) => Me(n, e),
124
- role: "option",
125
- "aria-selected": i,
126
- "aria-disabled": o || void 0,
127
- "aria-label": M?.(t),
128
- active: a,
129
- selected: i,
130
- disabled: o,
131
- className: P?.(t, s),
132
- onMouseDown: (e) => e.preventDefault(),
133
- onClick: () => Fe(t),
134
- children: F ? /* @__PURE__ */ x(v, { children: F(t, s) }) : /* @__PURE__ */ x(v, { children: /* @__PURE__ */ x(m, {
135
- icon: x(i ? ee : "span", {}),
136
- text: O(t),
137
- code: k?.(t)
138
- }) })
139
- }, r);
140
- };
141
- return /* @__PURE__ */ x(d, {
142
- label: n,
143
- description: p,
144
- disabled: h,
145
- size: _,
146
- className: se,
147
- children: ({ controlId: e, labelId: r, describedBy: a }) => {
148
- let o = `${e}-listbox`;
149
- return /* @__PURE__ */ S(b, { children: [/* @__PURE__ */ x(c, {
150
- ref: Ge,
151
- rootRef: Ae,
152
- id: e,
153
- type: "text",
154
- disabled: h,
155
- readOnly: !L,
156
- autoComplete: "off",
157
- role: "combobox",
158
- isLoading: ve,
159
- open: V,
160
- optionCount: w.length,
161
- label: n,
162
- placeholder: g,
163
- value: We,
164
- selectedValue: Be ?? Ue,
165
- hasSelection: W !== void 0,
166
- showSelectedValue: !1,
167
- clearable: !!R,
168
- onClear: Ke,
169
- onToggleMouseDown: $.handleToggleMouseDown,
170
- onToggleClick: $.handleToggleClick,
171
- "aria-labelledby": r,
172
- "aria-describedby": a,
173
- "aria-haspopup": "listbox",
174
- "aria-expanded": V,
175
- "aria-controls": V ? o : void 0,
176
- "aria-autocomplete": L ? "list" : "none",
177
- "aria-activedescendant": V ? X(o) : void 0,
178
- inputClassName: y(ce, "textOverflow"),
179
- onChange: (e) => {
180
- L && $.handleTriggerInputChange(e.target.value);
181
- },
182
- onClick: $.handleTriggerClick,
183
- onFocus: (e) => {
184
- $.handleTriggerFocus(e.currentTarget);
185
- },
186
- onKeyDown: (e) => {
187
- Le(e), !e.defaultPrevented && $.handleTriggerKeyDown({
188
- event: e,
189
- onActivateWhenOpen: Ie,
190
- enableSpaceActivation: !L
191
- });
192
- }
193
- }), /* @__PURE__ */ x(i, {
194
- open: V,
195
- context: De,
196
- floatingStyles: Oe,
197
- listId: o,
198
- labelId: r,
199
- descriptionId: a,
200
- activeOptionId: Z ? X(o) : void 0,
201
- setFloating: je,
202
- getFloatingProps: ke,
203
- onKeyDown: Re,
204
- className: le,
205
- maxWidth: ue,
206
- toolbar: ge,
207
- children: /* @__PURE__ */ x("div", {
208
- role: "presentation",
209
- className: y(de, "h100 scrollable overscroll"),
210
- children: Z ? J ? J.map((e, n) => {
211
- let r = e.group ? `${o}-group-${n}` : void 0, i = e.items.map(({ option: e, index: t }) => qe(o, e, t));
212
- return e.group ? /* @__PURE__ */ S("div", {
213
- role: "group",
214
- "aria-labelledby": r,
215
- children: [/* @__PURE__ */ x("div", {
216
- id: r,
217
- className: t.uiPopupGroupLabel,
218
- children: e.group.label
219
- }), i]
220
- }, `group-${String(e.group.key)}-${n}`) : /* @__PURE__ */ x(te, { children: i }, `options-${n}`);
221
- }) : q.map((e, t) => qe(o, e, t)) : /* @__PURE__ */ x(u, {
222
- emptyState: _e,
223
- errorState: ye
224
- })
225
- })
226
- })] });
227
- }
228
- });
229
- }
230
- //#endregion
231
- //#region src/select/SelectOptionContent.tsx
232
- function O({ label: t, code: n, highlight: r, labelClassName: i, codeClassName: a }) {
233
- return /* @__PURE__ */ S(b, { children: [/* @__PURE__ */ x(h, {
234
- className: y("flexEllipsis", i),
235
- children: /* @__PURE__ */ x(e, {
236
- text: t,
237
- highlight: r
238
- })
239
- }), n && /* @__PURE__ */ x(p, {
240
- className: a,
241
- children: /* @__PURE__ */ x(e, {
242
- text: n,
243
- highlight: r
244
- })
245
- })] });
246
- }
247
- //#endregion
248
- //#region src/select/ODataSelect.tsx
249
- function k(e, t, n) {
250
- return e ? t || Object.keys(e).find((e) => e !== n) || n : t || n;
251
- }
252
- function A({ odata: e, segment: t, model: r, size: i, label: a, description: o, disabled: s, value: c, dependencies: l, onChange: u, clearable: d }) {
253
- let f = E({
254
- odata: e,
255
- segment: t,
256
- model: w(r),
257
- value: c,
258
- dependencies: l,
259
- onChange: u
260
- });
261
- if (f.isLoading) return /* @__PURE__ */ x(n, {
262
- size: i,
263
- label: a,
264
- description: o
265
- });
266
- let p = t.hideCode ?? e.hideCode, m = k(f.selectedItem ?? f.options[0], f.textKey, f.codeKey);
267
- return /* @__PURE__ */ x(D, {
268
- size: i,
269
- label: a,
270
- description: o,
271
- options: f.options,
272
- value: f.selectedItem,
273
- onChange: f.handleChange,
274
- getOptionKey: (e) => e[f.codeKey],
275
- getOptionLabel: (e) => e[m],
276
- getOptionCode: p ? void 0 : (e) => e[f.codeKey],
277
- getOptionAriaLabel: (e) => p || e[m] === e[f.codeKey] ? String(e[m]) : `${e[m]} ${e[f.codeKey]}`,
278
- renderValue: (e) => /* @__PURE__ */ x(O, {
279
- label: e[m],
280
- code: p ? void 0 : e[f.codeKey]
281
- }),
282
- renderOption: (e) => /* @__PURE__ */ x(O, {
283
- label: e[m],
284
- code: p ? void 0 : e[f.codeKey],
285
- highlight: f.debouncedQuery
286
- }),
287
- searchable: !0,
288
- query: f.query,
289
- onQuery: f.setQuery,
290
- defaultFilter: !1,
291
- disabled: s || f.isLoading,
292
- placeholder: f.placeholder,
293
- isLoading: f.isLoading,
294
- errorState: f.isError ? "Ошибка загрузки" : void 0,
295
- emptyState: !f.isLoading && !f.isError ? "Нет данных" : void 0,
296
- clearable: d
297
- });
298
- }
299
- //#endregion
300
- //#region src/select/ODataDependentSegmentSelect.tsx
301
- function j(e) {
302
- let { item: t, disabled: n, label: r, description: i, size: a, width: o = 15, clearable: s } = e, c = g(e), { updateSegment: l } = c, u = `calc(${o}em + var(--width-add))`, d = C((e) => {
303
- l(t.id, e === void 0 ? [] : [e]);
304
- }, [t.id, l]);
305
- return /* @__PURE__ */ x("div", {
306
- style: {
307
- maxWidth: u,
308
- minWidth: u
309
- },
310
- children: /* @__PURE__ */ x(A, {
311
- odata: t.odata,
312
- segment: t.segment,
313
- model: t.model,
314
- dependencies: c.values,
315
- value: c.values[t.id]?.[0],
316
- onChange: d,
317
- disabled: n || c.isSegmentDisabled(t.id),
318
- label: r,
319
- description: i,
320
- size: a,
321
- clearable: s
322
- })
323
- });
324
- }
325
- //#endregion
326
- //#region src/select/SerializableSelect.tsx
327
- function M(e, t) {
328
- return String(e[t]);
329
- }
330
- function N(e, t, n) {
331
- let r = e[t];
332
- if (typeof r == "string" || typeof r == "number") return String(r);
333
- let i = M(e, n);
334
- return String(i);
335
- }
336
- function P({ label: e, description: t, disabled: n, placeholder: r, size: i, options: a, value: o, onChange: s, optionKey: c, optionLabel: l, renderCode: u, className: d, clearable: f }) {
337
- let p = o === void 0 ? void 0 : a.find((e) => M(e, c) === o);
338
- return /* @__PURE__ */ x(D, {
339
- label: e,
340
- description: t,
341
- disabled: n,
342
- placeholder: r,
343
- size: i,
344
- options: a,
345
- value: p,
346
- onChange: (e) => s(e ? M(e, c) : void 0),
347
- getOptionKey: (e) => M(e, c),
348
- getOptionLabel: (e) => N(e, l, c),
349
- getOptionCode: u ? (e) => M(e, c) : void 0,
350
- className: d,
351
- clearable: f
352
- });
353
- }
354
- //#endregion
355
- export { T as a, D as i, j as n, A as r, P as t };
356
-
357
- //# sourceMappingURL=select--oIrv7SC.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"select--oIrv7SC.js","names":[],"sources":["../../src/select/lib/getOptionSearchText.ts","../../src/select/model/useODataSelect.ts","../../src/select/lib/createSelectOptionSections.ts","../../src/select/Select.tsx","../../src/select/SelectOptionContent.tsx","../../src/select/ODataSelect.tsx","../../src/select/ODataDependentSegmentSelect.tsx","../../src/select/SerializableSelect.tsx"],"sourcesContent":["import { ReactNode } from \"react\";\n\nimport { InputType } from \"@ryuzaki13/react-foundation-lib/types\";\n\nimport { extractPickerTextContent } from \"../../picker\";\nimport { type SelectOptionGroup } from \"../SelectOptionGroup\";\n\nexport function getOptionSearchText<T extends InputType>({\n\toption,\n\tgetOptionLabel,\n\tgetOptionCode,\n\tgetOptionGroup\n}: {\n\toption: T;\n\tgetOptionLabel: (option: T) => ReactNode;\n\tgetOptionCode?: (option: T) => ReactNode;\n\tgetOptionGroup?: (option: T) => SelectOptionGroup | undefined;\n}) {\n\treturn [\n\t\textractPickerTextContent(getOptionLabel(option)),\n\t\textractPickerTextContent(getOptionCode?.(option)),\n\t\textractPickerTextContent(getOptionGroup?.(option)?.label)\n\t]\n\t\t.filter((part): part is string => Boolean(part))\n\t\t.join(\" \")\n\t\t.toLowerCase();\n}\n\n/** Находит selected option по value и возвращает fallback, если значение еще не нормализовано. */\nexport function resolveSelectedOption<TOption extends { value: string }>(\n\toptions: readonly TOption[],\n\tvalue: string,\n\tfallback: TOption\n): TOption {\n\treturn options.find((option) => option.value === value) ?? fallback;\n}\n","import { useMemo } from \"react\";\n\nimport { ODataCollectionModel, ODataSingleSelectProps } from \"@ryuzaki13/react-foundation-api/odata\";\nimport { CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata-service\";\n\nimport { useODataSelectBase } from \"./useODataSelectBase\";\n\ninterface UseODataSelectOptions extends Omit<ODataSingleSelectProps, \"model\"> {\n\tmodel: Required<ODataCollectionModel>;\n\tonChange: (value: string | undefined) => void;\n}\n\nexport function useODataSelect({ odata, segment, model, value, dependencies, onChange }: UseODataSelectOptions) {\n\tconst odataModel = useODataSelectBase({\n\t\todata,\n\t\tsegment,\n\t\tmodel,\n\t\tvalue: value ? [value] : [],\n\t\tdependencies\n\t});\n\n\tconst selectedItem = odataModel.selectedItems[0];\n\tconst options = useMemo(() => {\n\t\tif (!selectedItem) {\n\t\t\treturn odataModel.filteredItems;\n\t\t}\n\n\t\treturn [selectedItem, ...odataModel.filteredItems];\n\t}, [odataModel.filteredItems, selectedItem]);\n\n\tconst handleChange = (item: CollectionItem | undefined) => {\n\t\tonChange(item?.[odataModel.selectionKey]);\n\t};\n\n\treturn {\n\t\t...odataModel,\n\t\tselectedItem,\n\t\toptions,\n\t\thandleChange\n\t};\n}\n","import { type SelectOptionGroup } from \"../SelectOptionGroup\";\n\nexport type SelectOptionSectionItem<TOption> = {\n\treadonly option: TOption;\n\treadonly index: number;\n};\n\nexport type SelectOptionSection<TOption> = {\n\treadonly group: SelectOptionGroup | undefined;\n\treadonly items: readonly SelectOptionSectionItem<TOption>[];\n};\n\n/**\n * Собирает соседние опции с одинаковым group key в секции, сохраняя исходные индексы для клавиатурной навигации listbox.\n */\nexport function createSelectOptionSections<TOption>(\n\toptions: readonly TOption[],\n\tgetOptionGroup: (option: TOption) => SelectOptionGroup | undefined\n): readonly SelectOptionSection<TOption>[] {\n\tconst sections: Array<{ group: SelectOptionGroup | undefined; items: SelectOptionSectionItem<TOption>[] }> = [];\n\n\toptions.forEach((option, index) => {\n\t\tconst group = getOptionGroup(option);\n\t\tconst currentSection = sections.at(-1);\n\t\tconst belongsToCurrentSection = currentSection?.group?.key === group?.key;\n\n\t\tif (currentSection && belongsToCurrentSection) {\n\t\t\tcurrentSection.items.push({ option, index });\n\t\t\treturn;\n\t\t}\n\n\t\tsections.push({\n\t\t\tgroup,\n\t\t\titems: [{ option, index }]\n\t\t});\n\t});\n\n\treturn sections;\n}\n","import { type CSSProperties, Fragment, ReactNode, useCallback, useMemo, useRef, useState } from \"react\";\n\nimport { Placement } from \"@floating-ui/react\";\nimport { InputType } from \"@ryuzaki13/react-foundation-lib/types\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { CheckIcon } from \"lucide-react\";\n\nimport { Option, OptionContent } from \"../option\";\nimport { OptionContentContainer } from \"../option/OptionContentContainer\";\nimport {\n\textractPickerTextContent,\n\tPickerField,\n\tPickerPopup,\n\tPickerStatus,\n\tPickerTrigger,\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 { 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) => string;\n\tgetOptionCode?: (option: TOption) => string;\n\t/** Явный поисковый текст для опции с произвольным ReactNode-render. */\n\tgetOptionSearchText?: (option: TOption) => string | readonly string[];\n\tgetOptionDisabled?: (option: TOption) => boolean;\n\tgetOptionAriaLabel?: (option: TOption) => string;\n\tgetOptionGroup?: (option: TOption) => SelectOptionGroup | undefined;\n\tgetOptionClassName?: (option: TOption, state: SelectOptionState) => string | undefined;\n\trenderOption?: (option: TOption, state: SelectOptionState) => ReactNode;\n\trenderValue?: (option: TOption) => ReactNode;\n\tclassName?: string;\n\tbuttonClassName?: string;\n\toptionsClassName?: string;\n\toptionsMaxWidth?: CSSProperties[\"maxWidth\"];\n\toptionsContentClassName?: string;\n\tsearchable?: boolean;\n\tquery?: string;\n\tdefaultQuery?: string;\n\tonQuery?: (value: string) => void;\n\tdefaultFilter?: boolean;\n\tisLoading?: boolean;\n\trenderPopupHeader?: ReactNode;\n\temptyState?: ReactNode;\n\terrorState?: ReactNode;\n\tplacement?: Placement;\n};\n\ntype SelectChangeValue<TOption extends InputType, TClearable extends boolean | undefined> = true extends TClearable\n\t? TOption | undefined\n\t: TOption;\n\nexport type SelectProps<TOption extends InputType, TClearable extends boolean | undefined = false> = SelectSharedProps<TOption> & {\n\tclearable?: TClearable;\n\tonChange: ChangeHandler<SelectChangeValue<TOption, TClearable>>;\n};\n\n/**\n * Выпадающий список выбора значения из набора опций. Подходит для форм, фильтров и простых справочников.\n */\nexport function Select<TOption extends InputType, TClearable extends boolean | undefined = false>(props: SelectProps<TOption, TClearable>) {\n\tconst {\n\t\tlabel,\n\t\tdescription,\n\t\tdisabled,\n\t\tplaceholder,\n\t\tsize,\n\t\toptions,\n\t\tvalue,\n\t\tonChange,\n\t\tgetOptionKey,\n\t\tgetOptionLabel,\n\t\tgetOptionCode,\n\t\tgetOptionSearchText: getExplicitOptionSearchText,\n\t\tgetOptionDisabled,\n\t\tgetOptionAriaLabel,\n\t\tgetOptionGroup,\n\t\tgetOptionClassName,\n\t\trenderOption,\n\t\trenderValue,\n\t\tclassName,\n\t\tbuttonClassName,\n\t\toptionsClassName,\n\t\toptionsMaxWidth,\n\t\toptionsContentClassName,\n\t\tsearchable = false,\n\t\tdefaultFilter = true,\n\t\tquery,\n\t\tdefaultQuery,\n\t\tonQuery,\n\t\trenderPopupHeader,\n\t\temptyState,\n\t\tisLoading,\n\t\terrorState,\n\t\tplacement = \"bottom-start\",\n\t\tclearable = false\n\t} = props;\n\tconst emitChange = onChange as ChangeHandler<TOption | undefined>;\n\n\tconst inputRef = useRef<HTMLInputElement | null>(null);\n\tconst [open, setOpen] = useState(false);\n\tconst triggerMode = searchable ? \"search-single\" : \"display\";\n\tconst selectedKey = value === undefined ? undefined : getOptionKey(value);\n\tconst selectedOption =\n\t\tselectedKey === undefined ? undefined : (options.find((option) => getOptionKey(option) === selectedKey) ?? value);\n\tconst {\n\t\tquery: currentQuery,\n\t\tsetQuery,\n\t\tresetQueryOnClose\n\t} = usePickerQuery({\n\t\tquery,\n\t\tdefaultQuery,\n\t\tonQuery,\n\t\ttriggerMode\n\t});\n\tconst handleOpenChange = (nextOpen: boolean) => {\n\t\tif (open && !nextOpen && resetQueryOnClose) {\n\t\t\tsetQuery(\"\");\n\t\t}\n\n\t\tsetOpen(nextOpen);\n\t};\n\tconst getSearchText = useCallback(\n\t\t(option: TOption) =>\n\t\t\tgetExplicitOptionSearchText?.(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\t[getExplicitOptionSearchText, getOptionCode, getOptionGroup, getOptionLabel]\n\t);\n\tconst visibleOptions = usePickerDefaultFilter({\n\t\toptions,\n\t\tquery: currentQuery,\n\t\tenabled: searchable && defaultFilter,\n\t\tgetSearchText\n\t});\n\tconst optionSections = useMemo(\n\t\t() => (getOptionGroup ? createSelectOptionSections(visibleOptions, getOptionGroup) : undefined),\n\t\t[getOptionGroup, visibleOptions]\n\t);\n\tconst selectedIndex = selectedKey === undefined ? -1 : visibleOptions.findIndex((option) => getOptionKey(option) === selectedKey);\n\tconst {\n\t\tactiveIndex,\n\t\tcontext,\n\t\tfloatingStyles,\n\t\tgetFloatingProps,\n\t\tsetReference,\n\t\tsetFloating,\n\t\tsetOptionRef,\n\t\tclose,\n\t\topenList,\n\t\ttoggleOpen,\n\t\tselectOption,\n\t\tselectActiveOption,\n\t\thandleReferenceKeyDown,\n\t\thandleFloatingKeyDown,\n\t\tgetOptionId,\n\t\tgetActiveOptionId\n\t} = usePickerFloatingListbox({\n\t\toptions: visibleOptions,\n\t\tselectedIndex,\n\t\topen,\n\t\tonOpenChange: handleOpenChange,\n\t\tgetOptionDisabled,\n\t\tonSelect: emitChange,\n\t\tdisabled,\n\t\tplacement,\n\t\ttriggerMode\n\t});\n\n\tconst hasOptions = visibleOptions.length > 0;\n\tconst labelContent = selectedOption !== undefined ? getOptionLabel(selectedOption) : undefined;\n\tconst displayContent = selectedOption !== undefined ? (renderValue ? renderValue(selectedOption) : labelContent) : undefined;\n\tconst labelText = extractPickerTextContent(labelContent);\n\tconst codeText = selectedOption !== undefined ? extractPickerTextContent(getOptionCode?.(selectedOption)) : undefined;\n\tconst displayText =\n\t\textractPickerTextContent(displayContent) ?? labelText ?? codeText ?? (selectedKey !== undefined ? String(selectedKey) : \"\");\n\tconst showSearchValue = searchable && (open || currentQuery.length > 0);\n\tconst inputValue = showSearchValue ? currentQuery : selectedOption !== undefined ? displayText : \"\";\n\tconst triggerController = usePickerTriggerController({\n\t\tmode: triggerMode,\n\t\topen,\n\t\tcurrentQuery,\n\t\thasDisplayValue: selectedOption !== undefined,\n\t\tinputRef,\n\t\tsetQuery,\n\t\topenList,\n\t\tclose,\n\t\ttoggleOpen\n\t});\n\tconst setInputNode = (node: HTMLInputElement | null) => {\n\t\tinputRef.current = node;\n\t};\n\tconst handleClear = () => {\n\t\tif (clearable) {\n\t\t\temitChange(undefined);\n\t\t}\n\n\t\tsetQuery(\"\");\n\t\tclose();\n\t};\n\tconst renderOptionNode = (listId: string, option: TOption, index: number) => {\n\t\tconst optionKey = getOptionKey(option);\n\t\tconst selected = selectedKey !== undefined && optionKey === selectedKey;\n\t\tconst active = index === activeIndex;\n\t\tconst optionDisabled = getOptionDisabled?.(option) ?? false;\n\t\tconst optionState = { active, selected, disabled: optionDisabled };\n\n\t\treturn (\n\t\t\t<Option\n\t\t\t\tkey={optionKey}\n\t\t\t\tid={getOptionId(listId, index)}\n\t\t\t\tref={(node) => setOptionRef(index, node)}\n\t\t\t\trole=\"option\"\n\t\t\t\taria-selected={selected}\n\t\t\t\taria-disabled={optionDisabled || undefined}\n\t\t\t\taria-label={getOptionAriaLabel?.(option)}\n\t\t\t\tactive={active}\n\t\t\t\tselected={selected}\n\t\t\t\tdisabled={optionDisabled}\n\t\t\t\tclassName={getOptionClassName?.(option, optionState)}\n\t\t\t\tonMouseDown={(event) => event.preventDefault()}\n\t\t\t\tonClick={() => selectOption(option)}>\n\t\t\t\t{renderOption ? (\n\t\t\t\t\t<OptionContentContainer>{renderOption(option, optionState)}</OptionContentContainer>\n\t\t\t\t) : (\n\t\t\t\t\t<OptionContentContainer>\n\t\t\t\t\t\t<OptionContent\n\t\t\t\t\t\t\ticon={selected ? <CheckIcon /> : <span />}\n\t\t\t\t\t\t\ttext={getOptionLabel(option)}\n\t\t\t\t\t\t\tcode={getOptionCode?.(option)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</OptionContentContainer>\n\t\t\t\t)}\n\t\t\t</Option>\n\t\t);\n\t};\n\n\treturn (\n\t\t<PickerField label={label} description={description} disabled={disabled} size={size} className={className}>\n\t\t\t{({ controlId, labelId, describedBy }) => {\n\t\t\t\tconst listId = `${controlId}-listbox`;\n\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<PickerTrigger\n\t\t\t\t\t\t\tref={setInputNode}\n\t\t\t\t\t\t\trootRef={setReference}\n\t\t\t\t\t\t\tid={controlId}\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\treadOnly={!searchable}\n\t\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t\t\topen={open}\n\t\t\t\t\t\t\toptionCount={options.length}\n\t\t\t\t\t\t\tlabel={label}\n\t\t\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t\t\tvalue={inputValue}\n\t\t\t\t\t\t\tselectedValue={displayContent ?? displayText}\n\t\t\t\t\t\t\thasSelection={selectedOption !== undefined}\n\t\t\t\t\t\t\tshowSelectedValue={false /*selectedOption !== undefined && !showSearchValue*/}\n\t\t\t\t\t\t\tclearable={Boolean(clearable)}\n\t\t\t\t\t\t\tonClear={handleClear}\n\t\t\t\t\t\t\tonToggleMouseDown={triggerController.handleToggleMouseDown}\n\t\t\t\t\t\t\tonToggleClick={triggerController.handleToggleClick}\n\t\t\t\t\t\t\taria-labelledby={labelId}\n\t\t\t\t\t\t\taria-describedby={describedBy}\n\t\t\t\t\t\t\taria-haspopup=\"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(buttonClassName, \"textOverflow\")}\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={optionsClassName}\n\t\t\t\t\t\t\tmaxWidth={optionsMaxWidth}\n\t\t\t\t\t\t\ttoolbar={renderPopupHeader}>\n\t\t\t\t\t\t\t<div role=\"presentation\" className={cn(optionsContentClassName, \"h100 scrollable overscroll\")}>\n\t\t\t\t\t\t\t\t{hasOptions ? (\n\t\t\t\t\t\t\t\t\toptionSections ? (\n\t\t\t\t\t\t\t\t\t\toptionSections.map((section, sectionIndex) => {\n\t\t\t\t\t\t\t\t\t\t\tconst groupLabelId = section.group ? `${listId}-group-${sectionIndex}` : undefined;\n\t\t\t\t\t\t\t\t\t\t\tconst optionNodes = section.items.map(({ option, index }) =>\n\t\t\t\t\t\t\t\t\t\t\t\trenderOptionNode(listId, option, index)\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\treturn section.group ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\tkey={`group-${String(section.group.key)}-${sectionIndex}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\trole=\"group\"\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-labelledby={groupLabelId}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div id={groupLabelId} className={uiStyles.uiPopupGroupLabel}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{section.group.label}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{optionNodes}\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t<Fragment key={`options-${sectionIndex}`}>{optionNodes}</Fragment>\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\tvisibleOptions.map((option, index) => renderOptionNode(listId, option, index))\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<PickerStatus emptyState={emptyState} errorState={errorState} />\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</PickerPopup>\n\t\t\t\t\t</>\n\t\t\t\t);\n\t\t\t}}\n\t\t</PickerField>\n\t);\n}\n","import { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { OptionCode, OptionText } from \"../option\";\nimport { HighlightText } from \"../text\";\n\ninterface OptionContentProps {\n\tlabel: string;\n\tcode?: string;\n\thighlight?: string;\n\t/** Приватный визуальный modifier label для специализированного владельца option. */\n\tlabelClassName?: string;\n\t/** Отдельный modifier code, потому что code задаёт собственный variable-font weight. */\n\tcodeClassName?: string;\n}\n\n/**\n * Универсальный рендерер опции. Используется и в single-select, и в multi-select.\n */\nexport function SelectOptionContent({ label, code, highlight, labelClassName, codeClassName }: OptionContentProps) {\n\treturn (\n\t\t<>\n\t\t\t<OptionText className={cn(\"flexEllipsis\", labelClassName)}>\n\t\t\t\t<HighlightText text={label} highlight={highlight} />\n\t\t\t</OptionText>\n\t\t\t{code && (\n\t\t\t\t<OptionCode className={codeClassName}>\n\t\t\t\t\t<HighlightText text={code} highlight={highlight} />\n\t\t\t\t</OptionCode>\n\t\t\t)}\n\t\t</>\n\t);\n}\n","import { ODataSingleSelectProps, useODataCollectionModel } from \"@ryuzaki13/react-foundation-api/odata\";\nimport { CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata-service\";\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 function ODataSelect({\n\todata,\n\tsegment,\n\tmodel: initialModel,\n\tsize,\n\tlabel,\n\tdescription,\n\tdisabled,\n\tvalue,\n\tdependencies,\n\tonChange,\n\tclearable\n}: ODataSelectProps) {\n\tconst model = useODataCollectionModel(initialModel);\n\tconst odataModel = useODataSelect({\n\t\todata,\n\t\tsegment,\n\t\tmodel,\n\t\tvalue,\n\t\tdependencies,\n\t\tonChange\n\t});\n\n\tif (odataModel.isLoading) {\n\t\treturn <InputUILoading size={size} label={label} description={description} />;\n\t}\n\n\tconst hideCode = segment.hideCode ?? odata.hideCode;\n\tconst resolvedTextKey = getODataOptionTextKey(odataModel.selectedItem ?? odataModel.options[0], odataModel.textKey, odataModel.codeKey);\n\n\treturn (\n\t\t<Select\n\t\t\tsize={size}\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\toptions={odataModel.options}\n\t\t\tvalue={odataModel.selectedItem}\n\t\t\tonChange={odataModel.handleChange}\n\t\t\tgetOptionKey={(item) => item[odataModel.codeKey]}\n\t\t\tgetOptionLabel={(item) => item[resolvedTextKey]}\n\t\t\tgetOptionCode={hideCode ? undefined : (item) => item[odataModel.codeKey]}\n\t\t\tgetOptionAriaLabel={(item) =>\n\t\t\t\thideCode || item[resolvedTextKey] === item[odataModel.codeKey]\n\t\t\t\t\t? String(item[resolvedTextKey])\n\t\t\t\t\t: `${item[resolvedTextKey]} ${item[odataModel.codeKey]}`\n\t\t\t}\n\t\t\trenderValue={(item) => (\n\t\t\t\t<SelectOptionContent label={item[resolvedTextKey]} code={hideCode ? undefined : item[odataModel.codeKey]} />\n\t\t\t)}\n\t\t\trenderOption={(item) => (\n\t\t\t\t<SelectOptionContent\n\t\t\t\t\tlabel={item[resolvedTextKey]}\n\t\t\t\t\tcode={hideCode ? undefined : item[odataModel.codeKey]}\n\t\t\t\t\thighlight={odataModel.debouncedQuery}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\tsearchable\n\t\t\tquery={odataModel.query}\n\t\t\tonQuery={odataModel.setQuery}\n\t\t\tdefaultFilter={false}\n\t\t\tdisabled={disabled || odataModel.isLoading}\n\t\t\tplaceholder={odataModel.placeholder}\n\t\t\tisLoading={odataModel.isLoading}\n\t\t\terrorState={odataModel.isError ? \"Ошибка загрузки\" : undefined}\n\t\t\temptyState={!odataModel.isLoading && !odataModel.isError ? \"Нет данных\" : undefined}\n\t\t\tclearable={clearable}\n\t\t/>\n\t);\n}\n","import { useCallback } from \"react\";\n\nimport { useODataDependentSelection } from \"../odata-dependent\";\n\nimport { ODataSelect } from \"./ODataSelect\";\n\nimport type { ODataDependentSegmentControlProps } from \"../odata-dependent\";\n\nexport type ODataDependentSegmentSelectProps = ODataDependentSegmentControlProps & {\n\t/** Показывает действие очистки выбранного значения. */\n\tclearable?: boolean;\n};\n\n/**\n * Адаптирует один развёрнутый зависимый OData-сегмент к single-select UI.\n * Общий снимок остаётся массивным, поэтому совместим с `dependencies` и\n * может совместно использоваться с segment-level MultiSelect-контролами.\n */\nexport function ODataDependentSegmentSelect(props: ODataDependentSegmentSelectProps) {\n\tconst { item, disabled, label, description, size, width = 15, clearable } = props;\n\tconst selection = useODataDependentSelection(props);\n\tconst { updateSegment } = selection;\n\tconst widthStyle = `calc(${width}em + var(--width-add))`;\n\n\tconst handleSelectionChange = useCallback(\n\t\t(value: string | undefined) => {\n\t\t\tupdateSegment(item.id, value === undefined ? [] : [value]);\n\t\t},\n\t\t[item.id, updateSegment]\n\t);\n\n\treturn (\n\t\t<div style={{ maxWidth: widthStyle, minWidth: widthStyle }}>\n\t\t\t<ODataSelect\n\t\t\t\todata={item.odata}\n\t\t\t\tsegment={item.segment}\n\t\t\t\tmodel={item.model}\n\t\t\t\tdependencies={selection.values}\n\t\t\t\tvalue={selection.values[item.id]?.[0]}\n\t\t\t\tonChange={handleSelectionChange}\n\t\t\t\tdisabled={disabled || selection.isSegmentDisabled(item.id)}\n\t\t\t\tlabel={label}\n\t\t\t\tdescription={description}\n\t\t\t\tsize={size}\n\t\t\t\tclearable={clearable}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n","import { Select } from \"./Select\";\n\nimport type { UiBaseProps } from \"../types\";\nimport type { SelectOptionKey } from \"./Select\";\n\ntype SerializableOptionRecord = Record<string, unknown>;\n\ntype SerializableOptionKeyField<TOption extends SerializableOptionRecord> = {\n\t[K in keyof TOption]: Extract<TOption[K], SelectOptionKey> extends never ? never : K;\n}[keyof TOption];\n\ntype SerializableOptionValue<TOption extends SerializableOptionRecord, TOptionKey extends SerializableOptionKeyField<TOption>> = Extract<\n\tTOption[TOptionKey],\n\tSelectOptionKey\n>;\n\nexport interface SerializableSelectProps<\n\tTOption extends SerializableOptionRecord,\n\tTOptionKey extends SerializableOptionKeyField<TOption>,\n\tTOptionLabel extends keyof TOption\n> extends Omit<UiBaseProps<SerializableOptionValue<TOption, TOptionKey> | undefined>, \"onChange\"> {\n\toptions: readonly TOption[];\n\tonChange: (value: SerializableOptionValue<TOption, TOptionKey> | undefined) => void;\n\toptionKey: TOptionKey;\n\toptionLabel: TOptionLabel;\n\trenderCode?: true;\n\tclassName?: string;\n\tclearable?: boolean;\n}\n\nfunction getSerializableOptionKey<TOption extends SerializableOptionRecord, TOptionKey extends SerializableOptionKeyField<TOption>>(\n\toption: TOption,\n\toptionKey: TOptionKey\n): Extract<TOption[TOptionKey], SelectOptionKey> {\n\treturn String(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 {\n\tconst label = option[optionLabel];\n\n\tif (typeof label === \"string\" || typeof label === \"number\") {\n\t\treturn String(label);\n\t}\n\n\tconst key = getSerializableOptionKey(option, optionKey);\n\treturn 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,3 +0,0 @@
1
- import{a as e,n as t}from"./rolldown-runtime-DkW27tQK.js";import{t as n}from"./react-BZJXY1be.js";import{n as r,t as i}from"./x-BdAuXjBq.js";import{n as a}from"./iframe-ltYEol2F.js";import{a as o,i as s}from"./utils-tg3ibbzi.js";import{g as c,p as l}from"./odata-service-CWkHASdw-DAt28ZWr.js";import{n as u,t as d}from"./ui.module-l7VCYIW-.js";var f,p,m,h,g,_,v,y,b,x;function S(){return(S=t((()=>{f=`lRn5ye`,p=`_0CSWJY`,m=`ce5HAY`,h=`_8TObqB`,g=`Gx3Wbd`,_=`cpwaYo`,v=`itlmix`,y=`aITEGl`,b=`ekyJIt`,x={controlLayout:f,inputUI:p,input:m,inputNumber:h,controlWithEndAdornment:g,controlEndAdornment:_,endAdornmentGroup:v,clearButton:y,error:b}})))()}function C({id:e,hasLabel:t,hasDescription:n,hasError:r}){let i=(0,w.useId)(),a=e??i,o=t?`${a}-label`:void 0,s=n?`${a}-description`:void 0,c=r?`${a}-error`:void 0;return{controlId:a,labelId:o,descriptionId:s,errorId:c,describedBy:[s,c].filter(Boolean).join(` `)||void 0}}var w;function T(){return(T=t((()=>{w=n()})))()}function E({label:e,controlId:t,labelId:n}){return(0,R.jsx)(`label`,{id:n,htmlFor:t,className:u.uiLabel,children:e})}function D(){return(0,R.jsx)(`div`,{className:o(u.uiInputControlFake,`skeletonLine`)})}function O({label:e,description:t,size:n,disabled:r,isLoading:i,className:a}){let{controlId:s,labelId:c,descriptionId:l}=C({hasLabel:e!=null,hasDescription:!!t});return(0,R.jsxs)(`div`,{className:o(u.uiElement,u.uiSizable,n&&u[n],u.disabled,a),"aria-disabled":r||void 0,children:[e&&(0,R.jsx)(E,{label:e,controlId:s,labelId:c}),t&&(0,R.jsx)(`p`,{id:l,className:u.uiDescription,children:t}),(0,R.jsx)(`div`,{className:o(u.uiInputControlFake,i&&`skeletonLine`)})]})}function k(e){return(0,R.jsx)(O,{...e,isLoading:!0})}function A({label:e,description:t,disabled:n,className:r,error:i,size:a,controlId:s,labelId:c,descriptionId:l,errorId:d,required:f,children:p}){return(0,R.jsxs)(`div`,{className:o(x.inputUI,u.uiElement,u.uiSizable,a&&u[a],n&&u.disabled,f&&u.required,r),"aria-disabled":n||void 0,children:[e&&(0,R.jsx)(E,{label:e,controlId:s,labelId:c}),t&&(0,R.jsx)(`p`,{id:l,className:u.uiDescription,children:t}),(0,R.jsxs)(`div`,{className:x.controlLayout,children:[p,i&&(0,R.jsx)(`p`,{id:d,className:x.error,role:`alert`,children:i})]})]})}function j({className:e,endAdornment:t,endAdornmentClassName:n,endAdornmentWidth:r,children:i}){let a=t!=null,s=a&&r?{"--input-end-adornment-width":r}:void 0;return(0,R.jsxs)(`div`,{className:o(x.controlLayout,e),style:s,children:[i({controlClassName:a?x.controlWithEndAdornment:void 0}),a&&(0,R.jsx)(`div`,{className:o(x.controlEndAdornment,n),children:t})]})}function M({onClick:e,disabled:t,className:n,ariaLabel:r=`Очистить значение`}){return(0,R.jsx)(`button`,{type:`button`,disabled:t||!e,className:o(x.clearButton,n),onClick:e,"aria-label":r,children:(0,R.jsx)(i,{})})}function N(e,t,n){if(n)return n;if(e&&t)return`calc((var(--control-height) * 2) + var(--space-xs))`;if(e||t)return`var(--control-height)`}function P({endAdornment:e,onClear:t,disabled:n}){if(!(e==null&&!t))return(0,R.jsxs)(`div`,{className:x.endAdornmentGroup,children:[e,t&&(0,R.jsx)(M,{onClick:t,disabled:n})]})}function F({label:e,description:t,disabled:n,className:r,onClear:i,error:a,onClearError:s,onChange:c,value:l,size:d,allowedPattern:f,endAdornment:p,endAdornmentClassName:m,endAdornmentWidth:h,type:g=`text`,..._}){let[v,y]=(0,L.useState)(!1),b=e=>{let t=e.target.value;f!==void 0&&y(t!==``&&!f.test(t)),c(t),a&&s&&s()},S=!!(l&&l.length>0),w=S?a:void 0,{controlId:T,labelId:E,descriptionId:D,errorId:O,describedBy:k}=C({id:_.id,hasLabel:e!=null,hasDescription:!!t,hasError:!!w}),M=S&&(!!a||v),F=P({endAdornment:p,onClear:i,disabled:n||!S}),I=N(p!=null,!!i,h);return(0,R.jsx)(A,{label:e,description:t,disabled:n,required:_.required,className:r,size:d,error:w,controlId:T,labelId:E,descriptionId:D,errorId:O,children:(0,R.jsx)(j,{endAdornment:F,endAdornmentClassName:m,endAdornmentWidth:I,children:({controlClassName:e})=>(0,R.jsx)(`input`,{..._,id:T,type:g,disabled:n,value:l,"aria-invalid":M||void 0,"aria-labelledby":E,"aria-describedby":k,"data-invalid":M?``:void 0,className:o(u.uiInputControl,x.input,e),onChange:b})})})}function I({label:e,description:t,disabled:n,className:r,onClear:i,error:a,onClearError:s,onChange:c,value:d,size:f,endAdornment:p,endAdornmentClassName:m,endAdornmentWidth:h,...g}){let _=g,{controlId:v,labelId:y,descriptionId:b,errorId:S,describedBy:w}=C({id:g.id,hasLabel:e!=null,hasDescription:!!t,hasError:!!a}),T=(0,L.useRef)(null),E=(0,L.useRef)(null),D=d!==void 0&&typeof d==`number`&&!isNaN(d)?String(d):``;(0,L.useLayoutEffect)(()=>{let e=E.current;if(e&&Object.is(e.value,d)){T.current&&T.current.value!==e.raw&&(T.current.value=e.raw);return}E.current=null,T.current&&T.current.value!==D&&(T.current.value=D)},[D,d]);let O=i?()=>{i()}:void 0,k=e=>{let t=e.target.value,n=l(t);E.current={value:n,raw:t},c(n),a&&s&&s()},M=P({endAdornment:p,onClear:O,disabled:n}),F=N(p!=null,!!O,h);return(0,R.jsx)(A,{label:e,description:t,disabled:n,required:g.required,className:r,size:f,error:a,controlId:v,labelId:y,descriptionId:b,errorId:S,children:(0,R.jsx)(j,{endAdornment:M,endAdornmentClassName:m,endAdornmentWidth:F,children:({controlClassName:e})=>(0,R.jsx)(`input`,{..._,ref:T,id:v,type:`number`,inputMode:`decimal`,disabled:n,defaultValue:D,"aria-labelledby":y,"aria-describedby":w,className:o(u.uiInputControl,x.input,x.inputNumber,e),onChange:k})})})}var L,R,z;function B(){return(B=t((()=>{L=e(n(),1),c(),s(),r(),d(),S(),T(),R=a(),z=F,D.__docgenInfo={description:``,methods:[],displayName:`InputLoadingFrame`},O.__docgenInfo={description:``,methods:[],displayName:`InputUIFrame`,props:{isLoading:{required:!1,tsType:{name:`boolean`},description:``}}},k.__docgenInfo={description:``,methods:[],displayName:`InputUILoading`},A.__docgenInfo={description:`Низкоуровневая оболочка поля ввода с общими элементами оформления.`,methods:[],displayName:`InputUI`,props:{className:{required:!1,tsType:{name:`string`},description:``},error:{required:!1,tsType:{name:`string`},description:``},controlId:{required:!1,tsType:{name:`string`},description:``},labelId:{required:!1,tsType:{name:`string`},description:``},descriptionId:{required:!1,tsType:{name:`string`},description:``},errorId:{required:!1,tsType:{name:`string`},description:``},required:{required:!1,tsType:{name:`boolean`},description:``},children:{required:!0,tsType:{name:`ReactReactNode`,raw:`React.ReactNode`},description:``}},composes:[`Omit`]},j.__docgenInfo={description:``,methods:[],displayName:`InputControl`,props:{className:{required:!1,tsType:{name:`string`},description:``},endAdornment:{required:!1,tsType:{name:`ReactNode`},description:``},endAdornmentClassName:{required:!1,tsType:{name:`string`},description:``},endAdornmentWidth:{required:!1,tsType:{name:`string`},description:``},children:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(props: InputControlRenderProps) => ReactNode`,signature:{arguments:[{type:{name:`InputControlRenderProps`},name:`props`}],return:{name:`ReactNode`}}},description:``}}},M.__docgenInfo={description:``,methods:[],displayName:`InputClearButton`,props:{onClick:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},disabled:{required:!1,tsType:{name:`boolean`},description:``},className:{required:!1,tsType:{name:`string`},description:``},ariaLabel:{required:!1,tsType:{name:`string`},description:``,defaultValue:{value:`"Очистить значение"`,computed:!1}}}},F.__docgenInfo={description:`Базовое текстовое поле ввода для строковых значений.`,methods:[],displayName:`InputText`,props:{label:{required:!1,tsType:{name:`ReactNode`},description:``},description:{required:!1,tsType:{name:`string`},description:``},placeholder:{required:!1,tsType:{name:`string`},description:``},disabled:{required:!1,tsType:{name:`boolean`},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:``},value:{required:!0,tsType:{name:`T`},description:"Если начальное состояние может быть `null | undefined`\nзначит `onChange` тоже должен ументь сбрасывать.\nПоэтому такой контрол явно должен передавать `UiBaseProps<AnyType | undefined>`"},onChange:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(value: T) => void`,signature:{arguments:[{type:{name:`C`},name:`value`}],return:{name:`void`}}},description:``},onClear:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},error:{required:!1,tsType:{name:`string`},description:``},onClearError:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},defaultValue:{required:!1,tsType:{name:`string`},description:``},endAdornment:{required:!1,tsType:{name:`ReactNode`},description:``},endAdornmentClassName:{required:!1,tsType:{name:`string`},description:``},endAdornmentWidth:{required:!1,tsType:{name:`string`},description:``},type:{required:!1,tsType:{name:`union`,raw:`"email" | "password" | "search" | "tel" | "text" | "url"`,elements:[{name:`literal`,value:`"email"`},{name:`literal`,value:`"password"`},{name:`literal`,value:`"search"`},{name:`literal`,value:`"tel"`},{name:`literal`,value:`"text"`},{name:`literal`,value:`"url"`}]},description:``,defaultValue:{value:`"text"`,computed:!1}},allowedPattern:{required:!1,tsType:{name:`RegExp`},description:`Регулярное выражение для валидации всего введённого значения.
2
- При несоответствии поле подсвечивается как невалидное, но текст не удаляется.
3
- Пример: \`/^\\d*$/\``}},composes:[`Omit`]},I.__docgenInfo={description:`Числовое поле ввода с нормализацией значения и защитой от промежуточного невалидного ввода.`,methods:[],displayName:`InputNumber`,props:{label:{required:!1,tsType:{name:`ReactNode`},description:``},description:{required:!1,tsType:{name:`string`},description:``},placeholder:{required:!1,tsType:{name:`string`},description:``},disabled:{required:!1,tsType:{name:`boolean`},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:``},value:{required:!0,tsType:{name:`V`},description:"Если начальное состояние может быть `null | undefined`\nзначит `onChange` тоже должен ументь сбрасывать.\nПоэтому такой контрол явно должен передавать `UiBaseProps<AnyType | undefined>`"},onChange:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(value: T) => void`,signature:{arguments:[{type:{name:`C`},name:`value`}],return:{name:`void`}}},description:``},onClear:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},error:{required:!1,tsType:{name:`string`},description:``},onClearError:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},defaultValue:{required:!1,tsType:{name:`T`},description:``},endAdornment:{required:!1,tsType:{name:`ReactNode`},description:``},endAdornmentClassName:{required:!1,tsType:{name:`string`},description:``},endAdornmentWidth:{required:!1,tsType:{name:`string`},description:``}},composes:[`Omit`]}})))()}export{I as a,k as c,C as d,D as i,B as l,M as n,F as o,j as r,A as s,z as t,T as u};