@ryuzaki13/react-foundation-ui 1.0.0 → 1.0.2

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 (405) hide show
  1. package/dist/advanced-search/index.d.ts +3 -0
  2. package/dist/advanced-search/index.d.ts.map +1 -0
  3. package/dist/advanced-search/index.js +361 -0
  4. package/dist/advanced-search/index.js.map +1 -0
  5. package/dist/advanced-search/lib/index.d.ts +2 -0
  6. package/dist/advanced-search/lib/index.d.ts.map +1 -0
  7. package/dist/advanced-search/lib/searchParts.d.ts +3 -0
  8. package/dist/advanced-search/lib/searchParts.d.ts.map +1 -0
  9. package/dist/advanced-search/model/index.d.ts +5 -0
  10. package/dist/advanced-search/model/index.d.ts.map +1 -0
  11. package/dist/advanced-search/model/types.d.ts +55 -0
  12. package/dist/advanced-search/model/types.d.ts.map +1 -0
  13. package/dist/advanced-search/model/useAdvancedSearch.d.ts +11 -0
  14. package/dist/advanced-search/model/useAdvancedSearch.d.ts.map +1 -0
  15. package/dist/advanced-search/model/useAdvancedSearchInitialSelected.d.ts +6 -0
  16. package/dist/advanced-search/model/useAdvancedSearchInitialSelected.d.ts.map +1 -0
  17. package/dist/advanced-search/model/useAdvancedSearchSelection.d.ts +13 -0
  18. package/dist/advanced-search/model/useAdvancedSearchSelection.d.ts.map +1 -0
  19. package/dist/advanced-search/ui/AdvancedSearchModal.d.ts +13 -0
  20. package/dist/advanced-search/ui/AdvancedSearchModal.d.ts.map +1 -0
  21. package/dist/advanced-search/ui/AdvancedSearchSelect.d.ts +8 -0
  22. package/dist/advanced-search/ui/AdvancedSearchSelect.d.ts.map +1 -0
  23. package/dist/advanced-search/ui/AdvancedSearchSelectUI.d.ts +9 -0
  24. package/dist/advanced-search/ui/AdvancedSearchSelectUI.d.ts.map +1 -0
  25. package/dist/advanced-search/ui/index.d.ts +2 -0
  26. package/dist/advanced-search/ui/index.d.ts.map +1 -0
  27. package/dist/badge/Badge.d.ts.map +1 -1
  28. package/dist/badge/index.js +1 -1
  29. package/dist/badge/stories/Badge.stories.js +22 -22
  30. package/dist/base-table/index.js +2 -2
  31. package/dist/base-table/lib/columnPinning.d.ts.map +1 -1
  32. package/dist/base-table/model/useTableColumnOrder.d.ts +1 -1
  33. package/dist/base-table/model/useTableColumnOrder.d.ts.map +1 -1
  34. package/dist/base-table/model/useTableColumnSizing.d.ts +1 -1
  35. package/dist/base-table/model/useTableColumnSizing.d.ts.map +1 -1
  36. package/dist/base-table/ui/BaseTable.d.ts +2 -2
  37. package/dist/base-table/ui/BaseTable.d.ts.map +1 -1
  38. package/dist/base-table/ui/BaseTableHeaderCell.d.ts.map +1 -1
  39. package/dist/base-table/ui/FormattedTableCell.d.ts.map +1 -1
  40. package/dist/button/index.js +7 -7
  41. package/dist/button/stories/Button.stories.js +1 -1
  42. package/dist/check-box/CheckBox.d.ts.map +1 -1
  43. package/dist/check-box/index.js +1 -1
  44. package/dist/check-box/stories/CheckBox.stories.js +25 -25
  45. package/dist/chunks/{BadgeList-DHW_Ktr3.js → BadgeList-DYgun2rf.js} +16 -16
  46. package/dist/chunks/BadgeList-DYgun2rf.js.map +1 -0
  47. package/dist/chunks/{Button-BZ_b-Kin.js → Button-CCWuggdA.js} +16 -16
  48. package/dist/chunks/{Button-BZ_b-Kin.js.map → Button-CCWuggdA.js.map} +1 -1
  49. package/dist/chunks/{CalendarView-B75faWIU.js → CalendarView-DjeTJkTT.js} +149 -149
  50. package/dist/chunks/{CalendarView-B75faWIU.js.map → CalendarView-DjeTJkTT.js.map} +1 -1
  51. package/dist/chunks/{CheckBox-Cck5w1Ud.js → CheckBox-BowNqqd3.js} +13 -13
  52. package/dist/chunks/CheckBox-BowNqqd3.js.map +1 -0
  53. package/dist/chunks/{DateInput-CINDYueM.js → DateInput--tfofQ2x.js} +68 -68
  54. package/dist/chunks/DateInput--tfofQ2x.js.map +1 -0
  55. package/dist/chunks/{DateRangePresetSelect-CyzGMvVp.js → DateRangePresetSelect-UgsfaOeM.js} +22 -22
  56. package/dist/chunks/{DateRangePresetSelect-CyzGMvVp.js.map → DateRangePresetSelect-UgsfaOeM.js.map} +1 -1
  57. package/dist/chunks/Detail-DHDMsg8q.js +80 -0
  58. package/dist/chunks/{Detail-DKolHye4.js.map → Detail-DHDMsg8q.js.map} +1 -1
  59. package/dist/chunks/{Dialog-BPS4BeWZ.js → Dialog-CFIvGxER.js} +8 -8
  60. package/dist/chunks/Dialog-CFIvGxER.js.map +1 -0
  61. package/dist/chunks/{DisclosureGroup-0BtaXO54.js → DisclosureGroup-CfRTkl6Z.js} +11 -11
  62. package/dist/chunks/DisclosureGroup-CfRTkl6Z.js.map +1 -0
  63. package/dist/chunks/{DropZone-hf7Em__0.js → DropZone-kJfbZU5g.js} +22 -22
  64. package/dist/chunks/DropZone-kJfbZU5g.js.map +1 -0
  65. package/dist/chunks/{DropdownMenu-Ds-trH4M.js → DropdownMenu-DQeR3y7M.js} +138 -138
  66. package/dist/chunks/DropdownMenu-DQeR3y7M.js.map +1 -0
  67. package/dist/chunks/{Flex-DbBdq336.js → Flex-DUYSL5TE.js} +16 -16
  68. package/dist/chunks/{Flex-DbBdq336.js.map → Flex-DUYSL5TE.js.map} +1 -1
  69. package/dist/chunks/Grid-ByIIytjh.js.map +1 -1
  70. package/dist/chunks/{Input-Ce2HXBUc.js → Input-BmjlpA09.js} +76 -76
  71. package/dist/chunks/Input-BmjlpA09.js.map +1 -0
  72. package/dist/chunks/{InputDateTime-DPtY_4Od.js → InputDateTime-CxfAFe2L.js} +56 -56
  73. package/dist/chunks/{InputDateTime-DPtY_4Od.js.map → InputDateTime-CxfAFe2L.js.map} +1 -1
  74. package/dist/chunks/{InputFile-ga5yJmdZ.js → InputFile-CyZu__B_.js} +17 -17
  75. package/dist/chunks/InputFile-CyZu__B_.js.map +1 -0
  76. package/dist/chunks/{InputFiles-Or2Nvfgk.js → InputFiles-CrTJV27R.js} +36 -36
  77. package/dist/chunks/InputFiles-CrTJV27R.js.map +1 -0
  78. package/dist/chunks/{InputImage-BeA5WJz1.js → InputImage-Cw8rPYQu.js} +18 -18
  79. package/dist/chunks/{InputImage-BeA5WJz1.js.map → InputImage-Cw8rPYQu.js.map} +1 -1
  80. package/dist/chunks/{LabeledExpandableActionPanel-Bx-DWmYz.js → LabeledExpandableActionPanel-D3kUvmFH.js} +25 -25
  81. package/dist/chunks/LabeledExpandableActionPanel-D3kUvmFH.js.map +1 -0
  82. package/dist/chunks/Listbox-BZlp5qHz.js +81 -0
  83. package/dist/chunks/Listbox-BZlp5qHz.js.map +1 -0
  84. package/dist/chunks/{MultiSelect-CBqTylqO.js → MultiSelect-D1XYuwH1.js} +113 -113
  85. package/dist/chunks/{MultiSelect-CBqTylqO.js.map → MultiSelect-D1XYuwH1.js.map} +1 -1
  86. package/dist/chunks/{NotificationsHost-BQc-zOr2.js → NotificationsHost-_icJx4xR.js} +34 -34
  87. package/dist/chunks/NotificationsHost-_icJx4xR.js.map +1 -0
  88. package/dist/chunks/{PresetRangeDateInput-YBQm_4Fb.js → PresetRangeDateInput-CapirptQ.js} +11 -11
  89. package/dist/chunks/{PresetRangeDateInput-YBQm_4Fb.js.map → PresetRangeDateInput-CapirptQ.js.map} +1 -1
  90. package/dist/chunks/{RadioButton-DJp31HFR.js → RadioButton-D0uA0rX_.js} +13 -13
  91. package/dist/chunks/RadioButton-D0uA0rX_.js.map +1 -0
  92. package/dist/chunks/RadioGroup-B9XjkcOy.js +121 -0
  93. package/dist/chunks/{RadioGroup-BAhN1d1X.js.map → RadioGroup-B9XjkcOy.js.map} +1 -1
  94. package/dist/chunks/{Select-B7k_8_Lf.js → Select-CXeVjVKA.js} +11 -11
  95. package/dist/chunks/Select-CXeVjVKA.js.map +1 -0
  96. package/dist/chunks/{SerializableSelect-53uNCqdE.js → SerializableSelect-DkYeJtAO.js} +2 -2
  97. package/dist/chunks/{SerializableSelect-53uNCqdE.js.map → SerializableSelect-DkYeJtAO.js.map} +1 -1
  98. package/dist/chunks/{SingleDateTimeInput-CwvIbwje.js → SingleDateTimeInput-BmeuVGQT.js} +86 -86
  99. package/dist/chunks/SingleDateTimeInput-BmeuVGQT.js.map +1 -0
  100. package/dist/chunks/{Splitter-NjNFuEq4.js → Splitter-BFkVGVRb.js} +32 -32
  101. package/dist/chunks/{Splitter-NjNFuEq4.js.map → Splitter-BFkVGVRb.js.map} +1 -1
  102. package/dist/chunks/StateSelect-1jH3uLz9.js +78 -0
  103. package/dist/chunks/{StateSelect-D0wuUdT9.js.map → StateSelect-1jH3uLz9.js.map} +1 -1
  104. package/dist/chunks/{Switch-B476FBUD.js → Switch-B57Qmy1z.js} +19 -19
  105. package/dist/chunks/Switch-B57Qmy1z.js.map +1 -0
  106. package/dist/chunks/{TextEditorLexicalClient-DcixYuo4.js → TextEditorLexicalClient-DRhAswpP.js} +204 -204
  107. package/dist/chunks/{TextEditorLexicalClient-DcixYuo4.js.map → TextEditorLexicalClient-DRhAswpP.js.map} +1 -1
  108. package/dist/chunks/{Textarea-DeJJjjkI.js → Textarea-C9UdUueF.js} +2 -2
  109. package/dist/chunks/{Textarea-DeJJjjkI.js.map → Textarea-C9UdUueF.js.map} +1 -1
  110. package/dist/chunks/{TimePanel-_kF2RtHk.js → TimePanel-b4saqoUY.js} +27 -27
  111. package/dist/chunks/TimePanel-b4saqoUY.js.map +1 -0
  112. package/dist/chunks/{Toggle-C_fE-bkM.js → Toggle-DVqOQXmt.js} +18 -18
  113. package/dist/chunks/{Toggle-C_fE-bkM.js.map → Toggle-DVqOQXmt.js.map} +1 -1
  114. package/dist/chunks/{TreeMultiSelect-DRYNx7u5.js → TreeMultiSelect-CfQhlfnC.js} +6 -6
  115. package/dist/chunks/{TreeMultiSelect-DRYNx7u5.js.map → TreeMultiSelect-CfQhlfnC.js.map} +1 -1
  116. package/dist/chunks/{TreePickerBase-DYzTsSBQ.js → TreePickerBase-BBUOWsSu.js} +154 -154
  117. package/dist/chunks/TreePickerBase-BBUOWsSu.js.map +1 -0
  118. package/dist/chunks/{TreeSelect-DGLDu6qc.js → TreeSelect-2wUXs90E.js} +6 -6
  119. package/dist/chunks/{TreeSelect-DGLDu6qc.js.map → TreeSelect-2wUXs90E.js.map} +1 -1
  120. package/dist/chunks/base-table-CoQlKABk.js +514 -0
  121. package/dist/chunks/base-table-CoQlKABk.js.map +1 -0
  122. package/dist/chunks/{floating-arrow-CdRV69sg.js → floating-arrow-BE-z4QkE.js} +7 -7
  123. package/dist/chunks/{floating-arrow-CdRV69sg.js.map → floating-arrow-BE-z4QkE.js.map} +1 -1
  124. package/dist/chunks/input-search-Dw4rnJBq.js +30 -0
  125. package/dist/chunks/input-search-Dw4rnJBq.js.map +1 -0
  126. package/dist/chunks/{layout-picker-BA9vA8JI.js → layout-picker-MWaImn3L.js} +34 -34
  127. package/dist/chunks/layout-picker-MWaImn3L.js.map +1 -0
  128. package/dist/chunks/{misc-DrmMj8GO.js → misc-DoqZBMof.js} +100 -100
  129. package/dist/chunks/misc-DoqZBMof.js.map +1 -0
  130. package/dist/chunks/{modal-DqVcZws_.js → modal-B3HY3laL.js} +40 -40
  131. package/dist/chunks/modal-B3HY3laL.js.map +1 -0
  132. package/dist/chunks/multi-select-BzYIviCU.js +1305 -0
  133. package/dist/chunks/multi-select-BzYIviCU.js.map +1 -0
  134. package/dist/chunks/{picker-Cj4RnJh6.js → picker-Dg55Ss-B.js} +73 -73
  135. package/dist/chunks/picker-Dg55Ss-B.js.map +1 -0
  136. package/dist/chunks/{popover-C79P5bm2.js → popover-xJJqy1v6.js} +52 -52
  137. package/dist/chunks/popover-xJJqy1v6.js.map +1 -0
  138. package/dist/chunks/{separator-CIqnk2z9.js → separator-B72Aq-6a.js} +2 -2
  139. package/dist/chunks/{separator-CIqnk2z9.js.map → separator-B72Aq-6a.js.map} +1 -1
  140. package/dist/chunks/{slider-34wxzKkG.js → slider-CFKsfxFp.js} +83 -83
  141. package/dist/chunks/slider-CFKsfxFp.js.map +1 -0
  142. package/dist/chunks/sortable-DcTIAbjD.js +185 -0
  143. package/dist/chunks/sortable-DcTIAbjD.js.map +1 -0
  144. package/dist/chunks/{table-BYA0hCj7.js → table-Dc3AqMzP.js} +21 -21
  145. package/dist/chunks/table-Dc3AqMzP.js.map +1 -0
  146. package/dist/chunks/{table-column-interactions-DPyJDD7P.js → table-column-interactions-6RGjmiI5.js} +24 -24
  147. package/dist/chunks/{table-column-interactions-DPyJDD7P.js.map → table-column-interactions-6RGjmiI5.js.map} +1 -1
  148. package/dist/chunks/{tabs-CjU2KCgs.js → tabs-DlnVVMJl.js} +96 -96
  149. package/dist/chunks/{tabs-CjU2KCgs.js.map → tabs-DlnVVMJl.js.map} +1 -1
  150. package/dist/chunks/{toolbar-C-Ziw_Uh.js → toolbar-BCZNdRXM.js} +2 -2
  151. package/dist/chunks/{toolbar-C-Ziw_Uh.js.map → toolbar-BCZNdRXM.js.map} +1 -1
  152. package/dist/chunks/{wheel-picker-DUHGy7wE.js → wheel-picker-FS58cRsQ.js} +23 -23
  153. package/dist/chunks/{wheel-picker-DUHGy7wE.js.map → wheel-picker-FS58cRsQ.js.map} +1 -1
  154. package/dist/context-menu/components/MenuContent.d.ts.map +1 -1
  155. package/dist/context-menu/components/MenuContext.d.ts.map +1 -1
  156. package/dist/context-menu/components/MenuRoot.d.ts.map +1 -1
  157. package/dist/context-menu/components/RadialMenuContent.d.ts.map +1 -1
  158. package/dist/context-menu/index.js +1 -1
  159. package/dist/context-menu/stories/ContextMenu.stories.js +45 -45
  160. package/dist/date-input/index.js +2 -2
  161. package/dist/date-input/lib/types.d.ts.map +1 -1
  162. package/dist/date-input/stories/DateInput.stories.js +2 -2
  163. package/dist/date-input/ui/CalendarView.d.ts.map +1 -1
  164. package/dist/date-input/ui/DateInput.d.ts.map +1 -1
  165. package/dist/date-range-preset-select/index.js +1 -1
  166. package/dist/date-range-preset-select/stories/DateRangePresetSelect.stories.js +8 -8
  167. package/dist/date-time-input/index.js +1 -1
  168. package/dist/date-time-input/lib/dateTimeValue.d.ts.map +1 -1
  169. package/dist/date-time-input/stories/SingleDateTimeInput.stories.js +38 -38
  170. package/dist/date-time-input/stories/TimePanel.stories.js +9 -9
  171. package/dist/date-time-input/ui/SingleDateTimeInput.d.ts.map +1 -1
  172. package/dist/detail/index.js +1 -1
  173. package/dist/detail/stories/Detail.stories.js +1 -1
  174. package/dist/dialog/Dialog.d.ts.map +1 -1
  175. package/dist/dialog/index.js +1 -1
  176. package/dist/dialog/stories/Dialog.stories.js +16 -16
  177. package/dist/disclosure/Disclosure.d.ts.map +1 -1
  178. package/dist/disclosure/index.js +1 -1
  179. package/dist/disclosure/stories/Disclosure.stories.js +1 -1
  180. package/dist/drop-zone/DropZone.d.ts.map +1 -1
  181. package/dist/drop-zone/index.js +1 -1
  182. package/dist/drop-zone/stories/DropZone.stories.d.ts.map +1 -1
  183. package/dist/drop-zone/stories/DropZone.stories.js +14 -14
  184. package/dist/drop-zone/stories/DropZone.stories.js.map +1 -1
  185. package/dist/errors/ErrorDisplay.d.ts.map +1 -1
  186. package/dist/errors/index.js +47 -47
  187. package/dist/errors/index.js.map +1 -1
  188. package/dist/expandable-action-panel/ExpandableActionPanel.d.ts.map +1 -1
  189. package/dist/expandable-action-panel/index.js +1 -1
  190. package/dist/expandable-action-panel/stories/ExpandableActionPanel.stories.js +28 -28
  191. package/dist/flex/index.js +2 -2
  192. package/dist/flex/stories/Flex.stories.js +2 -2
  193. package/dist/floating-arrow/index.js +1 -1
  194. package/dist/fullscreen-portal/index.js +6 -6
  195. package/dist/grid/stories/Grid.stories.js +1 -1
  196. package/dist/image/index.js +123 -123
  197. package/dist/image/index.js.map +1 -1
  198. package/dist/image/ui/ImageSelection.d.ts.map +1 -1
  199. package/dist/input/Input.d.ts.map +1 -1
  200. package/dist/input/index.js +1 -1
  201. package/dist/input/stories/Input.stories.js +11 -11
  202. package/dist/input-date-time/index.js +1 -1
  203. package/dist/input-date-time/stories/InputDateTime.stories.js +11 -11
  204. package/dist/input-file/InputFile.d.ts.map +1 -1
  205. package/dist/input-file/index.js +1 -1
  206. package/dist/input-file/stories/InputFile.stories.d.ts.map +1 -1
  207. package/dist/input-file/stories/InputFile.stories.js +9 -9
  208. package/dist/input-file/stories/InputFile.stories.js.map +1 -1
  209. package/dist/input-files/InputFilesList.d.ts.map +1 -1
  210. package/dist/input-files/index.js +1 -1
  211. package/dist/input-files/stories/InputFiles.stories.d.ts +1 -1
  212. package/dist/input-files/stories/InputFiles.stories.d.ts.map +1 -1
  213. package/dist/input-files/stories/InputFiles.stories.js +9 -9
  214. package/dist/input-files/stories/InputFiles.stories.js.map +1 -1
  215. package/dist/input-image/index.js +1 -1
  216. package/dist/input-image/stories/InputImage.stories.d.ts.map +1 -1
  217. package/dist/input-image/stories/InputImage.stories.js +15 -15
  218. package/dist/input-image/stories/InputImage.stories.js.map +1 -1
  219. package/dist/input-search/index.js +2 -30
  220. package/dist/layout-picker/index.js +1 -1
  221. package/dist/layout-picker/stories/LayoutPicker.stories.js +52 -52
  222. package/dist/layout-picker/ui/LayoutPicker.d.ts.map +1 -1
  223. package/dist/list/List.d.ts.map +1 -1
  224. package/dist/list/index.js +30 -30
  225. package/dist/list/index.js.map +1 -1
  226. package/dist/listbox/Listbox.d.ts.map +1 -1
  227. package/dist/listbox/index.js +1 -1
  228. package/dist/listbox/stories/Listbox.stories.js +19 -19
  229. package/dist/misc/CopyTextWrapper.d.ts.map +1 -1
  230. package/dist/misc/OneStepScroller.d.ts.map +1 -1
  231. package/dist/misc/StateIcon.d.ts.map +1 -1
  232. package/dist/misc/index.js +1 -1
  233. package/dist/modal/Modal.d.ts +5 -1
  234. package/dist/modal/Modal.d.ts.map +1 -1
  235. package/dist/modal/index.js +1 -1
  236. package/dist/modal/stories/Modal.stories.js +55 -55
  237. package/dist/multi-select/index.js +3 -35
  238. package/dist/multi-select/model/useODataMultiSelect.d.ts +23 -0
  239. package/dist/multi-select/model/useODataMultiSelect.d.ts.map +1 -0
  240. package/dist/multi-select/ui/MultiSelect.d.ts +1 -1
  241. package/dist/multi-select/ui/MultiSelect.d.ts.map +1 -1
  242. package/dist/multi-select/ui/ODataDependentMultiSelect.d.ts +20 -0
  243. package/dist/multi-select/ui/ODataDependentMultiSelect.d.ts.map +1 -0
  244. package/dist/multi-select/ui/ODataDependentSegmentMultiSelect.d.ts +21 -0
  245. package/dist/multi-select/ui/ODataDependentSegmentMultiSelect.d.ts.map +1 -0
  246. package/dist/multi-select/ui/ODataMultiSelect.d.ts +7 -0
  247. package/dist/multi-select/ui/ODataMultiSelect.d.ts.map +1 -0
  248. package/dist/multi-select/ui/SerializableMultiSelect.d.ts.map +1 -1
  249. package/dist/multi-select/ui/index.d.ts +3 -0
  250. package/dist/multi-select/ui/index.d.ts.map +1 -1
  251. package/dist/multi-select/ui/stories/MultiSelect.stories.js +17 -17
  252. package/dist/multi-select/ui/stories/ODataMultiSelect.stories.d.ts +44 -0
  253. package/dist/multi-select/ui/stories/ODataMultiSelect.stories.d.ts.map +1 -0
  254. package/dist/notifications/index.js +1 -1
  255. package/dist/notifications/model/NotificationsProvider.d.ts.map +1 -1
  256. package/dist/notifications/ui/NotificationsHost.d.ts.map +1 -1
  257. package/dist/notifications/ui/stories/NotificationsHost.stories.js +59 -59
  258. package/dist/period-select/PeriodSelect.d.ts +1 -1
  259. package/dist/period-select/PeriodSelect.d.ts.map +1 -1
  260. package/dist/period-select/index.js +20 -20
  261. package/dist/period-select/index.js.map +1 -1
  262. package/dist/period-select/lib/periodSelect.d.ts.map +1 -1
  263. package/dist/period-select/stories/PeriodSelect.stories.d.ts.map +1 -1
  264. package/dist/period-select/stories/PeriodSelect.stories.js +17 -17
  265. package/dist/period-select/stories/PeriodSelect.stories.js.map +1 -1
  266. package/dist/picker/PickerPopup.d.ts.map +1 -1
  267. package/dist/picker/PickerTriggerActions.d.ts.map +1 -1
  268. package/dist/picker/index.js +1 -1
  269. package/dist/picker/model/usePickerFloatingListbox.d.ts.map +1 -1
  270. package/dist/popover/FloatingPopover.d.ts.map +1 -1
  271. package/dist/popover/components/PopoverContent.d.ts.map +1 -1
  272. package/dist/popover/components/PopoverContext.d.ts.map +1 -1
  273. package/dist/popover/index.js +1 -1
  274. package/dist/popover/stories/Popover.stories.js +16 -16
  275. package/dist/preset-range-date-input/index.js +1 -1
  276. package/dist/preset-range-date-input/ui/stories/PresetRangeDateInput.stories.js +9 -9
  277. package/dist/preset-select/index.js +1 -1
  278. package/dist/radio-button/RadioButton.d.ts.map +1 -1
  279. package/dist/radio-button/index.js +1 -1
  280. package/dist/radio-button/stories/RadioButton.stories.js +11 -11
  281. package/dist/radio-group/index.js +1 -1
  282. package/dist/radio-group/stories/RadioGroup.stories.js +21 -21
  283. package/dist/select/ODataSelect.d.ts +9 -0
  284. package/dist/select/ODataSelect.d.ts.map +1 -0
  285. package/dist/select/Select.d.ts.map +1 -1
  286. package/dist/select/index.js +2 -2
  287. package/dist/select/model/useODataSelect.d.ts +25 -0
  288. package/dist/select/model/useODataSelect.d.ts.map +1 -0
  289. package/dist/select/model/useODataSelectBase.d.ts +24 -0
  290. package/dist/select/model/useODataSelectBase.d.ts.map +1 -0
  291. package/dist/select/stories/ODataSelect.stories.d.ts +46 -0
  292. package/dist/select/stories/ODataSelect.stories.d.ts.map +1 -0
  293. package/dist/select/stories/Select.stories.js +23 -23
  294. package/dist/select/stories/SerializableSelect.stories.js +22 -22
  295. package/dist/select/stories/odataStoryFixtures.d.ts +35 -0
  296. package/dist/select/stories/odataStoryFixtures.d.ts.map +1 -0
  297. package/dist/separator/index.js +1 -1
  298. package/dist/simple-table/index.js +5 -5
  299. package/dist/simple-table/index.js.map +1 -1
  300. package/dist/slider/Slider.d.ts.map +1 -1
  301. package/dist/slider/index.js +1 -1
  302. package/dist/slider/stories/Slider.stories.js +32 -32
  303. package/dist/slider/stories/SliderInput.stories.js +39 -39
  304. package/dist/sortable/Sortable.d.ts.map +1 -1
  305. package/dist/sortable/SortableDragHandle.d.ts.map +1 -1
  306. package/dist/sortable/index.js +1 -1
  307. package/dist/sortable/stories/Sortable.stories.js +23 -23
  308. package/dist/splitter/index.js +1 -1
  309. package/dist/splitter/stories/Splitter.stories.js +1 -1
  310. package/dist/state-select/index.js +1 -1
  311. package/dist/state-select/stories/StateSelect.stories.d.ts.map +1 -1
  312. package/dist/state-select/stories/StateSelect.stories.js +23 -23
  313. package/dist/state-select/stories/StateSelect.stories.js.map +1 -1
  314. package/dist/styles.css +1 -1
  315. package/dist/switch/Switch.d.ts.map +1 -1
  316. package/dist/switch/index.js +1 -1
  317. package/dist/switch/stories/Switch.stories.js +11 -11
  318. package/dist/table/Table.d.ts +1 -1
  319. package/dist/table/Table.d.ts.map +1 -1
  320. package/dist/table/index.js +1 -1
  321. package/dist/table/stories/Table.stories.d.ts +155 -0
  322. package/dist/table/stories/Table.stories.d.ts.map +1 -0
  323. package/dist/table-column-interactions/TableHeaderInteractionCell.d.ts.map +1 -1
  324. package/dist/table-column-interactions/index.js +1 -1
  325. package/dist/table-sorting/index.js +1 -1
  326. package/dist/tabs/index.js +1 -1
  327. package/dist/tabs/stories/Tabs.stories.d.ts.map +1 -1
  328. package/dist/tabs/stories/Tabs.stories.js +39 -39
  329. package/dist/tabs/stories/Tabs.stories.js.map +1 -1
  330. package/dist/text/TextOverflow.d.ts.map +1 -1
  331. package/dist/text/index.js +20 -20
  332. package/dist/text/index.js.map +1 -1
  333. package/dist/text-editor/TextEditorLexicalClient.d.ts.map +1 -1
  334. package/dist/text-editor/index.js +3 -3
  335. package/dist/text-editor/toolbar/index.js +1 -1
  336. package/dist/textarea/index.js +1 -1
  337. package/dist/textarea/stories/Textarea.stories.js +8 -8
  338. package/dist/three-scene/index.js +7 -7
  339. package/dist/toggle/index.js +1 -1
  340. package/dist/toggle/stories/Toggle.stories.js +7 -7
  341. package/dist/toolbar/index.js +16 -16
  342. package/dist/tree/index.js +24 -24
  343. package/dist/tree-select/ODataTreeMultiSelect.d.ts +12 -0
  344. package/dist/tree-select/ODataTreeMultiSelect.d.ts.map +1 -0
  345. package/dist/tree-select/ODataTreeSelect.d.ts +13 -0
  346. package/dist/tree-select/ODataTreeSelect.d.ts.map +1 -0
  347. package/dist/tree-select/TreeNodeContent.d.ts.map +1 -1
  348. package/dist/tree-select/TreePickerBase.d.ts.map +1 -1
  349. package/dist/tree-select/index.js +2 -2
  350. package/dist/tree-select/model/buildODataTreeNodes.d.ts +12 -0
  351. package/dist/tree-select/model/buildODataTreeNodes.d.ts.map +1 -0
  352. package/dist/tree-select/model/resolveOrderedTreeSegmentItems.d.ts +4 -0
  353. package/dist/tree-select/model/resolveOrderedTreeSegmentItems.d.ts.map +1 -0
  354. package/dist/tree-select/model/useODataTreeData.d.ts +11 -0
  355. package/dist/tree-select/model/useODataTreeData.d.ts.map +1 -0
  356. package/dist/tree-select/stories/ODataTreeMultiSelect.stories.d.ts +55 -0
  357. package/dist/tree-select/stories/ODataTreeMultiSelect.stories.d.ts.map +1 -0
  358. package/dist/tree-select/stories/ODataTreeSelect.stories.d.ts +54 -0
  359. package/dist/tree-select/stories/ODataTreeSelect.stories.d.ts.map +1 -0
  360. package/dist/tree-select/stories/TreeMultiSelect.stories.js +9 -9
  361. package/dist/tree-select/stories/TreeSelect.stories.js +9 -9
  362. package/dist/tree-table/TreeTable.d.ts +1 -1
  363. package/dist/tree-table/TreeTable.d.ts.map +1 -1
  364. package/dist/tree-table/index.js +32 -32
  365. package/dist/tree-table/index.js.map +1 -1
  366. package/dist/tree-table/stories/TreeTable.stories.d.ts +158 -0
  367. package/dist/tree-table/stories/TreeTable.stories.d.ts.map +1 -0
  368. package/dist/wheel-picker/index.js +1 -1
  369. package/package.json +15 -4
  370. package/dist/chunks/BadgeList-DHW_Ktr3.js.map +0 -1
  371. package/dist/chunks/CheckBox-Cck5w1Ud.js.map +0 -1
  372. package/dist/chunks/DateInput-CINDYueM.js.map +0 -1
  373. package/dist/chunks/Detail-DKolHye4.js +0 -80
  374. package/dist/chunks/Dialog-BPS4BeWZ.js.map +0 -1
  375. package/dist/chunks/DisclosureGroup-0BtaXO54.js.map +0 -1
  376. package/dist/chunks/DropZone-hf7Em__0.js.map +0 -1
  377. package/dist/chunks/DropdownMenu-Ds-trH4M.js.map +0 -1
  378. package/dist/chunks/Input-Ce2HXBUc.js.map +0 -1
  379. package/dist/chunks/InputFile-ga5yJmdZ.js.map +0 -1
  380. package/dist/chunks/InputFiles-Or2Nvfgk.js.map +0 -1
  381. package/dist/chunks/LabeledExpandableActionPanel-Bx-DWmYz.js.map +0 -1
  382. package/dist/chunks/Listbox-CY1wQOCP.js +0 -81
  383. package/dist/chunks/Listbox-CY1wQOCP.js.map +0 -1
  384. package/dist/chunks/NotificationsHost-BQc-zOr2.js.map +0 -1
  385. package/dist/chunks/RadioButton-DJp31HFR.js.map +0 -1
  386. package/dist/chunks/RadioGroup-BAhN1d1X.js +0 -121
  387. package/dist/chunks/Select-B7k_8_Lf.js.map +0 -1
  388. package/dist/chunks/SingleDateTimeInput-CwvIbwje.js.map +0 -1
  389. package/dist/chunks/StateSelect-D0wuUdT9.js +0 -78
  390. package/dist/chunks/Switch-B476FBUD.js.map +0 -1
  391. package/dist/chunks/TimePanel-_kF2RtHk.js.map +0 -1
  392. package/dist/chunks/TreePickerBase-DYzTsSBQ.js.map +0 -1
  393. package/dist/chunks/base-table-DVje02Zi.js +0 -514
  394. package/dist/chunks/base-table-DVje02Zi.js.map +0 -1
  395. package/dist/chunks/layout-picker-BA9vA8JI.js.map +0 -1
  396. package/dist/chunks/misc-DrmMj8GO.js.map +0 -1
  397. package/dist/chunks/modal-DqVcZws_.js.map +0 -1
  398. package/dist/chunks/picker-Cj4RnJh6.js.map +0 -1
  399. package/dist/chunks/popover-C79P5bm2.js.map +0 -1
  400. package/dist/chunks/slider-34wxzKkG.js.map +0 -1
  401. package/dist/chunks/sortable-CwDHC3CA.js +0 -185
  402. package/dist/chunks/sortable-CwDHC3CA.js.map +0 -1
  403. package/dist/chunks/table-BYA0hCj7.js.map +0 -1
  404. package/dist/input-search/index.js.map +0 -1
  405. package/dist/multi-select/index.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/image/ui/ImageCropper.tsx","../../src/image/ui/ImagePlaceholder.tsx","../../src/image/ui/ImageRenderer.tsx","../../src/image/ui/ImageSelection.tsx","../../src/image/ui/ImageView.tsx"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\nimport Cropper from \"react-easy-crop\";\n\nexport type CroppedAreaPixels = {\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n};\n\nexport function ImageCropper({\n\timage,\n\taspect = 1200 / 630,\n\twidth,\n\tonCropComplete\n}: {\n\timage: string;\n\taspect?: number;\n\twidth?: number;\n\tonCropComplete?: (croppedAreaPixels: CroppedAreaPixels) => void;\n}) {\n\tconst [crop, setCrop] = useState({ x: 0, y: 0 });\n\tconst [zoom, setZoom] = useState(1);\n\n\tconst handleCropComplete = useCallback(\n\t\t(_croppedArea: unknown, croppedAreaPixels: CroppedAreaPixels) => {\n\t\t\tonCropComplete?.(croppedAreaPixels);\n\t\t},\n\t\t[onCropComplete]\n\t);\n\n\treturn (\n\t\t<div style={{ position: \"relative\", width: width ?? \"100%\", aspectRatio: aspect }}>\n\t\t\t<Cropper\n\t\t\t\timage={image}\n\t\t\t\tcrop={crop}\n\t\t\t\tzoom={zoom}\n\t\t\t\taspect={aspect}\n\t\t\t\tonCropChange={setCrop}\n\t\t\t\tonZoomChange={setZoom}\n\t\t\t\tonCropComplete={handleCropComplete}\n\t\t\t\tzoomSpeed={0.1}\n\t\t\t\tobjectFit=\"contain\"\n\t\t\t/>\n\t\t</div>\n\t);\n}\n","interface ImagePlaceholderProps {\n\twidth?: number | string;\n\theight?: number | string;\n\taspectRatio?: string | \"unset\";\n\tclassName?: string;\n}\n\nexport function ImagePlaceholder({ width = \"100%\", height = \"100%\", aspectRatio = \"16 / 9\", className }: ImagePlaceholderProps) {\n\treturn (\n\t\t<div style={{ width, height, aspectRatio }} className={className}>\n\t\t\t<svg\n\t\t\t\twidth={width}\n\t\t\t\theight={height}\n\t\t\t\tviewBox=\"0 0 200 200\"\n\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\trole=\"img\"\n\t\t\t\tfill=\"none\"\n\t\t\t\trx=\"10\"\n\t\t\t\try=\"10\"\n\t\t\t\tstyle={{ display: \"block\" }}\n\t\t\t\taria-label=\"Изображение недоступно\">\n\t\t\t\t{/* <rect width=\"200\" height=\"200\" fill=\"var(--surface-2)\" rx=\"10\" ry=\"10\" /> */}\n\t\t\t\t<g fill=\"var(--surface-0)\">\n\t\t\t\t\t<rect x=\"40\" y=\"50\" width=\"120\" height=\"100\" rx=\"10\" />\n\n\t\t\t\t\t<circle cx=\"60\" cy=\"70\" r=\"8\" fill=\"var(--surface-2)\" />\n\n\t\t\t\t\t<path d=\"M50 130 L75 100 L100 130 Z\" fill=\"var(--surface-2)\" />\n\t\t\t\t\t<path d=\"M90 130 L120 90 L150 130 Z\" fill=\"var(--surface-2)\" />\n\n\t\t\t\t\t<line x1=\"160\" y1=\"40\" x2=\"40\" y2=\"160\" stroke=\"var(--surface-0)\" strokeWidth=\"15\" strokeLinecap=\"round\" />\n\t\t\t\t\t<line x1=\"160\" y1=\"40\" x2=\"40\" y2=\"160\" stroke=\"var(--surface-2)\" strokeWidth=\"5\" strokeLinecap=\"round\" />\n\t\t\t\t</g>\n\t\t\t</svg>\n\t\t</div>\n\t);\n}\n","import { type CSSProperties, type ImgHTMLAttributes, type ReactNode, useEffect, useRef, useState } from \"react\";\n\nimport { ImagePlaceholder } from \"./ImagePlaceholder\";\n\nexport type ImageSource = {\n\tsrcSet: string;\n\ttype?: string;\n\tsizes?: string;\n};\n\nexport interface ImageRendererProps extends Omit<ImgHTMLAttributes<HTMLImageElement>, \"src\"> {\n\tsrc: string;\n\tsources?: readonly ImageSource[];\n\talt?: string;\n\trole?: string;\n\tariaLabel?: string;\n\tcaption?: string;\n\tfallback?: ReactNode;\n\tuseFigure?: boolean;\n\taspectRatio?: string | \"unset\";\n\twrapperStyle?: CSSProperties;\n}\n\n/**\n * Базовый рендер изображения: lazy-появление, placeholder, обработка ошибки и figure/caption.\n * Компонент не знает, как устроено хранилище и какие форматы/размеры доступны.\n */\nexport function ImageRenderer({\n\tsrc,\n\tsources,\n\talt,\n\trole,\n\tariaLabel,\n\tcaption,\n\tfallback,\n\tuseFigure = false,\n\twidth = \"100%\",\n\theight = \"100%\",\n\taspectRatio = \"16 / 9\",\n\tstyle,\n\twrapperStyle,\n\t...imgProps\n}: ImageRendererProps) {\n\tconst wrapperRef = useRef<HTMLDivElement | null>(null);\n\tconst [containerWidth, setContainerWidth] = useState(0);\n\tconst [isVisible, setIsVisible] = useState(false);\n\tconst [hasLoaded, setHasLoaded] = useState(false);\n\tconst [hasError, setHasError] = useState(false);\n\n\tuseEffect(() => {\n\t\tconst observer = new IntersectionObserver(\n\t\t\t([entry]) => {\n\t\t\t\tif (entry.isIntersecting) {\n\t\t\t\t\tconst parentWidth = Math.round(entry.boundingClientRect.width);\n\n\t\t\t\t\tsetContainerWidth(parentWidth);\n\t\t\t\t\tsetIsVisible(true);\n\t\t\t\t\tobserver.disconnect();\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ rootMargin: \"100px\", threshold: 0.01 }\n\t\t);\n\n\t\tif (wrapperRef.current) {\n\t\t\tobserver.observe(wrapperRef.current);\n\t\t}\n\n\t\treturn () => observer.disconnect();\n\t}, []);\n\n\tconst sizesAttr = containerWidth ? `${containerWidth}px` : \"100vw\";\n\tconst defaultFallback = <ImagePlaceholder width={width} height={height} aspectRatio={aspectRatio} />;\n\n\tconst content = (\n\t\t<>\n\t\t\t{!hasLoaded && !hasError && (fallback || defaultFallback)}\n\t\t\t{isVisible && !hasError && (\n\t\t\t\t<picture>\n\t\t\t\t\t{sources?.map((source) => (\n\t\t\t\t\t\t<source\n\t\t\t\t\t\t\tkey={`${source.type ?? \"source\"}-${source.srcSet}`}\n\t\t\t\t\t\t\tsrcSet={source.srcSet}\n\t\t\t\t\t\t\ttype={source.type}\n\t\t\t\t\t\t\tsizes={source.sizes ?? sizesAttr}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={src}\n\t\t\t\t\t\talt={alt}\n\t\t\t\t\t\trole={role}\n\t\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\t\tonLoad={() => setHasLoaded(true)}\n\t\t\t\t\t\tonError={() => setHasError(true)}\n\t\t\t\t\t\tstyle={!hasLoaded ? { display: \"none\" } : { width: \"100%\", height: \"100%\", objectFit: \"cover\", ...style }}\n\t\t\t\t\t\taria-busy={!hasLoaded}\n\t\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\t\theight=\"100%\"\n\t\t\t\t\t\t{...imgProps}\n\t\t\t\t\t/>\n\t\t\t\t</picture>\n\t\t\t)}\n\t\t\t{hasError && defaultFallback}\n\t\t</>\n\t);\n\n\tconst wrapped = (\n\t\t<div ref={wrapperRef} style={{ width, height, aspectRatio, ...wrapperStyle }}>\n\t\t\t{content}\n\t\t</div>\n\t);\n\n\treturn useFigure ? (\n\t\t<figure className=\"relative\">\n\t\t\t{wrapped}\n\t\t\t{caption && (\n\t\t\t\t<figcaption\n\t\t\t\t\tstyle={{ bottom: 2, right: 2, maxWidth: \"calc(100% - 4px)\" }}\n\t\t\t\t\tclassName=\"absolute paddingInlineMd textRight radiusSm fontSizeSm\">\n\t\t\t\t\t{caption}\n\t\t\t\t</figcaption>\n\t\t\t)}\n\t\t</figure>\n\t) : (\n\t\twrapped\n\t);\n}\n","import { CSSProperties, ReactNode, useCallback, useMemo, useState } from \"react\";\n\nimport Cropper from \"react-easy-crop\";\n\nimport { ReadFileResult } from \"@ryuzaki13/react-foundation-lib/file\";\n\nimport { Button } from \"../../button\";\nimport { GridContainer } from \"../../grid\";\nimport { InputText } from \"../../input\";\nimport { InputFiles } from \"../../input-files\";\nimport { Modal, ModalContent, ModalFooter } from \"../../modal\";\n\nimport { CroppedAreaPixels } from \"./ImageCropper\";\n\ntype SelectedImageFile = Extract<ReadFileResult, { mode: \"data-url\" }>;\n\n/**\n * Данные одного выбранного изображения, которые нужны вызывающему коду:\n * исходный файл, пользовательское описание и выбранная область обрезки.\n */\nexport type SelectedImageData = {\n\tfile: SelectedImageFile;\n\talt: string;\n\tcrop?: CroppedAreaPixels;\n};\n\ninterface ImageSelectionPanelProps {\n\taspect?: number;\n\tdisabled?: boolean;\n\tvalue?: SelectedImageData[];\n\tdefaultValue?: SelectedImageData[];\n\tonChange?: (data: SelectedImageData[]) => void;\n\tonApply?: (data: SelectedImageData[]) => void;\n\trenderActions?: (data: ImageSelectionActionsData) => ReactNode;\n}\n\ninterface ImageSelectionModalProps extends ImageSelectionPanelProps {\n\tisOpen?: boolean;\n\tonClose?: () => void;\n\ttitle?: string;\n}\n\ninterface ImageSelectionActionsData {\n\tvalue: SelectedImageData[];\n\tactiveIndex: number;\n\thasSelected: boolean;\n\tcanApply: boolean;\n\tapply: () => void;\n}\n\ninterface ImageSelectionState extends ImageSelectionActionsData {\n\tfiles: SelectedImageFile[];\n\tactiveImage?: SelectedImageData;\n\tactiveCropperState: ImageCropperState;\n\tsetFiles: (files: SelectedImageFile[]) => void;\n\tsetActiveIndex: (index: number) => void;\n\tsetActiveAlt: (alt: string) => void;\n\tsetActiveCrop: (crop: CroppedAreaPixels) => void;\n\tsetActiveCropperCrop: (crop: CropperPoint) => void;\n\tsetActiveCropperZoom: (zoom: number) => void;\n}\n\ntype ImageSize = {\n\twidth: number;\n\theight: number;\n};\n\ntype CropperPoint = {\n\tx: number;\n\ty: number;\n};\n\ntype ImageCropperState = {\n\tcrop: CropperPoint;\n\tzoom: number;\n};\n\nfunction getImageKey(image: SelectedImageData, index: number) {\n\treturn `${image.file.meta.name}-${image.file.meta.size}-${image.file.meta.lastModified}-${index}`;\n}\n\n/**\n * Хранит черновик выбора изображений локально даже в controlled-режиме.\n * Это позволяет не дергать внешний onChange на каждый onCropComplete,\n * а отправлять готовый массив только при явном применении.\n */\nfunction useImageSelectionState({\n\tvalue,\n\tdefaultValue,\n\tdisabled,\n\tonChange,\n\tonApply\n}: Pick<ImageSelectionPanelProps, \"value\" | \"defaultValue\" | \"disabled\" | \"onChange\" | \"onApply\">): ImageSelectionState {\n\tconst isControlled = value !== undefined;\n\tconst [draftValue, setDraftValue] = useState<SelectedImageData[]>(value ?? defaultValue ?? []);\n\tconst [controlledValueSnapshot, setControlledValueSnapshot] = useState(value);\n\tconst [requestedActiveIndex, setActiveIndex] = useState(0);\n\tconst [cropperStateByImage, setCropperStateByImage] = useState<Record<string, ImageCropperState>>({});\n\n\tif (isControlled && value !== controlledValueSnapshot) {\n\t\tsetControlledValueSnapshot(value);\n\t\tsetDraftValue(value ?? []);\n\t}\n\n\tconst updateDraftValue = useCallback((updater: (currentValue: SelectedImageData[]) => SelectedImageData[]) => {\n\t\tsetDraftValue((currentValue) => updater(currentValue));\n\t}, []);\n\n\tconst files = useMemo(() => draftValue.map((image) => image.file), [draftValue]);\n\tconst activeIndex = draftValue.length === 0 ? 0 : Math.min(requestedActiveIndex, draftValue.length - 1);\n\tconst activeImage = draftValue[activeIndex];\n\tconst activeImageKey = activeImage ? getImageKey(activeImage, activeIndex) : undefined;\n\tconst activeCropperState = activeImageKey\n\t\t? (cropperStateByImage[activeImageKey] ?? { crop: { x: 0, y: 0 }, zoom: 1 })\n\t\t: { crop: { x: 0, y: 0 }, zoom: 1 };\n\tconst hasSelected = draftValue.length > 0;\n\tconst canApply = !disabled && hasSelected && draftValue.every((image) => image.alt.trim() && image.crop);\n\n\tconst setFiles = useCallback(\n\t\t(nextFiles: SelectedImageFile[]) => {\n\t\t\tupdateDraftValue((currentValue) =>\n\t\t\t\tnextFiles.map((file) => {\n\t\t\t\t\t// Сохраняем alt и crop при переключении, удалении и добавлении файлов.\n\t\t\t\t\tconst existingImage = currentValue.find((image) => image.file.file === file.file);\n\n\t\t\t\t\tif (existingImage) {\n\t\t\t\t\t\treturn { ...existingImage, file };\n\t\t\t\t\t}\n\n\t\t\t\t\treturn { file, alt: \"\" };\n\t\t\t\t})\n\t\t\t);\n\t\t},\n\t\t[updateDraftValue]\n\t);\n\n\tconst setActiveAlt = useCallback(\n\t\t(alt: string) => {\n\t\t\tupdateDraftValue((currentValue) => currentValue.map((image, index) => (index === activeIndex ? { ...image, alt } : image)));\n\t\t},\n\t\t[activeIndex, updateDraftValue]\n\t);\n\n\tconst setActiveCrop = useCallback(\n\t\t(crop: CroppedAreaPixels) => {\n\t\t\tupdateDraftValue((currentValue) => currentValue.map((image, index) => (index === activeIndex ? { ...image, crop } : image)));\n\t\t},\n\t\t[activeIndex, updateDraftValue]\n\t);\n\n\tconst setActiveCropperCrop = useCallback(\n\t\t(crop: CropperPoint) => {\n\t\t\tif (!activeImageKey) return;\n\n\t\t\tsetCropperStateByImage((currentState) => ({\n\t\t\t\t...currentState,\n\t\t\t\t[activeImageKey]: {\n\t\t\t\t\tcrop,\n\t\t\t\t\tzoom: currentState[activeImageKey]?.zoom ?? 1\n\t\t\t\t}\n\t\t\t}));\n\t\t},\n\t\t[activeImageKey]\n\t);\n\n\tconst setActiveCropperZoom = useCallback(\n\t\t(zoom: number) => {\n\t\t\tif (!activeImageKey) return;\n\n\t\t\tsetCropperStateByImage((currentState) => ({\n\t\t\t\t...currentState,\n\t\t\t\t[activeImageKey]: {\n\t\t\t\t\tcrop: currentState[activeImageKey]?.crop ?? { x: 0, y: 0 },\n\t\t\t\t\tzoom\n\t\t\t\t}\n\t\t\t}));\n\t\t},\n\t\t[activeImageKey]\n\t);\n\n\tconst apply = useCallback(() => {\n\t\tonChange?.(draftValue);\n\t\tonApply?.(draftValue);\n\t}, [draftValue, onApply, onChange]);\n\n\treturn {\n\t\tvalue: draftValue,\n\t\tfiles,\n\t\tactiveIndex,\n\t\tactiveImage,\n\t\tactiveCropperState,\n\t\thasSelected,\n\t\tcanApply,\n\t\tapply,\n\t\tsetFiles,\n\t\tsetActiveIndex,\n\t\tsetActiveAlt,\n\t\tsetActiveCrop,\n\t\tsetActiveCropperCrop,\n\t\tsetActiveCropperZoom\n\t};\n}\n\nfunction resolveImageUploadMaxBytes(): number | undefined {\n\tif (typeof __IMAGE_UPLOAD_MAX_BYTES__ !== \"number\") return undefined;\n\treturn __IMAGE_UPLOAD_MAX_BYTES__;\n}\n\nfunction getPreviewImageStyle(image: SelectedImageData, size: ImageSize | undefined, aspect: number): CSSProperties {\n\tif (!image.crop || !size) {\n\t\treturn {\n\t\t\twidth: \"100%\",\n\t\t\taspectRatio: aspect,\n\t\t\tobjectFit: \"cover\",\n\t\t\tdisplay: \"block\"\n\t\t};\n\t}\n\n\tconst crop = image.crop;\n\n\t// Миниатюра масштабирует исходник так, чтобы видимой оставалась только выбранная область crop.\n\treturn {\n\t\tposition: \"absolute\",\n\t\tleft: `${-(crop.x / crop.width) * 100}%`,\n\t\ttop: `${-(crop.y / crop.height) * 100}%`,\n\t\twidth: `${(size.width / crop.width) * 100}%`,\n\t\theight: `${(size.height / crop.height) * 100}%`,\n\t\tmaxWidth: \"none\"\n\t};\n}\n\nfunction ImageSelectionFields({ aspect = 16 / 9, disabled, state }: { aspect?: number; disabled?: boolean; state: ImageSelectionState }) {\n\tconst area = state.activeImage?.crop;\n\tconst [imageSizes, setImageSizes] = useState<Record<string, ImageSize>>({});\n\n\treturn (\n\t\t<GridContainer gap=\"md\">\n\t\t\t<InputFiles\n\t\t\t\tlabel=\"Файл изображения\"\n\t\t\t\tallowedMime={[\"image/jpeg\", \"image/png\", \"image/webp\", \"image/avif\"]}\n\t\t\t\tvalue={state.files}\n\t\t\t\tonChange={state.setFiles}\n\t\t\t\tmaxBytes={resolveImageUploadMaxBytes()}\n\t\t\t\tonReadError={(e) => console.log(\"e\", e)}\n\t\t\t/>\n\n\t\t\t{state.hasSelected && state.activeImage && (\n\t\t\t\t<div>\n\t\t\t\t\t<GridContainer templateColumns=\"repeat(auto-fill, minmax(10em, 1fr))\" gap=\"xs\">\n\t\t\t\t\t\t{state.value.map((image, index) => {\n\t\t\t\t\t\t\tconst imageKey = getImageKey(image, index);\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tkey={imageKey}\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\tonClick={() => state.setActiveIndex(index)}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\t\t\t\tborder: index === state.activeIndex ? \"2px solid var(--border-accent)\" : \"2px solid transparent\",\n\t\t\t\t\t\t\t\t\t\tbackground: \"transparent\",\n\t\t\t\t\t\t\t\t\t\tcursor: disabled ? \"default\" : \"pointer\"\n\t\t\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tposition: \"relative\",\n\t\t\t\t\t\t\t\t\t\t\tdisplay: \"block\",\n\t\t\t\t\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\t\t\t\t\taspectRatio: aspect,\n\t\t\t\t\t\t\t\t\t\t\toverflow: \"hidden\"\n\t\t\t\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\t\tsrc={image.file.dataUrl}\n\t\t\t\t\t\t\t\t\t\t\tstyle={getPreviewImageStyle(image, imageSizes[imageKey], aspect)}\n\t\t\t\t\t\t\t\t\t\t\tonLoad={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\tconst target = event.currentTarget;\n\n\t\t\t\t\t\t\t\t\t\t\t\tsetImageSizes((currentSizes) => ({\n\t\t\t\t\t\t\t\t\t\t\t\t\t...currentSizes,\n\t\t\t\t\t\t\t\t\t\t\t\t\t[imageKey]: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: target.naturalWidth,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: target.naturalHeight\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</GridContainer>\n\t\t\t\t\t<div>\n\t\t\t\t\t\tВыберите область изображения{\" \"}\n\t\t\t\t\t\t{area &&\n\t\t\t\t\t\t\t(area.width < 1200 ? (\n\t\t\t\t\t\t\t\t<code className=\"statusError\">\n\t\t\t\t\t\t\t\t\t{area.width}x{area.height} - низкое качество изображения!\n\t\t\t\t\t\t\t\t</code>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<code className=\"statusSuccess\">\n\t\t\t\t\t\t\t\t\t{area.width}x{area.height}\n\t\t\t\t\t\t\t\t</code>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div style={{ position: \"relative\", width: \"100%\", aspectRatio: aspect }}>\n\t\t\t\t\t\t<Cropper\n\t\t\t\t\t\t\tkey={getImageKey(state.activeImage, state.activeIndex)}\n\t\t\t\t\t\t\timage={state.activeImage.file.dataUrl}\n\t\t\t\t\t\t\tcrop={state.activeCropperState.crop}\n\t\t\t\t\t\t\tzoom={state.activeCropperState.zoom}\n\t\t\t\t\t\t\taspect={aspect}\n\t\t\t\t\t\t\tonCropChange={state.setActiveCropperCrop}\n\t\t\t\t\t\t\tonZoomChange={state.setActiveCropperZoom}\n\t\t\t\t\t\t\tonCropComplete={(_croppedArea, croppedAreaPixels) => state.setActiveCrop(croppedAreaPixels)}\n\t\t\t\t\t\t\tzoomSpeed={0.1}\n\t\t\t\t\t\t\tobjectFit=\"contain\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t<InputText\n\t\t\t\trequired\n\t\t\t\tdisabled={!state.hasSelected || disabled}\n\t\t\t\tlabel=\"Краткое описание изображения\"\n\t\t\t\tplaceholder=\"\"\n\t\t\t\tvalue={state.activeImage?.alt ?? \"\"}\n\t\t\t\tonChange={state.setActiveAlt}\n\t\t\t/>\n\t\t</GridContainer>\n\t);\n}\n\nexport function ImageSelectionPanel({ aspect = 16 / 9, disabled, renderActions, ...props }: ImageSelectionPanelProps) {\n\tconst state = useImageSelectionState({ ...props, disabled });\n\tconst actionsData = {\n\t\tvalue: state.value,\n\t\tactiveIndex: state.activeIndex,\n\t\thasSelected: state.hasSelected,\n\t\tcanApply: state.canApply,\n\t\tapply: state.apply\n\t};\n\tconst hasApplyHandler = props.onChange !== undefined || props.onApply !== undefined;\n\n\treturn (\n\t\t<>\n\t\t\t<ImageSelectionFields aspect={aspect} disabled={disabled} state={state} />\n\t\t\t{renderActions\n\t\t\t\t? renderActions(actionsData)\n\t\t\t\t: hasApplyHandler && (\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<Button disabled={!state.canApply} tone=\"success\" onClick={state.apply}>\n\t\t\t\t\t\t\t\tПрименить\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t</>\n\t);\n}\n\nexport function ImageSelectionModal({\n\taspect = 16 / 9,\n\tdisabled,\n\tisOpen = true,\n\tonClose = () => {},\n\ttitle = \"Загрузка нового изображения\",\n\t...props\n}: ImageSelectionModalProps) {\n\tconst state = useImageSelectionState({ ...props, disabled });\n\tconst hasApplyHandler = props.onChange !== undefined || props.onApply !== undefined;\n\n\tif (!hasApplyHandler) {\n\t\treturn (\n\t\t\t<Modal isOpen={isOpen} onClose={onClose} title={title} size=\"xl\">\n\t\t\t\t<ModalContent scrollable>\n\t\t\t\t\t<ImageSelectionFields aspect={aspect} disabled={disabled} state={state} />\n\t\t\t\t</ModalContent>\n\t\t\t</Modal>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Modal isOpen={isOpen} onClose={onClose} title={title} size=\"xl\">\n\t\t\t<ModalContent scrollable>\n\t\t\t\t<ImageSelectionFields aspect={aspect} disabled={disabled} state={state} />\n\t\t\t</ModalContent>\n\t\t\t<ModalFooter>\n\t\t\t\t<Button disabled={!state.canApply} tone=\"success\" onClick={state.apply}>\n\t\t\t\t\tПрименить\n\t\t\t\t</Button>\n\t\t\t</ModalFooter>\n\t\t</Modal>\n\t);\n}\n","import { type ImgHTMLAttributes, type ReactNode } from \"react\";\n\nimport { ImageRenderer, type ImageSource } from \"./ImageRenderer\";\n\nexport type ImageFormat = \"avif\" | \"webp\" | \"jpeg\" | \"jpg\" | \"png\";\n\nconst DEFAULT_SET_WIDTHS = [2880, 1920, 1280, 640, 320] as const;\nconst DEFAULT_SET_FORMATS = [\"avif\", \"webp\"] as const satisfies readonly ImageFormat[];\n\nexport type StoredImageData = {\n\tfilename: string;\n\tpath: string;\n\twidth?: number;\n\theight?: number;\n\talt?: string;\n\thasSet?: boolean;\n};\n\ninterface ImageViewProps extends Omit<ImgHTMLAttributes<HTMLImageElement>, \"src\" | \"alt\"> {\n\t/** Запись из таблицы Image. Предпочтительный способ передать изображение из БД. */\n\timage?: StoredImageData;\n\t/** Базовое имя файла из БД. Для новых изображений это md5 без расширения. */\n\tsrc?: string;\n\t/** Путь из БД относительно публичного корня, например `images/articles`. */\n\tpath?: string;\n\talt?: string;\n\trole?: string;\n\tariaLabel?: string;\n\tcaption?: string;\n\tfallback?: ReactNode;\n\tuseFigure?: boolean;\n\taspectRatio?: string | \"unset\";\n\t/** Форматы, которые реально лежат в хранилище для текущего изображения. */\n\tformats?: readonly ImageFormat[];\n\t/** Формат для img.src. Должен существовать в хранилище. */\n\tfallbackFormat?: ImageFormat;\n\t/** Набор размеров для файлов вида base@width.format. */\n\tvariantWidths?: readonly number[];\n\t/** Признак наличия responsive-набора. Если false, @size srcSet не строится. */\n\thasSet?: boolean;\n}\n\nfunction getImageMime(format: ImageFormat): string {\n\tif (format === \"jpg\" || format === \"jpeg\") {\n\t\treturn \"image/jpeg\";\n\t}\n\n\treturn `image/${format}`;\n}\n\nfunction normalizeImagePath(path?: string): string {\n\tif (!path) return \"\";\n\n\treturn path.replace(/^\\/+|\\/+$/g, \"\");\n}\n\nfunction buildImageBasePath(path: string | undefined, filename: string): string {\n\tconst normalizedPath = normalizeImagePath(path);\n\n\treturn normalizedPath ? `/${normalizedPath}/${filename}` : `/${filename}`;\n}\n\nfunction buildImageSources({\n\tbasePath,\n\tformats,\n\tvariantWidths,\n\thasSet\n}: {\n\tbasePath: string;\n\tformats: readonly ImageFormat[];\n\tvariantWidths: readonly number[];\n\thasSet: boolean;\n}): ImageSource[] {\n\tif (!hasSet) {\n\t\treturn formats.map((format) => ({\n\t\t\tsrcSet: `${basePath}.${format}`,\n\t\t\ttype: getImageMime(format)\n\t\t}));\n\t}\n\n\treturn formats.map((format) => ({\n\t\tsrcSet: variantWidths.map((width) => `${basePath}@${width}.${format} ${width}w`).join(\", \"),\n\t\ttype: getImageMime(format)\n\t}));\n}\n\n/**\n * Адаптер для изображений из таблицы Image.\n * Компонент строит пути только из данных БД: path + filename + формат/размер.\n */\nexport function ImageView({\n\timage,\n\tsrc,\n\tpath,\n\talt,\n\tformats = DEFAULT_SET_FORMATS,\n\tfallbackFormat,\n\tvariantWidths = DEFAULT_SET_WIDTHS,\n\thasSet,\n\taspectRatio,\n\t...props\n}: ImageViewProps) {\n\tconst filename = image?.filename ?? src;\n\n\tif (!filename) {\n\t\treturn <ImageRenderer src=\"\" alt={alt ?? image?.alt} {...props} />;\n\t}\n\n\tconst resolvedPath = image?.path ?? path;\n\tconst resolvedHasSet = hasSet ?? image?.hasSet ?? true;\n\tconst resolvedFormats = formats.length > 0 ? formats : DEFAULT_SET_FORMATS;\n\tconst resolvedFallbackFormat = fallbackFormat ?? resolvedFormats[resolvedFormats.length - 1] ?? \"webp\";\n\tconst basePath = buildImageBasePath(resolvedPath, filename);\n\tconst resolvedAspectRatio = aspectRatio ?? (image?.width && image.height ? `${image.width} / ${image.height}` : undefined);\n\tconst sources = buildImageSources({\n\t\tbasePath,\n\t\tformats: resolvedFormats,\n\t\tvariantWidths,\n\t\thasSet: resolvedHasSet\n\t});\n\n\treturn (\n\t\t<ImageRenderer\n\t\t\tsrc={`${basePath}.${resolvedFallbackFormat}`}\n\t\t\tsources={sources}\n\t\t\talt={alt ?? image?.alt}\n\t\t\taspectRatio={resolvedAspectRatio}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/image/ui/ImageCropper.tsx","../../src/image/ui/ImagePlaceholder.tsx","../../src/image/ui/ImageRenderer.tsx","../../src/image/ui/ImageSelection.tsx","../../src/image/ui/ImageView.tsx"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\nimport Cropper from \"react-easy-crop\";\n\nexport type CroppedAreaPixels = {\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n};\n\nexport function ImageCropper({\n\timage,\n\taspect = 1200 / 630,\n\twidth,\n\tonCropComplete\n}: {\n\timage: string;\n\taspect?: number;\n\twidth?: number;\n\tonCropComplete?: (croppedAreaPixels: CroppedAreaPixels) => void;\n}) {\n\tconst [crop, setCrop] = useState({ x: 0, y: 0 });\n\tconst [zoom, setZoom] = useState(1);\n\n\tconst handleCropComplete = useCallback(\n\t\t(_croppedArea: unknown, croppedAreaPixels: CroppedAreaPixels) => {\n\t\t\tonCropComplete?.(croppedAreaPixels);\n\t\t},\n\t\t[onCropComplete]\n\t);\n\n\treturn (\n\t\t<div style={{ position: \"relative\", width: width ?? \"100%\", aspectRatio: aspect }}>\n\t\t\t<Cropper\n\t\t\t\timage={image}\n\t\t\t\tcrop={crop}\n\t\t\t\tzoom={zoom}\n\t\t\t\taspect={aspect}\n\t\t\t\tonCropChange={setCrop}\n\t\t\t\tonZoomChange={setZoom}\n\t\t\t\tonCropComplete={handleCropComplete}\n\t\t\t\tzoomSpeed={0.1}\n\t\t\t\tobjectFit=\"contain\"\n\t\t\t/>\n\t\t</div>\n\t);\n}\n","interface ImagePlaceholderProps {\n\twidth?: number | string;\n\theight?: number | string;\n\taspectRatio?: string | \"unset\";\n\tclassName?: string;\n}\n\nexport function ImagePlaceholder({ width = \"100%\", height = \"100%\", aspectRatio = \"16 / 9\", className }: ImagePlaceholderProps) {\n\treturn (\n\t\t<div style={{ width, height, aspectRatio }} className={className}>\n\t\t\t<svg\n\t\t\t\twidth={width}\n\t\t\t\theight={height}\n\t\t\t\tviewBox=\"0 0 200 200\"\n\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\trole=\"img\"\n\t\t\t\tfill=\"none\"\n\t\t\t\trx=\"10\"\n\t\t\t\try=\"10\"\n\t\t\t\tstyle={{ display: \"block\" }}\n\t\t\t\taria-label=\"Изображение недоступно\">\n\t\t\t\t{/* <rect width=\"200\" height=\"200\" fill=\"var(--surface-2)\" rx=\"10\" ry=\"10\" /> */}\n\t\t\t\t<g fill=\"var(--surface-0)\">\n\t\t\t\t\t<rect x=\"40\" y=\"50\" width=\"120\" height=\"100\" rx=\"10\" />\n\n\t\t\t\t\t<circle cx=\"60\" cy=\"70\" r=\"8\" fill=\"var(--surface-2)\" />\n\n\t\t\t\t\t<path d=\"M50 130 L75 100 L100 130 Z\" fill=\"var(--surface-2)\" />\n\t\t\t\t\t<path d=\"M90 130 L120 90 L150 130 Z\" fill=\"var(--surface-2)\" />\n\n\t\t\t\t\t<line x1=\"160\" y1=\"40\" x2=\"40\" y2=\"160\" stroke=\"var(--surface-0)\" strokeWidth=\"15\" strokeLinecap=\"round\" />\n\t\t\t\t\t<line x1=\"160\" y1=\"40\" x2=\"40\" y2=\"160\" stroke=\"var(--surface-2)\" strokeWidth=\"5\" strokeLinecap=\"round\" />\n\t\t\t\t</g>\n\t\t\t</svg>\n\t\t</div>\n\t);\n}\n","import { type CSSProperties, type ImgHTMLAttributes, type ReactNode, useEffect, useRef, useState } from \"react\";\n\nimport { ImagePlaceholder } from \"./ImagePlaceholder\";\n\nexport type ImageSource = {\n\tsrcSet: string;\n\ttype?: string;\n\tsizes?: string;\n};\n\nexport interface ImageRendererProps extends Omit<ImgHTMLAttributes<HTMLImageElement>, \"src\"> {\n\tsrc: string;\n\tsources?: readonly ImageSource[];\n\talt?: string;\n\trole?: string;\n\tariaLabel?: string;\n\tcaption?: string;\n\tfallback?: ReactNode;\n\tuseFigure?: boolean;\n\taspectRatio?: string | \"unset\";\n\twrapperStyle?: CSSProperties;\n}\n\n/**\n * Базовый рендер изображения: lazy-появление, placeholder, обработка ошибки и figure/caption.\n * Компонент не знает, как устроено хранилище и какие форматы/размеры доступны.\n */\nexport function ImageRenderer({\n\tsrc,\n\tsources,\n\talt,\n\trole,\n\tariaLabel,\n\tcaption,\n\tfallback,\n\tuseFigure = false,\n\twidth = \"100%\",\n\theight = \"100%\",\n\taspectRatio = \"16 / 9\",\n\tstyle,\n\twrapperStyle,\n\t...imgProps\n}: ImageRendererProps) {\n\tconst wrapperRef = useRef<HTMLDivElement | null>(null);\n\tconst [containerWidth, setContainerWidth] = useState(0);\n\tconst [isVisible, setIsVisible] = useState(false);\n\tconst [hasLoaded, setHasLoaded] = useState(false);\n\tconst [hasError, setHasError] = useState(false);\n\n\tuseEffect(() => {\n\t\tconst observer = new IntersectionObserver(\n\t\t\t([entry]) => {\n\t\t\t\tif (entry.isIntersecting) {\n\t\t\t\t\tconst parentWidth = Math.round(entry.boundingClientRect.width);\n\n\t\t\t\t\tsetContainerWidth(parentWidth);\n\t\t\t\t\tsetIsVisible(true);\n\t\t\t\t\tobserver.disconnect();\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ rootMargin: \"100px\", threshold: 0.01 }\n\t\t);\n\n\t\tif (wrapperRef.current) {\n\t\t\tobserver.observe(wrapperRef.current);\n\t\t}\n\n\t\treturn () => observer.disconnect();\n\t}, []);\n\n\tconst sizesAttr = containerWidth ? `${containerWidth}px` : \"100vw\";\n\tconst defaultFallback = <ImagePlaceholder width={width} height={height} aspectRatio={aspectRatio} />;\n\n\tconst content = (\n\t\t<>\n\t\t\t{!hasLoaded && !hasError && (fallback || defaultFallback)}\n\t\t\t{isVisible && !hasError && (\n\t\t\t\t<picture>\n\t\t\t\t\t{sources?.map((source) => (\n\t\t\t\t\t\t<source\n\t\t\t\t\t\t\tkey={`${source.type ?? \"source\"}-${source.srcSet}`}\n\t\t\t\t\t\t\tsrcSet={source.srcSet}\n\t\t\t\t\t\t\ttype={source.type}\n\t\t\t\t\t\t\tsizes={source.sizes ?? sizesAttr}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={src}\n\t\t\t\t\t\talt={alt}\n\t\t\t\t\t\trole={role}\n\t\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\t\tonLoad={() => setHasLoaded(true)}\n\t\t\t\t\t\tonError={() => setHasError(true)}\n\t\t\t\t\t\tstyle={!hasLoaded ? { display: \"none\" } : { width: \"100%\", height: \"100%\", objectFit: \"cover\", ...style }}\n\t\t\t\t\t\taria-busy={!hasLoaded}\n\t\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\t\theight=\"100%\"\n\t\t\t\t\t\t{...imgProps}\n\t\t\t\t\t/>\n\t\t\t\t</picture>\n\t\t\t)}\n\t\t\t{hasError && defaultFallback}\n\t\t</>\n\t);\n\n\tconst wrapped = (\n\t\t<div ref={wrapperRef} style={{ width, height, aspectRatio, ...wrapperStyle }}>\n\t\t\t{content}\n\t\t</div>\n\t);\n\n\treturn useFigure ? (\n\t\t<figure className=\"relative\">\n\t\t\t{wrapped}\n\t\t\t{caption && (\n\t\t\t\t<figcaption\n\t\t\t\t\tstyle={{ bottom: 2, right: 2, maxWidth: \"calc(100% - 4px)\" }}\n\t\t\t\t\tclassName=\"absolute paddingInlineMd textRight radiusSm fontSizeSm\">\n\t\t\t\t\t{caption}\n\t\t\t\t</figcaption>\n\t\t\t)}\n\t\t</figure>\n\t) : (\n\t\twrapped\n\t);\n}\n","import { CSSProperties, ReactNode, useCallback, useMemo, useState } from \"react\";\n\nimport { ReadFileResult } from \"@ryuzaki13/react-foundation-lib/file\";\nimport Cropper from \"react-easy-crop\";\n\nimport { Button } from \"../../button\";\nimport { GridContainer } from \"../../grid\";\nimport { InputText } from \"../../input\";\nimport { InputFiles } from \"../../input-files\";\nimport { Modal, ModalContent, ModalFooter } from \"../../modal\";\n\nimport { CroppedAreaPixels } from \"./ImageCropper\";\n\ntype SelectedImageFile = Extract<ReadFileResult, { mode: \"data-url\" }>;\n\n/**\n * Данные одного выбранного изображения, которые нужны вызывающему коду:\n * исходный файл, пользовательское описание и выбранная область обрезки.\n */\nexport type SelectedImageData = {\n\tfile: SelectedImageFile;\n\talt: string;\n\tcrop?: CroppedAreaPixels;\n};\n\ninterface ImageSelectionPanelProps {\n\taspect?: number;\n\tdisabled?: boolean;\n\tvalue?: SelectedImageData[];\n\tdefaultValue?: SelectedImageData[];\n\tonChange?: (data: SelectedImageData[]) => void;\n\tonApply?: (data: SelectedImageData[]) => void;\n\trenderActions?: (data: ImageSelectionActionsData) => ReactNode;\n}\n\ninterface ImageSelectionModalProps extends ImageSelectionPanelProps {\n\tisOpen?: boolean;\n\tonClose?: () => void;\n\ttitle?: string;\n}\n\ninterface ImageSelectionActionsData {\n\tvalue: SelectedImageData[];\n\tactiveIndex: number;\n\thasSelected: boolean;\n\tcanApply: boolean;\n\tapply: () => void;\n}\n\ninterface ImageSelectionState extends ImageSelectionActionsData {\n\tfiles: SelectedImageFile[];\n\tactiveImage?: SelectedImageData;\n\tactiveCropperState: ImageCropperState;\n\tsetFiles: (files: SelectedImageFile[]) => void;\n\tsetActiveIndex: (index: number) => void;\n\tsetActiveAlt: (alt: string) => void;\n\tsetActiveCrop: (crop: CroppedAreaPixels) => void;\n\tsetActiveCropperCrop: (crop: CropperPoint) => void;\n\tsetActiveCropperZoom: (zoom: number) => void;\n}\n\ntype ImageSize = {\n\twidth: number;\n\theight: number;\n};\n\ntype CropperPoint = {\n\tx: number;\n\ty: number;\n};\n\ntype ImageCropperState = {\n\tcrop: CropperPoint;\n\tzoom: number;\n};\n\nfunction getImageKey(image: SelectedImageData, index: number) {\n\treturn `${image.file.meta.name}-${image.file.meta.size}-${image.file.meta.lastModified}-${index}`;\n}\n\n/**\n * Хранит черновик выбора изображений локально даже в controlled-режиме.\n * Это позволяет не дергать внешний onChange на каждый onCropComplete,\n * а отправлять готовый массив только при явном применении.\n */\nfunction useImageSelectionState({\n\tvalue,\n\tdefaultValue,\n\tdisabled,\n\tonChange,\n\tonApply\n}: Pick<ImageSelectionPanelProps, \"value\" | \"defaultValue\" | \"disabled\" | \"onChange\" | \"onApply\">): ImageSelectionState {\n\tconst isControlled = value !== undefined;\n\tconst [draftValue, setDraftValue] = useState<SelectedImageData[]>(value ?? defaultValue ?? []);\n\tconst [controlledValueSnapshot, setControlledValueSnapshot] = useState(value);\n\tconst [requestedActiveIndex, setActiveIndex] = useState(0);\n\tconst [cropperStateByImage, setCropperStateByImage] = useState<Record<string, ImageCropperState>>({});\n\n\tif (isControlled && value !== controlledValueSnapshot) {\n\t\tsetControlledValueSnapshot(value);\n\t\tsetDraftValue(value ?? []);\n\t}\n\n\tconst updateDraftValue = useCallback((updater: (currentValue: SelectedImageData[]) => SelectedImageData[]) => {\n\t\tsetDraftValue((currentValue) => updater(currentValue));\n\t}, []);\n\n\tconst files = useMemo(() => draftValue.map((image) => image.file), [draftValue]);\n\tconst activeIndex = draftValue.length === 0 ? 0 : Math.min(requestedActiveIndex, draftValue.length - 1);\n\tconst activeImage = draftValue[activeIndex];\n\tconst activeImageKey = activeImage ? getImageKey(activeImage, activeIndex) : undefined;\n\tconst activeCropperState = activeImageKey\n\t\t? (cropperStateByImage[activeImageKey] ?? { crop: { x: 0, y: 0 }, zoom: 1 })\n\t\t: { crop: { x: 0, y: 0 }, zoom: 1 };\n\tconst hasSelected = draftValue.length > 0;\n\tconst canApply = !disabled && hasSelected && draftValue.every((image) => image.alt.trim() && image.crop);\n\n\tconst setFiles = useCallback(\n\t\t(nextFiles: SelectedImageFile[]) => {\n\t\t\tupdateDraftValue((currentValue) =>\n\t\t\t\tnextFiles.map((file) => {\n\t\t\t\t\t// Сохраняем alt и crop при переключении, удалении и добавлении файлов.\n\t\t\t\t\tconst existingImage = currentValue.find((image) => image.file.file === file.file);\n\n\t\t\t\t\tif (existingImage) {\n\t\t\t\t\t\treturn { ...existingImage, file };\n\t\t\t\t\t}\n\n\t\t\t\t\treturn { file, alt: \"\" };\n\t\t\t\t})\n\t\t\t);\n\t\t},\n\t\t[updateDraftValue]\n\t);\n\n\tconst setActiveAlt = useCallback(\n\t\t(alt: string) => {\n\t\t\tupdateDraftValue((currentValue) => currentValue.map((image, index) => (index === activeIndex ? { ...image, alt } : image)));\n\t\t},\n\t\t[activeIndex, updateDraftValue]\n\t);\n\n\tconst setActiveCrop = useCallback(\n\t\t(crop: CroppedAreaPixels) => {\n\t\t\tupdateDraftValue((currentValue) => currentValue.map((image, index) => (index === activeIndex ? { ...image, crop } : image)));\n\t\t},\n\t\t[activeIndex, updateDraftValue]\n\t);\n\n\tconst setActiveCropperCrop = useCallback(\n\t\t(crop: CropperPoint) => {\n\t\t\tif (!activeImageKey) return;\n\n\t\t\tsetCropperStateByImage((currentState) => ({\n\t\t\t\t...currentState,\n\t\t\t\t[activeImageKey]: {\n\t\t\t\t\tcrop,\n\t\t\t\t\tzoom: currentState[activeImageKey]?.zoom ?? 1\n\t\t\t\t}\n\t\t\t}));\n\t\t},\n\t\t[activeImageKey]\n\t);\n\n\tconst setActiveCropperZoom = useCallback(\n\t\t(zoom: number) => {\n\t\t\tif (!activeImageKey) return;\n\n\t\t\tsetCropperStateByImage((currentState) => ({\n\t\t\t\t...currentState,\n\t\t\t\t[activeImageKey]: {\n\t\t\t\t\tcrop: currentState[activeImageKey]?.crop ?? { x: 0, y: 0 },\n\t\t\t\t\tzoom\n\t\t\t\t}\n\t\t\t}));\n\t\t},\n\t\t[activeImageKey]\n\t);\n\n\tconst apply = useCallback(() => {\n\t\tonChange?.(draftValue);\n\t\tonApply?.(draftValue);\n\t}, [draftValue, onApply, onChange]);\n\n\treturn {\n\t\tvalue: draftValue,\n\t\tfiles,\n\t\tactiveIndex,\n\t\tactiveImage,\n\t\tactiveCropperState,\n\t\thasSelected,\n\t\tcanApply,\n\t\tapply,\n\t\tsetFiles,\n\t\tsetActiveIndex,\n\t\tsetActiveAlt,\n\t\tsetActiveCrop,\n\t\tsetActiveCropperCrop,\n\t\tsetActiveCropperZoom\n\t};\n}\n\nfunction resolveImageUploadMaxBytes(): number | undefined {\n\tif (typeof __IMAGE_UPLOAD_MAX_BYTES__ !== \"number\") return undefined;\n\treturn __IMAGE_UPLOAD_MAX_BYTES__;\n}\n\nfunction getPreviewImageStyle(image: SelectedImageData, size: ImageSize | undefined, aspect: number): CSSProperties {\n\tif (!image.crop || !size) {\n\t\treturn {\n\t\t\twidth: \"100%\",\n\t\t\taspectRatio: aspect,\n\t\t\tobjectFit: \"cover\",\n\t\t\tdisplay: \"block\"\n\t\t};\n\t}\n\n\tconst crop = image.crop;\n\n\t// Миниатюра масштабирует исходник так, чтобы видимой оставалась только выбранная область crop.\n\treturn {\n\t\tposition: \"absolute\",\n\t\tleft: `${-(crop.x / crop.width) * 100}%`,\n\t\ttop: `${-(crop.y / crop.height) * 100}%`,\n\t\twidth: `${(size.width / crop.width) * 100}%`,\n\t\theight: `${(size.height / crop.height) * 100}%`,\n\t\tmaxWidth: \"none\"\n\t};\n}\n\nfunction ImageSelectionFields({ aspect = 16 / 9, disabled, state }: { aspect?: number; disabled?: boolean; state: ImageSelectionState }) {\n\tconst area = state.activeImage?.crop;\n\tconst [imageSizes, setImageSizes] = useState<Record<string, ImageSize>>({});\n\n\treturn (\n\t\t<GridContainer gap=\"md\">\n\t\t\t<InputFiles\n\t\t\t\tlabel=\"Файл изображения\"\n\t\t\t\tallowedMime={[\"image/jpeg\", \"image/png\", \"image/webp\", \"image/avif\"]}\n\t\t\t\tvalue={state.files}\n\t\t\t\tonChange={state.setFiles}\n\t\t\t\tmaxBytes={resolveImageUploadMaxBytes()}\n\t\t\t\tonReadError={(e) => console.log(\"e\", e)}\n\t\t\t/>\n\n\t\t\t{state.hasSelected && state.activeImage && (\n\t\t\t\t<div>\n\t\t\t\t\t<GridContainer templateColumns=\"repeat(auto-fill, minmax(10em, 1fr))\" gap=\"xs\">\n\t\t\t\t\t\t{state.value.map((image, index) => {\n\t\t\t\t\t\t\tconst imageKey = getImageKey(image, index);\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tkey={imageKey}\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\tonClick={() => state.setActiveIndex(index)}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\t\t\t\tborder: index === state.activeIndex ? \"2px solid var(--border-accent)\" : \"2px solid transparent\",\n\t\t\t\t\t\t\t\t\t\tbackground: \"transparent\",\n\t\t\t\t\t\t\t\t\t\tcursor: disabled ? \"default\" : \"pointer\"\n\t\t\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tposition: \"relative\",\n\t\t\t\t\t\t\t\t\t\t\tdisplay: \"block\",\n\t\t\t\t\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\t\t\t\t\taspectRatio: aspect,\n\t\t\t\t\t\t\t\t\t\t\toverflow: \"hidden\"\n\t\t\t\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\t\tsrc={image.file.dataUrl}\n\t\t\t\t\t\t\t\t\t\t\tstyle={getPreviewImageStyle(image, imageSizes[imageKey], aspect)}\n\t\t\t\t\t\t\t\t\t\t\tonLoad={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\tconst target = event.currentTarget;\n\n\t\t\t\t\t\t\t\t\t\t\t\tsetImageSizes((currentSizes) => ({\n\t\t\t\t\t\t\t\t\t\t\t\t\t...currentSizes,\n\t\t\t\t\t\t\t\t\t\t\t\t\t[imageKey]: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: target.naturalWidth,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: target.naturalHeight\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</GridContainer>\n\t\t\t\t\t<div>\n\t\t\t\t\t\tВыберите область изображения{\" \"}\n\t\t\t\t\t\t{area &&\n\t\t\t\t\t\t\t(area.width < 1200 ? (\n\t\t\t\t\t\t\t\t<code className=\"statusError\">\n\t\t\t\t\t\t\t\t\t{area.width}x{area.height} - низкое качество изображения!\n\t\t\t\t\t\t\t\t</code>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<code className=\"statusSuccess\">\n\t\t\t\t\t\t\t\t\t{area.width}x{area.height}\n\t\t\t\t\t\t\t\t</code>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div style={{ position: \"relative\", width: \"100%\", aspectRatio: aspect }}>\n\t\t\t\t\t\t<Cropper\n\t\t\t\t\t\t\tkey={getImageKey(state.activeImage, state.activeIndex)}\n\t\t\t\t\t\t\timage={state.activeImage.file.dataUrl}\n\t\t\t\t\t\t\tcrop={state.activeCropperState.crop}\n\t\t\t\t\t\t\tzoom={state.activeCropperState.zoom}\n\t\t\t\t\t\t\taspect={aspect}\n\t\t\t\t\t\t\tonCropChange={state.setActiveCropperCrop}\n\t\t\t\t\t\t\tonZoomChange={state.setActiveCropperZoom}\n\t\t\t\t\t\t\tonCropComplete={(_croppedArea, croppedAreaPixels) => state.setActiveCrop(croppedAreaPixels)}\n\t\t\t\t\t\t\tzoomSpeed={0.1}\n\t\t\t\t\t\t\tobjectFit=\"contain\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t<InputText\n\t\t\t\trequired\n\t\t\t\tdisabled={!state.hasSelected || disabled}\n\t\t\t\tlabel=\"Краткое описание изображения\"\n\t\t\t\tplaceholder=\"\"\n\t\t\t\tvalue={state.activeImage?.alt ?? \"\"}\n\t\t\t\tonChange={state.setActiveAlt}\n\t\t\t/>\n\t\t</GridContainer>\n\t);\n}\n\nexport function ImageSelectionPanel({ aspect = 16 / 9, disabled, renderActions, ...props }: ImageSelectionPanelProps) {\n\tconst state = useImageSelectionState({ ...props, disabled });\n\tconst actionsData = {\n\t\tvalue: state.value,\n\t\tactiveIndex: state.activeIndex,\n\t\thasSelected: state.hasSelected,\n\t\tcanApply: state.canApply,\n\t\tapply: state.apply\n\t};\n\tconst hasApplyHandler = props.onChange !== undefined || props.onApply !== undefined;\n\n\treturn (\n\t\t<>\n\t\t\t<ImageSelectionFields aspect={aspect} disabled={disabled} state={state} />\n\t\t\t{renderActions\n\t\t\t\t? renderActions(actionsData)\n\t\t\t\t: hasApplyHandler && (\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<Button disabled={!state.canApply} tone=\"success\" onClick={state.apply}>\n\t\t\t\t\t\t\t\tПрименить\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t</>\n\t);\n}\n\nexport function ImageSelectionModal({\n\taspect = 16 / 9,\n\tdisabled,\n\tisOpen = true,\n\tonClose = () => {},\n\ttitle = \"Загрузка нового изображения\",\n\t...props\n}: ImageSelectionModalProps) {\n\tconst state = useImageSelectionState({ ...props, disabled });\n\tconst hasApplyHandler = props.onChange !== undefined || props.onApply !== undefined;\n\n\tif (!hasApplyHandler) {\n\t\treturn (\n\t\t\t<Modal isOpen={isOpen} onClose={onClose} title={title} size=\"xl\">\n\t\t\t\t<ModalContent scrollable>\n\t\t\t\t\t<ImageSelectionFields aspect={aspect} disabled={disabled} state={state} />\n\t\t\t\t</ModalContent>\n\t\t\t</Modal>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Modal isOpen={isOpen} onClose={onClose} title={title} size=\"xl\">\n\t\t\t<ModalContent scrollable>\n\t\t\t\t<ImageSelectionFields aspect={aspect} disabled={disabled} state={state} />\n\t\t\t</ModalContent>\n\t\t\t<ModalFooter>\n\t\t\t\t<Button disabled={!state.canApply} tone=\"success\" onClick={state.apply}>\n\t\t\t\t\tПрименить\n\t\t\t\t</Button>\n\t\t\t</ModalFooter>\n\t\t</Modal>\n\t);\n}\n","import { type ImgHTMLAttributes, type ReactNode } from \"react\";\n\nimport { ImageRenderer, type ImageSource } from \"./ImageRenderer\";\n\nexport type ImageFormat = \"avif\" | \"webp\" | \"jpeg\" | \"jpg\" | \"png\";\n\nconst DEFAULT_SET_WIDTHS = [2880, 1920, 1280, 640, 320] as const;\nconst DEFAULT_SET_FORMATS = [\"avif\", \"webp\"] as const satisfies readonly ImageFormat[];\n\nexport type StoredImageData = {\n\tfilename: string;\n\tpath: string;\n\twidth?: number;\n\theight?: number;\n\talt?: string;\n\thasSet?: boolean;\n};\n\ninterface ImageViewProps extends Omit<ImgHTMLAttributes<HTMLImageElement>, \"src\" | \"alt\"> {\n\t/** Запись из таблицы Image. Предпочтительный способ передать изображение из БД. */\n\timage?: StoredImageData;\n\t/** Базовое имя файла из БД. Для новых изображений это md5 без расширения. */\n\tsrc?: string;\n\t/** Путь из БД относительно публичного корня, например `images/articles`. */\n\tpath?: string;\n\talt?: string;\n\trole?: string;\n\tariaLabel?: string;\n\tcaption?: string;\n\tfallback?: ReactNode;\n\tuseFigure?: boolean;\n\taspectRatio?: string | \"unset\";\n\t/** Форматы, которые реально лежат в хранилище для текущего изображения. */\n\tformats?: readonly ImageFormat[];\n\t/** Формат для img.src. Должен существовать в хранилище. */\n\tfallbackFormat?: ImageFormat;\n\t/** Набор размеров для файлов вида base@width.format. */\n\tvariantWidths?: readonly number[];\n\t/** Признак наличия responsive-набора. Если false, @size srcSet не строится. */\n\thasSet?: boolean;\n}\n\nfunction getImageMime(format: ImageFormat): string {\n\tif (format === \"jpg\" || format === \"jpeg\") {\n\t\treturn \"image/jpeg\";\n\t}\n\n\treturn `image/${format}`;\n}\n\nfunction normalizeImagePath(path?: string): string {\n\tif (!path) return \"\";\n\n\treturn path.replace(/^\\/+|\\/+$/g, \"\");\n}\n\nfunction buildImageBasePath(path: string | undefined, filename: string): string {\n\tconst normalizedPath = normalizeImagePath(path);\n\n\treturn normalizedPath ? `/${normalizedPath}/${filename}` : `/${filename}`;\n}\n\nfunction buildImageSources({\n\tbasePath,\n\tformats,\n\tvariantWidths,\n\thasSet\n}: {\n\tbasePath: string;\n\tformats: readonly ImageFormat[];\n\tvariantWidths: readonly number[];\n\thasSet: boolean;\n}): ImageSource[] {\n\tif (!hasSet) {\n\t\treturn formats.map((format) => ({\n\t\t\tsrcSet: `${basePath}.${format}`,\n\t\t\ttype: getImageMime(format)\n\t\t}));\n\t}\n\n\treturn formats.map((format) => ({\n\t\tsrcSet: variantWidths.map((width) => `${basePath}@${width}.${format} ${width}w`).join(\", \"),\n\t\ttype: getImageMime(format)\n\t}));\n}\n\n/**\n * Адаптер для изображений из таблицы Image.\n * Компонент строит пути только из данных БД: path + filename + формат/размер.\n */\nexport function ImageView({\n\timage,\n\tsrc,\n\tpath,\n\talt,\n\tformats = DEFAULT_SET_FORMATS,\n\tfallbackFormat,\n\tvariantWidths = DEFAULT_SET_WIDTHS,\n\thasSet,\n\taspectRatio,\n\t...props\n}: ImageViewProps) {\n\tconst filename = image?.filename ?? src;\n\n\tif (!filename) {\n\t\treturn <ImageRenderer src=\"\" alt={alt ?? image?.alt} {...props} />;\n\t}\n\n\tconst resolvedPath = image?.path ?? path;\n\tconst resolvedHasSet = hasSet ?? image?.hasSet ?? true;\n\tconst resolvedFormats = formats.length > 0 ? formats : DEFAULT_SET_FORMATS;\n\tconst resolvedFallbackFormat = fallbackFormat ?? resolvedFormats[resolvedFormats.length - 1] ?? \"webp\";\n\tconst basePath = buildImageBasePath(resolvedPath, filename);\n\tconst resolvedAspectRatio = aspectRatio ?? (image?.width && image.height ? `${image.width} / ${image.height}` : undefined);\n\tconst sources = buildImageSources({\n\t\tbasePath,\n\t\tformats: resolvedFormats,\n\t\tvariantWidths,\n\t\thasSet: resolvedHasSet\n\t});\n\n\treturn (\n\t\t<ImageRenderer\n\t\t\tsrc={`${basePath}.${resolvedFallbackFormat}`}\n\t\t\tsources={sources}\n\t\t\talt={alt ?? image?.alt}\n\t\t\taspectRatio={resolvedAspectRatio}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n"],"mappings":";;;;;;;;;AAWA,SAAgB,EAAa,EAC5B,UACA,YAAS,OAAO,KAChB,UACA,qBAME;CACF,IAAM,CAAC,GAAM,KAAW,EAAS;EAAE,GAAG;EAAG,GAAG;CAAE,CAAC,GACzC,CAAC,GAAM,KAAW,EAAS,CAAC,GAE5B,IAAqB,GACzB,GAAuB,MAAyC;EAChE,IAAiB,CAAiB;CACnC,GACA,CAAC,CAAc,CAChB;CAEA,OACC,kBAAC,OAAD;EAAK,OAAO;GAAE,UAAU;GAAY,OAAO,KAAS;GAAQ,aAAa;EAAO;YAC/E,kBAAC,GAAD;GACQ;GACD;GACA;GACE;GACR,cAAc;GACd,cAAc;GACd,gBAAgB;GAChB,WAAW;GACX,WAAU;EACV,CAAA;CACG,CAAA;AAEP;;;ACxCA,SAAgB,EAAiB,EAAE,WAAQ,QAAQ,YAAS,QAAQ,iBAAc,UAAU,gBAAoC;CAC/H,OACC,kBAAC,OAAD;EAAK,OAAO;GAAE;GAAO;GAAQ;EAAY;EAAc;YACtD,kBAAC,OAAD;GACQ;GACC;GACR,SAAQ;GACR,OAAM;GACN,MAAK;GACL,MAAK;GACL,IAAG;GACH,IAAG;GACH,OAAO,EAAE,SAAS,QAAQ;GAC1B,cAAW;aAEX,kBAAC,KAAD;IAAG,MAAK;cAAR;KACC,kBAAC,QAAD;MAAM,GAAE;MAAK,GAAE;MAAK,OAAM;MAAM,QAAO;MAAM,IAAG;KAAM,CAAA;KAEtD,kBAAC,UAAD;MAAQ,IAAG;MAAK,IAAG;MAAK,GAAE;MAAI,MAAK;KAAoB,CAAA;KAEvD,kBAAC,QAAD;MAAM,GAAE;MAA6B,MAAK;KAAoB,CAAA;KAC9D,kBAAC,QAAD;MAAM,GAAE;MAA6B,MAAK;KAAoB,CAAA;KAE9D,kBAAC,QAAD;MAAM,IAAG;MAAM,IAAG;MAAK,IAAG;MAAK,IAAG;MAAM,QAAO;MAAmB,aAAY;MAAK,eAAc;KAAS,CAAA;KAC1G,kBAAC,QAAD;MAAM,IAAG;MAAM,IAAG;MAAK,IAAG;MAAK,IAAG;MAAM,QAAO;MAAmB,aAAY;MAAI,eAAc;KAAS,CAAA;IACvG;;EACC,CAAA;CACD,CAAA;AAEP;;;ACTA,SAAgB,EAAc,EAC7B,QACA,YACA,QACA,SACA,cACA,YACA,aACA,eAAY,IACZ,WAAQ,QACR,YAAS,QACT,iBAAc,UACd,UACA,iBACA,GAAG,KACmB;CACtB,IAAM,IAAa,EAA8B,IAAI,GAC/C,CAAC,GAAgB,KAAqB,EAAS,CAAC,GAChD,CAAC,GAAW,KAAgB,EAAS,EAAK,GAC1C,CAAC,GAAW,KAAgB,EAAS,EAAK,GAC1C,CAAC,GAAU,KAAe,EAAS,EAAK;CAE9C,QAAgB;EACf,IAAM,IAAW,IAAI,sBACnB,CAAC,OAAW;GACZ,IAAI,EAAM,gBAAgB;IACzB,IAAM,IAAc,KAAK,MAAM,EAAM,mBAAmB,KAAK;IAI7D,AAFA,EAAkB,CAAW,GAC7B,EAAa,EAAI,GACjB,EAAS,WAAW;GACrB;EACD,GACA;GAAE,YAAY;GAAS,WAAW;EAAK,CACxC;EAMA,OAJI,EAAW,WACd,EAAS,QAAQ,EAAW,OAAO,SAGvB,EAAS,WAAW;CAClC,GAAG,CAAC,CAAC;CAEL,IAAM,IAAY,IAAiB,GAAG,EAAe,MAAM,SACrD,IAAkB,kBAAC,GAAD;EAAyB;EAAe;EAAqB;CAAc,CAAA,GAE7F,IACL,kBAAA,GAAA,EAAA,UAAA;EACE,CAAC,KAAa,CAAC,MAAa,KAAY;EACxC,KAAa,CAAC,KACd,kBAAC,WAAD,EAAA,UAAA,CACE,GAAS,KAAK,MACd,kBAAC,UAAD;GAEC,QAAQ,EAAO;GACf,MAAM,EAAO;GACb,OAAO,EAAO,SAAS;EACvB,GAJK,GAAG,EAAO,QAAQ,SAAS,GAAG,EAAO,QAI1C,CACD,GACD,kBAAC,OAAD;GACM;GACA;GACC;GACN,cAAY;GACZ,cAAc,EAAa,EAAI;GAC/B,eAAe,EAAY,EAAI;GAC/B,OAAQ,IAAkC;IAAE,OAAO;IAAQ,QAAQ;IAAQ,WAAW;IAAS,GAAG;GAAM,IAApF,EAAE,SAAS,OAAO;GACtC,aAAW,CAAC;GACZ,OAAM;GACN,QAAO;GACP,GAAI;EACJ,CAAA,CACO,EAAA,CAAA;EAET,KAAY;CACZ,EAAA,CAAA,GAGG,IACL,kBAAC,OAAD;EAAK,KAAK;EAAY,OAAO;GAAE;GAAO;GAAQ;GAAa,GAAG;EAAa;YACzE;CACG,CAAA;CAGN,OAAO,IACN,kBAAC,UAAD;EAAQ,WAAU;YAAlB,CACE,GACA,KACA,kBAAC,cAAD;GACC,OAAO;IAAE,QAAQ;IAAG,OAAO;IAAG,UAAU;GAAmB;GAC3D,WAAU;aACT;EACU,CAAA,CAEN;MAER;AAEF;;;ACjDA,SAAS,EAAY,GAA0B,GAAe;CAC7D,OAAO,GAAG,EAAM,KAAK,KAAK,KAAK,GAAG,EAAM,KAAK,KAAK,KAAK,GAAG,EAAM,KAAK,KAAK,aAAa,GAAG;AAC3F;AAOA,SAAS,EAAuB,EAC/B,UACA,iBACA,aACA,aACA,cACuH;CACvH,IAAM,IAAe,MAAU,KAAA,GACzB,CAAC,GAAY,KAAiB,EAA8B,KAAS,KAAgB,CAAC,CAAC,GACvF,CAAC,GAAyB,KAA8B,EAAS,CAAK,GACtE,CAAC,GAAsB,KAAkB,EAAS,CAAC,GACnD,CAAC,GAAqB,KAA0B,EAA4C,CAAC,CAAC;CAEpG,AAAI,KAAgB,MAAU,MAC7B,EAA2B,CAAK,GAChC,EAAc,KAAS,CAAC,CAAC;CAG1B,IAAM,IAAmB,GAAa,MAAwE;EAC7G,GAAe,MAAiB,EAAQ,CAAY,CAAC;CACtD,GAAG,CAAC,CAAC,GAEC,IAAQ,QAAc,EAAW,KAAK,MAAU,EAAM,IAAI,GAAG,CAAC,CAAU,CAAC,GACzE,IAAc,EAAW,WAAW,IAAI,IAAI,KAAK,IAAI,GAAsB,EAAW,SAAS,CAAC,GAChG,IAAc,EAAW,IACzB,IAAiB,IAAc,EAAY,GAAa,CAAW,IAAI,KAAA,GACvE,IAAqB,IACvB,EAAoB,MAAmB;EAAE,MAAM;GAAE,GAAG;GAAG,GAAG;EAAE;EAAG,MAAM;CAAE,IACxE;EAAE,MAAM;GAAE,GAAG;GAAG,GAAG;EAAE;EAAG,MAAM;CAAE,GAC7B,IAAc,EAAW,SAAS,GAClC,IAAW,CAAC,KAAY,KAAe,EAAW,OAAO,MAAU,EAAM,IAAI,KAAK,KAAK,EAAM,IAAI,GAEjG,IAAW,GACf,MAAmC;EACnC,GAAkB,MACjB,EAAU,KAAK,MAAS;GAEvB,IAAM,IAAgB,EAAa,MAAM,MAAU,EAAM,KAAK,SAAS,EAAK,IAAI;GAMhF,OAJI,IACI;IAAE,GAAG;IAAe;GAAK,IAG1B;IAAE;IAAM,KAAK;GAAG;EACxB,CAAC,CACF;CACD,GACA,CAAC,CAAgB,CAClB,GAEM,IAAe,GACnB,MAAgB;EAChB,GAAkB,MAAiB,EAAa,KAAK,GAAO,MAAW,MAAU,IAAc;GAAE,GAAG;GAAO;EAAI,IAAI,CAAM,CAAC;CAC3H,GACA,CAAC,GAAa,CAAgB,CAC/B,GAEM,IAAgB,GACpB,MAA4B;EAC5B,GAAkB,MAAiB,EAAa,KAAK,GAAO,MAAW,MAAU,IAAc;GAAE,GAAG;GAAO;EAAK,IAAI,CAAM,CAAC;CAC5H,GACA,CAAC,GAAa,CAAgB,CAC/B,GAEM,IAAuB,GAC3B,MAAuB;EAClB,KAEL,GAAwB,OAAkB;GACzC,GAAG;IACF,IAAiB;IACjB;IACA,MAAM,EAAa,EAAe,EAAE,QAAQ;GAC7C;EACD,EAAE;CACH,GACA,CAAC,CAAc,CAChB,GAEM,IAAuB,GAC3B,MAAiB;EACZ,KAEL,GAAwB,OAAkB;GACzC,GAAG;IACF,IAAiB;IACjB,MAAM,EAAa,EAAe,EAAE,QAAQ;KAAE,GAAG;KAAG,GAAG;IAAE;IACzD;GACD;EACD,EAAE;CACH,GACA,CAAC,CAAc,CAChB;CAOA,OAAO;EACN,OAAO;EACP;EACA;EACA;EACA;EACA;EACA;EACA,OAba,QAAkB;GAE/B,AADA,IAAW,CAAU,GACrB,IAAU,CAAU;EACrB,GAAG;GAAC;GAAY;GAAS;EAAQ,CAUhC;EACA;EACA;EACA;EACA;EACA;EACA;CACD;AACD;AAEA,SAAS,IAAiD;CACrD,WAAO,8BAA+B,UAC1C,OAAO;AACR;AAEA,SAAS,EAAqB,GAA0B,GAA6B,GAA+B;CACnH,IAAI,CAAC,EAAM,QAAQ,CAAC,GACnB,OAAO;EACN,OAAO;EACP,aAAa;EACb,WAAW;EACX,SAAS;CACV;CAGD,IAAM,IAAO,EAAM;CAGnB,OAAO;EACN,UAAU;EACV,MAAM,GAAG,EAAE,EAAK,IAAI,EAAK,SAAS,IAAI;EACtC,KAAK,GAAG,EAAE,EAAK,IAAI,EAAK,UAAU,IAAI;EACtC,OAAO,GAAI,EAAK,QAAQ,EAAK,QAAS,IAAI;EAC1C,QAAQ,GAAI,EAAK,SAAS,EAAK,SAAU,IAAI;EAC7C,UAAU;CACX;AACD;AAEA,SAAS,EAAqB,EAAE,YAAS,KAAK,GAAG,aAAU,YAA8E;CACxI,IAAM,IAAO,EAAM,aAAa,MAC1B,CAAC,GAAY,KAAiB,EAAoC,CAAC,CAAC;CAE1E,OACC,kBAAC,GAAD;EAAe,KAAI;YAAnB;GACC,kBAAC,GAAD;IACC,OAAM;IACN,aAAa;KAAC;KAAc;KAAa;KAAc;IAAY;IACnE,OAAO,EAAM;IACb,UAAU,EAAM;IAChB,UAAU,EAA2B;IACrC,cAAc,MAAM,QAAQ,IAAI,KAAK,CAAC;GACtC,CAAA;GAEA,EAAM,eAAe,EAAM,eAC3B,kBAAC,OAAD,EAAA,UAAA;IACC,kBAAC,GAAD;KAAe,iBAAgB;KAAuC,KAAI;eACxE,EAAM,MAAM,KAAK,GAAO,MAAU;MAClC,IAAM,IAAW,EAAY,GAAO,CAAK;MAEzC,OACC,kBAAC,UAAD;OAEC,MAAK;OACK;OACV,eAAe,EAAM,eAAe,CAAK;OACzC,OAAO;QACN,SAAS;QACT,QAAQ,MAAU,EAAM,cAAc,mCAAmC;QACzE,YAAY;QACZ,QAAQ,IAAW,YAAY;OAChC;iBACA,kBAAC,QAAD;QACC,OAAO;SACN,UAAU;SACV,SAAS;SACT,OAAO;SACP,aAAa;SACb,UAAU;QACX;kBACA,kBAAC,OAAD;SACC,KAAK,EAAM,KAAK;SAChB,OAAO,EAAqB,GAAO,EAAW,IAAW,CAAM;SAC/D,SAAS,MAAU;UAClB,IAAM,IAAS,EAAM;UAErB,GAAe,OAAkB;WAChC,GAAG;YACF,IAAW;YACX,OAAO,EAAO;YACd,QAAQ,EAAO;WAChB;UACD,EAAE;SACH;QACA,CAAA;OACI,CAAA;MACC,GAlCF,CAkCE;KAEV,CAAC;IACa,CAAA;IACf,kBAAC,OAAD,EAAA,UAAA;KAAK;KACyB;KAC5B,MACC,EAAK,QAAQ,OACb,kBAAC,QAAD;MAAM,WAAU;gBAAhB;OACE,EAAK;OAAM;OAAE,EAAK;OAAO;MACrB;UAEN,kBAAC,QAAD;MAAM,WAAU;gBAAhB;OACE,EAAK;OAAM;OAAE,EAAK;MACd;;IAEJ,EAAA,CAAA;IAEL,kBAAC,OAAD;KAAK,OAAO;MAAE,UAAU;MAAY,OAAO;MAAQ,aAAa;KAAO;eACtE,kBAAC,GAAD;MAEC,OAAO,EAAM,YAAY,KAAK;MAC9B,MAAM,EAAM,mBAAmB;MAC/B,MAAM,EAAM,mBAAmB;MACvB;MACR,cAAc,EAAM;MACpB,cAAc,EAAM;MACpB,iBAAiB,GAAc,MAAsB,EAAM,cAAc,CAAiB;MAC1F,WAAW;MACX,WAAU;KACV,GAVK,EAAY,EAAM,aAAa,EAAM,WAAW,CAUrD;IACG,CAAA;GACD,EAAA,CAAA;GAGN,kBAAC,GAAD;IACC,UAAA;IACA,UAAU,CAAC,EAAM,eAAe;IAChC,OAAM;IACN,aAAY;IACZ,OAAO,EAAM,aAAa,OAAO;IACjC,UAAU,EAAM;GAChB,CAAA;EACa;;AAEjB;AAEA,SAAgB,EAAoB,EAAE,YAAS,KAAK,GAAG,aAAU,kBAAe,GAAG,KAAmC;CACrH,IAAM,IAAQ,EAAuB;EAAE,GAAG;EAAO;CAAS,CAAC,GACrD,IAAc;EACnB,OAAO,EAAM;EACb,aAAa,EAAM;EACnB,aAAa,EAAM;EACnB,UAAU,EAAM;EAChB,OAAO,EAAM;CACd,GACM,IAAkB,EAAM,aAAa,KAAA,KAAa,EAAM,YAAY,KAAA;CAE1E,OACC,kBAAA,GAAA,EAAA,UAAA,CACC,kBAAC,GAAD;EAA8B;EAAkB;EAAiB;CAAQ,CAAA,GACxE,IACE,EAAc,CAAW,IACzB,KACA,kBAAC,OAAD,EAAA,UACC,kBAAC,GAAD;EAAQ,UAAU,CAAC,EAAM;EAAU,MAAK;EAAU,SAAS,EAAM;YAAO;CAEhE,CAAA,EACJ,CAAA,CAEP,EAAA,CAAA;AAEJ;AAEA,SAAgB,EAAoB,EACnC,YAAS,KAAK,GACd,aACA,YAAS,IACT,mBAAgB,CAAC,GACjB,WAAQ,+BACR,GAAG,KACyB;CAC5B,IAAM,IAAQ,EAAuB;EAAE,GAAG;EAAO;CAAS,CAAC;CAa3D,OAZwB,EAAM,aAAa,KAAA,KAAa,EAAM,YAAY,KAAA,IAazE,kBAAC,GAAD;EAAe;EAAiB;EAAgB;EAAO,MAAK;YAA5D,CACC,kBAAC,GAAD;GAAc,YAAA;aACb,kBAAC,GAAD;IAA8B;IAAkB;IAAiB;GAAQ,CAAA;EAC5D,CAAA,GACd,kBAAC,GAAD,EAAA,UACC,kBAAC,GAAD;GAAQ,UAAU,CAAC,EAAM;GAAU,MAAK;GAAU,SAAS,EAAM;aAAO;EAEhE,CAAA,EACI,CAAA,CACP;MAlBN,kBAAC,GAAD;EAAe;EAAiB;EAAgB;EAAO,MAAK;YAC3D,kBAAC,GAAD;GAAc,YAAA;aACb,kBAAC,GAAD;IAA8B;IAAkB;IAAiB;GAAQ,CAAA;EAC5D,CAAA;CACR,CAAA;AAgBV;;;ACpYA,IAAM,IAAqB;CAAC;CAAM;CAAM;CAAM;CAAK;AAAG,GAChD,IAAsB,CAAC,QAAQ,MAAM;AAmC3C,SAAS,EAAa,GAA6B;CAKlD,OAJI,MAAW,SAAS,MAAW,SAC3B,eAGD,SAAS;AACjB;AAEA,SAAS,EAAmB,GAAuB;CAGlD,OAFK,IAEE,EAAK,QAAQ,cAAc,EAAE,IAFlB;AAGnB;AAEA,SAAS,EAAmB,GAA0B,GAA0B;CAC/E,IAAM,IAAiB,EAAmB,CAAI;CAE9C,OAAO,IAAiB,IAAI,EAAe,GAAG,MAAa,IAAI;AAChE;AAEA,SAAS,EAAkB,EAC1B,aACA,YACA,kBACA,aAMiB;CAQjB,OAPK,IAOE,EAAQ,KAAK,OAAY;EAC/B,QAAQ,EAAc,KAAK,MAAU,GAAG,EAAS,GAAG,EAAM,GAAG,EAAO,GAAG,EAAM,EAAE,CAAC,CAAC,KAAK,IAAI;EAC1F,MAAM,EAAa,CAAM;CAC1B,EAAE,IATM,EAAQ,KAAK,OAAY;EAC/B,QAAQ,GAAG,EAAS,GAAG;EACvB,MAAM,EAAa,CAAM;CAC1B,EAAE;AAOJ;AAMA,SAAgB,EAAU,EACzB,UACA,QACA,SACA,QACA,aAAU,GACV,mBACA,mBAAgB,GAChB,WACA,gBACA,GAAG,KACe;CAClB,IAAM,IAAW,GAAO,YAAY;CAEpC,IAAI,CAAC,GACJ,OAAO,kBAAC,GAAD;EAAe,KAAI;EAAG,KAAK,KAAO,GAAO;EAAK,GAAI;CAAQ,CAAA;CAGlE,IAAM,IAAe,GAAO,QAAQ,GAC9B,IAAiB,KAAU,GAAO,UAAU,IAC5C,IAAkB,EAAQ,SAAS,IAAI,IAAU,GACjD,IAAyB,KAAkB,EAAgB,EAAgB,SAAS,MAAM,QAC1F,IAAW,EAAmB,GAAc,CAAQ,GACpD,IAAsB,MAAgB,GAAO,SAAS,EAAM,SAAS,GAAG,EAAM,MAAM,KAAK,EAAM,WAAW,KAAA,IAC1G,IAAU,EAAkB;EACjC;EACA,SAAS;EACT;EACA,QAAQ;CACT,CAAC;CAED,OACC,kBAAC,GAAD;EACC,KAAK,GAAG,EAAS,GAAG;EACX;EACT,KAAK,KAAO,GAAO;EACnB,aAAa;EACb,GAAI;CACJ,CAAA;AAEH"}
