@ryuzaki13/react-foundation-ui 1.5.0 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (325) hide show
  1. package/dist/advanced-search/index.js +4 -4
  2. package/dist/base-table/index.js +1 -1
  3. package/dist/chunks/CalendarView-Cfih7hjD.js +439 -0
  4. package/dist/chunks/{CalendarView-DtacoN_c.js.map → CalendarView-Cfih7hjD.js.map} +1 -1
  5. package/dist/chunks/CheckBox.module-C5SjPwSj.js.map +1 -1
  6. package/dist/chunks/{TextEditorLexicalClient-DVML-Nhd.js → TextEditorLexicalClient-BSafrkLJ.js} +241 -275
  7. package/dist/chunks/TextEditorLexicalClient-BSafrkLJ.js.map +1 -0
  8. package/dist/chunks/{base-table-BPcdSitC.js → base-table-X7aSSjXa.js} +2 -2
  9. package/dist/chunks/{base-table-BPcdSitC.js.map → base-table-X7aSSjXa.js.map} +1 -1
  10. package/dist/chunks/{context-menu-BY4pYGwB.js → context-menu-tcD3kVAc.js} +58 -62
  11. package/dist/chunks/context-menu-tcD3kVAc.js.map +1 -0
  12. package/dist/chunks/date-input-Bsl9dxxY.js +341 -0
  13. package/dist/chunks/date-input-Bsl9dxxY.js.map +1 -0
  14. package/dist/chunks/{input-BWCaVC06.js → input-CAw1Loze.js} +54 -47
  15. package/dist/chunks/input-CAw1Loze.js.map +1 -0
  16. package/dist/chunks/{input-files-62qH2TMj.js → input-files-CLtQ7p8j.js} +2 -2
  17. package/dist/chunks/{input-files-62qH2TMj.js.map → input-files-CLtQ7p8j.js.map} +1 -1
  18. package/dist/chunks/{input-search-CdPI1cb6.js → input-search-F6MPrUGF.js} +2 -2
  19. package/dist/chunks/{input-search-CdPI1cb6.js.map → input-search-F6MPrUGF.js.map} +1 -1
  20. package/dist/chunks/{multi-select-01xmD1nZ.js → multi-select-Dypew65l.js} +60 -59
  21. package/dist/chunks/multi-select-Dypew65l.js.map +1 -0
  22. package/dist/chunks/{picker-Mdb73_uW.js → picker-TYLwgl1c.js} +82 -92
  23. package/dist/chunks/{picker-Mdb73_uW.js.map → picker-TYLwgl1c.js.map} +1 -1
  24. package/dist/chunks/{select-DRf4_a1Z.js → select-DCSNVEYW.js} +34 -33
  25. package/dist/chunks/select-DCSNVEYW.js.map +1 -0
  26. package/dist/chunks/{table-DSg9gi_l.js → table-DihiNNJt.js} +2 -2
  27. package/dist/chunks/{table-DSg9gi_l.js.map → table-DihiNNJt.js.map} +1 -1
  28. package/dist/context-menu/components/MenuRoot.d.ts.map +1 -1
  29. package/dist/context-menu/index.js +1 -1
  30. package/dist/date-input/index.js +2 -2
  31. package/dist/date-input/lib/dateInputValue.d.ts +2 -6
  32. package/dist/date-input/lib/dateInputValue.d.ts.map +1 -1
  33. package/dist/date-input/lib/types.d.ts +0 -4
  34. package/dist/date-input/lib/types.d.ts.map +1 -1
  35. package/dist/date-input/model/useDateInput.d.ts +2 -2
  36. package/dist/date-input/model/useDateInput.d.ts.map +1 -1
  37. package/dist/date-input/ui/CalendarView.d.ts.map +1 -1
  38. package/dist/date-input/ui/DateInput.d.ts +0 -4
  39. package/dist/date-input/ui/DateInput.d.ts.map +1 -1
  40. package/dist/date-time-input/index.js +229 -234
  41. package/dist/date-time-input/index.js.map +1 -1
  42. package/dist/date-time-input/model/useDateTimeSegments.d.ts.map +1 -1
  43. package/dist/date-time-input/ui/SingleDateTimeInput.d.ts.map +1 -1
  44. package/dist/disclosure/index.js.map +1 -1
  45. package/dist/drop-zone/index.js +1 -1
  46. package/dist/image/index.js +2 -2
  47. package/dist/input/Input.d.ts.map +1 -1
  48. package/dist/input/index.js +1 -1
  49. package/dist/input-date-time/index.js +1 -1
  50. package/dist/input-file/index.js +1 -1
  51. package/dist/input-files/index.js +1 -1
  52. package/dist/input-image/index.js +1 -1
  53. package/dist/input-search/index.js +1 -1
  54. package/dist/layout-picker/index.js +1 -1
  55. package/dist/list/List.d.ts.map +1 -1
  56. package/dist/list/index.js +74 -45
  57. package/dist/list/index.js.map +1 -1
  58. package/dist/list/useListVirtualizer.d.ts +13 -0
  59. package/dist/list/useListVirtualizer.d.ts.map +1 -0
  60. package/dist/multi-select/index.js +1 -1
  61. package/dist/multi-select/ui/MultiSelect.d.ts.map +1 -1
  62. package/dist/picker/index.js +1 -1
  63. package/dist/picker/model/usePickerQuery.d.ts +6 -2
  64. package/dist/picker/model/usePickerQuery.d.ts.map +1 -1
  65. package/dist/picker/model/usePickerSelectionLifecycle.d.ts.map +1 -1
  66. package/dist/preset-range-date-input/index.js +1 -1
  67. package/dist/preset-select/index.js +1 -1
  68. package/dist/select/Select.d.ts.map +1 -1
  69. package/dist/select/index.js +1 -1
  70. package/dist/simple-table/index.js +1 -1
  71. package/dist/slider/SliderInput.d.ts.map +1 -1
  72. package/dist/slider/index.js +333 -290
  73. package/dist/slider/index.js.map +1 -1
  74. package/dist/state-select/index.js +1 -1
  75. package/dist/styles.css +1 -1
  76. package/dist/table/index.js +1 -1
  77. package/dist/table-sorting/index.js +1 -1
  78. package/dist/tabs/index.js.map +1 -1
  79. package/dist/tag-input/TagInput.d.ts.map +1 -1
  80. package/dist/tag-input/index.js +1 -1
  81. package/dist/tag-input/index.js.map +1 -1
  82. package/dist/text-editor/EmailDialog.d.ts +1 -2
  83. package/dist/text-editor/EmailDialog.d.ts.map +1 -1
  84. package/dist/text-editor/LinkDialog.d.ts +1 -2
  85. package/dist/text-editor/LinkDialog.d.ts.map +1 -1
  86. package/dist/text-editor/PhoneDialog.d.ts +1 -2
  87. package/dist/text-editor/PhoneDialog.d.ts.map +1 -1
  88. package/dist/text-editor/SemanticDialog.d.ts +1 -2
  89. package/dist/text-editor/SemanticDialog.d.ts.map +1 -1
  90. package/dist/text-editor/TextEditorDialogs.d.ts +2 -1
  91. package/dist/text-editor/TextEditorDialogs.d.ts.map +1 -1
  92. package/dist/text-editor/TimeDialog.d.ts +1 -2
  93. package/dist/text-editor/TimeDialog.d.ts.map +1 -1
  94. package/dist/text-editor/index.js +1 -1
  95. package/dist/textarea/index.js +1 -1
  96. package/dist/tree-select/TreePickerBase.d.ts.map +1 -1
  97. package/dist/tree-select/index.js +243 -248
  98. package/dist/tree-select/index.js.map +1 -1
  99. package/dist/tree-table/index.js +1 -1
  100. package/package.json +1 -1
  101. package/storybook-static/assets/{Badge-CblO4qSx.js → Badge-DUTHAQCE.js} +1 -1
  102. package/storybook-static/assets/{Badge.stories-CtRrqjAo.js → Badge.stories-6iI-UG0f.js} +1 -1
  103. package/storybook-static/assets/{Button-BVt4jmN4.js → Button-B0C3LMAw.js} +1 -1
  104. package/storybook-static/assets/{Button-Bzc9jBAF.js → Button-CqVTrqw2.js} +1 -1
  105. package/storybook-static/assets/{Button.stories-tqfxm0ox.js → Button.stories-DjUmGByS.js} +1 -1
  106. package/storybook-static/assets/{CalendarView-MkrPd5D-.js → CalendarView-hiZ9ETaP.js} +1 -1
  107. package/storybook-static/assets/{CheckBox-CWipX4CI.js → CheckBox-DBQ50PCI.js} +1 -1
  108. package/storybook-static/assets/{CheckBox-0BK2dgdD.js → CheckBox-De010n9y.js} +1 -1
  109. package/storybook-static/assets/CheckBox-Dw4nDCv8.css +1 -0
  110. package/storybook-static/assets/{CheckBox.stories-B5yWzlQa.js → CheckBox.stories-BfC6OQx3.js} +1 -1
  111. package/storybook-static/assets/{Color-6AOWCN3U-WdTzF_2p.js → Color-6AOWCN3U-C_KzRv-S.js} +1 -1
  112. package/storybook-static/assets/ContextMenu-BwrqtNnY.js +1 -0
  113. package/storybook-static/assets/{ContextMenu-kbSWsoCE.js → ContextMenu-CGLg47OY.js} +1 -1
  114. package/storybook-static/assets/{ContextMenu.stories-CQcrX3sj.js → ContextMenu.stories-JnUlLk_E.js} +1 -1
  115. package/storybook-static/assets/DateInput-BWbKmFEc.js +1 -0
  116. package/storybook-static/assets/{DateInput-CyNIW9Md.js → DateInput-CUPdoLCw.js} +1 -1
  117. package/storybook-static/assets/{DateInput.stories-DyB3PjTl.js → DateInput.stories-DOOukQsB.js} +1 -1
  118. package/storybook-static/assets/{DateRangePresetSelect-BwibZk_q.js → DateRangePresetSelect-BWm1txZP.js} +1 -1
  119. package/storybook-static/assets/{DateRangePresetSelect-CBZ0OAmn.js → DateRangePresetSelect-CegjuKSa.js} +1 -1
  120. package/storybook-static/assets/{DateRangePresetSelect.stories-kmmKl-3j.js → DateRangePresetSelect.stories-BGCOqCf7.js} +1 -1
  121. package/storybook-static/assets/{Detail-pHBZ5bkR.js → Detail-DLDL5IhK.js} +1 -1
  122. package/storybook-static/assets/{Detail.stories-Bs5YNmLn.js → Detail.stories-BcP01iwW.js} +1 -1
  123. package/storybook-static/assets/{Dialog-DbFhCtF1.js → Dialog-BYLrz-6d.js} +1 -1
  124. package/storybook-static/assets/{Dialog-DBTU-LRR.js → Dialog-DcQbPiWK.js} +1 -1
  125. package/storybook-static/assets/{Dialog.stories-_WQW8YNs.js → Dialog.stories-C5o4OhEy.js} +1 -1
  126. package/storybook-static/assets/{Disclosure-vOJWmhLt.js → Disclosure-ChpGjvgZ.js} +1 -1
  127. package/storybook-static/assets/{Disclosure.stories-wyulIOoJ.js → Disclosure.stories-CTL8h6Q3.js} +1 -1
  128. package/storybook-static/assets/{DisclosureGroup-DjObX5Qs.css → DisclosureGroup-CNoH2D1R.css} +1 -1
  129. package/storybook-static/assets/{DisclosureGroup-BUDxwl5C.js → DisclosureGroup-CUelavR4.js} +1 -1
  130. package/storybook-static/assets/{DocsRenderer-JROSPFPF-B7vhvrpB.js → DocsRenderer-JROSPFPF-BQTqLgKs.js} +1 -1
  131. package/storybook-static/assets/{DropZone-BvRT0gUm.js → DropZone-5Xw6HUNa.js} +1 -1
  132. package/storybook-static/assets/{DropZone-B7Q1qQqP.js → DropZone-ULl7tScR.js} +1 -1
  133. package/storybook-static/assets/{DropZone.stories-WmoR3uPj.js → DropZone.stories-Btud72HY.js} +1 -1
  134. package/storybook-static/assets/{DropdownMenu-BW35W6_U.js → DropdownMenu-CZDVKXjD.js} +1 -1
  135. package/storybook-static/assets/{ExpandableActionPanel-C9G9PsZx.js → ExpandableActionPanel-CwamleZX.js} +1 -1
  136. package/storybook-static/assets/{ExpandableActionPanel.stories-Dllpmeu_.js → ExpandableActionPanel.stories-BUBvJAPp.js} +1 -1
  137. package/storybook-static/assets/{Flex-Cydb-4MR.js → Flex-cO3yZG-t.js} +1 -1
  138. package/storybook-static/assets/{Flex.stories-Dczj9g4W.js → Flex.stories-BAuXOTSJ.js} +1 -1
  139. package/storybook-static/assets/{FloatingPopover-C-W77AcJ.js → FloatingPopover-C56UHmzH.js} +1 -1
  140. package/storybook-static/assets/{FormattedTableCell-fePg_bmP.js → FormattedTableCell-B4ObrqF1.js} +1 -1
  141. package/storybook-static/assets/{Grid-Dal3v5dj.js → Grid-B3-t0FmJ.js} +1 -1
  142. package/storybook-static/assets/{Grid.stories-Byb4mMpE.js → Grid.stories-Cr_GpL6X.js} +1 -1
  143. package/storybook-static/assets/{ImageCropper.stories-B9OD2pur.js → ImageCropper.stories-BDqwBC8C.js} +1 -1
  144. package/storybook-static/assets/{ImageRenderer-BcUjptiu.js → ImageRenderer-CigIY2hD.js} +1 -1
  145. package/storybook-static/assets/{ImageRenderer.stories-BuO2nhom.js → ImageRenderer.stories-CI8r-V1l.js} +1 -1
  146. package/storybook-static/assets/{ImageView.stories-mSkR535R.js → ImageView.stories-D_OG6Deg.js} +1 -1
  147. package/storybook-static/assets/{ImageViewer.stories-DVdR3-_j.js → ImageViewer.stories-CQSqogxL.js} +2 -2
  148. package/storybook-static/assets/{ImageViewerRuntime-DiR_HwIE.js → ImageViewerRuntime-DerEzrYU.js} +1 -1
  149. package/storybook-static/assets/{Input-BdCavSu1.js → Input-Bm1cMHGo.js} +1 -1
  150. package/storybook-static/assets/{Input-DZQKV4DP.js → Input-Bot494Bx.js} +1 -1
  151. package/storybook-static/assets/{Input.stories-Cu66SvKb.js → Input.stories-BovBOurM.js} +1 -1
  152. package/storybook-static/assets/{InputDateTime-Day94W-O.js → InputDateTime-BekBAEPs.js} +1 -1
  153. package/storybook-static/assets/{InputDateTime.stories-990MuicZ.js → InputDateTime.stories-w3S5IslS.js} +1 -1
  154. package/storybook-static/assets/{InputFile-Cp8x84ZG.js → InputFile-CuQb2x1k.js} +1 -1
  155. package/storybook-static/assets/{InputFile-CJll5mC-.js → InputFile-GBGGdgQh.js} +1 -1
  156. package/storybook-static/assets/{InputFile.stories-fNNwbNfa.js → InputFile.stories-f_IZth6c.js} +1 -1
  157. package/storybook-static/assets/{InputFiles-OusF5Lfq.js → InputFiles-C74DVQhN.js} +1 -1
  158. package/storybook-static/assets/{InputFiles-CBvR3Szf.js → InputFiles-CrLCcwgR.js} +1 -1
  159. package/storybook-static/assets/{InputFiles.stories-DcpEbOOo.js → InputFiles.stories-BsuddNi0.js} +1 -1
  160. package/storybook-static/assets/{InputFilesList-zuNP1QIB.js → InputFilesList-Djxwuhlq.js} +1 -1
  161. package/storybook-static/assets/{InputImage-Dl2bJNZk.js → InputImage-CwlTJmns.js} +1 -1
  162. package/storybook-static/assets/{InputImage-CjMAL3uq.js → InputImage-DMaYEhTE.js} +1 -1
  163. package/storybook-static/assets/{InputImage.stories-BzxEndIe.js → InputImage.stories-CnN_t-Bq.js} +1 -1
  164. package/storybook-static/assets/{InteractiveComponents.stories-CXF1nGLl.js → InteractiveComponents.stories-B87LSnhG.js} +1 -1
  165. package/storybook-static/assets/{LayoutPicker-BahcFBzK.js → LayoutPicker-DKMVqnzr.js} +1 -1
  166. package/storybook-static/assets/{LayoutPicker-DzAN3gGO.js → LayoutPicker-I0mjwTRq.js} +1 -1
  167. package/storybook-static/assets/{LayoutPicker.stories-ByamaGlv.js → LayoutPicker.stories-B94m5_5E.js} +1 -1
  168. package/storybook-static/assets/{Listbox-C5hwzE4s.js → Listbox-2CNZxFrM.js} +1 -1
  169. package/storybook-static/assets/{Listbox-CHsNGsDc.js → Listbox-BOCPTICI.js} +1 -1
  170. package/storybook-static/assets/{Listbox.stories-CvXZeESb.js → Listbox.stories-DkRL364d.js} +1 -1
  171. package/storybook-static/assets/{Modal-Dib11Lzy.js → Modal-BF5Wtu_Z.js} +1 -1
  172. package/storybook-static/assets/{Modal.stories-DYMy-kLP.js → Modal.stories-BuBDjhkS.js} +1 -1
  173. package/storybook-static/assets/{ModalManagerProvider-natWXnSM.js → ModalManagerProvider-DtAfcujR.js} +1 -1
  174. package/storybook-static/assets/{MultiSelect-Cl9MkPZw.js → MultiSelect-B5MJePks.js} +1 -1
  175. package/storybook-static/assets/{MultiSelect-DlCZ7dhH.js → MultiSelect-B75x42Va.js} +1 -1
  176. package/storybook-static/assets/{MultiSelect.stories-202TRBKq.js → MultiSelect.stories-pCDFxnvP.js} +1 -1
  177. package/storybook-static/assets/{NoData-DcHZdLTJ.js → NoData-kWRpCxvl.js} +1 -1
  178. package/storybook-static/assets/{NotificationsHost-DzqEi2vc.js → NotificationsHost-lblab1gc.js} +1 -1
  179. package/storybook-static/assets/{NotificationsHost.stories-CvoQfIjj.js → NotificationsHost.stories-a3NIcVIj.js} +1 -1
  180. package/storybook-static/assets/{ODataMultiSelect-CHQguikm.js → ODataMultiSelect-BDqBjXSe.js} +1 -1
  181. package/storybook-static/assets/{ODataMultiSelect.stories-BZbWK4CP.js → ODataMultiSelect.stories-8nYfEOBa.js} +1 -1
  182. package/storybook-static/assets/{ODataSelect-C1YGDpg_.js → ODataSelect-BmcZs-Q9.js} +1 -1
  183. package/storybook-static/assets/{ODataSelect.stories-D4tQXs2c.js → ODataSelect.stories-fiEuKGVT.js} +1 -1
  184. package/storybook-static/assets/{ODataTreeMultiSelect-BjR7zhyJ.js → ODataTreeMultiSelect-ZAlccR5J.js} +1 -1
  185. package/storybook-static/assets/{ODataTreeMultiSelect.stories-Drg8mLhi.js → ODataTreeMultiSelect.stories-sP-IANic.js} +1 -1
  186. package/storybook-static/assets/{ODataTreeSelect-D_fcT3Aw.js → ODataTreeSelect-DSpeH-SQ.js} +1 -1
  187. package/storybook-static/assets/{ODataTreeSelect.stories-BWFdmmvf.js → ODataTreeSelect.stories-C_G-ryCy.js} +1 -1
  188. package/storybook-static/assets/{OneStepScroller-DWCRXFHq.js → OneStepScroller-BPYnBbTY.js} +1 -1
  189. package/storybook-static/assets/{PeriodSelect-DtfTzrNK.js → PeriodSelect-Dj1G9UDW.js} +1 -1
  190. package/storybook-static/assets/{PeriodSelect-C7QQKxZ4.js → PeriodSelect-v-ybkTTW.js} +1 -1
  191. package/storybook-static/assets/{PeriodSelect.stories-CF65LIHm.js → PeriodSelect.stories-DcAJ8fkJ.js} +1 -1
  192. package/storybook-static/assets/{PickerSelectionToolbar-D9atWyWj.js → PickerSelectionToolbar-7gktfdu3.js} +1 -1
  193. package/storybook-static/assets/{PickerTriggerActions-C7WeaOKN.js → PickerTriggerActions-Bd-vIbv8.js} +1 -1
  194. package/storybook-static/assets/{Popover-DQJIeny_.js → Popover-5dsoQ1_b.js} +1 -1
  195. package/storybook-static/assets/{Popover-CUJF-IMC.js → Popover-BoMs5h0y.js} +1 -1
  196. package/storybook-static/assets/{Popover.stories-BON0z3PX.js → Popover.stories-CbNVj_hu.js} +1 -1
  197. package/storybook-static/assets/{PresetRangeDateInput-DpA1KOCo.js → PresetRangeDateInput-BeQMoRpC.js} +1 -1
  198. package/storybook-static/assets/{PresetRangeDateInput-D3_uzWzQ.js → PresetRangeDateInput-DyGnRjp4.js} +1 -1
  199. package/storybook-static/assets/{PresetRangeDateInput.stories-CDDJDiei.js → PresetRangeDateInput.stories-C7gwDup9.js} +1 -1
  200. package/storybook-static/assets/{PresetSelect-DlV2eC-b.js → PresetSelect-C8e1Xzbh.js} +1 -1
  201. package/storybook-static/assets/{RadioButton-BLyqp88m.js → RadioButton-blBN8xkq.js} +1 -1
  202. package/storybook-static/assets/{RadioButton-wkLEwRaH.js → RadioButton-kIVy3cCo.js} +1 -1
  203. package/storybook-static/assets/{RadioButton.stories-DS9RYBEJ.js → RadioButton.stories-B8U30Wqk.js} +1 -1
  204. package/storybook-static/assets/{RadioGroup-CsWIje1J.js → RadioGroup-CuWLCtLr.js} +1 -1
  205. package/storybook-static/assets/{RadioGroup-DERcyzA0.js → RadioGroup-D4fwjGGp.js} +1 -1
  206. package/storybook-static/assets/{RadioGroup.stories-DkgUPavS.js → RadioGroup.stories-CGo-8-Bv.js} +1 -1
  207. package/storybook-static/assets/{Scrollable-DvJ3T3Ik.js → Scrollable-CeGzYD_u.js} +1 -1
  208. package/storybook-static/assets/{Select-DmEm2boi.js → Select-rdcqkPnE.js} +1 -1
  209. package/storybook-static/assets/Select-txovgbTh.js +12 -0
  210. package/storybook-static/assets/{Select.stories-BEPJovVd.js → Select.stories-DPM22VkR.js} +1 -1
  211. package/storybook-static/assets/{SelectOptionContent-B5E2W8PZ.js → SelectOptionContent-HqUICxHy.js} +1 -1
  212. package/storybook-static/assets/{SerializableSelect-wgzDfqEi.js → SerializableSelect-btIwjUkv.js} +1 -1
  213. package/storybook-static/assets/{SerializableSelect.stories-V8IqyO9Y.js → SerializableSelect.stories-EodX_I8R.js} +1 -1
  214. package/storybook-static/assets/{SingleDateTimeInput-B7v0t9f5.js → SingleDateTimeInput-CMKsQ13r.js} +1 -1
  215. package/storybook-static/assets/SingleDateTimeInput-coulKUC8.js +1 -0
  216. package/storybook-static/assets/{SingleDateTimeInput.stories-FOoEMoyF.js → SingleDateTimeInput.stories-BkSaW82_.js} +1 -1
  217. package/storybook-static/assets/{Slider-24H5ASxG.js → Slider-BDjIIhGp.js} +1 -1
  218. package/storybook-static/assets/{Slider-3HQKHpoi.js → Slider-DhBLW1at.js} +1 -1
  219. package/storybook-static/assets/{Slider.stories-DeeP8cmV.js → Slider.stories-DpTr65-r.js} +1 -1
  220. package/storybook-static/assets/SliderInput-BEV5I_1l.js +2 -0
  221. package/storybook-static/assets/{SliderInput-CFbx-GW7.js → SliderInput-CiuILy6K.js} +1 -1
  222. package/storybook-static/assets/{SliderInput.stories-Djli653m.js → SliderInput.stories-CL7SlLhr.js} +1 -1
  223. package/storybook-static/assets/{Sortable-CMo2PMKX.js → Sortable-CtNygGoQ.js} +1 -1
  224. package/storybook-static/assets/{Sortable.stories-BFsQvwMx.js → Sortable.stories-BbNoyvN9.js} +1 -1
  225. package/storybook-static/assets/{Splitter-dwOhGuIg.js → Splitter-BYaydk0U.js} +1 -1
  226. package/storybook-static/assets/{Splitter.stories-DZ3nAxpo.js → Splitter.stories-Bo2rHdcD.js} +1 -1
  227. package/storybook-static/assets/{StateSelect-j3gi4kbM.js → StateSelect-D2MILxIu.js} +1 -1
  228. package/storybook-static/assets/{StateSelect-IigEzRom.js → StateSelect-DNKjfPR-.js} +1 -1
  229. package/storybook-static/assets/{StateSelect.stories-Bj-2m2hS.js → StateSelect.stories-D_NhQBcN.js} +1 -1
  230. package/storybook-static/assets/{StringToggle.stories-ClSl76ts.js → StringToggle.stories-CS507_cT.js} +1 -1
  231. package/storybook-static/assets/{Switch-C9OAPzUM.js → Switch-9gK7d4Is.js} +1 -1
  232. package/storybook-static/assets/{Switch-BDbBZjMA.js → Switch-i3aW21Wi.js} +1 -1
  233. package/storybook-static/assets/{Switch.stories-CQ3ueThx.js → Switch.stories-BRIuS4_o.js} +1 -1
  234. package/storybook-static/assets/{Table-BbGcLQ81.js → Table-CytIsA37.js} +1 -1
  235. package/storybook-static/assets/{Table.stories-DvaHP59R.js → Table.stories-DYPLk3TC.js} +1 -1
  236. package/storybook-static/assets/{Tabs-CNEYvzUv.js → Tabs-BMee-SUy.js} +1 -1
  237. package/storybook-static/assets/{Tabs.stories-BpyQokl8.js → Tabs.stories-KqQTRqYo.js} +1 -1
  238. package/storybook-static/assets/TabsBox-B5ugO318.css +1 -0
  239. package/storybook-static/assets/{TabsBox-ClZCbgKB.js → TabsBox-BM1mIOmT.js} +1 -1
  240. package/storybook-static/assets/{TagInput-DorsSF_V.js → TagInput-yEIGCMwZ.js} +1 -1
  241. package/storybook-static/assets/{TagInput.stories-ChgRz4Co.js → TagInput.stories-DmuVnRfR.js} +1 -1
  242. package/storybook-static/assets/{Text-DUqtop-c.js → Text-DUN8T0sU.js} +1 -1
  243. package/storybook-static/assets/{Textarea-ZfZJmHsp.js → Textarea-BeKW8LG0.js} +1 -1
  244. package/storybook-static/assets/{Textarea-yZWv6QdW.js → Textarea-W648f4l-.js} +1 -1
  245. package/storybook-static/assets/{Textarea.stories-B5Q7syxH.js → Textarea.stories-BbZ-hCVF.js} +1 -1
  246. package/storybook-static/assets/{TimePanel-C39f__j8.js → TimePanel-D-RygTSo.js} +1 -1
  247. package/storybook-static/assets/{TimePanel.stories-DtjILTPk.js → TimePanel.stories-CzVur3oq.js} +1 -1
  248. package/storybook-static/assets/{Toggle-CdpPJI_O.js → Toggle-CCZ3ekPb.js} +1 -1
  249. package/storybook-static/assets/{Toggle-BndjhQFY.js → Toggle-Dc5aTAHb.js} +1 -1
  250. package/storybook-static/assets/{Toggle.stories-BD_C0YTw.js → Toggle.stories-R3abtezP.js} +1 -1
  251. package/storybook-static/assets/{TreeMultiSelect-BPz5kISi.js → TreeMultiSelect-Bi-LirPw.js} +1 -1
  252. package/storybook-static/assets/{TreeMultiSelect--M1WiE_f.js → TreeMultiSelect-CzKVkvZd.js} +1 -1
  253. package/storybook-static/assets/{TreeMultiSelect.stories-BgkDJur9.js → TreeMultiSelect.stories-Co_PUawN.js} +1 -1
  254. package/storybook-static/assets/TreePickerBase-BIbhsg5t.js +22 -0
  255. package/storybook-static/assets/{TreeSelect-BrQGgG40.js → TreeSelect-B4G9gk8x.js} +1 -1
  256. package/storybook-static/assets/{TreeSelect-B0RWsDT4.js → TreeSelect-Dm3zEY1S.js} +1 -1
  257. package/storybook-static/assets/{TreeSelect.stories-DkgdJ5XX.js → TreeSelect.stories-sRek_0PI.js} +1 -1
  258. package/storybook-static/assets/{TreeTable-HQr8pb9r.js → TreeTable-ybfR3-5k.js} +1 -1
  259. package/storybook-static/assets/{TreeTable.stories-C4hcph6x.js → TreeTable.stories-BoZjeFKM.js} +1 -1
  260. package/storybook-static/assets/{async-lzSWdC34.js → async-Df2RUQlC.js} +1 -1
  261. package/storybook-static/assets/{blocks-D8l_hmHU.js → blocks-BcJ54T3V.js} +3 -3
  262. package/storybook-static/assets/{browserAndReact-BwvRFhzI.js → browserAndReact-Bfk1cWqT.js} +1 -1
  263. package/storybook-static/assets/{check-DpX8PMs_.js → check-Dl-iF50o.js} +1 -1
  264. package/storybook-static/assets/{chevron-down-DE8FRR-h.js → chevron-down-DOIDj8WF.js} +1 -1
  265. package/storybook-static/assets/{chevron-left-Cy3TEG_Y.js → chevron-left-DHEBK_X7.js} +1 -1
  266. package/storybook-static/assets/{chevron-right-CZ4-4s1X.js → chevron-right-Cf6T-grH.js} +1 -1
  267. package/storybook-static/assets/{chunk-W22LQPXL-Ci-XApFb.js → chunk-W22LQPXL-DLMJSt_s.js} +1 -1
  268. package/storybook-static/assets/{circle-alert-CWbgc3Jn.js → circle-alert-DmNt0Uwi.js} +1 -1
  269. package/storybook-static/assets/{circle-check-DODquDnH.js → circle-check-DN8HwnBX.js} +1 -1
  270. package/storybook-static/assets/{components-BdUOCBP9.js → components-DI9O99vY.js} +3 -3
  271. package/storybook-static/assets/{contextMenu-XvvXJEpW.js → contextMenu-DWXX4ZHr.js} +1 -1
  272. package/storybook-static/assets/defaultRenderers-DwI2nLiY.js +1 -0
  273. package/storybook-static/assets/{download-BEGaHxQc.js → download-oMaZX_8z.js} +1 -1
  274. package/storybook-static/assets/{filesAndExcel-C9FnZv9P.js → filesAndExcel-ur50Ve27.js} +1 -1
  275. package/storybook-static/assets/{floating-ui.react-GziJy4gA.js → floating-ui.react-zHdvT_EM.js} +1 -1
  276. package/storybook-static/assets/{formatters-CVj-3Vn0-C5-BLq9O.js → formatters-CVj-3Vn0-BFaHJqZL.js} +1 -1
  277. package/storybook-static/assets/{formatters-vWial7jf.js → formatters-CnFJmQFO.js} +1 -1
  278. package/storybook-static/assets/{formatters-runtime-DO0szrYr.js → formatters-runtime-LyrD5drJ.js} +1 -1
  279. package/storybook-static/assets/{foundationLib-CIqc9fhG.js → foundationLib-D-8O61ay.js} +1 -1
  280. package/storybook-static/assets/{hooks-DfgvMSqN.js → hooks-DbzqJvP-.js} +1 -1
  281. package/storybook-static/assets/iframe-hjgtoR20.js +1 -0
  282. package/storybook-static/assets/{iframe-BHhbrImE.js → iframe-jqJCNVG-.js} +3 -3
  283. package/storybook-static/assets/{info-DSZ4aUvi.js → info-DTU0XXKY.js} +1 -1
  284. package/storybook-static/assets/{odata-DmijE2H9.js → odata-BBbQt4pn.js} +1 -1
  285. package/storybook-static/assets/odata-service-B5w4YBao-BW9QLSrS.js +3 -0
  286. package/storybook-static/assets/{odataAndTables-m2AMS6oI.js → odataAndTables-VK5X4V6B.js} +1 -1
  287. package/storybook-static/assets/{odataFetchFn-CwpkgKoz.js → odataFetchFn-T6FIbpPz.js} +1 -1
  288. package/storybook-static/assets/{odataStoryFixtures-CBtJYQsv.js → odataStoryFixtures-pMgI1q6n.js} +1 -1
  289. package/storybook-static/assets/{persisted-DpSU25AR.js → persisted-EtS4vVCD.js} +1 -1
  290. package/storybook-static/assets/{pureUtilities-BG4ZSO63.js → pureUtilities-BIjOnY3J.js} +1 -1
  291. package/storybook-static/assets/{react-Bz35HWpn.js → react-BG6GAoHo.js} +1 -1
  292. package/storybook-static/assets/{refresh-cw-ltgf4cUB.js → refresh-cw-1qKqpsOV.js} +1 -1
  293. package/storybook-static/assets/{runtimeAndState-C_GrWjr8.js → runtimeAndState-BorNVnh8.js} +1 -1
  294. package/storybook-static/assets/{settings-2-qpVYfZn_.js → settings-2-CPrjOIso.js} +1 -1
  295. package/storybook-static/assets/{sortable-CrCQ3H1V.js → sortable-D6C8wTse.js} +1 -1
  296. package/storybook-static/assets/{syntaxhighlighter-T5IQBZDB-eOr9ght-.js → syntaxhighlighter-T5IQBZDB-ifBULuBx.js} +1 -1
  297. package/storybook-static/assets/{trash-2-lfhUDclN.js → trash-2-CIrQtNzc.js} +1 -1
  298. package/storybook-static/assets/{triangle-alert-D9YGTafY.js → triangle-alert-D3piZGn9.js} +1 -1
  299. package/storybook-static/assets/{useODataSelectBase-BVgxJPNn.js → useODataSelectBase-CwDThJRi.js} +1 -1
  300. package/storybook-static/assets/{useODataTreeData-CdLHOBnD.js → useODataTreeData-C4v28uFV.js} +1 -1
  301. package/storybook-static/assets/{usePickerQuery-B6U-oOS6.js → usePickerQuery-BodFjGup.js} +1 -1
  302. package/storybook-static/assets/{usePickerTriggerController-C-VxrzSe.js → usePickerTriggerController-BjnU7tfr.js} +1 -1
  303. package/storybook-static/assets/{x-CNM39xuu.js → x-CaGImgpS.js} +1 -1
  304. package/storybook-static/iframe.html +2 -2
  305. package/storybook-static/project.json +1 -1
  306. package/dist/chunks/CalendarView-DtacoN_c.js +0 -439
  307. package/dist/chunks/TextEditorLexicalClient-DVML-Nhd.js.map +0 -1
  308. package/dist/chunks/context-menu-BY4pYGwB.js.map +0 -1
  309. package/dist/chunks/date-input-DKkJO_-h.js +0 -340
  310. package/dist/chunks/date-input-DKkJO_-h.js.map +0 -1
  311. package/dist/chunks/input-BWCaVC06.js.map +0 -1
  312. package/dist/chunks/multi-select-01xmD1nZ.js.map +0 -1
  313. package/dist/chunks/select-DRf4_a1Z.js.map +0 -1
  314. package/storybook-static/assets/CheckBox-8XczNrjq.css +0 -1
  315. package/storybook-static/assets/ContextMenu-BjWu5DHB.js +0 -1
  316. package/storybook-static/assets/DateInput-BUgBb3aH.js +0 -1
  317. package/storybook-static/assets/Select-g0c0XGQY.js +0 -12
  318. package/storybook-static/assets/SingleDateTimeInput-CN7PyOsb.js +0 -1
  319. package/storybook-static/assets/SliderInput-bqFr-Lyp.js +0 -2
  320. package/storybook-static/assets/TabsBox-Co1vxD90.css +0 -1
  321. package/storybook-static/assets/TreePickerBase-Dup03AiC.js +0 -22
  322. package/storybook-static/assets/defaultRenderers-lMEgLPIU.js +0 -1
  323. package/storybook-static/assets/iframe-oIP1aL7X.js +0 -1
  324. package/storybook-static/assets/odata-service-B5w4YBao-BcP2cvfZ.js +0 -3
  325. /package/storybook-static/assets/{CheckBox.module-DPvJxTHD.js → CheckBox.module-CM_GPl_E.js} +0 -0