@@ -1 +1 @@
1
- {"version":3,"file":"ImageSelection.d.ts","sourceRoot":"","sources":["../../../src/image/ui/ImageSelection.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,SAAS,EAAkC,MAAM,OAAO,CAAC;AAIjF,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAQtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,KAAK,iBAAiB,GAAG,OAAO,CAAC,cAAc,EAAE;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC,CAAC;AAEvE;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,iBAAiB,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,iBAAiB,CAAC;CACzB,CAAC;AAEF,UAAU,wBAAwB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC5B,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACnC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,EAAE,KAAK,IAAI,CAAC;IAC/C,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,EAAE,KAAK,IAAI,CAAC;IAC9C,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,yBAAyB,KAAK,SAAS,CAAC;CAC/D;AAED,UAAU,wBAAyB,SAAQ,wBAAwB;IAClE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,yBAAyB;IAClC,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,IAAI,CAAC;CAClB;AA+RD,wBAAgB,mBAAmB,CAAC,EAAE,MAAe,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,KAAK,EAAE,EAAE,wBAAwB,+BAyBnH;AAED,wBAAgB,mBAAmB,CAAC,EACnC,MAAe,EACf,QAAQ,EACR,MAAa,EACb,OAAkB,EAClB,KAAqC,EACrC,GAAG,KAAK,EACR,EAAE,wBAAwB,+BA0B1B"}
1
+ {"version":3,"file":"ImageSelection.d.ts","sourceRoot":"","sources":["../../../src/image/ui/ImageSelection.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,SAAS,EAAkC,MAAM,OAAO,CAAC;AAEjF,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAStE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,KAAK,iBAAiB,GAAG,OAAO,CAAC,cAAc,EAAE;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC,CAAC;AAEvE;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,iBAAiB,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,iBAAiB,CAAC;CACzB,CAAC;AAEF,UAAU,wBAAwB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC5B,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACnC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,EAAE,KAAK,IAAI,CAAC;IAC/C,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,EAAE,KAAK,IAAI,CAAC;IAC9C,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,yBAAyB,KAAK,SAAS,CAAC;CAC/D;AAED,UAAU,wBAAyB,SAAQ,wBAAwB;IAClE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,yBAAyB;IAClC,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,IAAI,CAAC;CAClB;AA+RD,wBAAgB,mBAAmB,CAAC,EAAE,MAAe,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,KAAK,EAAE,EAAE,wBAAwB,+BAyBnH;AAED,wBAAgB,mBAAmB,CAAC,EACnC,MAAe,EACf,QAAQ,EACR,MAAa,EACb,OAAkB,EAClB,KAAqC,EACrC,GAAG,KAAK,EACR,EAAE,wBAAwB,+BA0B1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../src/input/Input.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../src/input/Input.tsx"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import { a as e, c as t, i as n, n as r, o as i, r as a, s as o, t as s } from "../chunks/Input-Ce2HXBUc.js";
1
+ import { a as e, c as t, i as n, n as r, o as i, r as a, s as o, t as s } from "../chunks/Input-BmjlpA09.js";
2
2
  export { s as Input, r as InputClearButton, a as InputControl, n as InputNumber, e as InputText, i as InputUI, o as InputUILoading, t as useInputFieldIds };
@@ -1,6 +1,6 @@
1
- import { a as e, i as t } from "../../chunks/Input-Ce2HXBUc.js";
2
- import { jsx as n } from "react/jsx-runtime";
3
- import { useState as r } from "react";
1
+ import { a as e, i as t } from "../../chunks/Input-BmjlpA09.js";
2
+ import { useState as n } from "react";
3
+ import { jsx as r } from "react/jsx-runtime";
4
4
  //#region src/input/stories/Input.stories.tsx
5
5
  var i = {
6
6
  title: "Shared/UI/Input",
@@ -69,8 +69,8 @@ var i = {
69
69
  }
70
70
  }, a = {
71
71
  render: (t) => {
72
- let [i, a] = r(t.value ?? "");
73
- return /* @__PURE__ */ n(e, {
72
+ let [i, a] = n(t.value ?? "");
73
+ return /* @__PURE__ */ r(e, {
74
74
  ...t,
75
75
  value: i,
76
76
  onChange: a,
@@ -86,8 +86,8 @@ var i = {
86
86
  }
87
87
  }, o = {
88
88
  render: () => {
89
- let [e, i] = r(25);
90
- return /* @__PURE__ */ n(t, {
89
+ let [e, i] = n(25);
90
+ return /* @__PURE__ */ r(t, {
91
91
  label: "Количество",
92
92
  description: "Числовой ввод с min/max.",
93
93
  placeholder: "0",
@@ -101,8 +101,8 @@ var i = {
101
101
  args: { value: void 0 }
102
102
  }, s = {
103
103
  render: () => {
104
- let [t, i] = r("");
105
- return /* @__PURE__ */ n(e, {
104
+ let [t, i] = n("");
105
+ return /* @__PURE__ */ r(e, {
106
106
  label: "Только цифры",
107
107
  description: "`allowedPattern` подсвечивает невалидный ввод.",
108
108
  placeholder: "12345",
@@ -114,8 +114,8 @@ var i = {
114
114
  args: { value: void 0 }
115
115
  }, c = {
116
116
  render: () => {
117
- let [t, i] = r("admin"), [a, o] = r("Логин уже занят");
118
- return /* @__PURE__ */ n(e, {
117
+ let [t, i] = n("admin"), [a, o] = n("Логин уже занят");
118
+ return /* @__PURE__ */ r(e, {
119
119
  label: "Логин",
120
120
  value: t,
121
121
  error: a,
@@ -1,2 +1,2 @@
1
- import { n as e, r as t, t as n } from "../chunks/InputDateTime-DPtY_4Od.js";
1
+ import { n as e, r as t, t as n } from "../chunks/InputDateTime-CxfAFe2L.js";
2
2
  export { n as InputDate, e as InputDateTime, t as InputTime };
@@ -1,6 +1,6 @@
1
- import { n as e, r as t, t as n } from "../../chunks/InputDateTime-DPtY_4Od.js";
2
- import { jsx as r } from "react/jsx-runtime";
3
- import { useState as i } from "react";
1
+ import { n as e, r as t, t as n } from "../../chunks/InputDateTime-CxfAFe2L.js";
2
+ import { useState as r } from "react";
3
+ import { jsx as i } from "react/jsx-runtime";
4
4
  //#region src/input-date-time/stories/InputDateTime.stories.tsx
5
5
  var a = {
6
6
  title: "Shared/UI/InputDateTime",
@@ -69,8 +69,8 @@ var a = {
69
69
  }
70
70
  }, o = {
71
71
  render: (e) => {
72
- let [t, a] = i(e.value);
73
- return /* @__PURE__ */ r(n, {
72
+ let [t, a] = r(e.value);
73
+ return /* @__PURE__ */ i(n, {
74
74
  ...e,
75
75
  value: t,
76
76
  onChange: a,
@@ -84,8 +84,8 @@ var a = {
84
84
  }
85
85
  }, s = {
86
86
  render: () => {
87
- let [e, n] = i(new Date(2026, 2, 5, 14, 30, 0));
88
- return /* @__PURE__ */ r(t, {
87
+ let [e, n] = r(new Date(2026, 2, 5, 14, 30, 0));
88
+ return /* @__PURE__ */ i(t, {
89
89
  label: "Время",
90
90
  description: "Формат по умолчанию: hh:mm",
91
91
  value: e,
@@ -96,8 +96,8 @@ var a = {
96
96
  args: { value: void 0 }
97
97
  }, c = {
98
98
  render: () => {
99
- let [t, n] = i(new Date(2026, 2, 5, 9, 15, 0));
100
- return /* @__PURE__ */ r(e, {
99
+ let [t, n] = r(new Date(2026, 2, 5, 9, 15, 0));
100
+ return /* @__PURE__ */ i(e, {
101
101
  label: "Дата и время",
102
102
  description: "Комбинированный ввод даты и времени.",
103
103
  value: t,
@@ -108,8 +108,8 @@ var a = {
108
108
  args: { value: void 0 }
109
109
  }, l = {
110
110
  render: () => {
111
- let [t, n] = i(new Date(2026, 2, 5, 9, 15, 42));
112
- return /* @__PURE__ */ r(e, {
111
+ let [t, n] = r(new Date(2026, 2, 5, 9, 15, 42));
112
+ return /* @__PURE__ */ i(e, {
113
113
  label: "Кастомная маска",
114
114
  description: "Добавлены секунды: YYYY.MM.DD hh:mm:ss",
115
115
  mask: "YYYY.MM.DD hh:mm:ss",
@@ -1 +1 @@
1
- {"version":3,"file":"InputFile.d.ts","sourceRoot":"","sources":["../../src/input-file/InputFile.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAuD,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAIpJ,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAKvC,UAAU,oBAAqB,SAAQ,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IACxF,sFAAsF;IACtF,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,gFAAgF;IAChF,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAE7C,0FAA0F;IAC1F,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,yEAAyE;IACzE,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,KAAK,sBAAsB,GAAG,OAAO,CAAC,cAAc,EAAE;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC,CAAC;AAC5E,KAAK,0BAA0B,GAAG,OAAO,CAAC,cAAc,EAAE;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC,CAAC;AAEpF;;;;;;;;;GASG;AACH,MAAM,MAAM,cAAc,GACvB,CAAC,oBAAoB,GAAG;IACxB,KAAK,EAAE,cAAc,GAAG,SAAS,CAAC;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAClD,QAAQ,CAAC,EAAE,UAAU,CAAC;CACrB,CAAC,GACF,CAAC,oBAAoB,GAAG;IACxB,KAAK,EAAE,cAAc,GAAG,SAAS,CAAC;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,IAAI,CAAC;IACtD,QAAQ,EAAE,cAAc,CAAC;CACxB,CAAC,CAAC;AAEN;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,+BAoH9C"}
1
+ {"version":3,"file":"InputFile.d.ts","sourceRoot":"","sources":["../../src/input-file/InputFile.tsx"],"names":[],"mappings":"AAEA,OAAO,EAIN,aAAa,EACb,cAAc,EACd,QAAQ,EACR,MAAM,sCAAsC,CAAC;AAI9C,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAKvC,UAAU,oBAAqB,SAAQ,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IACxF,sFAAsF;IACtF,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,gFAAgF;IAChF,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAE7C,0FAA0F;IAC1F,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,yEAAyE;IACzE,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,KAAK,sBAAsB,GAAG,OAAO,CAAC,cAAc,EAAE;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC,CAAC;AAC5E,KAAK,0BAA0B,GAAG,OAAO,CAAC,cAAc,EAAE;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC,CAAC;AAEpF;;;;;;;;;GASG;AACH,MAAM,MAAM,cAAc,GACvB,CAAC,oBAAoB,GAAG;IACxB,KAAK,EAAE,cAAc,GAAG,SAAS,CAAC;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAClD,QAAQ,CAAC,EAAE,UAAU,CAAC;CACrB,CAAC,GACF,CAAC,oBAAoB,GAAG;IACxB,KAAK,EAAE,cAAc,GAAG,SAAS,CAAC;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,IAAI,CAAC;IACtD,QAAQ,EAAE,cAAc,CAAC;CACxB,CAAC,CAAC;AAEN;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,+BAoH9C"}
@@ -1,2 +1,2 @@
1
- import { t as e } from "../chunks/InputFile-ga5yJmdZ.js";
1
+ import { t as e } from "../chunks/InputFile-CyZu__B_.js";
2
2
  export { e as InputFile };
@@ -1 +1 @@
1
- {"version":3,"file":"InputFile.stories.d.ts","sourceRoot":"","sources":["../../../src/input-file/stories/InputFile.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAkB5D,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4EwB,CAAC;AAEnC,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,UAAU,EAAE,KAwBxB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAS9B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAY7B,CAAC"}
1
+ {"version":3,"file":"InputFile.stories.d.ts","sourceRoot":"","sources":["../../../src/input-file/stories/InputFile.stories.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAkB5D,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4EwB,CAAC;AAEnC,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,UAAU,EAAE,KAwBxB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAS9B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAY7B,CAAC"}
@@ -1,6 +1,6 @@
1
- import { t as e } from "../../chunks/InputFile-ga5yJmdZ.js";
2
- import { jsx as t } from "react/jsx-runtime";
3
- import { useState as n } from "react";
1
+ import { t as e } from "../../chunks/InputFile-CyZu__B_.js";
2
+ import { useState as t } from "react";
3
+ import { jsx as n } from "react/jsx-runtime";
4
4
  //#region src/input-file/stories/InputFile.stories.tsx
5
5
  var r = (e, t = "application/pdf") => {
6
6
  let n = new File(["demo-file"], e, {
@@ -102,8 +102,8 @@ var r = (e, t = "application/pdf") => {
102
102
  }
103
103
  }, a = {
104
104
  render: (r) => {
105
- let [i, a] = n(r.value), [o, s] = n(r.error ?? "");
106
- return /* @__PURE__ */ t(e, {
105
+ let [i, a] = t(r.value), [o, s] = t(r.error ?? "");
106
+ return /* @__PURE__ */ n(e, {
107
107
  ...r,
108
108
  value: i,
109
109
  error: o || void 0,
@@ -122,8 +122,8 @@ var r = (e, t = "application/pdf") => {
122
122
  }
123
123
  }, o = {
124
124
  render: (i) => {
125
- let [a, o] = n(r("report.pdf"));
126
- return /* @__PURE__ */ t(e, {
125
+ let [a, o] = t(r("report.pdf"));
126
+ return /* @__PURE__ */ n(e, {
127
127
  ...i,
128
128
  value: a,
129
129
  onChange: o,
@@ -136,8 +136,8 @@ var r = (e, t = "application/pdf") => {
136
136
  }
137
137
  }, s = {
138
138
  render: (r) => {
139
- let [i, a] = n(void 0);
140
- return /* @__PURE__ */ t(e, {
139
+ let [i, a] = t(void 0);
140
+ return /* @__PURE__ */ n(e, {
141
141
  ...r,
142
142
  value: i,
143
143
  onChange: a,
@@ -1 +1 @@
1
- {"version":3,"file":"InputFile.stories.js","names":[],"sources":["../../../src/input-file/stories/InputFile.stories.tsx"],"sourcesContent":["import { useState } from \"react\";\n\nimport type { ReadFileResult } from \"@ryuzaki13/react-foundation-lib/file\";\n\nimport { InputFile } from \"../InputFile\";\n\nimport type { Meta, StoryObj } from \"@storybook/react-vite\";\n\nconst createMockReadFileResult = (name: string, mime: string = \"application/pdf\"): ReadFileResult => {\n\tconst file = new File([\"demo-file\"], name, { type: mime, lastModified: 1704067200000 });\n\n\treturn {\n\t\tmode: \"data-url\",\n\t\tmeta: {\n\t\t\tname: file.name,\n\t\t\tmime: file.type,\n\t\t\tsize: file.size,\n\t\t\tlastModified: file.lastModified\n\t\t},\n\t\tdataUrl: `data:${mime};base64,ZGVtby1maWxl`,\n\t\tfile\n\t};\n};\n\nconst meta = {\n\ttitle: \"Shared/UI/InputFile\",\n\tcomponent: InputFile,\n\targs: {\n\t\tvalue: undefined,\n\t\tonChange: () => {}\n\t},\n\tparameters: {\n\t\tatomicCanvas: true,\n\t\tlayout: \"padded\"\n\t},\n\ttags: [\"autodocs\"],\n\targTypes: {\n\t\tlabel: {\n\t\t\tdescription: \"Заголовок поля загрузки.\",\n\t\t\tcontrol: \"text\"\n\t\t},\n\t\tdescription: {\n\t\t\tdescription: \"Описание под заголовком.\",\n\t\t\tcontrol: \"text\"\n\t\t},\n\t\tplaceholder: {\n\t\t\tdescription: \"Текст в поле, пока файл не выбран.\",\n\t\t\tcontrol: \"text\"\n\t\t},\n\t\tvalue: {\n\t\t\tdescription: \"Текущий результат чтения выбранного файла.\",\n\t\t\tcontrol: false\n\t\t},\n\t\tonChange: {\n\t\t\tdescription: \"Вызывается после успешного чтения файла.\",\n\t\t\tcontrol: false\n\t\t},\n\t\tonReadError: {\n\t\t\tdescription: \"Вызывается при ошибке чтения или валидации файла.\",\n\t\t\tcontrol: false\n\t\t},\n\t\tonClear: {\n\t\t\tdescription: \"Очищает выбранный файл и показывает кнопку очистки.\",\n\t\t\tcontrol: false\n\t\t},\n\t\taccept: {\n\t\t\tdescription: \"HTML `accept` для нативного диалога выбора файла.\",\n\t\t\tcontrol: \"text\"\n\t\t},\n\t\tallowedMime: {\n\t\t\tdescription: \"Белый список MIME-типов для readFile-валидации.\",\n\t\t\tcontrol: false\n\t\t},\n\t\tmaxBytes: {\n\t\t\tdescription: \"Максимальный размер файла в байтах.\",\n\t\t\tcontrol: \"number\"\n\t\t},\n\t\treadMode: {\n\t\t\tdescription: \"Режим чтения файла: data-url или array-buffer.\",\n\t\t\tcontrol: \"inline-radio\",\n\t\t\toptions: [\"data-url\", \"array-buffer\"]\n\t\t},\n\t\terror: {\n\t\t\tdescription: \"Текст ошибки под полем.\",\n\t\t\tcontrol: \"text\"\n\t\t},\n\t\tonClearError: {\n\t\t\tdescription: \"Callback сброса ошибки при повторном выборе файла.\",\n\t\t\tcontrol: false\n\t\t},\n\t\tdisabled: {\n\t\t\tdescription: \"Блокирует выбор файла.\",\n\t\t\tcontrol: \"boolean\"\n\t\t},\n\t\tsize: {\n\t\t\tdescription: \"Размер визуального контрола.\",\n\t\t\tcontrol: \"select\",\n\t\t\toptions: [\"xs\", \"sm\", \"md\", \"lg\", \"xl\"]\n\t\t}\n\t}\n} satisfies Meta<typeof InputFile>;\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\nexport const Controlled: Story = {\n\trender: (args) => {\n\t\tconst [value, setValue] = useState<ReadFileResult | undefined>(args.value);\n\t\tconst [error, setError] = useState(args.error ?? \"\");\n\n\t\treturn (\n\t\t\t<InputFile\n\t\t\t\t{...args}\n\t\t\t\tvalue={value}\n\t\t\t\terror={error || undefined}\n\t\t\t\tonChange={setValue}\n\t\t\t\tonClear={() => setValue(undefined)}\n\t\t\t\tonClearError={() => setError(\"\")}\n\t\t\t/>\n\t\t);\n\t},\n\targs: {\n\t\tlabel: \"Документ\",\n\t\tdescription: \"Загрузите один файл.\",\n\t\tplaceholder: \"Выберите файл\",\n\t\taccept: [\".pdf\", \".docx\"],\n\t\treadMode: \"data-url\",\n\t\tvalue: undefined\n\t}\n};\n\nexport const WithInitialValue: Story = {\n\trender: (args) => {\n\t\tconst [value, setValue] = useState<ReadFileResult | undefined>(createMockReadFileResult(\"report.pdf\"));\n\t\treturn <InputFile {...args} value={value} onChange={setValue} onClear={() => setValue(undefined)} />;\n\t},\n\targs: {\n\t\tlabel: \"Файл с предзаполнением\",\n\t\tdescription: \"Демонстрация состояния после успешной загрузки.\"\n\t}\n};\n\nexport const ArrayBufferMode: Story = {\n\trender: (args) => {\n\t\tconst [value, setValue] = useState<ReadFileResult | undefined>(undefined);\n\t\treturn <InputFile {...args} value={value} onChange={setValue} onClear={() => setValue(undefined)} />;\n\t},\n\targs: {\n\t\tlabel: \"Двоичное чтение\",\n\t\tdescription: \"Режим `array-buffer` для дальнейшей бинарной обработки.\",\n\t\treadMode: \"array-buffer\",\n\t\taccept: [\".zip\", \".pdf\"],\n\t\tvalue: undefined\n\t}\n};\n"],"mappings":";;;;AAQA,IAAM,KAA4B,GAAc,IAAe,sBAAsC;CACpG,IAAM,IAAO,IAAI,KAAK,CAAC,WAAW,GAAG,GAAM;EAAE,MAAM;EAAM,cAAc;CAAc,CAAC;CAEtF,OAAO;EACN,MAAM;EACN,MAAM;GACL,MAAM,EAAK;GACX,MAAM,EAAK;GACX,MAAM,EAAK;GACX,cAAc,EAAK;EACpB;EACA,SAAS,QAAQ,EAAK;EACtB;CACD;AACD,GAEM,IAAO;CACZ,OAAO;CACP,WAAW;CACX,MAAM;EACL,OAAO,KAAA;EACP,gBAAgB,CAAC;CAClB;CACA,YAAY;EACX,cAAc;EACd,QAAQ;CACT;CACA,MAAM,CAAC,UAAU;CACjB,UAAU;EACT,OAAO;GACN,aAAa;GACb,SAAS;EACV;EACA,aAAa;GACZ,aAAa;GACb,SAAS;EACV;EACA,aAAa;GACZ,aAAa;GACb,SAAS;EACV;EACA,OAAO;GACN,aAAa;GACb,SAAS;EACV;EACA,UAAU;GACT,aAAa;GACb,SAAS;EACV;EACA,aAAa;GACZ,aAAa;GACb,SAAS;EACV;EACA,SAAS;GACR,aAAa;GACb,SAAS;EACV;EACA,QAAQ;GACP,aAAa;GACb,SAAS;EACV;EACA,aAAa;GACZ,aAAa;GACb,SAAS;EACV;EACA,UAAU;GACT,aAAa;GACb,SAAS;EACV;EACA,UAAU;GACT,aAAa;GACb,SAAS;GACT,SAAS,CAAC,YAAY,cAAc;EACrC;EACA,OAAO;GACN,aAAa;GACb,SAAS;EACV;EACA,cAAc;GACb,aAAa;GACb,SAAS;EACV;EACA,UAAU;GACT,aAAa;GACb,SAAS;EACV;EACA,MAAM;GACL,aAAa;GACb,SAAS;GACT,SAAS;IAAC;IAAM;IAAM;IAAM;IAAM;GAAI;EACvC;CACD;AACD,GAKa,IAAoB;CAChC,SAAS,MAAS;EACjB,IAAM,CAAC,GAAO,KAAY,EAAqC,EAAK,KAAK,GACnE,CAAC,GAAO,KAAY,EAAS,EAAK,SAAS,EAAE;EAEnD,OACC,kBAAC,GAAD;GACC,GAAI;GACG;GACP,OAAO,KAAS,KAAA;GAChB,UAAU;GACV,eAAe,EAAS,KAAA,CAAS;GACjC,oBAAoB,EAAS,EAAE;EAC/B,CAAA;CAEH;CACA,MAAM;EACL,OAAO;EACP,aAAa;EACb,aAAa;EACb,QAAQ,CAAC,QAAQ,OAAO;EACxB,UAAU;EACV,OAAO,KAAA;CACR;AACD,GAEa,IAA0B;CACtC,SAAS,MAAS;EACjB,IAAM,CAAC,GAAO,KAAY,EAAqC,EAAyB,YAAY,CAAC;EACrG,OAAO,kBAAC,GAAD;GAAW,GAAI;GAAa;GAAO,UAAU;GAAU,eAAe,EAAS,KAAA,CAAS;EAAI,CAAA;CACpG;CACA,MAAM;EACL,OAAO;EACP,aAAa;CACd;AACD,GAEa,IAAyB;CACrC,SAAS,MAAS;EACjB,IAAM,CAAC,GAAO,KAAY,EAAqC,KAAA,CAAS;EACxE,OAAO,kBAAC,GAAD;GAAW,GAAI;GAAa;GAAO,UAAU;GAAU,eAAe,EAAS,KAAA,CAAS;EAAI,CAAA;CACpG;CACA,MAAM;EACL,OAAO;EACP,aAAa;EACb,UAAU;EACV,QAAQ,CAAC,QAAQ,MAAM;EACvB,OAAO,KAAA;CACR;AACD"}
1
+ {"version":3,"file":"InputFile.stories.js","names":[],"sources":["../../../src/input-file/stories/InputFile.stories.tsx"],"sourcesContent":["import { useState } from \"react\";\n\nimport { InputFile } from \"../InputFile\";\n\nimport type { ReadFileResult } from \"@ryuzaki13/react-foundation-lib/file\";\nimport type { Meta, StoryObj } from \"@storybook/react-vite\";\n\nconst createMockReadFileResult = (name: string, mime: string = \"application/pdf\"): ReadFileResult => {\n\tconst file = new File([\"demo-file\"], name, { type: mime, lastModified: 1704067200000 });\n\n\treturn {\n\t\tmode: \"data-url\",\n\t\tmeta: {\n\t\t\tname: file.name,\n\t\t\tmime: file.type,\n\t\t\tsize: file.size,\n\t\t\tlastModified: file.lastModified\n\t\t},\n\t\tdataUrl: `data:${mime};base64,ZGVtby1maWxl`,\n\t\tfile\n\t};\n};\n\nconst meta = {\n\ttitle: \"Shared/UI/InputFile\",\n\tcomponent: InputFile,\n\targs: {\n\t\tvalue: undefined,\n\t\tonChange: () => {}\n\t},\n\tparameters: {\n\t\tatomicCanvas: true,\n\t\tlayout: \"padded\"\n\t},\n\ttags: [\"autodocs\"],\n\targTypes: {\n\t\tlabel: {\n\t\t\tdescription: \"Заголовок поля загрузки.\",\n\t\t\tcontrol: \"text\"\n\t\t},\n\t\tdescription: {\n\t\t\tdescription: \"Описание под заголовком.\",\n\t\t\tcontrol: \"text\"\n\t\t},\n\t\tplaceholder: {\n\t\t\tdescription: \"Текст в поле, пока файл не выбран.\",\n\t\t\tcontrol: \"text\"\n\t\t},\n\t\tvalue: {\n\t\t\tdescription: \"Текущий результат чтения выбранного файла.\",\n\t\t\tcontrol: false\n\t\t},\n\t\tonChange: {\n\t\t\tdescription: \"Вызывается после успешного чтения файла.\",\n\t\t\tcontrol: false\n\t\t},\n\t\tonReadError: {\n\t\t\tdescription: \"Вызывается при ошибке чтения или валидации файла.\",\n\t\t\tcontrol: false\n\t\t},\n\t\tonClear: {\n\t\t\tdescription: \"Очищает выбранный файл и показывает кнопку очистки.\",\n\t\t\tcontrol: false\n\t\t},\n\t\taccept: {\n\t\t\tdescription: \"HTML `accept` для нативного диалога выбора файла.\",\n\t\t\tcontrol: \"text\"\n\t\t},\n\t\tallowedMime: {\n\t\t\tdescription: \"Белый список MIME-типов для readFile-валидации.\",\n\t\t\tcontrol: false\n\t\t},\n\t\tmaxBytes: {\n\t\t\tdescription: \"Максимальный размер файла в байтах.\",\n\t\t\tcontrol: \"number\"\n\t\t},\n\t\treadMode: {\n\t\t\tdescription: \"Режим чтения файла: data-url или array-buffer.\",\n\t\t\tcontrol: \"inline-radio\",\n\t\t\toptions: [\"data-url\", \"array-buffer\"]\n\t\t},\n\t\terror: {\n\t\t\tdescription: \"Текст ошибки под полем.\",\n\t\t\tcontrol: \"text\"\n\t\t},\n\t\tonClearError: {\n\t\t\tdescription: \"Callback сброса ошибки при повторном выборе файла.\",\n\t\t\tcontrol: false\n\t\t},\n\t\tdisabled: {\n\t\t\tdescription: \"Блокирует выбор файла.\",\n\t\t\tcontrol: \"boolean\"\n\t\t},\n\t\tsize: {\n\t\t\tdescription: \"Размер визуального контрола.\",\n\t\t\tcontrol: \"select\",\n\t\t\toptions: [\"xs\", \"sm\", \"md\", \"lg\", \"xl\"]\n\t\t}\n\t}\n} satisfies Meta<typeof InputFile>;\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\nexport const Controlled: Story = {\n\trender: (args) => {\n\t\tconst [value, setValue] = useState<ReadFileResult | undefined>(args.value);\n\t\tconst [error, setError] = useState(args.error ?? \"\");\n\n\t\treturn (\n\t\t\t<InputFile\n\t\t\t\t{...args}\n\t\t\t\tvalue={value}\n\t\t\t\terror={error || undefined}\n\t\t\t\tonChange={setValue}\n\t\t\t\tonClear={() => setValue(undefined)}\n\t\t\t\tonClearError={() => setError(\"\")}\n\t\t\t/>\n\t\t);\n\t},\n\targs: {\n\t\tlabel: \"Документ\",\n\t\tdescription: \"Загрузите один файл.\",\n\t\tplaceholder: \"Выберите файл\",\n\t\taccept: [\".pdf\", \".docx\"],\n\t\treadMode: \"data-url\",\n\t\tvalue: undefined\n\t}\n};\n\nexport const WithInitialValue: Story = {\n\trender: (args) => {\n\t\tconst [value, setValue] = useState<ReadFileResult | undefined>(createMockReadFileResult(\"report.pdf\"));\n\t\treturn <InputFile {...args} value={value} onChange={setValue} onClear={() => setValue(undefined)} />;\n\t},\n\targs: {\n\t\tlabel: \"Файл с предзаполнением\",\n\t\tdescription: \"Демонстрация состояния после успешной загрузки.\"\n\t}\n};\n\nexport const ArrayBufferMode: Story = {\n\trender: (args) => {\n\t\tconst [value, setValue] = useState<ReadFileResult | undefined>(undefined);\n\t\treturn <InputFile {...args} value={value} onChange={setValue} onClear={() => setValue(undefined)} />;\n\t},\n\targs: {\n\t\tlabel: \"Двоичное чтение\",\n\t\tdescription: \"Режим `array-buffer` для дальнейшей бинарной обработки.\",\n\t\treadMode: \"array-buffer\",\n\t\taccept: [\".zip\", \".pdf\"],\n\t\tvalue: undefined\n\t}\n};\n"],"mappings":";;;;AAOA,IAAM,KAA4B,GAAc,IAAe,sBAAsC;CACpG,IAAM,IAAO,IAAI,KAAK,CAAC,WAAW,GAAG,GAAM;EAAE,MAAM;EAAM,cAAc;CAAc,CAAC;CAEtF,OAAO;EACN,MAAM;EACN,MAAM;GACL,MAAM,EAAK;GACX,MAAM,EAAK;GACX,MAAM,EAAK;GACX,cAAc,EAAK;EACpB;EACA,SAAS,QAAQ,EAAK;EACtB;CACD;AACD,GAEM,IAAO;CACZ,OAAO;CACP,WAAW;CACX,MAAM;EACL,OAAO,KAAA;EACP,gBAAgB,CAAC;CAClB;CACA,YAAY;EACX,cAAc;EACd,QAAQ;CACT;CACA,MAAM,CAAC,UAAU;CACjB,UAAU;EACT,OAAO;GACN,aAAa;GACb,SAAS;EACV;EACA,aAAa;GACZ,aAAa;GACb,SAAS;EACV;EACA,aAAa;GACZ,aAAa;GACb,SAAS;EACV;EACA,OAAO;GACN,aAAa;GACb,SAAS;EACV;EACA,UAAU;GACT,aAAa;GACb,SAAS;EACV;EACA,aAAa;GACZ,aAAa;GACb,SAAS;EACV;EACA,SAAS;GACR,aAAa;GACb,SAAS;EACV;EACA,QAAQ;GACP,aAAa;GACb,SAAS;EACV;EACA,aAAa;GACZ,aAAa;GACb,SAAS;EACV;EACA,UAAU;GACT,aAAa;GACb,SAAS;EACV;EACA,UAAU;GACT,aAAa;GACb,SAAS;GACT,SAAS,CAAC,YAAY,cAAc;EACrC;EACA,OAAO;GACN,aAAa;GACb,SAAS;EACV;EACA,cAAc;GACb,aAAa;GACb,SAAS;EACV;EACA,UAAU;GACT,aAAa;GACb,SAAS;EACV;EACA,MAAM;GACL,aAAa;GACb,SAAS;GACT,SAAS;IAAC;IAAM;IAAM;IAAM;IAAM;GAAI;EACvC;CACD;AACD,GAKa,IAAoB;CAChC,SAAS,MAAS;EACjB,IAAM,CAAC,GAAO,KAAY,EAAqC,EAAK,KAAK,GACnE,CAAC,GAAO,KAAY,EAAS,EAAK,SAAS,EAAE;EAEnD,OACC,kBAAC,GAAD;GACC,GAAI;GACG;GACP,OAAO,KAAS,KAAA;GAChB,UAAU;GACV,eAAe,EAAS,KAAA,CAAS;GACjC,oBAAoB,EAAS,EAAE;EAC/B,CAAA;CAEH;CACA,MAAM;EACL,OAAO;EACP,aAAa;EACb,aAAa;EACb,QAAQ,CAAC,QAAQ,OAAO;EACxB,UAAU;EACV,OAAO,KAAA;CACR;AACD,GAEa,IAA0B;CACtC,SAAS,MAAS;EACjB,IAAM,CAAC,GAAO,KAAY,EAAqC,EAAyB,YAAY,CAAC;EACrG,OAAO,kBAAC,GAAD;GAAW,GAAI;GAAa;GAAO,UAAU;GAAU,eAAe,EAAS,KAAA,CAAS;EAAI,CAAA;CACpG;CACA,MAAM;EACL,OAAO;EACP,aAAa;CACd;AACD,GAEa,IAAyB;CACrC,SAAS,MAAS;EACjB,IAAM,CAAC,GAAO,KAAY,EAAqC,KAAA,CAAS;EACxE,OAAO,kBAAC,GAAD;GAAW,GAAI;GAAa;GAAO,UAAU;GAAU,eAAe,EAAS,KAAA,CAAS;EAAI,CAAA;CACpG;CACA,MAAM;EACL,OAAO;EACP,aAAa;EACb,UAAU;EACV,QAAQ,CAAC,QAAQ,MAAM;EACvB,OAAO,KAAA;CACR;AACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"InputFilesList.d.ts","sourceRoot":"","sources":["../../src/input-files/InputFilesList.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAKtE,UAAU,mBAAmB,CAAC,KAAK,SAAS,cAAc;IACzD,KAAK,EAAE,KAAK,EAAE,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC;CACnC;AAED,wBAAgB,cAAc,CAAC,KAAK,SAAS,cAAc,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,sCA0B3G"}
1
+ {"version":3,"file":"InputFilesList.d.ts","sourceRoot":"","sources":["../../src/input-files/InputFilesList.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAMtE,UAAU,mBAAmB,CAAC,KAAK,SAAS,cAAc;IACzD,KAAK,EAAE,KAAK,EAAE,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC;CACnC;AAED,wBAAgB,cAAc,CAAC,KAAK,SAAS,cAAc,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,sCA0B3G"}
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "../chunks/InputFiles-Or2Nvfgk.js";
1
+ import { n as e, t } from "../chunks/InputFiles-CrTJV27R.js";
2
2
  export { t as InputFiles, e as InputFilesList };
@@ -1,5 +1,5 @@
1
- import type { ReadFileAsDataUrlResult } from "@ryuzaki13/react-foundation-lib/file";
2
1
  import { InputFiles } from "../InputFiles";
2
+ import type { ReadFileAsDataUrlResult } from "@ryuzaki13/react-foundation-lib/file";
3
3
  import type { StoryObj } from "@storybook/react-vite";
4
4
  declare const meta: {
5
5
  title: string;
@@ -1 +1 @@
1
- {"version":3,"file":"InputFiles.stories.d.ts","sourceRoot":"","sources":["../../../src/input-files/stories/InputFiles.stories.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAEpF,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAkB5D,QAAA,MAAM,IAAI;;;;eAIK,uBAAuB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwEL,CAAC;AAEpC,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,UAAU,EAAE,KAaxB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAa9B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAc1B,CAAC"}
1
+ {"version":3,"file":"InputFiles.stories.d.ts","sourceRoot":"","sources":["../../../src/input-files/stories/InputFiles.stories.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AACpF,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAkB5D,QAAA,MAAM,IAAI;;;;eAIK,uBAAuB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwEL,CAAC;AAEpC,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,UAAU,EAAE,KAaxB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAa9B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAc1B,CAAC"}
@@ -1,6 +1,6 @@
1
- import { t as e } from "../../chunks/InputFiles-Or2Nvfgk.js";
2
- import { jsx as t } from "react/jsx-runtime";
3
- import { useState as n } from "react";
1
+ import { t as e } from "../../chunks/InputFiles-CrTJV27R.js";
2
+ import { useState as t } from "react";
3
+ import { jsx as n } from "react/jsx-runtime";
4
4
  //#region src/input-files/stories/InputFiles.stories.tsx
5
5
  var r = (e, t = "application/pdf") => {
6
6
  let n = new File(["demo-file"], e, {
@@ -102,8 +102,8 @@ var r = (e, t = "application/pdf") => {
102
102
  }
103
103
  }, a = {
104
104
  render: (r) => {
105
- let [i, a] = n([]);
106
- return /* @__PURE__ */ t(e, {
105
+ let [i, a] = t([]);
106
+ return /* @__PURE__ */ n(e, {
107
107
  ...r,
108
108
  readMode: "data-url",
109
109
  value: i,
@@ -124,8 +124,8 @@ var r = (e, t = "application/pdf") => {
124
124
  }
125
125
  }, o = {
126
126
  render: (i) => {
127
- let [a, o] = n([r("contract.pdf"), r("diagram.png", "image/png")]);
128
- return /* @__PURE__ */ t(e, {
127
+ let [a, o] = t([r("contract.pdf"), r("diagram.png", "image/png")]);
128
+ return /* @__PURE__ */ n(e, {
129
129
  ...i,
130
130
  readMode: "data-url",
131
131
  value: a,
@@ -138,8 +138,8 @@ var r = (e, t = "application/pdf") => {
138
138
  }
139
139
  }, s = {
140
140
  render: (i) => {
141
- let [a, o] = n([r("first.pdf"), r("second.pdf")]);
142
- return /* @__PURE__ */ t(e, {
141
+ let [a, o] = t([r("first.pdf"), r("second.pdf")]);
142
+ return /* @__PURE__ */ n(e, {
143
143
  ...i,
144
144
  readMode: "data-url",
145
145
  value: a,
@@ -1 +1 @@
1
- {"version":3,"file":"InputFiles.stories.js","names":[],"sources":["../../../src/input-files/stories/InputFiles.stories.tsx"],"sourcesContent":["import { useState } from \"react\";\n\nimport type { ReadFileAsDataUrlResult } from \"@ryuzaki13/react-foundation-lib/file\";\n\nimport { InputFiles } from \"../InputFiles\";\n\nimport type { Meta, StoryObj } from \"@storybook/react-vite\";\n\nconst createMockReadFileResult = (name: string, mime: string = \"application/pdf\"): ReadFileAsDataUrlResult => {\n\tconst file = new File([\"demo-file\"], name, { type: mime, lastModified: 1704067200000 });\n\n\treturn {\n\t\tmode: \"data-url\",\n\t\tmeta: {\n\t\t\tname: file.name,\n\t\t\tmime: file.type,\n\t\t\tsize: file.size,\n\t\t\tlastModified: file.lastModified\n\t\t},\n\t\tdataUrl: `data:${mime};base64,ZGVtby1maWxl`,\n\t\tfile\n\t};\n};\n\nconst meta = {\n\ttitle: \"Shared/UI/InputFiles\",\n\tcomponent: InputFiles,\n\targs: {\n\t\tvalue: [] as ReadFileAsDataUrlResult[],\n\t\tonChange: () => {}\n\t},\n\tparameters: {\n\t\tatomicCanvas: true,\n\t\tlayout: \"padded\"\n\t},\n\ttags: [\"autodocs\"],\n\targTypes: {\n\t\tlabel: {\n\t\t\tdescription: \"Заголовок поля множественной загрузки.\",\n\t\t\tcontrol: \"text\"\n\t\t},\n\t\tdescription: {\n\t\t\tdescription: \"Описание под заголовком.\",\n\t\t\tcontrol: \"text\"\n\t\t},\n\t\tplaceholder: {\n\t\t\tdescription: \"Текст в поле, пока список файлов пуст.\",\n\t\t\tcontrol: \"text\"\n\t\t},\n\t\tvalue: {\n\t\t\tdescription: \"Массив результатов чтения выбранных файлов.\",\n\t\t\tcontrol: false\n\t\t},\n\t\tonChange: {\n\t\t\tdescription: \"Вызывается с новым массивом файлов после добавления/удаления.\",\n\t\t\tcontrol: false\n\t\t},\n\t\tonReadError: {\n\t\t\tdescription: \"Вызывается при ошибке чтения отдельного файла.\",\n\t\t\tcontrol: false\n\t\t},\n\t\taccept: {\n\t\t\tdescription: \"HTML `accept` для диалога выбора файлов.\",\n\t\t\tcontrol: \"text\"\n\t\t},\n\t\tallowedMime: {\n\t\t\tdescription: \"Список допустимых MIME-типов при валидации.\",\n\t\t\tcontrol: false\n\t\t},\n\t\tmaxBytes: {\n\t\t\tdescription: \"Максимальный размер одного файла в байтах.\",\n\t\t\tcontrol: \"number\"\n\t\t},\n\t\treadMode: {\n\t\t\tdescription: \"Режим чтения: data-url или array-buffer.\",\n\t\t\tcontrol: \"inline-radio\",\n\t\t\toptions: [\"data-url\", \"array-buffer\"]\n\t\t},\n\t\tmaxFiles: {\n\t\t\tdescription: \"Лимит количества файлов в списке.\",\n\t\t\tcontrol: \"number\"\n\t\t},\n\t\terror: {\n\t\t\tdescription: \"Текст ошибки под полем.\",\n\t\t\tcontrol: \"text\"\n\t\t},\n\t\tonClearError: {\n\t\t\tdescription: \"Вызывается при выборе новых файлов для сброса ошибки.\",\n\t\t\tcontrol: false\n\t\t},\n\t\tdisabled: {\n\t\t\tdescription: \"Полностью блокирует выбор файлов.\",\n\t\t\tcontrol: \"boolean\"\n\t\t},\n\t\tsize: {\n\t\t\tdescription: \"Размер визуального контрола.\",\n\t\t\tcontrol: \"select\",\n\t\t\toptions: [\"xs\", \"sm\", \"md\", \"lg\", \"xl\"]\n\t\t}\n\t}\n} satisfies Meta<typeof InputFiles>;\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\nexport const Controlled: Story = {\n\trender: (args) => {\n\t\tconst [value, setValue] = useState<ReadFileAsDataUrlResult[]>([]);\n\t\treturn <InputFiles {...args} readMode=\"data-url\" value={value} onChange={setValue} />;\n\t},\n\targs: {\n\t\tlabel: \"Вложения\",\n\t\tdescription: \"Можно выбрать несколько файлов.\",\n\t\tplaceholder: \"Выберите файлы\",\n\t\taccept: [\".pdf\", \".png\", \".jpg\"],\n\t\tmaxFiles: 5,\n\t\tvalue: []\n\t}\n};\n\nexport const WithInitialFiles: Story = {\n\trender: (args) => {\n\t\tconst [value, setValue] = useState<ReadFileAsDataUrlResult[]>([\n\t\t\tcreateMockReadFileResult(\"contract.pdf\"),\n\t\t\tcreateMockReadFileResult(\"diagram.png\", \"image/png\")\n\t\t]);\n\n\t\treturn <InputFiles {...args} readMode=\"data-url\" value={value} onChange={setValue} />;\n\t},\n\targs: {\n\t\tlabel: \"Предзаполненный список\",\n\t\tdescription: \"Иллюстрация удаления файлов из уже заполненного значения.\"\n\t}\n};\n\nexport const LimitReached: Story = {\n\trender: (args) => {\n\t\tconst [value, setValue] = useState<ReadFileAsDataUrlResult[]>([\n\t\t\tcreateMockReadFileResult(\"first.pdf\"),\n\t\t\tcreateMockReadFileResult(\"second.pdf\")\n\t\t]);\n\n\t\treturn <InputFiles {...args} readMode=\"data-url\" value={value} onChange={setValue} />;\n\t},\n\targs: {\n\t\tlabel: \"Лимит файлов\",\n\t\tdescription: \"После достижения лимита поле выбора блокируется.\",\n\t\tmaxFiles: 2\n\t}\n};\n"],"mappings":";;;;AAQA,IAAM,KAA4B,GAAc,IAAe,sBAA+C;CAC7G,IAAM,IAAO,IAAI,KAAK,CAAC,WAAW,GAAG,GAAM;EAAE,MAAM;EAAM,cAAc;CAAc,CAAC;CAEtF,OAAO;EACN,MAAM;EACN,MAAM;GACL,MAAM,EAAK;GACX,MAAM,EAAK;GACX,MAAM,EAAK;GACX,cAAc,EAAK;EACpB;EACA,SAAS,QAAQ,EAAK;EACtB;CACD;AACD,GAEM,IAAO;CACZ,OAAO;CACP,WAAW;CACX,MAAM;EACL,OAAO,CAAC;EACR,gBAAgB,CAAC;CAClB;CACA,YAAY;EACX,cAAc;EACd,QAAQ;CACT;CACA,MAAM,CAAC,UAAU;CACjB,UAAU;EACT,OAAO;GACN,aAAa;GACb,SAAS;EACV;EACA,aAAa;GACZ,aAAa;GACb,SAAS;EACV;EACA,aAAa;GACZ,aAAa;GACb,SAAS;EACV;EACA,OAAO;GACN,aAAa;GACb,SAAS;EACV;EACA,UAAU;GACT,aAAa;GACb,SAAS;EACV;EACA,aAAa;GACZ,aAAa;GACb,SAAS;EACV;EACA,QAAQ;GACP,aAAa;GACb,SAAS;EACV;EACA,aAAa;GACZ,aAAa;GACb,SAAS;EACV;EACA,UAAU;GACT,aAAa;GACb,SAAS;EACV;EACA,UAAU;GACT,aAAa;GACb,SAAS;GACT,SAAS,CAAC,YAAY,cAAc;EACrC;EACA,UAAU;GACT,aAAa;GACb,SAAS;EACV;EACA,OAAO;GACN,aAAa;GACb,SAAS;EACV;EACA,cAAc;GACb,aAAa;GACb,SAAS;EACV;EACA,UAAU;GACT,aAAa;GACb,SAAS;EACV;EACA,MAAM;GACL,aAAa;GACb,SAAS;GACT,SAAS;IAAC;IAAM;IAAM;IAAM;IAAM;GAAI;EACvC;CACD;AACD,GAKa,IAAoB;CAChC,SAAS,MAAS;EACjB,IAAM,CAAC,GAAO,KAAY,EAAoC,CAAC,CAAC;EAChE,OAAO,kBAAC,GAAD;GAAY,GAAI;GAAM,UAAS;GAAkB;GAAO,UAAU;EAAW,CAAA;CACrF;CACA,MAAM;EACL,OAAO;EACP,aAAa;EACb,aAAa;EACb,QAAQ;GAAC;GAAQ;GAAQ;EAAM;EAC/B,UAAU;EACV,OAAO,CAAC;CACT;AACD,GAEa,IAA0B;CACtC,SAAS,MAAS;EACjB,IAAM,CAAC,GAAO,KAAY,EAAoC,CAC7D,EAAyB,cAAc,GACvC,EAAyB,eAAe,WAAW,CACpD,CAAC;EAED,OAAO,kBAAC,GAAD;GAAY,GAAI;GAAM,UAAS;GAAkB;GAAO,UAAU;EAAW,CAAA;CACrF;CACA,MAAM;EACL,OAAO;EACP,aAAa;CACd;AACD,GAEa,IAAsB;CAClC,SAAS,MAAS;EACjB,IAAM,CAAC,GAAO,KAAY,EAAoC,CAC7D,EAAyB,WAAW,GACpC,EAAyB,YAAY,CACtC,CAAC;EAED,OAAO,kBAAC,GAAD;GAAY,GAAI;GAAM,UAAS;GAAkB;GAAO,UAAU;EAAW,CAAA;CACrF;CACA,MAAM;EACL,OAAO;EACP,aAAa;EACb,UAAU;CACX;AACD"}
1
+ {"version":3,"file":"InputFiles.stories.js","names":[],"sources":["../../../src/input-files/stories/InputFiles.stories.tsx"],"sourcesContent":["import { useState } from \"react\";\n\nimport { InputFiles } from \"../InputFiles\";\n\nimport type { ReadFileAsDataUrlResult } from \"@ryuzaki13/react-foundation-lib/file\";\nimport type { Meta, StoryObj } from \"@storybook/react-vite\";\n\nconst createMockReadFileResult = (name: string, mime: string = \"application/pdf\"): ReadFileAsDataUrlResult => {\n\tconst file = new File([\"demo-file\"], name, { type: mime, lastModified: 1704067200000 });\n\n\treturn {\n\t\tmode: \"data-url\",\n\t\tmeta: {\n\t\t\tname: file.name,\n\t\t\tmime: file.type,\n\t\t\tsize: file.size,\n\t\t\tlastModified: file.lastModified\n\t\t},\n\t\tdataUrl: `data:${mime};base64,ZGVtby1maWxl`,\n\t\tfile\n\t};\n};\n\nconst meta = {\n\ttitle: \"Shared/UI/InputFiles\",\n\tcomponent: InputFiles,\n\targs: {\n\t\tvalue: [] as ReadFileAsDataUrlResult[],\n\t\tonChange: () => {}\n\t},\n\tparameters: {\n\t\tatomicCanvas: true,\n\t\tlayout: \"padded\"\n\t},\n\ttags: [\"autodocs\"],\n\targTypes: {\n\t\tlabel: {\n\t\t\tdescription: \"Заголовок поля множественной загрузки.\",\n\t\t\tcontrol: \"text\"\n\t\t},\n\t\tdescription: {\n\t\t\tdescription: \"Описание под заголовком.\",\n\t\t\tcontrol: \"text\"\n\t\t},\n\t\tplaceholder: {\n\t\t\tdescription: \"Текст в поле, пока список файлов пуст.\",\n\t\t\tcontrol: \"text\"\n\t\t},\n\t\tvalue: {\n\t\t\tdescription: \"Массив результатов чтения выбранных файлов.\",\n\t\t\tcontrol: false\n\t\t},\n\t\tonChange: {\n\t\t\tdescription: \"Вызывается с новым массивом файлов после добавления/удаления.\",\n\t\t\tcontrol: false\n\t\t},\n\t\tonReadError: {\n\t\t\tdescription: \"Вызывается при ошибке чтения отдельного файла.\",\n\t\t\tcontrol: false\n\t\t},\n\t\taccept: {\n\t\t\tdescription: \"HTML `accept` для диалога выбора файлов.\",\n\t\t\tcontrol: \"text\"\n\t\t},\n\t\tallowedMime: {\n\t\t\tdescription: \"Список допустимых MIME-типов при валидации.\",\n\t\t\tcontrol: false\n\t\t},\n\t\tmaxBytes: {\n\t\t\tdescription: \"Максимальный размер одного файла в байтах.\",\n\t\t\tcontrol: \"number\"\n\t\t},\n\t\treadMode: {\n\t\t\tdescription: \"Режим чтения: data-url или array-buffer.\",\n\t\t\tcontrol: \"inline-radio\",\n\t\t\toptions: [\"data-url\", \"array-buffer\"]\n\t\t},\n\t\tmaxFiles: {\n\t\t\tdescription: \"Лимит количества файлов в списке.\",\n\t\t\tcontrol: \"number\"\n\t\t},\n\t\terror: {\n\t\t\tdescription: \"Текст ошибки под полем.\",\n\t\t\tcontrol: \"text\"\n\t\t},\n\t\tonClearError: {\n\t\t\tdescription: \"Вызывается при выборе новых файлов для сброса ошибки.\",\n\t\t\tcontrol: false\n\t\t},\n\t\tdisabled: {\n\t\t\tdescription: \"Полностью блокирует выбор файлов.\",\n\t\t\tcontrol: \"boolean\"\n\t\t},\n\t\tsize: {\n\t\t\tdescription: \"Размер визуального контрола.\",\n\t\t\tcontrol: \"select\",\n\t\t\toptions: [\"xs\", \"sm\", \"md\", \"lg\", \"xl\"]\n\t\t}\n\t}\n} satisfies Meta<typeof InputFiles>;\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\nexport const Controlled: Story = {\n\trender: (args) => {\n\t\tconst [value, setValue] = useState<ReadFileAsDataUrlResult[]>([]);\n\t\treturn <InputFiles {...args} readMode=\"data-url\" value={value} onChange={setValue} />;\n\t},\n\targs: {\n\t\tlabel: \"Вложения\",\n\t\tdescription: \"Можно выбрать несколько файлов.\",\n\t\tplaceholder: \"Выберите файлы\",\n\t\taccept: [\".pdf\", \".png\", \".jpg\"],\n\t\tmaxFiles: 5,\n\t\tvalue: []\n\t}\n};\n\nexport const WithInitialFiles: Story = {\n\trender: (args) => {\n\t\tconst [value, setValue] = useState<ReadFileAsDataUrlResult[]>([\n\t\t\tcreateMockReadFileResult(\"contract.pdf\"),\n\t\t\tcreateMockReadFileResult(\"diagram.png\", \"image/png\")\n\t\t]);\n\n\t\treturn <InputFiles {...args} readMode=\"data-url\" value={value} onChange={setValue} />;\n\t},\n\targs: {\n\t\tlabel: \"Предзаполненный список\",\n\t\tdescription: \"Иллюстрация удаления файлов из уже заполненного значения.\"\n\t}\n};\n\nexport const LimitReached: Story = {\n\trender: (args) => {\n\t\tconst [value, setValue] = useState<ReadFileAsDataUrlResult[]>([\n\t\t\tcreateMockReadFileResult(\"first.pdf\"),\n\t\t\tcreateMockReadFileResult(\"second.pdf\")\n\t\t]);\n\n\t\treturn <InputFiles {...args} readMode=\"data-url\" value={value} onChange={setValue} />;\n\t},\n\targs: {\n\t\tlabel: \"Лимит файлов\",\n\t\tdescription: \"После достижения лимита поле выбора блокируется.\",\n\t\tmaxFiles: 2\n\t}\n};\n"],"mappings":";;;;AAOA,IAAM,KAA4B,GAAc,IAAe,sBAA+C;CAC7G,IAAM,IAAO,IAAI,KAAK,CAAC,WAAW,GAAG,GAAM;EAAE,MAAM;EAAM,cAAc;CAAc,CAAC;CAEtF,OAAO;EACN,MAAM;EACN,MAAM;GACL,MAAM,EAAK;GACX,MAAM,EAAK;GACX,MAAM,EAAK;GACX,cAAc,EAAK;EACpB;EACA,SAAS,QAAQ,EAAK;EACtB;CACD;AACD,GAEM,IAAO;CACZ,OAAO;CACP,WAAW;CACX,MAAM;EACL,OAAO,CAAC;EACR,gBAAgB,CAAC;CAClB;CACA,YAAY;EACX,cAAc;EACd,QAAQ;CACT;CACA,MAAM,CAAC,UAAU;CACjB,UAAU;EACT,OAAO;GACN,aAAa;GACb,SAAS;EACV;EACA,aAAa;GACZ,aAAa;GACb,SAAS;EACV;EACA,aAAa;GACZ,aAAa;GACb,SAAS;EACV;EACA,OAAO;GACN,aAAa;GACb,SAAS;EACV;EACA,UAAU;GACT,aAAa;GACb,SAAS;EACV;EACA,aAAa;GACZ,aAAa;GACb,SAAS;EACV;EACA,QAAQ;GACP,aAAa;GACb,SAAS;EACV;EACA,aAAa;GACZ,aAAa;GACb,SAAS;EACV;EACA,UAAU;GACT,aAAa;GACb,SAAS;EACV;EACA,UAAU;GACT,aAAa;GACb,SAAS;GACT,SAAS,CAAC,YAAY,cAAc;EACrC;EACA,UAAU;GACT,aAAa;GACb,SAAS;EACV;EACA,OAAO;GACN,aAAa;GACb,SAAS;EACV;EACA,cAAc;GACb,aAAa;GACb,SAAS;EACV;EACA,UAAU;GACT,aAAa;GACb,SAAS;EACV;EACA,MAAM;GACL,aAAa;GACb,SAAS;GACT,SAAS;IAAC;IAAM;IAAM;IAAM;IAAM;GAAI;EACvC;CACD;AACD,GAKa,IAAoB;CAChC,SAAS,MAAS;EACjB,IAAM,CAAC,GAAO,KAAY,EAAoC,CAAC,CAAC;EAChE,OAAO,kBAAC,GAAD;GAAY,GAAI;GAAM,UAAS;GAAkB;GAAO,UAAU;EAAW,CAAA;CACrF;CACA,MAAM;EACL,OAAO;EACP,aAAa;EACb,aAAa;EACb,QAAQ;GAAC;GAAQ;GAAQ;EAAM;EAC/B,UAAU;EACV,OAAO,CAAC;CACT;AACD,GAEa,IAA0B;CACtC,SAAS,MAAS;EACjB,IAAM,CAAC,GAAO,KAAY,EAAoC,CAC7D,EAAyB,cAAc,GACvC,EAAyB,eAAe,WAAW,CACpD,CAAC;EAED,OAAO,kBAAC,GAAD;GAAY,GAAI;GAAM,UAAS;GAAkB;GAAO,UAAU;EAAW,CAAA;CACrF;CACA,MAAM;EACL,OAAO;EACP,aAAa;CACd;AACD,GAEa,IAAsB;CAClC,SAAS,MAAS;EACjB,IAAM,CAAC,GAAO,KAAY,EAAoC,CAC7D,EAAyB,WAAW,GACpC,EAAyB,YAAY,CACtC,CAAC;EAED,OAAO,kBAAC,GAAD;GAAY,GAAI;GAAM,UAAS;GAAkB;GAAO,UAAU;EAAW,CAAA;CACrF;CACA,MAAM;EACL,OAAO;EACP,aAAa;EACb,UAAU;CACX;AACD"}
@@ -1,2 +1,2 @@
1
- import { t as e } from "../chunks/InputImage-BeA5WJz1.js";
1
+ import { t as e } from "../chunks/InputImage-Cw8rPYQu.js";
2
2
  export { e as InputImage };
@@ -1 +1 @@
1
- {"version":3,"file":"InputImage.stories.d.ts","sourceRoot":"","sources":["../../../src/input-image/stories/InputImage.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAsB5D,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwEyB,CAAC;AAEpC,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,UAAU,EAAE,KAaxB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAqB9B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAW7B,CAAC"}
1
+ {"version":3,"file":"InputImage.stories.d.ts","sourceRoot":"","sources":["../../../src/input-image/stories/InputImage.stories.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAsB5D,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwEyB,CAAC;AAEpC,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,UAAU,EAAE,KAaxB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAqB9B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAW7B,CAAC"}
@@ -1,6 +1,6 @@
1
- import { t as e } from "../../chunks/InputImage-BeA5WJz1.js";
2
- import { jsx as t, jsxs as n } from "react/jsx-runtime";
3
- import { useState as r } from "react";
1
+ import { t as e } from "../../chunks/InputImage-Cw8rPYQu.js";
2
+ import { useState as t } from "react";
3
+ import { jsx as n, jsxs as r } from "react/jsx-runtime";
4
4
  //#region src/input-image/stories/InputImage.stories.tsx
5
5
  var i = (e = "avatar.png") => {
6
6
  let t = new File(["image-demo"], e, {
@@ -101,10 +101,10 @@ var i = (e = "avatar.png") => {
101
101
  }
102
102
  }
103
103
  }, o = {
104
- render: (n) => {
105
- let [i, a] = r(n.value);
106
- return /* @__PURE__ */ t(e, {
107
- ...n,
104
+ render: (r) => {
105
+ let [i, a] = t(r.value);
106
+ return /* @__PURE__ */ n(e, {
107
+ ...r,
108
108
  value: i,
109
109
  onChange: a,
110
110
  onClear: () => a(void 0)
@@ -124,18 +124,18 @@ var i = (e = "avatar.png") => {
124
124
  }
125
125
  }, s = {
126
126
  render: (a) => {
127
- let [o, s] = r(i());
128
- return /* @__PURE__ */ n("div", {
127
+ let [o, s] = t(i());
128
+ return /* @__PURE__ */ r("div", {
129
129
  style: {
130
130
  display: "grid",
131
131
  gap: 12
132
132
  },
133
- children: [/* @__PURE__ */ t(e, {
133
+ children: [/* @__PURE__ */ n(e, {
134
134
  ...a,
135
135
  value: o,
136
136
  onChange: s,
137
137
  onClear: () => s(void 0)
138
- }), o?.mode === "data-url" && /* @__PURE__ */ t("img", {
138
+ }), o?.mode === "data-url" && /* @__PURE__ */ n("img", {
139
139
  src: o.dataUrl,
140
140
  alt: "Предпросмотр",
141
141
  style: {
@@ -152,10 +152,10 @@ var i = (e = "avatar.png") => {
152
152
  description: "Сторис показывает, что значение можно использовать для preview."
153
153
  }
154
154
  }, c = {
155
- render: (n) => {
156
- let [i, a] = r(void 0);
157
- return /* @__PURE__ */ t(e, {
158
- ...n,
155
+ render: (r) => {
156
+ let [i, a] = t(void 0);
157
+ return /* @__PURE__ */ n(e, {
158
+ ...r,
159
159
  value: i,
160
160
  onChange: a,
161
161
  onClear: () => a(void 0)