@@ -1,5 +1,5 @@
1
1
  import { t as e } from "./ui.module-BfaIVBba.js";
2
- import { useEffect as t, useEffectEvent as n, useId as r, useState as i } from "react";
2
+ import { useId as t, useLayoutEffect as n, useRef as r, useState as i } from "react";
3
3
  import { cn as a } from "@ryuzaki13/react-foundation-lib/utils";
4
4
  import { XIcon as o } from "lucide-react";
5
5
  import { jsx as s, jsxs as c } from "react/jsx-runtime";
@@ -16,8 +16,8 @@ var u = {
16
16
  };
17
17
  //#endregion
18
18
  //#region src/input/lib/useInputFieldIds.ts
19
- function d({ id: e, hasLabel: t, hasDescription: n, hasError: i }) {
20
- let a = r(), o = e ?? a, s = t ? `${o}-label` : void 0, c = n ? `${o}-description` : void 0, l = i ? `${o}-error` : void 0;
19
+ function d({ id: e, hasLabel: n, hasDescription: r, hasError: i }) {
20
+ let a = t(), o = e ?? a, s = n ? `${o}-label` : void 0, c = r ? `${o}-description` : void 0, l = i ? `${o}-error` : void 0;
21
21
  return {
22
22
  controlId: o,
23
23
  labelId: s,
@@ -167,55 +167,62 @@ function y({ label: t, description: n, disabled: r, className: o, onClear: c, er
167
167
  })
168
168
  });
169
169
  }
170
- function b({ label: r, description: o, disabled: c, className: f, onClear: p, error: g, onClearError: y, onChange: b, value: x, size: S, endAdornment: C, endAdornmentClassName: w, endAdornmentWidth: T, ...E }) {
171
- let D = E, { controlId: O, labelId: k, descriptionId: A, errorId: j, describedBy: M } = d({
172
- id: E.id,
173
- hasLabel: r != null,
174
- hasDescription: !!o,
175
- hasError: !!g
176
- }), [N, P] = i(() => String(x)), F = n((e) => {
177
- P(e);
178
- });
179
- t(() => {
180
- F(x !== void 0 && typeof x == "number" && !isNaN(x) ? String(x) : "");
181
- }, [x]);
182
- let I = p ? () => {
183
- P(""), p();
184
- } : void 0, L = (e) => {
185
- let t = e.target.value;
186
- P(t), b(l(t)), g && y && y();
187
- }, R = v({
188
- endAdornment: C,
189
- onClear: I,
190
- disabled: c
191
- }), z = _(C != null, !!I, T);
170
+ function b({ label: t, description: i, disabled: o, className: c, onClear: f, error: p, onClearError: g, onChange: y, value: b, size: x, endAdornment: S, endAdornmentClassName: C, endAdornmentWidth: w, ...T }) {
171
+ let E = T, { controlId: D, labelId: O, descriptionId: k, errorId: A, describedBy: j } = d({
172
+ id: T.id,
173
+ hasLabel: t != null,
174
+ hasDescription: !!i,
175
+ hasError: !!p
176
+ }), M = r(null), N = r(null), P = b !== void 0 && typeof b == "number" && !isNaN(b) ? String(b) : "";
177
+ n(() => {
178
+ let e = N.current;
179
+ if (e && Object.is(e.value, b)) {
180
+ M.current && M.current.value !== e.raw && (M.current.value = e.raw);
181
+ return;
182
+ }
183
+ N.current = null, M.current && M.current.value !== P && (M.current.value = P);
184
+ }, [P, b]);
185
+ let F = f ? () => {
186
+ f();
187
+ } : void 0, I = (e) => {
188
+ let t = e.target.value, n = l(t);
189
+ N.current = {
190
+ value: n,
191
+ raw: t
192
+ }, y(n), p && g && g();
193
+ }, L = v({
194
+ endAdornment: S,
195
+ onClear: F,
196
+ disabled: o
197
+ }), R = _(S != null, !!F, w);
192
198
  return /* @__PURE__ */ s(m, {
193
- label: r,
194
- description: o,
195
- disabled: c,
196
- required: E.required,
197
- className: f,
198
- size: S,
199
- error: g,
200
- controlId: O,
201
- labelId: k,
202
- descriptionId: A,
203
- errorId: j,
199
+ label: t,
200
+ description: i,
201
+ disabled: o,
202
+ required: T.required,
203
+ className: c,
204
+ size: x,
205
+ error: p,
206
+ controlId: D,
207
+ labelId: O,
208
+ descriptionId: k,
209
+ errorId: A,
204
210
  children: /* @__PURE__ */ s(h, {
205
- endAdornment: R,
206
- endAdornmentClassName: w,
207
- endAdornmentWidth: z,
211
+ endAdornment: L,
212
+ endAdornmentClassName: C,
213
+ endAdornmentWidth: R,
208
214
  children: ({ controlClassName: t }) => /* @__PURE__ */ s("input", {
209
- ...D,
210
- id: O,
215
+ ...E,
216
+ ref: M,
217
+ id: D,
211
218
  type: "number",
212
219
  inputMode: "decimal",
213
- disabled: c,
214
- value: N,
215
- "aria-labelledby": k,
216
- "aria-describedby": M,
220
+ disabled: o,
221
+ defaultValue: P,
222
+ "aria-labelledby": O,
223
+ "aria-describedby": j,
217
224
  className: a(e.uiInputControl, u.input, u.inputNumber, t),
218
- onChange: L
225
+ onChange: I
219
226
  })
220
227
  })
221
228
  });
@@ -232,4 +239,4 @@ function S({ text: t }) {
232
239
  //#endregion
233
240
  export { b as a, p as c, h as i, d as l, x as n, y as o, g as r, m as s, S as t, u };
234
241
 
235
- //# sourceMappingURL=input-BWCaVC06.js.map
242
+ //# sourceMappingURL=input-CAw1Loze.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-CAw1Loze.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.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\t--button-size: cacl(var(--control-height) - var(--border-width) * 2);\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(--content-accent);\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(--status-error-on-fill);\n\tbackground: var(--status-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 InputUILoading({\n\tlabel,\n\tdescription,\n\tsize,\n\tdisabled,\n\tclassName\n}: Pick<InputUIProps, \"label\" | \"description\" | \"size\" | \"disabled\" | \"className\">) {\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, \"skeletonLine\")} />\n\t\t</div>\n\t);\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\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,5 +1,5 @@
1
1
  import { t as e } from "./ui.module-BfaIVBba.js";
2
- import { i as t, l as n, s as r } from "./input-BWCaVC06.js";
2
+ import { i as t, l as n, s as r } from "./input-CAw1Loze.js";
3
3
  import { useCallback as i, useRef as a } from "react";
4
4
  import { cn as o, handleKeyboardActivation as s } from "@ryuzaki13/react-foundation-lib/utils";
5
5
  import { XIcon as c } from "lucide-react";
@@ -138,4 +138,4 @@ function _(c) {
138
138
  //#endregion
139
139
  export { g as n, _ as t };
140
140
 
141
- //# sourceMappingURL=input-files-62qH2TMj.js.map
141
+ //# sourceMappingURL=input-files-CLtQ7p8j.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"input-files-62qH2TMj.js","names":[],"sources":["../../src/input-files/InputFiles.module.scss","../../src/input-files/InputFilesList.tsx","../../src/input-files/InputFiles.tsx"],"sourcesContent":["/* Контрол, имитирующий внешний вид InputText */\n.control {\n\theight: var(--control-height);\n\twidth: 100%;\n\tpadding: 0 var(--space-sm);\n\tfont-size: var(--font-size-md);\n\tcursor: pointer;\n\n\tdisplay: flex;\n\talign-items: center;\n}\n\n/* Скрытый нативный input[type=\"file\"] */\n.hiddenInput {\n\tposition: absolute;\n\twidth: 0;\n\theight: 0;\n\topacity: 0;\n\toverflow: hidden;\n\tpointer-events: none;\n}\n\n/* Список выбранных файлов */\n.fileList {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--space-xs);\n\tmargin-top: var(--space-xs);\n}\n\n/* Элемент списка — строка с именем файла и кнопкой удаления */\n.fileItem {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--space-xs);\n\tpadding: var(--space-xs) var(--space-sm);\n\tbackground-color: var(--surface-2);\n\tborder-radius: var(--radius-sm);\n\t// font-size: var(--font-size-sm);\n}\n\n/* Имя файла — обрезка с троеточием */\n.fileItemName {\n\tflex: 1;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n/* Кнопка удаления файла из списка */\n.removeButton {\n\tflex-shrink: 0;\n\twidth: 1.25em;\n\theight: 1.25em;\n\tcolor: var(--content-2);\n\n\t&:hover {\n\t\tcolor: var(--content-accent);\n\t}\n}\n","import { useCallback } from \"react\";\n\nimport { ReadFileResult } from \"@ryuzaki13/react-foundation-lib/file\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { XIcon } from \"lucide-react\";\n\nimport styles from \"./InputFiles.module.scss\";\n\ninterface InputFilesListProps<TFile extends ReadFileResult> {\n\tfiles: TFile[];\n\tonChange: (files: TFile[]) => void;\n}\n\nexport function InputFilesList<TFile extends ReadFileResult>({ files, onChange }: InputFilesListProps<TFile>) {\n\tconst handleRemove = useCallback(\n\t\t(index: number) => {\n\t\t\tonChange(files.filter((_, i) => i !== index));\n\t\t},\n\t\t[files, onChange]\n\t);\n\n\tif (!files || !files.length) return null;\n\n\treturn (\n\t\t<ul className={styles.fileList}>\n\t\t\t{files.map((item, index) => (\n\t\t\t\t<li key={`${item.meta.name}-${item.meta.lastModified}`} className={styles.fileItem}>\n\t\t\t\t\t<span className={styles.fileItemName}>{item.meta.name}</span>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName={cn(styles.removeButton, \"flexCenter\")}\n\t\t\t\t\t\tonClick={() => handleRemove(index)}\n\t\t\t\t\t\taria-label={`Удалить ${item.meta.name}`}>\n\t\t\t\t\t\t<XIcon />\n\t\t\t\t\t</button>\n\t\t\t\t</li>\n\t\t\t))}\n\t\t</ul>\n\t);\n}\n","import { useCallback, useRef } from \"react\";\n\nimport { assertValidAccept, assertValidAllowedMime, readFile, ReadFileError, ReadFileResult } from \"@ryuzaki13/react-foundation-lib/file\";\nimport { cn, handleKeyboardActivation } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { InputControl, InputUI, useInputFieldIds } from \"../input\";\nimport { UiBaseProps } from \"../types\";\nimport uiStyles from \"../ui.module.scss\";\n\nimport styles from \"./InputFiles.module.scss\";\nimport { InputFilesList } from \"./InputFilesList\";\n\ninterface InputFilesCommonProps extends Omit<UiBaseProps<undefined>, \"value\" | \"onChange\"> {\n\t/** Callback ошибки чтения файла */\n\tonReadError?: (error: ReadFileError) => void;\n\n\t/** HTML-атрибут accept для нативного input[type=\"file\"] (например `[\".pdf\", \".docx\"]`) */\n\taccept?: readonly string[];\n\t/** Список допустимых MIME-типов — передаётся в readFile */\n\tallowedMime?: readonly string[];\n\t/** Максимальный размер одного файла в байтах */\n\tmaxBytes?: number;\n\t/** Максимальное количество файлов. При достижении лимита input блокируется */\n\tmaxFiles?: number;\n\n\t/** Текст ошибки под полем */\n\terror?: string;\n\t/** Callback сброса ошибки */\n\tonClearError?: () => void;\n\t/** CSS-класс обёртки */\n\tclassName?: string;\n}\n\ntype InputFilesDataUrlResult = Extract<ReadFileResult, { mode: \"data-url\" }>;\ntype InputFilesArrayBufferResult = Extract<ReadFileResult, { mode: \"array-buffer\" }>;\n\n/**\n * Пропсы компонента InputFiles.\n *\n * Компонент предназначен для выбора нескольких файлов.\n * Выбранные файлы отображаются списком под полем ввода,\n * каждый с кнопкой удаления (крестик).\n *\n * В onChange передаётся обновлённый массив результатов readFile.\n */\nexport type InputFilesProps =\n\t| (InputFilesCommonProps & {\n\t\t\tvalue: InputFilesDataUrlResult[];\n\t\t\tonChange: (value: InputFilesDataUrlResult[]) => void;\n\t\t\t/** Режим чтения: \"data-url\" по умолчанию */\n\t\t\treadMode?: \"data-url\";\n\t })\n\t| (InputFilesCommonProps & {\n\t\t\tvalue: InputFilesArrayBufferResult[];\n\t\t\tonChange: (value: InputFilesArrayBufferResult[]) => void;\n\t\t\t/** Режим чтения файла как ArrayBuffer */\n\t\t\treadMode: \"array-buffer\";\n\t });\n\n/**\n * InputFiles — компонент выбора нескольких файлов.\n *\n * Поле стилизовано как InputText. При клике открывается нативный\n * диалог с multiple. Каждый выбранный файл читается через readFile\n * и добавляется в массив value.\n *\n * Список выбранных файлов отображается под полем.\n * Каждый файл можно удалить кнопкой «крестик».\n *\n * InputFiles типизирует массив по `readMode`.\n * Если `readMode` не задан или равен `\"data-url\"`, в `value` и `onChange`\n * используется массив объектов с `dataUrl`. Если `readMode` равен\n * `\"array-buffer\"`, используется массив объектов с `buffer`.\n */\nexport function InputFiles(props: InputFilesProps) {\n\tconst {\n\t\tvalue,\n\t\tonReadError,\n\t\taccept,\n\t\tallowedMime,\n\t\tmaxBytes,\n\t\tmaxFiles,\n\t\tlabel,\n\t\tdescription,\n\t\tplaceholder = \"Выберите файлы\",\n\t\tdisabled,\n\t\tsize,\n\t\terror,\n\t\tonClearError,\n\t\tclassName\n\t} = props;\n\n\tassertValidAllowedMime(allowedMime);\n\tassertValidAccept(accept);\n\n\t/** Реф на скрытый нативный input[type=\"file\"] */\n\tconst inputRef = useRef<HTMLInputElement>(null);\n\tconst { controlId, labelId, descriptionId, errorId, describedBy } = useInputFieldIds({\n\t\thasLabel: label !== undefined && label !== null,\n\t\thasDescription: !!description,\n\t\thasError: !!error\n\t});\n\n\t/** Достигнут ли лимит файлов */\n\tconst isLimitReached = typeof maxFiles === \"number\" && value.length >= maxFiles;\n\n\t/**\n\t * Обработчик выбора файлов из нативного диалога.\n\t * Каждый файл читается через readFile.\n\t * Успешно прочитанные файлы добавляются к текущему массиву value.\n\t */\n\tconst handleChange = useCallback(\n\t\tasync (e: React.ChangeEvent<HTMLInputElement>) => {\n\t\t\tconst files = e.target.files;\n\t\t\tif (!files || files.length === 0) return;\n\n\t\t\tconst selectedFiles = Array.from(files);\n\n\t\t\t// Сбрасываем значение input чтобы можно было выбрать те же файлы повторно\n\t\t\te.target.value = \"\";\n\n\t\t\t// Сбрасываем ошибку при выборе новых файлов\n\t\t\tif (error && onClearError) onClearError();\n\n\t\t\t// Определяем сколько файлов можно ещё добавить\n\t\t\tconst remaining = typeof maxFiles === \"number\" ? maxFiles - value.length : selectedFiles.length;\n\t\t\tconst filesToProcess = selectedFiles.slice(0, remaining);\n\n\t\t\tif (props.readMode === \"array-buffer\") {\n\t\t\t\t// Читаем файлы как ArrayBuffer и сохраняем точный тип массива для потребителя.\n\t\t\t\tconst results: InputFilesArrayBufferResult[] = [];\n\n\t\t\t\tfor (const file of filesToProcess) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await readFile(file, { allowedMime, maxBytes, mode: \"array-buffer\" });\n\t\t\t\t\t\tresults.push(result);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tif (err instanceof ReadFileError && onReadError) {\n\t\t\t\t\t\t\tonReadError(err);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (results.length > 0) {\n\t\t\t\t\tprops.onChange([...props.value, ...results]);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Читаем файлы как Data URL и сохраняем точный тип массива для потребителя.\n\t\t\tconst results: InputFilesDataUrlResult[] = [];\n\t\t\tfor (const file of filesToProcess) {\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await readFile(file, { allowedMime, maxBytes });\n\t\t\t\t\tresults.push(result);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (err instanceof ReadFileError && onReadError) {\n\t\t\t\t\t\tonReadError(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (results.length > 0) {\n\t\t\t\tprops.onChange([...props.value, ...results]);\n\t\t\t}\n\t\t},\n\t\t[props, maxFiles, value.length, allowedMime, maxBytes, onReadError, error, onClearError]\n\t);\n\n\t/** Клик по видимому контролу открывает нативный диалог */\n\tconst handleClick = useCallback(() => {\n\t\tinputRef.current?.click();\n\t}, []);\n\n\tconst filesList =\n\t\tprops.readMode === \"array-buffer\" ? (\n\t\t\t<InputFilesList files={props.value} onChange={props.onChange} />\n\t\t) : (\n\t\t\t<InputFilesList files={props.value} onChange={props.onChange} />\n\t\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\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<input\n\t\t\t\tref={inputRef}\n\t\t\t\tid={controlId}\n\t\t\t\ttype=\"file\"\n\t\t\t\taccept={(accept ?? allowedMime)?.join(\",\")}\n\t\t\t\tmultiple\n\t\t\t\tdisabled={disabled || isLimitReached}\n\t\t\t\tclassName={styles.hiddenInput}\n\t\t\t\tonChange={handleChange}\n\t\t\t\ttabIndex={-1}\n\t\t\t/>\n\n\t\t\t<InputControl>\n\t\t\t\t{() => (\n\t\t\t\t\t<div\n\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\ttabIndex={disabled || isLimitReached ? -1 : 0}\n\t\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\t\tonKeyDown={(event) => handleKeyboardActivation(event, handleClick, { disabled: disabled || isLimitReached })}\n\t\t\t\t\t\tclassName={cn(uiStyles.uiInputControl, styles.control, !!error && \"invalid\")}\n\t\t\t\t\t\tdata-disabled={disabled || undefined}\n\t\t\t\t\t\taria-invalid={!!error || undefined}\n\t\t\t\t\t\taria-disabled={disabled || isLimitReached}\n\t\t\t\t\t\taria-labelledby={labelId}\n\t\t\t\t\t\taria-describedby={describedBy}>\n\t\t\t\t\t\t<span className={uiStyles.uiPlaceholder}>{isLimitReached ? `Максимум ${maxFiles} файлов` : placeholder}</span>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</InputControl>\n\n\t\t\t{/* Список выбранных файлов */}\n\t\t\t{filesList}\n\t\t</InputUI>\n\t);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"input-files-CLtQ7p8j.js","names":[],"sources":["../../src/input-files/InputFiles.module.scss","../../src/input-files/InputFilesList.tsx","../../src/input-files/InputFiles.tsx"],"sourcesContent":["/* Контрол, имитирующий внешний вид InputText */\n.control {\n\theight: var(--control-height);\n\twidth: 100%;\n\tpadding: 0 var(--space-sm);\n\tfont-size: var(--font-size-md);\n\tcursor: pointer;\n\n\tdisplay: flex;\n\talign-items: center;\n}\n\n/* Скрытый нативный input[type=\"file\"] */\n.hiddenInput {\n\tposition: absolute;\n\twidth: 0;\n\theight: 0;\n\topacity: 0;\n\toverflow: hidden;\n\tpointer-events: none;\n}\n\n/* Список выбранных файлов */\n.fileList {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--space-xs);\n\tmargin-top: var(--space-xs);\n}\n\n/* Элемент списка — строка с именем файла и кнопкой удаления */\n.fileItem {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--space-xs);\n\tpadding: var(--space-xs) var(--space-sm);\n\tbackground-color: var(--surface-2);\n\tborder-radius: var(--radius-sm);\n\t// font-size: var(--font-size-sm);\n}\n\n/* Имя файла — обрезка с троеточием */\n.fileItemName {\n\tflex: 1;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n/* Кнопка удаления файла из списка */\n.removeButton {\n\tflex-shrink: 0;\n\twidth: 1.25em;\n\theight: 1.25em;\n\tcolor: var(--content-2);\n\n\t&:hover {\n\t\tcolor: var(--content-accent);\n\t}\n}\n","import { useCallback } from \"react\";\n\nimport { ReadFileResult } from \"@ryuzaki13/react-foundation-lib/file\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { XIcon } from \"lucide-react\";\n\nimport styles from \"./InputFiles.module.scss\";\n\ninterface InputFilesListProps<TFile extends ReadFileResult> {\n\tfiles: TFile[];\n\tonChange: (files: TFile[]) => void;\n}\n\nexport function InputFilesList<TFile extends ReadFileResult>({ files, onChange }: InputFilesListProps<TFile>) {\n\tconst handleRemove = useCallback(\n\t\t(index: number) => {\n\t\t\tonChange(files.filter((_, i) => i !== index));\n\t\t},\n\t\t[files, onChange]\n\t);\n\n\tif (!files || !files.length) return null;\n\n\treturn (\n\t\t<ul className={styles.fileList}>\n\t\t\t{files.map((item, index) => (\n\t\t\t\t<li key={`${item.meta.name}-${item.meta.lastModified}`} className={styles.fileItem}>\n\t\t\t\t\t<span className={styles.fileItemName}>{item.meta.name}</span>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName={cn(styles.removeButton, \"flexCenter\")}\n\t\t\t\t\t\tonClick={() => handleRemove(index)}\n\t\t\t\t\t\taria-label={`Удалить ${item.meta.name}`}>\n\t\t\t\t\t\t<XIcon />\n\t\t\t\t\t</button>\n\t\t\t\t</li>\n\t\t\t))}\n\t\t</ul>\n\t);\n}\n","import { useCallback, useRef } from \"react\";\n\nimport { assertValidAccept, assertValidAllowedMime, readFile, ReadFileError, ReadFileResult } from \"@ryuzaki13/react-foundation-lib/file\";\nimport { cn, handleKeyboardActivation } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport { InputControl, InputUI, useInputFieldIds } from \"../input\";\nimport { UiBaseProps } from \"../types\";\nimport uiStyles from \"../ui.module.scss\";\n\nimport styles from \"./InputFiles.module.scss\";\nimport { InputFilesList } from \"./InputFilesList\";\n\ninterface InputFilesCommonProps extends Omit<UiBaseProps<undefined>, \"value\" | \"onChange\"> {\n\t/** Callback ошибки чтения файла */\n\tonReadError?: (error: ReadFileError) => void;\n\n\t/** HTML-атрибут accept для нативного input[type=\"file\"] (например `[\".pdf\", \".docx\"]`) */\n\taccept?: readonly string[];\n\t/** Список допустимых MIME-типов — передаётся в readFile */\n\tallowedMime?: readonly string[];\n\t/** Максимальный размер одного файла в байтах */\n\tmaxBytes?: number;\n\t/** Максимальное количество файлов. При достижении лимита input блокируется */\n\tmaxFiles?: number;\n\n\t/** Текст ошибки под полем */\n\terror?: string;\n\t/** Callback сброса ошибки */\n\tonClearError?: () => void;\n\t/** CSS-класс обёртки */\n\tclassName?: string;\n}\n\ntype InputFilesDataUrlResult = Extract<ReadFileResult, { mode: \"data-url\" }>;\ntype InputFilesArrayBufferResult = Extract<ReadFileResult, { mode: \"array-buffer\" }>;\n\n/**\n * Пропсы компонента InputFiles.\n *\n * Компонент предназначен для выбора нескольких файлов.\n * Выбранные файлы отображаются списком под полем ввода,\n * каждый с кнопкой удаления (крестик).\n *\n * В onChange передаётся обновлённый массив результатов readFile.\n */\nexport type InputFilesProps =\n\t| (InputFilesCommonProps & {\n\t\t\tvalue: InputFilesDataUrlResult[];\n\t\t\tonChange: (value: InputFilesDataUrlResult[]) => void;\n\t\t\t/** Режим чтения: \"data-url\" по умолчанию */\n\t\t\treadMode?: \"data-url\";\n\t })\n\t| (InputFilesCommonProps & {\n\t\t\tvalue: InputFilesArrayBufferResult[];\n\t\t\tonChange: (value: InputFilesArrayBufferResult[]) => void;\n\t\t\t/** Режим чтения файла как ArrayBuffer */\n\t\t\treadMode: \"array-buffer\";\n\t });\n\n/**\n * InputFiles — компонент выбора нескольких файлов.\n *\n * Поле стилизовано как InputText. При клике открывается нативный\n * диалог с multiple. Каждый выбранный файл читается через readFile\n * и добавляется в массив value.\n *\n * Список выбранных файлов отображается под полем.\n * Каждый файл можно удалить кнопкой «крестик».\n *\n * InputFiles типизирует массив по `readMode`.\n * Если `readMode` не задан или равен `\"data-url\"`, в `value` и `onChange`\n * используется массив объектов с `dataUrl`. Если `readMode` равен\n * `\"array-buffer\"`, используется массив объектов с `buffer`.\n */\nexport function InputFiles(props: InputFilesProps) {\n\tconst {\n\t\tvalue,\n\t\tonReadError,\n\t\taccept,\n\t\tallowedMime,\n\t\tmaxBytes,\n\t\tmaxFiles,\n\t\tlabel,\n\t\tdescription,\n\t\tplaceholder = \"Выберите файлы\",\n\t\tdisabled,\n\t\tsize,\n\t\terror,\n\t\tonClearError,\n\t\tclassName\n\t} = props;\n\n\tassertValidAllowedMime(allowedMime);\n\tassertValidAccept(accept);\n\n\t/** Реф на скрытый нативный input[type=\"file\"] */\n\tconst inputRef = useRef<HTMLInputElement>(null);\n\tconst { controlId, labelId, descriptionId, errorId, describedBy } = useInputFieldIds({\n\t\thasLabel: label !== undefined && label !== null,\n\t\thasDescription: !!description,\n\t\thasError: !!error\n\t});\n\n\t/** Достигнут ли лимит файлов */\n\tconst isLimitReached = typeof maxFiles === \"number\" && value.length >= maxFiles;\n\n\t/**\n\t * Обработчик выбора файлов из нативного диалога.\n\t * Каждый файл читается через readFile.\n\t * Успешно прочитанные файлы добавляются к текущему массиву value.\n\t */\n\tconst handleChange = useCallback(\n\t\tasync (e: React.ChangeEvent<HTMLInputElement>) => {\n\t\t\tconst files = e.target.files;\n\t\t\tif (!files || files.length === 0) return;\n\n\t\t\tconst selectedFiles = Array.from(files);\n\n\t\t\t// Сбрасываем значение input чтобы можно было выбрать те же файлы повторно\n\t\t\te.target.value = \"\";\n\n\t\t\t// Сбрасываем ошибку при выборе новых файлов\n\t\t\tif (error && onClearError) onClearError();\n\n\t\t\t// Определяем сколько файлов можно ещё добавить\n\t\t\tconst remaining = typeof maxFiles === \"number\" ? maxFiles - value.length : selectedFiles.length;\n\t\t\tconst filesToProcess = selectedFiles.slice(0, remaining);\n\n\t\t\tif (props.readMode === \"array-buffer\") {\n\t\t\t\t// Читаем файлы как ArrayBuffer и сохраняем точный тип массива для потребителя.\n\t\t\t\tconst results: InputFilesArrayBufferResult[] = [];\n\n\t\t\t\tfor (const file of filesToProcess) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await readFile(file, { allowedMime, maxBytes, mode: \"array-buffer\" });\n\t\t\t\t\t\tresults.push(result);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tif (err instanceof ReadFileError && onReadError) {\n\t\t\t\t\t\t\tonReadError(err);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (results.length > 0) {\n\t\t\t\t\tprops.onChange([...props.value, ...results]);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Читаем файлы как Data URL и сохраняем точный тип массива для потребителя.\n\t\t\tconst results: InputFilesDataUrlResult[] = [];\n\t\t\tfor (const file of filesToProcess) {\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await readFile(file, { allowedMime, maxBytes });\n\t\t\t\t\tresults.push(result);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (err instanceof ReadFileError && onReadError) {\n\t\t\t\t\t\tonReadError(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (results.length > 0) {\n\t\t\t\tprops.onChange([...props.value, ...results]);\n\t\t\t}\n\t\t},\n\t\t[props, maxFiles, value.length, allowedMime, maxBytes, onReadError, error, onClearError]\n\t);\n\n\t/** Клик по видимому контролу открывает нативный диалог */\n\tconst handleClick = useCallback(() => {\n\t\tinputRef.current?.click();\n\t}, []);\n\n\tconst filesList =\n\t\tprops.readMode === \"array-buffer\" ? (\n\t\t\t<InputFilesList files={props.value} onChange={props.onChange} />\n\t\t) : (\n\t\t\t<InputFilesList files={props.value} onChange={props.onChange} />\n\t\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\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<input\n\t\t\t\tref={inputRef}\n\t\t\t\tid={controlId}\n\t\t\t\ttype=\"file\"\n\t\t\t\taccept={(accept ?? allowedMime)?.join(\",\")}\n\t\t\t\tmultiple\n\t\t\t\tdisabled={disabled || isLimitReached}\n\t\t\t\tclassName={styles.hiddenInput}\n\t\t\t\tonChange={handleChange}\n\t\t\t\ttabIndex={-1}\n\t\t\t/>\n\n\t\t\t<InputControl>\n\t\t\t\t{() => (\n\t\t\t\t\t<div\n\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\ttabIndex={disabled || isLimitReached ? -1 : 0}\n\t\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\t\tonKeyDown={(event) => handleKeyboardActivation(event, handleClick, { disabled: disabled || isLimitReached })}\n\t\t\t\t\t\tclassName={cn(uiStyles.uiInputControl, styles.control, !!error && \"invalid\")}\n\t\t\t\t\t\tdata-disabled={disabled || undefined}\n\t\t\t\t\t\taria-invalid={!!error || undefined}\n\t\t\t\t\t\taria-disabled={disabled || isLimitReached}\n\t\t\t\t\t\taria-labelledby={labelId}\n\t\t\t\t\t\taria-describedby={describedBy}>\n\t\t\t\t\t\t<span className={uiStyles.uiPlaceholder}>{isLimitReached ? `Максимум ${maxFiles} файлов` : placeholder}</span>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</InputControl>\n\n\t\t\t{/* Список выбранных файлов */}\n\t\t\t{filesList}\n\t\t</InputUI>\n\t);\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { n as e } from "./input-BWCaVC06.js";
1
+ import { n as e } from "./input-CAw1Loze.js";
2
2
  import { useState as t } from "react";
3
3
  import { jsx as n } from "react/jsx-runtime";
4
4
  //#region src/input-search/InputSearch.tsx
@@ -27,4 +27,4 @@ function r({ onChange: r, ...i }) {
27
27
  //#endregion
28
28
  export { r as t };
29
29
 
30
- //# sourceMappingURL=input-search-CdPI1cb6.js.map
30
+ //# sourceMappingURL=input-search-F6MPrUGF.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"input-search-CdPI1cb6.js","names":[],"sources":["../../src/input-search/InputSearch.tsx"],"sourcesContent":["import React, { useState } from \"react\";\n\nimport { BaseInputProps, Input } from \"../input\";\n\ninterface SearchInputProps extends BaseInputProps<string> {\n\tonChange: (value: string) => void;\n}\n\nexport function InputSearch({ onChange, ...props }: SearchInputProps) {\n\tconst [searchTerm, setSearchTerm] = useState(() => props.defaultValue ?? props.value ?? \"\");\n\tconst [previousSearch, setPreviousSearch] = useState(() => props.defaultValue ?? props.value ?? \"\");\n\n\tconst handleSearch = (term: string) => {\n\t\tconst changedTerm = term.trim();\n\n\t\t// Проверяем, изменилось ли значение с предыдущего поиска\n\t\tif (changedTerm === previousSearch) return;\n\n\t\tsetPreviousSearch(changedTerm);\n\t\tonChange(changedTerm);\n\t};\n\n\tconst handleClear = () => {\n\t\tsetSearchTerm(\"\");\n\t\tsetPreviousSearch(\"\");\n\t\tonChange(\"\");\n\t};\n\n\tconst handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n\t\tif (event.key === \"Enter\") {\n\t\t\tevent.preventDefault();\n\t\t\thandleSearch(searchTerm);\n\t\t}\n\t};\n\n\tconst handleBlur = () => {\n\t\thandleSearch(searchTerm);\n\t};\n\n\tconst handleChange = (value: string) => {\n\t\tsetSearchTerm(value);\n\t\t// Не вызываем onSearch здесь - только по Enter/blur\n\t};\n\n\treturn (\n\t\t<Input {...props} value={searchTerm} onChange={handleChange} onKeyDown={handleKeyDown} onBlur={handleBlur} onClear={handleClear} />\n\t);\n}\n"],"mappings":";;;;AAQA,SAAgB,EAAY,EAAE,aAAU,GAAG,KAA2B;CACrE,IAAM,CAAC,GAAY,KAAiB,QAAe,EAAM,gBAAgB,EAAM,SAAS,EAAE,GACpF,CAAC,GAAgB,KAAqB,QAAe,EAAM,gBAAgB,EAAM,SAAS,EAAE,GAE5F,KAAgB,MAAiB;EACtC,IAAM,IAAc,EAAK,KAAK;EAG1B,MAAgB,MAEpB,EAAkB,CAAW,GAC7B,EAAS,CAAW;CACrB,GAEM,UAAoB;EAGzB,AAFA,EAAc,EAAE,GAChB,EAAkB,EAAE,GACpB,EAAS,EAAE;CACZ,GAEM,KAAiB,MAAiD;EACvE,AAAI,EAAM,QAAQ,YACjB,EAAM,eAAe,GACrB,EAAa,CAAU;CAEzB,GAEM,UAAmB;EACxB,EAAa,CAAU;CACxB,GAEM,KAAgB,MAAkB;EACvC,EAAc,CAAK;CAEpB;CAEA,OACC,kBAAC,GAAD;EAAO,GAAI;EAAO,OAAO;EAAY,UAAU;EAAc,WAAW;EAAe,QAAQ;EAAY,SAAS;CAAc,CAAA;AAEpI"}
1
+ {"version":3,"file":"input-search-F6MPrUGF.js","names":[],"sources":["../../src/input-search/InputSearch.tsx"],"sourcesContent":["import React, { useState } from \"react\";\n\nimport { BaseInputProps, Input } from \"../input\";\n\ninterface SearchInputProps extends BaseInputProps<string> {\n\tonChange: (value: string) => void;\n}\n\nexport function InputSearch({ onChange, ...props }: SearchInputProps) {\n\tconst [searchTerm, setSearchTerm] = useState(() => props.defaultValue ?? props.value ?? \"\");\n\tconst [previousSearch, setPreviousSearch] = useState(() => props.defaultValue ?? props.value ?? \"\");\n\n\tconst handleSearch = (term: string) => {\n\t\tconst changedTerm = term.trim();\n\n\t\t// Проверяем, изменилось ли значение с предыдущего поиска\n\t\tif (changedTerm === previousSearch) return;\n\n\t\tsetPreviousSearch(changedTerm);\n\t\tonChange(changedTerm);\n\t};\n\n\tconst handleClear = () => {\n\t\tsetSearchTerm(\"\");\n\t\tsetPreviousSearch(\"\");\n\t\tonChange(\"\");\n\t};\n\n\tconst handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n\t\tif (event.key === \"Enter\") {\n\t\t\tevent.preventDefault();\n\t\t\thandleSearch(searchTerm);\n\t\t}\n\t};\n\n\tconst handleBlur = () => {\n\t\thandleSearch(searchTerm);\n\t};\n\n\tconst handleChange = (value: string) => {\n\t\tsetSearchTerm(value);\n\t\t// Не вызываем onSearch здесь - только по Enter/blur\n\t};\n\n\treturn (\n\t\t<Input {...props} value={searchTerm} onChange={handleChange} onKeyDown={handleKeyDown} onBlur={handleBlur} onClear={handleClear} />\n\t);\n}\n"],"mappings":";;;;AAQA,SAAgB,EAAY,EAAE,aAAU,GAAG,KAA2B;CACrE,IAAM,CAAC,GAAY,KAAiB,QAAe,EAAM,gBAAgB,EAAM,SAAS,EAAE,GACpF,CAAC,GAAgB,KAAqB,QAAe,EAAM,gBAAgB,EAAM,SAAS,EAAE,GAE5F,KAAgB,MAAiB;EACtC,IAAM,IAAc,EAAK,KAAK;EAG1B,MAAgB,MAEpB,EAAkB,CAAW,GAC7B,EAAS,CAAW;CACrB,GAEM,UAAoB;EAGzB,AAFA,EAAc,EAAE,GAChB,EAAkB,EAAE,GACpB,EAAS,EAAE;CACZ,GAEM,KAAiB,MAAiD;EACvE,AAAI,EAAM,QAAQ,YACjB,EAAM,eAAe,GACrB,EAAa,CAAU;CAEzB,GAEM,UAAmB;EACxB,EAAa,CAAU;CACxB,GAEM,KAAgB,MAAkB;EACvC,EAAc,CAAK;CAEpB;CAEA,OACC,kBAAC,GAAD;EAAO,GAAI;EAAO,OAAO;EAAY,UAAU;EAAc,WAAW;EAAe,QAAQ;EAAY,SAAS;CAAc,CAAA;AAEpI"}
@@ -1,7 +1,7 @@
1
1
  import { Text as e } from "../text/index.js";
2
2
  import { t } from "./ui.module-BfaIVBba.js";
3
3
  import { t as n } from "./check-box-6HGX_KOy.js";
4
- import { a as r, c as i, d as a, f as o, i as s, l as c, n as l, p as u, r as d, t as f, u as p } from "./picker-Mdb73_uW.js";
4
+ import { a as r, c as i, d as a, f as o, i as s, l as c, n as l, p as u, r as d, t as f, u as p } from "./picker-TYLwgl1c.js";
5
5
  import { t as ee } from "./separator-B72Aq-6a.js";
6
6
  import { n as m, r as h, t as g } from "./useODataSelectBase-DI_wwKgw.js";
7
7
  import { forwardRef as _, useCallback as te, useMemo as v, useRef as ne, useState as y } from "react";
@@ -168,13 +168,14 @@ var k = _(({ codeKey: e, textKey: n, hideCode: a, items: p, value: m, onChange:
168
168
  z,
169
169
  p,
170
170
  n
171
- ]), { query: V, setQuery: Se } = d({
172
- open: L,
171
+ ]), { query: V, setQuery: Se, resetQueryOnClose: Ce } = d({
173
172
  query: ae,
174
173
  defaultQuery: ce,
175
174
  onQuery: C,
176
175
  triggerMode: R
177
- }), H = r({
176
+ }), we = (e) => {
177
+ L && !e && Ce && Se(""), ye(e);
178
+ }, H = r({
178
179
  options: z,
179
180
  query: V,
180
181
  enabled: w,
@@ -184,14 +185,14 @@ var k = _(({ codeKey: e, textKey: n, hideCode: a, items: p, value: m, onChange:
184
185
  query: V,
185
186
  enabled: w,
186
187
  getSearchText: (t) => ge(t, e, B)
187
- }), W = v(() => [...H, ...U], [U, H]), Ce = H.length > 0 ? 0 : -1, { draftValue: G, setDraftValue: K, prepareOpen: we } = l({
188
+ }), W = v(() => [...H, ...U], [U, H]), Te = H.length > 0 ? 0 : -1, { draftValue: G, setDraftValue: K, prepareOpen: Ee } = l({
188
189
  value: z,
189
190
  open: L,
190
191
  onCommit: h,
191
192
  onOpen: T,
192
193
  onClose: ue,
193
194
  isEqual: (t, n) => _e(t, n, e)
194
- }), q = v(() => new Set(G.map((t) => O(t, e))), [e, G]), Te = v(() => ({
195
+ }), q = v(() => new Set(G.map((t) => O(t, e))), [e, G]), De = v(() => ({
195
196
  selectedItems: G,
196
197
  committedSelectedItems: z,
197
198
  selectedKeys: q,
@@ -201,29 +202,29 @@ var k = _(({ codeKey: e, textKey: n, hideCode: a, items: p, value: m, onChange:
201
202
  G,
202
203
  L,
203
204
  q
204
- ]), J = te((e) => D?.(e, Te) ?? !1, [D, Te]), { activeIndex: Y, context: Ee, floatingStyles: De, getFloatingProps: Oe, setReference: ke, setFloating: Ae, setOptionRef: je, close: Me, openList: Ne, toggleOpen: Pe, selectActiveOption: Fe, handleReferenceKeyDown: Ie, handleFloatingKeyDown: Le, getOptionId: Re, getActiveOptionId: ze } = s({
205
+ ]), J = te((e) => D?.(e, De) ?? !1, [D, De]), { activeIndex: Y, context: Oe, floatingStyles: ke, getFloatingProps: Ae, setReference: je, setFloating: Me, setOptionRef: Ne, close: Pe, openList: Fe, toggleOpen: Ie, selectActiveOption: Le, handleReferenceKeyDown: Re, handleFloatingKeyDown: ze, getOptionId: Be, getActiveOptionId: Ve } = s({
205
206
  options: W,
206
- selectedIndex: Ce,
207
+ selectedIndex: Te,
207
208
  open: L,
208
- onOpenChange: ye,
209
+ onOpenChange: we,
209
210
  onSelect: void 0,
210
211
  disabled: k,
211
212
  getOptionDisabled: J,
212
213
  closeOnSelect: !1,
213
214
  allowOpenWithoutOptions: !0,
214
215
  triggerMode: R
215
- }), Be = le ?? V, X = (t) => {
216
+ }), He = le ?? V, X = (t) => {
216
217
  let n = O(t, e);
217
218
  K((r) => r.some((t) => O(t, e) === n) ? r.filter((t) => O(t, e) !== n) : J(t) ? r : [...r, t]);
218
- }, Ve = (e) => {
219
+ }, Ue = (e) => {
219
220
  if (I.current = e, typeof F == "function") {
220
221
  F(e);
221
222
  return;
222
223
  }
223
224
  F && (F.current = e);
224
- }, He = () => {
225
+ }, We = () => {
225
226
  K([]), L || h([]);
226
- }, Ue = () => {
227
+ }, Ge = () => {
227
228
  K((t) => {
228
229
  let n = [...t], r = new Set(t.map((t) => O(t, e)));
229
230
  for (let t of W) {
@@ -232,44 +233,44 @@ var k = _(({ codeKey: e, textKey: n, hideCode: a, items: p, value: m, onChange:
232
233
  }
233
234
  return n;
234
235
  });
235
- }, We = () => {
236
+ }, Ke = () => {
236
237
  K([]);
237
- }, Z = (e) => {
238
- J(e) || (K([e]), Me());
239
- }, Ge = L ? G : z, Ke = Ge.length > 0, qe = {
240
- selectedItems: Ge,
238
+ }, qe = (e) => {
239
+ J(e) || (K([e]), Pe());
240
+ }, Je = L ? G : z, Z = Je.length > 0, Ye = {
241
+ selectedItems: Je,
241
242
  committedSelectedItems: z,
242
243
  availableItems: U,
243
244
  query: V,
244
245
  open: L,
245
- clearSelection: He,
246
- selectAll: Ue,
247
- deselectAll: We
248
- }, Je = M === void 0 ? de({
246
+ clearSelection: We,
247
+ selectAll: Ge,
248
+ deselectAll: Ke
249
+ }, Xe = M === void 0 ? de({
249
250
  codeKey: e,
250
251
  textKey: B
251
- }) : M, Ye = N === void 0 ? fe : N, Xe = P ?? pe({
252
+ }) : M, Ze = N === void 0 ? fe : N, Qe = P ?? pe({
252
253
  codeKey: e,
253
254
  textKey: B,
254
255
  hideCode: a
255
- }), Ze = typeof Je == "function" ? Je(qe) : null, Qe = typeof Ye == "function" ? Ye(qe) : null, Q = H.map((e, t) => ({
256
+ }), $e = typeof Xe == "function" ? Xe(Ye) : null, et = typeof Ze == "function" ? Ze(Ye) : null, Q = H.map((e, t) => ({
256
257
  item: e,
257
258
  index: t
258
- })), $e = U.map((e, t) => ({
259
+ })), tt = U.map((e, t) => ({
259
260
  item: e,
260
261
  index: t + Q.length
261
- })), et = !j && !A && W.length === 0, $ = f({
262
+ })), nt = !j && !A && W.length === 0, $ = f({
262
263
  mode: R,
263
264
  open: L,
264
265
  currentQuery: V,
265
266
  hasDisplayValue: !1,
266
267
  inputRef: I,
267
268
  setQuery: Se,
268
- openList: Ne,
269
- close: Me,
270
- toggleOpen: Pe,
269
+ openList: Fe,
270
+ close: Pe,
271
+ toggleOpen: Ie,
271
272
  onBeforeOpen: () => {
272
- L || we();
273
+ L || Ee();
273
274
  }
274
275
  });
275
276
  return /* @__PURE__ */ b(u, {
@@ -281,22 +282,22 @@ var k = _(({ codeKey: e, textKey: n, hideCode: a, items: p, value: m, onChange:
281
282
  children: ({ controlId: n, labelId: r, describedBy: a }) => {
282
283
  let s = `${n}-listbox`;
283
284
  return /* @__PURE__ */ x(se, { children: [/* @__PURE__ */ b(i, {
284
- ref: Ve,
285
- rootRef: ke,
285
+ ref: Ue,
286
+ rootRef: je,
286
287
  id: n,
287
288
  type: "text",
288
289
  role: "combobox",
289
290
  autoComplete: "off",
290
291
  disabled: k,
291
292
  value: V,
292
- placeholder: Ke ? void 0 : `${re ?? g ?? "Выберите значения"} <${p.length}>`,
293
+ placeholder: Z ? void 0 : `${re ?? g ?? "Выберите значения"} <${p.length}>`,
293
294
  "aria-labelledby": r,
294
295
  "aria-describedby": a,
295
296
  "aria-haspopup": "listbox",
296
297
  "aria-expanded": L,
297
298
  "aria-controls": L ? s : void 0,
298
299
  "aria-autocomplete": "list",
299
- "aria-activedescendant": L ? ze(s) : void 0,
300
+ "aria-activedescendant": L ? Ve(s) : void 0,
300
301
  rootClassName: "flex alignItemsCenter",
301
302
  endAdornment: /* @__PURE__ */ b(c, {
302
303
  open: L,
@@ -305,16 +306,16 @@ var k = _(({ codeKey: e, textKey: n, hideCode: a, items: p, value: m, onChange:
305
306
  onToggleClick: $.handleToggleClick,
306
307
  children: /* @__PURE__ */ b("button", {
307
308
  type: "button",
308
- disabled: !Ke,
309
+ disabled: !Z,
309
310
  className: t.uiClearButton,
310
311
  "data-ui": "multi-select-clear-button",
311
312
  "data-action": "clear-multi-select",
312
- onClick: He,
313
+ onClick: We,
313
314
  "aria-label": "Очистить все",
314
315
  children: /* @__PURE__ */ b(oe, {})
315
316
  })
316
317
  }),
317
- overlay: Ze,
318
+ overlay: $e,
318
319
  onChange: (e) => {
319
320
  $.handleTriggerInputChange(e.target.value);
320
321
  },
@@ -323,7 +324,7 @@ var k = _(({ codeKey: e, textKey: n, hideCode: a, items: p, value: m, onChange:
323
324
  $.handleTriggerFocus(e.currentTarget);
324
325
  },
325
326
  onKeyDown: (e) => {
326
- Ie(e), !e.defaultPrevented && $.handleTriggerKeyDown({
327
+ Re(e), !e.defaultPrevented && $.handleTriggerKeyDown({
327
328
  event: e,
328
329
  onActivateWhenOpen: () => {
329
330
  if (Y >= 0) {
@@ -333,7 +334,7 @@ var k = _(({ codeKey: e, textKey: n, hideCode: a, items: p, value: m, onChange:
333
334
  return;
334
335
  }
335
336
  }
336
- Fe();
337
+ Le();
337
338
  },
338
339
  enableClosedArrowDownOpen: !0,
339
340
  suppressClosedArrowUp: !0
@@ -341,22 +342,22 @@ var k = _(({ codeKey: e, textKey: n, hideCode: a, items: p, value: m, onChange:
341
342
  }
342
343
  }), /* @__PURE__ */ b(o, {
343
344
  open: L,
344
- context: Ee,
345
- floatingStyles: De,
345
+ context: Oe,
346
+ floatingStyles: ke,
346
347
  listId: s,
347
348
  labelId: r,
348
349
  descriptionId: a,
349
- activeOptionId: L ? ze(s) : void 0,
350
- setFloating: Ae,
351
- getFloatingProps: Oe,
352
- onKeyDown: Le,
350
+ activeOptionId: L ? Ve(s) : void 0,
351
+ setFloating: Me,
352
+ getFloatingProps: Ae,
353
+ onKeyDown: ze,
353
354
  initialFocus: -1,
354
355
  returnFocus: !1,
355
356
  tabIndex: -1,
356
357
  className: t.uiPopupOptions,
357
- header: Qe,
358
+ header: et,
358
359
  children: /* @__PURE__ */ b(me, {
359
- isNoData: et,
360
+ isNoData: nt,
360
361
  isLoading: j,
361
362
  error: A,
362
363
  children: /* @__PURE__ */ x("div", {
@@ -369,29 +370,29 @@ var k = _(({ codeKey: e, textKey: n, hideCode: a, items: p, value: m, onChange:
369
370
  selectedKeys: q,
370
371
  codeKey: e,
371
372
  query: V,
372
- highlightQuery: Be,
373
+ highlightQuery: He,
373
374
  getOptionDisabled: J,
374
- getOptionId: Re,
375
- setOptionRef: je,
375
+ getOptionId: Be,
376
+ setOptionRef: Ne,
376
377
  toggleOption: X,
377
- selectOnlyOption: Z,
378
- renderItem: Xe
378
+ selectOnlyOption: qe,
379
+ renderItem: Qe
379
380
  }),
380
381
  Q.length > 0 && xe.length > 0 && /* @__PURE__ */ b(ee, { className: "marginBlockSm" }),
381
382
  /* @__PURE__ */ b(ve, {
382
- entries: $e,
383
+ entries: tt,
383
384
  listId: s,
384
385
  activeIndex: Y,
385
386
  selectedKeys: q,
386
387
  codeKey: e,
387
388
  query: V,
388
- highlightQuery: Be,
389
+ highlightQuery: He,
389
390
  getOptionDisabled: J,
390
- getOptionId: Re,
391
- setOptionRef: je,
391
+ getOptionId: Be,
392
+ setOptionRef: Ne,
392
393
  toggleOption: X,
393
- selectOnlyOption: Z,
394
- renderItem: Xe
394
+ selectOnlyOption: qe,
395
+ renderItem: Qe
395
396
  })
396
397
  ]
397
398
  })
@@ -522,4 +523,4 @@ function I({ label: e, description: t, disabled: n, placeholder: r, size: i, opt
522
523
  //#endregion
523
524
  export { k as a, j as i, N as n, T as o, M as r, C as s, I as t };
524
525
 
525
- //# sourceMappingURL=multi-select-01xmD1nZ.js.map
526
+ //# sourceMappingURL=multi-select-Dypew65l.js.map