@ryuzaki13/react-foundation-ui 1.8.11 → 1.8.13

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 (281) hide show
  1. package/dist/chunks/defaultRenderers-u_Vep6Pj.js.map +1 -1
  2. package/dist/chunks/multi-select-DtmRtX6v.js.map +1 -1
  3. package/dist/chunks/select-MN6zDPKM.js.map +1 -1
  4. package/dist/chunks/useODataSelectBase-DR4PrY1j.js.map +1 -1
  5. package/dist/multi-select/model/useODataMultiSelect.d.ts +1 -1
  6. package/dist/multi-select/model/useODataMultiSelect.d.ts.map +1 -1
  7. package/dist/multi-select/ui/MultiSelect.d.ts +1 -1
  8. package/dist/multi-select/ui/MultiSelect.d.ts.map +1 -1
  9. package/dist/multi-select/ui/SerializableMultiSelect.d.ts.map +1 -1
  10. package/dist/multi-select/ui/defaultRenderers.d.ts +1 -1
  11. package/dist/multi-select/ui/defaultRenderers.d.ts.map +1 -1
  12. package/dist/select/model/useODataSelect.d.ts +1 -1
  13. package/dist/select/model/useODataSelect.d.ts.map +1 -1
  14. package/dist/select/model/useODataSelectBase.d.ts +1 -1
  15. package/dist/select/model/useODataSelectBase.d.ts.map +1 -1
  16. package/dist/tree-select/index.js.map +1 -1
  17. package/dist/tree-select/model/buildODataTreeNodes.d.ts +1 -1
  18. package/dist/tree-select/model/buildODataTreeNodes.d.ts.map +1 -1
  19. package/package.json +3 -3
  20. package/storybook-static/assets/{Badge-BojMuOws.js → Badge-BFhBl7yM.js} +1 -1
  21. package/storybook-static/assets/{Badge.stories-C9gJRuIO.js → Badge.stories-BEu55X4s.js} +1 -1
  22. package/storybook-static/assets/{BadgeList-dNEWI7-O.js → BadgeList-mqmnGtRR.js} +1 -1
  23. package/storybook-static/assets/{Button-Bbt3JzIY.js → Button-CESdnWrO.js} +1 -1
  24. package/storybook-static/assets/{Button-CrTHXWYk.js → Button-_YPAu9sd.js} +1 -1
  25. package/storybook-static/assets/{Button.stories-BaYXOBeF.js → Button.stories-B0Y_T17B.js} +1 -1
  26. package/storybook-static/assets/{CalendarView-Dp0zus1o.js → CalendarView-DLuO2Ywz.js} +1 -1
  27. package/storybook-static/assets/{CheckBox-BiK9yWNt.js → CheckBox-CGiNmAPT.js} +1 -1
  28. package/storybook-static/assets/{CheckBox-UzYHaD6S.js → CheckBox-l0pbBm9z.js} +1 -1
  29. package/storybook-static/assets/{CheckBox.stories-C2BOiWZj.js → CheckBox.stories-ROPAnqh8.js} +1 -1
  30. package/storybook-static/assets/{Color-6AOWCN3U-C5S4wUlD.js → Color-6AOWCN3U-kPaRN0HS.js} +1 -1
  31. package/storybook-static/assets/{ContextMenu-D9EZxb7d.js → ContextMenu-Bob4DtRn.js} +1 -1
  32. package/storybook-static/assets/{ContextMenu-BWQln_tb.js → ContextMenu-DxfUAeJS.js} +1 -1
  33. package/storybook-static/assets/{ContextMenu.stories-U38zPh9_.js → ContextMenu.stories-DCJmWy5n.js} +1 -1
  34. package/storybook-static/assets/{CustomOptionButton-COIOrxQn.js → CustomOptionButton-DuEz9CXt.js} +1 -1
  35. package/storybook-static/assets/DateInput-BQ8SoeLE.js +1 -0
  36. package/storybook-static/assets/{DateInput-C-entb-r.js → DateInput-DmNLD4Dz.js} +1 -1
  37. package/storybook-static/assets/{DateInput.stories-NmUXQLDU.js → DateInput.stories-sTpYf7Ob.js} +1 -1
  38. package/storybook-static/assets/{DateRangePresetSelect-BM1L1KOo.js → DateRangePresetSelect-DRq4eJ2n.js} +1 -1
  39. package/storybook-static/assets/{DateRangePresetSelect-CAJzxaq0.js → DateRangePresetSelect-fgJfLaLO.js} +1 -1
  40. package/storybook-static/assets/{DateRangePresetSelect.stories-CC47XLnD.js → DateRangePresetSelect.stories-ib7Qh_BB.js} +1 -1
  41. package/storybook-static/assets/{Detail-CDluXtts.js → Detail-CJniLn1R.js} +1 -1
  42. package/storybook-static/assets/{Detail.stories-DjniLC4n.js → Detail.stories-BXjdNaL-.js} +1 -1
  43. package/storybook-static/assets/{Dialog-bzRSgGU7.js → Dialog-D6a_qzr3.js} +1 -1
  44. package/storybook-static/assets/{Dialog-bw6cHUsz.js → Dialog-DOYnnXlU.js} +1 -1
  45. package/storybook-static/assets/{Dialog.stories-C6Rs6s_p.js → Dialog.stories-B1cZLRK3.js} +1 -1
  46. package/storybook-static/assets/{Disclosure-DelA6FsQ.js → Disclosure-Chh5o_0s.js} +1 -1
  47. package/storybook-static/assets/{Disclosure.stories-D7yUinyb.js → Disclosure.stories-Cvdvf7V8.js} +1 -1
  48. package/storybook-static/assets/{DisclosureGroup-DbK7mU_Q.js → DisclosureGroup-CRnQOgVj.js} +1 -1
  49. package/storybook-static/assets/{DocsRenderer-JROSPFPF-v3z0zVN1.js → DocsRenderer-JROSPFPF-BBiErkeC.js} +1 -1
  50. package/storybook-static/assets/{DropZone-CI3NW4AC.js → DropZone-Bm5gqdi9.js} +1 -1
  51. package/storybook-static/assets/{DropZone-Cyy-ttEO.js → DropZone-C4L7JAlq.js} +1 -1
  52. package/storybook-static/assets/{DropZone.stories-S0HSpGTB.js → DropZone.stories-BhA9q8Qv.js} +1 -1
  53. package/storybook-static/assets/{DropdownMenu-Ct1bSZsE.js → DropdownMenu-DtZNSUHF.js} +1 -1
  54. package/storybook-static/assets/{ExpandableActionPanel-Oj3xlasj.js → ExpandableActionPanel-0ugXlJy_.js} +1 -1
  55. package/storybook-static/assets/{ExpandableActionPanel.stories-Ch7CLkpR.js → ExpandableActionPanel.stories-CLgMlA9k.js} +1 -1
  56. package/storybook-static/assets/{Flex-UiFm8Tkc.js → Flex-CJlia-8f.js} +1 -1
  57. package/storybook-static/assets/{Flex.stories-CaDiVlBD.js → Flex.stories-DCvfi1EY.js} +1 -1
  58. package/storybook-static/assets/{FloatingPopover-CTYV9W7T.js → FloatingPopover-CsnfPiwV.js} +1 -1
  59. package/storybook-static/assets/{FormattedTableCell-D-ysSR3p.js → FormattedTableCell-Dz5xWVYO.js} +1 -1
  60. package/storybook-static/assets/{Grid-CigBXPe2.js → Grid-C-KwTRAM.js} +1 -1
  61. package/storybook-static/assets/{Grid.stories-ay3z9DQZ.js → Grid.stories-CzbqknNR.js} +1 -1
  62. package/storybook-static/assets/{ImageCropper.stories-Dkce_ugb.js → ImageCropper.stories-DaE-gm-b.js} +1 -1
  63. package/storybook-static/assets/{ImageRenderer-C9_EmGBW.js → ImageRenderer-IsNCXCrZ.js} +1 -1
  64. package/storybook-static/assets/{ImageRenderer.stories-C7bXaNBI.js → ImageRenderer.stories-BbsjUEfJ.js} +1 -1
  65. package/storybook-static/assets/{ImageView.stories-D-ZzGlk8.js → ImageView.stories-DY0UITYz.js} +1 -1
  66. package/storybook-static/assets/{ImageViewer.stories-ItcRfxyy.js → ImageViewer.stories--9q9b9nv.js} +2 -2
  67. package/storybook-static/assets/{ImageViewerRuntime-eaupID36.js → ImageViewerRuntime-CNEH3XGN.js} +1 -1
  68. package/storybook-static/assets/{Input-op4j7Beh.js → Input-DLubbE7P.js} +1 -1
  69. package/storybook-static/assets/{Input-BUDNR96c.js → Input-Dw2JblYt.js} +1 -1
  70. package/storybook-static/assets/{Input.stories-DwulvJIg.js → Input.stories-DQeyDULG.js} +1 -1
  71. package/storybook-static/assets/{InputDateTime-B_cxOp6k.js → InputDateTime-BRzl8Vrt.js} +1 -1
  72. package/storybook-static/assets/{InputDateTime.stories-BueLF4HC.js → InputDateTime.stories-BJTj5v8J.js} +1 -1
  73. package/storybook-static/assets/{InputFile-DSg7sugm.js → InputFile-B8UroZji.js} +1 -1
  74. package/storybook-static/assets/{InputFile-C8z6TPc1.js → InputFile-DPftxjGw.js} +1 -1
  75. package/storybook-static/assets/{InputFile.stories-C6XSbIua.js → InputFile.stories-C7yyqHqc.js} +1 -1
  76. package/storybook-static/assets/{InputFiles-DoatLq3q.js → InputFiles-BQVXHVLy.js} +1 -1
  77. package/storybook-static/assets/{InputFiles-DeZ84Uu_.js → InputFiles-UD_9S7-N.js} +1 -1
  78. package/storybook-static/assets/{InputFiles.stories-BMbE8SJU.js → InputFiles.stories-DjjJS5pZ.js} +1 -1
  79. package/storybook-static/assets/{InputFilesList-CsfDDqaJ.js → InputFilesList-BNjijD3Y.js} +1 -1
  80. package/storybook-static/assets/{InputImage-yJSq98EH.js → InputImage-C-pHr-Sx.js} +1 -1
  81. package/storybook-static/assets/{InputImage-D_YnB2Tw.js → InputImage-DbcbqIhY.js} +1 -1
  82. package/storybook-static/assets/{InputImage.stories-nivUG307.js → InputImage.stories-D-TC9r9t.js} +1 -1
  83. package/storybook-static/assets/{InteractiveComponents-IPkC_Rkg.js → InteractiveComponents-DbhWgM9y.js} +1 -1
  84. package/storybook-static/assets/{InteractiveComponents.stories-D4VzVKZJ.js → InteractiveComponents.stories-B4mkVSea.js} +1 -1
  85. package/storybook-static/assets/{LayoutPicker-ZHkMi-LM.js → LayoutPicker-BoV_E3qt.js} +1 -1
  86. package/storybook-static/assets/{LayoutPicker-aMzPN5Do.js → LayoutPicker-w1EsRpYP.js} +1 -1
  87. package/storybook-static/assets/{LayoutPicker.stories-DAzpzxn5.js → LayoutPicker.stories--ChGnGxf.js} +1 -1
  88. package/storybook-static/assets/{Listbox-CR5nXC9J.js → Listbox-CzZRsr6a.js} +1 -1
  89. package/storybook-static/assets/{Listbox-BmfQOnrb.js → Listbox-qZdTi11b.js} +1 -1
  90. package/storybook-static/assets/{Listbox.stories-CeOpsKxB.js → Listbox.stories-C9k_1850.js} +1 -1
  91. package/storybook-static/assets/{Modal-BStp52Zo.js → Modal-DCpul8QM.js} +1 -1
  92. package/storybook-static/assets/{Modal.stories-CwGm5GYE.js → Modal.stories-Cy0Xd4LF.js} +1 -1
  93. package/storybook-static/assets/{ModalManagerProvider-B5uUXWF9.js → ModalManagerProvider-BrPVMcHV.js} +1 -1
  94. package/storybook-static/assets/{MultiSelect-308npb27.js → MultiSelect-BEQdl-F4.js} +1 -1
  95. package/storybook-static/assets/{MultiSelect-BDs02MZh.js → MultiSelect-Dy4X94E2.js} +1 -1
  96. package/storybook-static/assets/{MultiSelect.stories-DRi_iTp4.js → MultiSelect.stories-FuzejJmz.js} +1 -1
  97. package/storybook-static/assets/{NoData-ovaQEE9W.js → NoData-BsQ9EfkA.js} +1 -1
  98. package/storybook-static/assets/{NotificationsHost-BpeMWhLY.js → NotificationsHost-BSrODvw7.js} +1 -1
  99. package/storybook-static/assets/NotificationsHost.stories-DeiWspcY.js +29 -0
  100. package/storybook-static/assets/{ODataMultiSelect-qlft9L9L.js → ODataMultiSelect-BEz9gcd2.js} +1 -1
  101. package/storybook-static/assets/{ODataMultiSelect.stories-CMPIoPiy.js → ODataMultiSelect.stories-BwMgAkbE.js} +2 -2
  102. package/storybook-static/assets/{ODataSelect-DKBQArAK.js → ODataSelect-BgC7GHOv.js} +1 -1
  103. package/storybook-static/assets/{ODataSelect.stories-DxYIhtwe.js → ODataSelect.stories-DEIRAB-s.js} +2 -2
  104. package/storybook-static/assets/{ODataTreeMultiSelect-DAt6THP3.js → ODataTreeMultiSelect-WyZZuX0_.js} +1 -1
  105. package/storybook-static/assets/{ODataTreeMultiSelect.stories-CBNJP0mP.js → ODataTreeMultiSelect.stories-B6cxuagy.js} +1 -1
  106. package/storybook-static/assets/{ODataTreeSelect-Bzzt4CQC.js → ODataTreeSelect-OJGi3-S7.js} +1 -1
  107. package/storybook-static/assets/{ODataTreeSelect.stories-CWVvuqOt.js → ODataTreeSelect.stories-wGRGErCH.js} +1 -1
  108. package/storybook-static/assets/{OneStepScroller-BY5lz8qi.js → OneStepScroller-DycQ3RuL.js} +1 -1
  109. package/storybook-static/assets/{Option-Rw8xwrPg.js → Option-taxbFfjo.js} +1 -1
  110. package/storybook-static/assets/{OptionButton-Br48w_Zg.js → OptionButton-Q0QaPCII.js} +1 -1
  111. package/storybook-static/assets/{PeriodSelect-8-wpXz6w.js → PeriodSelect-DUJ2nF3F.js} +1 -1
  112. package/storybook-static/assets/{PeriodSelect-DxSRwKw-.js → PeriodSelect-DnM7x-uC.js} +1 -1
  113. package/storybook-static/assets/{PeriodSelect.stories-B-qgUzlS.js → PeriodSelect.stories-Db0bqe3J.js} +1 -1
  114. package/storybook-static/assets/{PickerTriggerActions-C5xmysFh.js → PickerTriggerActions-CGJd7xmR.js} +1 -1
  115. package/storybook-static/assets/{Popover-NJwt_vZZ.js → Popover-B6oidz5p.js} +1 -1
  116. package/storybook-static/assets/{Popover-Ds8PUigp.js → Popover-Tbhf8T81.js} +1 -1
  117. package/storybook-static/assets/{Popover.stories-CUOFA_Xf.js → Popover.stories-DE1LxZvv.js} +1 -1
  118. package/storybook-static/assets/{PresetRangeDateInput-DyOpbkON.js → PresetRangeDateInput-CQ5FfmrL.js} +1 -1
  119. package/storybook-static/assets/{PresetRangeDateInput-Xk0bOy3S.js → PresetRangeDateInput-DfgoR0My.js} +1 -1
  120. package/storybook-static/assets/{PresetRangeDateInput.stories-CwjUlXj0.js → PresetRangeDateInput.stories-CgoYAYBG.js} +1 -1
  121. package/storybook-static/assets/{PresetSelect-Ddmr0niY.js → PresetSelect-BPtAknAr.js} +1 -1
  122. package/storybook-static/assets/README--TpGcM95.js +110 -0
  123. package/storybook-static/assets/{README-MzcO5Z_P.js → README-4iBHWAP5.js} +1 -1
  124. package/storybook-static/assets/README-98KIgy5G.js +75 -0
  125. package/storybook-static/assets/README-B6II8p0W.js +154 -0
  126. package/storybook-static/assets/{README-CkWglKbS.js → README-B6vU5_7I.js} +1 -1
  127. package/storybook-static/assets/README-BFJVjjZR.js +325 -0
  128. package/storybook-static/assets/README-BIT4HlFP.js +441 -0
  129. package/storybook-static/assets/{README-DqQDgJN-.js → README-BK6Epio1.js} +1 -1
  130. package/storybook-static/assets/{README-DRnlD7y8.js → README-BRlPB5_k.js} +1 -1
  131. package/storybook-static/assets/README-BTFpEaXG.js +64 -0
  132. package/storybook-static/assets/README-BWhXgC_o.js +226 -0
  133. package/storybook-static/assets/README-BbNHvOoR.js +101 -0
  134. package/storybook-static/assets/README-BbunUo8b.js +118 -0
  135. package/storybook-static/assets/README-BmYpfZKr.js +1844 -0
  136. package/storybook-static/assets/README-Bu5uvhAT.js +230 -0
  137. package/storybook-static/assets/README-Bx6fvSBE.js +1282 -0
  138. package/storybook-static/assets/README-Bx6gIGiA.js +69 -0
  139. package/storybook-static/assets/README-ByhxsX44.js +324 -0
  140. package/storybook-static/assets/README-Byi1FFpw.js +98 -0
  141. package/storybook-static/assets/README-C3Is3a3B.js +208 -0
  142. package/storybook-static/assets/{README-C0BwTe5N.js → README-C6prwAXw.js} +1 -1
  143. package/storybook-static/assets/{README-BzVni2ve.js → README-C9S83J_G.js} +1 -1
  144. package/storybook-static/assets/{README-BHw6MVjD.js → README-CGgxP5Zo.js} +1 -1
  145. package/storybook-static/assets/README-CJ2ZVG2U.js +2124 -0
  146. package/storybook-static/assets/README-CNGCAm5d.js +95 -0
  147. package/storybook-static/assets/README-Cb_q420B.js +90 -0
  148. package/storybook-static/assets/README-CtIDPNJ3.js +186 -0
  149. package/storybook-static/assets/README-CzO3Dchr.js +64 -0
  150. package/storybook-static/assets/README-D0rzQthv.js +264 -0
  151. package/storybook-static/assets/README-DEQu7djz.js +1704 -0
  152. package/storybook-static/assets/README-DFihT_sm.js +296 -0
  153. package/storybook-static/assets/{README-CTIBG4zH.js → README-DMiWsyv_.js} +1 -1
  154. package/storybook-static/assets/README-DOx8lXXk.js +82 -0
  155. package/storybook-static/assets/{README-DzTc6XmY.js → README-DPhDjr43.js} +1 -1
  156. package/storybook-static/assets/{README-Dki94Nf2.js → README-D_NqWPa9.js} +1 -1
  157. package/storybook-static/assets/README-DhJ5Rb1w.js +355 -0
  158. package/storybook-static/assets/README-DlwhWCvQ.js +1146 -0
  159. package/storybook-static/assets/README-Dxi73a2Q.js +740 -0
  160. package/storybook-static/assets/README-Dycov6NP.js +583 -0
  161. package/storybook-static/assets/README-GTBkSG4_.js +3591 -0
  162. package/storybook-static/assets/README-Gfd9tLTw.js +672 -0
  163. package/storybook-static/assets/{README-B4zYJg6u.js → README-Kfawetke.js} +1 -1
  164. package/storybook-static/assets/{README-BzVHwvgo.js → README-UDBM7ZMT.js} +1 -1
  165. package/storybook-static/assets/{README-D-XjRtAE.js → README-VTWQxLm_.js} +1 -1
  166. package/storybook-static/assets/README-YHNWrTZv.js +400 -0
  167. package/storybook-static/assets/README-_0Otw0eD.js +448 -0
  168. package/storybook-static/assets/README-aw2Xu9xu.js +158 -0
  169. package/storybook-static/assets/README-eg1emlll.js +192 -0
  170. package/storybook-static/assets/README-iqQHdhZ4.js +416 -0
  171. package/storybook-static/assets/{README-BdPlV5nA.js → README-llxZAtCj.js} +1 -1
  172. package/storybook-static/assets/README-wFnEIGl4.js +95 -0
  173. package/storybook-static/assets/{README-Dx3cpFMr.js → README-webB1yH0.js} +1 -1
  174. package/storybook-static/assets/README-wtreGRCe.js +208 -0
  175. package/storybook-static/assets/{RadioButton-DWbkCY8u.js → RadioButton-CNOLDk_o.js} +1 -1
  176. package/storybook-static/assets/{RadioButton-oSvQ-gQh.js → RadioButton-Ce05_q7s.js} +1 -1
  177. package/storybook-static/assets/{RadioButton.stories-GNQ9XJZT.js → RadioButton.stories-CPd4lTl0.js} +1 -1
  178. package/storybook-static/assets/{RadioGroup-CvXjGXcV.js → RadioGroup-BtfD5Szd.js} +1 -1
  179. package/storybook-static/assets/{RadioGroup-eBYggurL.js → RadioGroup-Ccm7G-dv.js} +1 -1
  180. package/storybook-static/assets/{RadioGroup.stories-C77j_cPv.js → RadioGroup.stories-D-RRPHwi.js} +1 -1
  181. package/storybook-static/assets/{Scrollable-De6SdhI3.js → Scrollable-DvdBIeig.js} +1 -1
  182. package/storybook-static/assets/{Select-DQMoVjn4.js → Select-8PV9PBKF.js} +1 -1
  183. package/storybook-static/assets/{Select-Bwc0bEpt.js → Select-G04B41FM.js} +1 -1
  184. package/storybook-static/assets/{Select.stories-BSIJKJnM.js → Select.stories-Cf6CBhV8.js} +1 -1
  185. package/storybook-static/assets/{SerializableSelect-B73irNFR.js → SerializableSelect-CdQdHIVp.js} +1 -1
  186. package/storybook-static/assets/{SerializableSelect.stories-Z9q6g5v2.js → SerializableSelect.stories-0AKUGpbS.js} +1 -1
  187. package/storybook-static/assets/{SingleDateTimeInput-Dq9LcjnS.js → SingleDateTimeInput-DWT1ORhL.js} +1 -1
  188. package/storybook-static/assets/{SingleDateTimeInput-BHl6srqA.js → SingleDateTimeInput-DattLt6w.js} +1 -1
  189. package/storybook-static/assets/SingleDateTimeInput.stories-BLJV3jzV.js +48 -0
  190. package/storybook-static/assets/{Slider-CvM0N_kc.js → Slider-DKEI4cDd.js} +1 -1
  191. package/storybook-static/assets/{Slider-BiyKexKa.js → Slider-Dci-mJt_.js} +1 -1
  192. package/storybook-static/assets/{Slider.stories-CdHAMDmY.js → Slider.stories-Dp7oQueF.js} +1 -1
  193. package/storybook-static/assets/{SliderInput-DqHotbhB.js → SliderInput-BGPQmlgY.js} +1 -1
  194. package/storybook-static/assets/{SliderInput-Bx_oHUCV.js → SliderInput-BhjqGOKt.js} +1 -1
  195. package/storybook-static/assets/{SliderInput.stories-R5yDhghM.js → SliderInput.stories-DXNhRU3X.js} +1 -1
  196. package/storybook-static/assets/{Sortable-D7pjTHO0.js → Sortable-CMd9l1Gd.js} +1 -1
  197. package/storybook-static/assets/{Sortable.stories-CVLG6pSH.js → Sortable.stories-BN1cFEFJ.js} +1 -1
  198. package/storybook-static/assets/{Splitter-B1Du6XI2.js → Splitter-GL65TlI9.js} +1 -1
  199. package/storybook-static/assets/{Splitter.stories-D-FRLMCc.js → Splitter.stories-q5PlI6rB.js} +1 -1
  200. package/storybook-static/assets/{StateSelect-zl-yZibY.js → StateSelect-Byik5-iZ.js} +1 -1
  201. package/storybook-static/assets/{StateSelect-BJdUEUBc.js → StateSelect-CT0JF2V6.js} +1 -1
  202. package/storybook-static/assets/{StateSelect.stories-DgidR5zR.js → StateSelect.stories-pPEPmgnN.js} +1 -1
  203. package/storybook-static/assets/{StringToggle.stories-IucGrtIi.js → StringToggle.stories-BQlFmCE7.js} +1 -1
  204. package/storybook-static/assets/{Switch-BJrn2lIN.js → Switch--xGPiYk-.js} +1 -1
  205. package/storybook-static/assets/{Switch-5dCshvVo.js → Switch-DhaLI9CG.js} +1 -1
  206. package/storybook-static/assets/{Switch.stories-Dp_l3_JL.js → Switch.stories-5DisgIyj.js} +1 -1
  207. package/storybook-static/assets/{Table-BFAEcUde.js → Table-Bf6MicdG.js} +1 -1
  208. package/storybook-static/assets/{Table.stories-CohejRQv.js → Table.stories-CS7rQgj9.js} +2 -2
  209. package/storybook-static/assets/{Tabs-CI32QiHf.js → Tabs-B4y4y8Ap.js} +1 -1
  210. package/storybook-static/assets/{Tabs.stories-Cr9d9ipA.js → Tabs.stories-C0SpdGkh.js} +1 -1
  211. package/storybook-static/assets/{TabsBox-BlDOUDMF.js → TabsBox-C5LLLhnj.js} +1 -1
  212. package/storybook-static/assets/{TagInput-YZ7eSv8W.js → TagInput-D4BpuCoH.js} +1 -1
  213. package/storybook-static/assets/{TagInput.stories-DrOvsiI5.js → TagInput.stories-rn2wtZP_.js} +1 -1
  214. package/storybook-static/assets/{Text-DK4jN26J.js → Text-BhBt9e7C.js} +1 -1
  215. package/storybook-static/assets/{Textarea-CFh5f_lC.js → Textarea-B-Hz7ujq.js} +1 -1
  216. package/storybook-static/assets/{Textarea-DxPuWBZj.js → Textarea-BHHxY5sd.js} +1 -1
  217. package/storybook-static/assets/{Textarea.stories-CUeOGKYc.js → Textarea.stories-CZ2kWz20.js} +1 -1
  218. package/storybook-static/assets/{TimePanel-BUhFtwlb.js → TimePanel-Cg8fgFsn.js} +1 -1
  219. package/storybook-static/assets/{TimePanel.stories-CpXpMBDN.js → TimePanel.stories-BxdwtK2e.js} +1 -1
  220. package/storybook-static/assets/{Toggle-l2AvDbRn.js → Toggle-BWwfk9fi.js} +1 -1
  221. package/storybook-static/assets/{Toggle-BtApzBNH.js → Toggle-Ce9rbjBc.js} +1 -1
  222. package/storybook-static/assets/{Toggle.stories-Ca8otmAa.js → Toggle.stories-0fzcmzKy.js} +1 -1
  223. package/storybook-static/assets/{TreeMultiSelect-C9QDV63L.js → TreeMultiSelect-B06Y0lIc.js} +1 -1
  224. package/storybook-static/assets/{TreeMultiSelect-nXC4ZB5b.js → TreeMultiSelect-CrAdR_jM.js} +1 -1
  225. package/storybook-static/assets/{TreeMultiSelect.stories-6STRGJbF.js → TreeMultiSelect.stories-CAVoj56E.js} +1 -1
  226. package/storybook-static/assets/{TreePickerBase-Cq7fSw3x.js → TreePickerBase-qU2xPlar.js} +1 -1
  227. package/storybook-static/assets/{TreeSelect-CITef9rp.js → TreeSelect-BIHydJFy.js} +1 -1
  228. package/storybook-static/assets/{TreeSelect-rMNyu_KT.js → TreeSelect-BKnWu0C7.js} +1 -1
  229. package/storybook-static/assets/{TreeSelect.stories-B-Emz9yW.js → TreeSelect.stories-Dp_8ybAf.js} +1 -1
  230. package/storybook-static/assets/{TreeTable-CLiP0td3.js → TreeTable-pVXjU9dG.js} +1 -1
  231. package/storybook-static/assets/{TreeTable.stories-DJb9qt8k.js → TreeTable.stories-CV_8Ui6R.js} +2 -2
  232. package/storybook-static/assets/{blocks-DndFRxxW.js → blocks-BY40djCc.js} +3 -3
  233. package/storybook-static/assets/{check-CLkTJVXe.js → check-CVkPTDzp.js} +1 -1
  234. package/storybook-static/assets/{chevron-down-miCejSEn.js → chevron-down-BtNO4Vhe.js} +1 -1
  235. package/storybook-static/assets/{chevron-left-DhQIPej2.js → chevron-left-kceSK3sZ.js} +1 -1
  236. package/storybook-static/assets/{chevron-right-DfBBx-fr.js → chevron-right-BA_LO2El.js} +1 -1
  237. package/storybook-static/assets/{chunk-W22LQPXL-IdwKKJUw.js → chunk-W22LQPXL-yJiFPv6e.js} +1 -1
  238. package/storybook-static/assets/{circle-alert-DOmVf8am.js → circle-alert-B2m4a1zz.js} +1 -1
  239. package/storybook-static/assets/{circle-check-e7eSQ2VD.js → circle-check-Cfjhotlm.js} +1 -1
  240. package/storybook-static/assets/{components-Bm4Cw8Ap.js → components-D6yV8PLX.js} +3 -3
  241. package/storybook-static/assets/{contextMenu-DpIKeJju.js → contextMenu-B0pQBIW0.js} +1 -1
  242. package/storybook-static/assets/{defaultRenderers-m21aWJXz.js → defaultRenderers-DfmnIuod.js} +1 -1
  243. package/storybook-static/assets/{download-eAKjms6q.js → download-Lba8elK9.js} +1 -1
  244. package/storybook-static/assets/{floating-ui.react-DmilONq6.js → floating-ui.react-BFNvfMpU.js} +1 -1
  245. package/storybook-static/assets/formatters-D33Uh3si-CxrG0jsB.js +1 -0
  246. package/storybook-static/assets/foundationApi-DZhnQ2cC.js +59 -0
  247. package/storybook-static/assets/foundationLib-CoVTo22U.js +30 -0
  248. package/storybook-static/assets/{hooks-RI5_2AXI.js → hooks-Cc6eXN6U.js} +1 -1
  249. package/storybook-static/assets/iframe-BXM-JBuH.js +1 -0
  250. package/storybook-static/assets/{iframe-Sr0umHM6.js → iframe-o7sH2IXC.js} +4 -4
  251. package/storybook-static/assets/{info-DhJTzwcL.js → info-BpsVP_dM.js} +1 -1
  252. package/storybook-static/assets/odata-CXsbxsRY.js +1 -0
  253. package/storybook-static/assets/odata-service-CWkHASdw-DlmSiioz.js +3 -0
  254. package/storybook-static/assets/{odataStoryFixtures-lgnWIUp7.js → odataStoryFixtures-Dj_bzRqh.js} +1 -1
  255. package/storybook-static/assets/{react-YFbUKK0m.js → react-DeJ0JTHb.js} +1 -1
  256. package/storybook-static/assets/{refresh-cw-C7WnxX9M.js → refresh-cw-BvGyjEXe.js} +1 -1
  257. package/storybook-static/assets/{settings-2-0NVvyKQl.js → settings-2-BdXxnHos.js} +1 -1
  258. package/storybook-static/assets/{sortable-DDGG-Zfs.js → sortable-XkyN-9r5.js} +1 -1
  259. package/storybook-static/assets/{syntaxhighlighter-QEQV7K2Y-CxWm8nc8.js → syntaxhighlighter-QEQV7K2Y-Cafn3LV1.js} +1 -1
  260. package/storybook-static/assets/{trash-2-BnceCuhg.js → trash-2-uPH9-fND.js} +1 -1
  261. package/storybook-static/assets/{triangle-alert-MPi3GVgt.js → triangle-alert-tT01vSMw.js} +1 -1
  262. package/storybook-static/assets/{useODataSelectBase-hmjK6chS.js → useODataSelectBase-B2LlOwPZ.js} +1 -1
  263. package/storybook-static/assets/useODataTreeData-CU7Rqcb9.js +1 -0
  264. package/storybook-static/assets/{usePickerQuery-CtsGhieD.js → usePickerQuery-D8GHQ6KR.js} +1 -1
  265. package/storybook-static/assets/{usePickerTriggerController-EaI8W2G0.js → usePickerTriggerController-CcK1jmDy.js} +1 -1
  266. package/storybook-static/assets/{x-CqPSvWfo.js → x-BlAURbAH.js} +1 -1
  267. package/storybook-static/iframe.html +2 -2
  268. package/storybook-static/index.json +1 -1
  269. package/storybook-static/project.json +1 -1
  270. package/storybook-static/assets/DateInput-05Iy69_a.js +0 -1
  271. package/storybook-static/assets/NotificationsHost.stories-CgbFboVD.js +0 -29
  272. package/storybook-static/assets/SingleDateTimeInput.stories-C2RuBRAF.js +0 -48
  273. package/storybook-static/assets/async-SjiCjIjO.js +0 -625
  274. package/storybook-static/assets/formatters-CBgrBeSA-CqB1pZxS.js +0 -1
  275. package/storybook-static/assets/foundationLib-DRrox3tN.js +0 -25
  276. package/storybook-static/assets/iframe-DQo-3eW2.js +0 -1
  277. package/storybook-static/assets/odata-DhISMZkE.js +0 -1
  278. package/storybook-static/assets/odata-service-B6TxBSLm-Bq8Ya67E.js +0 -3
  279. package/storybook-static/assets/odataFetchFn-Dv6Xi5CI.js +0 -763
  280. package/storybook-static/assets/persisted-CUFiw53N.js +0 -600
  281. package/storybook-static/assets/useODataTreeData-CKuavbWc.js +0 -1
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Sr0umHM6.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-DndFRxxW.js";function o(e){let t={a:`a`,code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,table:`table`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation Lib/API/Crypto`}),`
1
+ import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-o7sH2IXC.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-BY40djCc.js";function o(e){let t={a:`a`,code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,table:`table`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation Lib/API/Crypto`}),`
2
2
  `,(0,c.jsxs)(t.h1,{id:`идентификаторы-и-строковые-hash-через-ryuzaki13react-foundation-libcrypto`,children:[`Идентификаторы и строковые hash через `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/crypto`})]}),`
3
3
  `,(0,c.jsxs)(t.p,{children:[`Модуль `,(0,c.jsx)(t.code,{children:`crypto`}),` предоставляет небольшие функции для двух разных задач:`]}),`
4
4
  `,(0,c.jsxs)(t.ul,{children:[`
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Sr0umHM6.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-DndFRxxW.js";function o(e){let t={a:`a`,code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,table:`table`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation Lib/API/Formatters/Value State`}),`
1
+ import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-o7sH2IXC.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-BY40djCc.js";function o(e){let t={a:`a`,code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,table:`table`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation Lib/API/Formatters/Value State`}),`
2
2
  `,(0,c.jsx)(t.h1,{id:`value-state`,children:`Value state`}),`
3
3
  `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`valueState`}),` преобразует обычное значение в семантическое состояние интерфейса:`]}),`
4
4
  `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`type State = "" | "none" | "information" | "success" | "warning" | "error";
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Sr0umHM6.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-DndFRxxW.js";function o(e){let t={a:`a`,code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,table:`table`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation Lib/API/Copy`}),`
1
+ import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-o7sH2IXC.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-BY40djCc.js";function o(e){let t={a:`a`,code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,table:`table`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation Lib/API/Copy`}),`
2
2
  `,(0,c.jsxs)(t.h1,{id:`копирование-текста-через-ryuzaki13react-foundation-libcopy`,children:[`Копирование текста через `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/copy`})]}),`
3
3
  `,(0,c.jsxs)(t.p,{children:[`Модуль `,(0,c.jsx)(t.code,{children:`copy`}),` содержит React hooks для копирования текста в системный буфер обмена, чтения текста из DOM-элемента и показа короткого состояния «скопировано».`]}),`
4
4
  `,(0,c.jsx)(t.p,{children:`Основные сценарии:`}),`
@@ -0,0 +1,400 @@
1
+ import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-o7sH2IXC.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-BY40djCc.js";function o(e){let t={a:`a`,code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,table:`table`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation API/Transport/HTTP`}),`
2
+ `,(0,c.jsxs)(t.h1,{id:`обычный-http-через-ryuzaki13react-foundation-apihttp`,children:[`Обычный HTTP через `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-api/http`})]}),`
3
+ `,(0,c.jsxs)(t.p,{children:[`Модуль выполняет нейтральные HTTP/REST запросы и создаёт функции, совместимые с TanStack Query. Внешний payload остаётся `,(0,c.jsx)(t.code,{children:`unknown`}),`, пока consumer явно не проверит его через `,(0,c.jsx)(t.code,{children:`parse`}),`.`]}),`
4
+ `,(0,c.jsx)(t.h2,{id:`содержание`,children:`Содержание`}),`
5
+ `,(0,c.jsxs)(t.ul,{children:[`
6
+ `,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#%D0%BA%D0%BE%D0%B3%D0%B4%D0%B0-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C`,children:`Когда использовать`})}),`
7
+ `,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82`,children:`Импорт`})}),`
8
+ `,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#httpfetch`,children:(0,c.jsx)(t.code,{children:`httpFetch`})})}),`
9
+ `,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#httpfetchpayload`,children:(0,c.jsx)(t.code,{children:`httpFetchPayload`})})}),`
10
+ `,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#httpjsonqueryfn`,children:(0,c.jsx)(t.code,{children:`httpJsonQueryFn`})})}),`
11
+ `,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#httpjsonmutationfn`,children:(0,c.jsx)(t.code,{children:`httpJsonMutationFn`})})}),`
12
+ `,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#routeerror`,children:(0,c.jsx)(t.code,{children:`RouteError`})})}),`
13
+ `,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B8-runtime-%D0%B8-%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C`,children:`Ошибки, runtime и безопасность`})}),`
14
+ `,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#%D0%BF%D0%BE%D0%BB%D0%BD%D1%8B%D0%B9-api`,children:`Полный API`})}),`
15
+ `]}),`
16
+ `,(0,c.jsx)(t.h2,{id:`когда-использовать`,children:`Когда использовать`}),`
17
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-text`,children:`обычный REST/HTTP ──► /http
18
+ SAP Gateway/OData ──► /odata
19
+ `})}),`
20
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`http`}),` не добавляет SAP headers, `,(0,c.jsx)(t.code,{children:`credentials: include`}),`, X-CSRF token, SSO recovery, OData V2 headers и не снимает envelope `,(0,c.jsx)(t.code,{children:`{ d: { results } }`}),`. Для SAP/OData используйте `,(0,c.jsx)(t.a,{href:`../odata/README.mdx`,children:(0,c.jsx)(t.code,{children:`/odata`})}),`.`]}),`
21
+ `,(0,c.jsx)(t.p,{children:`Модуль намеренно остаётся небольшим. Он не пытается быть REST framework: выполняет request, проверяет HTTP status, разбирает базовый payload и требует от consumer-а runtime parser.`}),`
22
+ `,(0,c.jsx)(t.h2,{id:`импорт`,children:`Импорт`}),`
23
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`import {
24
+ httpFetch,
25
+ httpFetchPayload,
26
+ httpJsonMutationFn,
27
+ httpJsonQueryFn,
28
+ RouteError
29
+ } from "@ryuzaki13/react-foundation-api/http";
30
+
31
+ import type {
32
+ HttpMutationFnOptions,
33
+ HttpQueryFnOptions,
34
+ HttpRequestOptions
35
+ } from "@ryuzaki13/react-foundation-api/http";
36
+ `})}),`
37
+ `,(0,c.jsxs)(t.p,{children:[`Нужны глобальные Web Fetch API: `,(0,c.jsx)(t.code,{children:`fetch`}),`, `,(0,c.jsx)(t.code,{children:`Request`}),`, `,(0,c.jsx)(t.code,{children:`Response`}),`, `,(0,c.jsx)(t.code,{children:`Headers`}),`, `,(0,c.jsx)(t.code,{children:`URL`}),`.`]}),`
38
+ `,(0,c.jsx)(t.h2,{id:`httpfetch`,children:(0,c.jsx)(t.code,{children:`httpFetch`})}),`
39
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const response = await httpFetch("/health", {
40
+ baseUrl: "https://api.example.com",
41
+ init: {
42
+ method: "GET",
43
+ headers: { Accept: "text/plain" }
44
+ }
45
+ });
46
+
47
+ console.log(await response.text());
48
+ `})}),`
49
+ `,(0,c.jsxs)(t.p,{children:[`Функция возвращает исходный `,(0,c.jsx)(t.code,{children:`Response`}),`, если `,(0,c.jsx)(t.code,{children:`response.ok === true`}),`. Body ещё не прочитан.`]}),`
50
+ `,(0,c.jsx)(t.p,{children:`Для string input URL строится простой конкатенацией:`}),`
51
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-text`,children:`baseUrl + input
52
+ `})}),`
53
+ `,(0,c.jsx)(t.p,{children:`Helper не исправляет slash:`}),`
54
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`// Правильно.
55
+ { baseUrl: "https://api.example.com", input: "/users" }
56
+
57
+ // Получится https://api.example.comusers — неверно.
58
+ { baseUrl: "https://api.example.com", input: "users" }
59
+ `})}),`
60
+ `,(0,c.jsxs)(t.p,{children:[`Если input является `,(0,c.jsx)(t.code,{children:`Request`}),` или `,(0,c.jsx)(t.code,{children:`URL`}),`, `,(0,c.jsx)(t.code,{children:`baseUrl`}),` игнорируется. Это не proxy/url resolver.`]}),`
61
+ `,(0,c.jsx)(t.h3,{id:`полные-request-options`,children:`Полные request options`}),`
62
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`type HttpRequestOptions = {
63
+ readonly baseUrl?: string;
64
+ readonly init?: RequestInit;
65
+ };
66
+ `})}),`
67
+ `,(0,c.jsx)(t.p,{children:`Caller самостоятельно задаёт method, headers, cookies и signal:`}),`
68
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const controller = new AbortController();
69
+
70
+ const request = httpFetch("/profile", {
71
+ baseUrl: "/api",
72
+ init: {
73
+ method: "GET",
74
+ headers: {
75
+ Accept: "application/json",
76
+ Authorization: \`Bearer \${token}\`
77
+ },
78
+ credentials: "include",
79
+ signal: controller.signal
80
+ }
81
+ });
82
+
83
+ controller.abort();
84
+ await request;
85
+ `})}),`
86
+ `,(0,c.jsx)(t.p,{children:`Отмена пробрасывается как native fetch error. Модуль не превращает её в специальный класс.`}),`
87
+ `,(0,c.jsxs)(t.h3,{id:`зачем-возвращать-response`,children:[`Зачем возвращать `,(0,c.jsx)(t.code,{children:`Response`})]}),`
88
+ `,(0,c.jsxs)(t.p,{children:[`Используйте `,(0,c.jsx)(t.code,{children:`httpFetch`}),`, а не `,(0,c.jsx)(t.code,{children:`httpFetchPayload`}),`, когда нужны headers, Blob, stream или custom parser:`]}),`
89
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const response = await httpFetch("/reports/export.xlsx", {
90
+ baseUrl: "/api"
91
+ });
92
+
93
+ const file = await response.blob();
94
+ const disposition = response.headers.get("Content-Disposition");
95
+ `})}),`
96
+ `,(0,c.jsxs)(t.p,{children:[`Response body читается один раз. После `,(0,c.jsx)(t.code,{children:`blob()`}),` нельзя повторно вызвать `,(0,c.jsx)(t.code,{children:`json()`}),` без предварительного `,(0,c.jsx)(t.code,{children:`response.clone()`}),`.`]}),`
97
+ `,(0,c.jsx)(t.h2,{id:`httpfetchpayload`,children:(0,c.jsx)(t.code,{children:`httpFetchPayload`})}),`
98
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const payload: unknown = await httpFetchPayload("/api/profile");
99
+ `})}),`
100
+ `,(0,c.jsx)(t.p,{children:`Правила parser-а:`}),`
101
+ `,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Response`}),(0,c.jsx)(t.th,{children:`Результат`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsxs)(t.td,{children:[`status `,(0,c.jsx)(t.code,{children:`204`}),` или `,(0,c.jsx)(t.code,{children:`205`})]}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`null`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`Content-Type`}),` содержит `,(0,c.jsx)(t.code,{children:`application/json`})]}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`response.json()`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`любой другой content type`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`response.text()`})})]})]})]}),`
102
+ `,(0,c.jsxs)(t.p,{children:[`Результат намеренно `,(0,c.jsx)(t.code,{children:`unknown`}),`. Generic type не может проверить данные, пришедшие по сети:`]}),`
103
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`function parseProfile(value: unknown): Profile {
104
+ if (!isProfile(value)) throw new Error("Некорректный Profile payload");
105
+ return value;
106
+ }
107
+
108
+ const profile = parseProfile(await httpFetchPayload("/api/profile"));
109
+ `})}),`
110
+ `,(0,c.jsxs)(t.p,{children:[`Если сервер отдаёт JSON без корректного `,(0,c.jsx)(t.code,{children:`Content-Type`}),`, модуль вернёт JSON как string. Исправьте backend или разберите string на своей boundary.`]}),`
111
+ `,(0,c.jsxs)(t.p,{children:[`Content-Type приводится к lowercase, но распознаётся только media type, содержащий literal `,(0,c.jsx)(t.code,{children:`application/json`}),`. Например, `,(0,c.jsx)(t.code,{children:`application/problem+json`}),` будет прочитан как text. Для такого endpoint используйте `,(0,c.jsx)(t.code,{children:`httpFetch`}),` с custom parsing либо расширьте общий package contract.`]}),`
112
+ `,(0,c.jsxs)(t.p,{children:[`Invalid JSON с header `,(0,c.jsx)(t.code,{children:`application/json`}),` приводит к native parsing error. Он не заменяется на `,(0,c.jsx)(t.code,{children:`null`}),` или text.`]}),`
113
+ `,(0,c.jsx)(t.h2,{id:`httpjsonqueryfn`,children:(0,c.jsx)(t.code,{children:`httpJsonQueryFn`})}),`
114
+ `,(0,c.jsxs)(t.p,{children:[`Factory возвращает async-функцию с формой TanStack Query `,(0,c.jsx)(t.code,{children:`queryFn`}),`:`]}),`
115
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const loadProfile = httpJsonQueryFn("/api/profile", {
116
+ baseUrl: "https://api.example.com",
117
+ parse: parseProfile,
118
+ swCache: "ttl=10m;name=profile"
119
+ });
120
+
121
+ const profile = await loadProfile({ signal });
122
+ `})}),`
123
+ `,(0,c.jsx)(t.p,{children:`С React Query:`}),`
124
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-tsx`,children:`const profileQuery = useQuery({
125
+ queryKey: ["profile", userId],
126
+ queryFn: httpJsonQueryFn(\`/api/users/\${userId}\`, {
127
+ parse: parseProfile
128
+ })
129
+ });
130
+ `})}),`
131
+ `,(0,c.jsx)(t.p,{children:`Factory:`}),`
132
+ `,(0,c.jsxs)(t.ul,{children:[`
133
+ `,(0,c.jsxs)(t.li,{children:[`использует `,(0,c.jsx)(t.code,{children:`init.signal`}),`, если он задан явно;`]}),`
134
+ `,(0,c.jsx)(t.li,{children:`иначе подставляет signal, переданный TanStack Query;`}),`
135
+ `,(0,c.jsxs)(t.li,{children:[`добавляет `,(0,c.jsx)(t.code,{children:`x-sw-cache`}),`, только если `,(0,c.jsx)(t.code,{children:`swCache`}),` truthy;`]}),`
136
+ `,(0,c.jsxs)(t.li,{children:[`вызывает обязательный `,(0,c.jsx)(t.code,{children:`parse(payload)`}),` после успешного запроса.`]}),`
137
+ `]}),`
138
+ `,(0,c.jsxs)(t.p,{children:[`Header `,(0,c.jsx)(t.code,{children:`x-sw-cache`}),` — только protocol с Service Worker. Без соответствующего SW он не создаёт cache.`]}),`
139
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`parse`}),` может вернуть преобразованную domain model, но обычно лучше ограничиться runtime validation и вынести бизнес-mapping владельцу entity.`]}),`
140
+ `,(0,c.jsxs)(t.h3,{id:`почему-parse-обязателен`,children:[`Почему `,(0,c.jsx)(t.code,{children:`parse`}),` обязателен`]}),`
141
+ `,(0,c.jsx)(t.p,{children:`TypeScript generic исчезает из runtime:`}),`
142
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`// Аннотация User не проверяет network.
143
+ const unsafe = httpJsonQueryFn<User>("/api/user", {
144
+ parse: (payload) => payload as User
145
+ });
146
+ `})}),`
147
+ `,(0,c.jsx)(t.p,{children:`Минимальный parser:`}),`
148
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`function parseUser(payload: unknown): User {
149
+ if (!payload || typeof payload !== "object") {
150
+ throw new Error("User response должен быть object");
151
+ }
152
+
153
+ const record = payload as Record<string, unknown>;
154
+ if (typeof record.id !== "string" || typeof record.name !== "string") {
155
+ throw new Error("User response содержит неверные поля");
156
+ }
157
+
158
+ return { id: record.id, name: record.name };
159
+ }
160
+ `})}),`
161
+ `,(0,c.jsx)(t.p,{children:`Для сложной формы используйте project-approved runtime schema validator.`}),`
162
+ `,(0,c.jsx)(t.h3,{id:`stable-query-options`,children:`Stable query options`}),`
163
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`import { queryOptions } from "@tanstack/react-query";
164
+
165
+ const userKeys = {
166
+ all: ["users"] as const,
167
+ detail: (id: string) => [...userKeys.all, "detail", id] as const
168
+ };
169
+
170
+ export const userQueryOptions = (id: string) =>
171
+ queryOptions({
172
+ queryKey: userKeys.detail(id),
173
+ queryFn: httpJsonQueryFn(
174
+ \`/api/users/\${encodeURIComponent(id)}\`,
175
+ {
176
+ parse: parseUser,
177
+ swCache: "off"
178
+ }
179
+ ),
180
+ enabled: id.length > 0
181
+ });
182
+ `})}),`
183
+ `,(0,c.jsx)(t.p,{children:`Все inputs, меняющие response, должны быть в query key. URL encoding остаётся обязанностью caller-а.`}),`
184
+ `,(0,c.jsx)(t.h3,{id:`abortsignal-priority`,children:`AbortSignal priority`}),`
185
+ `,(0,c.jsxs)(t.p,{children:[`Если `,(0,c.jsx)(t.code,{children:`options.init.signal`}),` отсутствует, factory подставляет signal TanStack Query. Если explicit signal уже задан, он имеет приоритет и QueryClient cancellation его не заменит.`]}),`
186
+ `,(0,c.jsx)(t.h3,{id:`service-worker-header`,children:`Service Worker header`}),`
187
+ `,(0,c.jsxs)(t.p,{children:[`Factory создаёт новый `,(0,c.jsx)(t.code,{children:`Headers`}),` object и выставляет `,(0,c.jsx)(t.code,{children:`x-sw-cache`}),`, когда `,(0,c.jsx)(t.code,{children:`swCache`}),` truthy. Если такой header уже был в `,(0,c.jsx)(t.code,{children:`init.headers`}),`, option `,(0,c.jsx)(t.code,{children:`swCache`}),` перезапишет его.`]}),`
188
+ `,(0,c.jsxs)(t.p,{children:[`Сам header ничего не кэширует без Service Worker, который реализует protocol. Для auth-sensitive responses используйте `,(0,c.jsx)(t.code,{children:`off`}),`, пока isolation users/sessions явно не доказана.`]}),`
189
+ `,(0,c.jsx)(t.h2,{id:`httpjsonmutationfn`,children:(0,c.jsx)(t.code,{children:`httpJsonMutationFn`})}),`
190
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`type CreateUserInput = { name: string };
191
+
192
+ const createUser = httpJsonMutationFn<CreateUserInput, User>("/api/users", {
193
+ method: "POST",
194
+ mapBody: (input) => ({ displayName: input.name }),
195
+ parse: parseUser
196
+ });
197
+
198
+ const user = await createUser({ name: "Анна" });
199
+ `})}),`
200
+ `,(0,c.jsxs)(t.p,{children:[`С `,(0,c.jsx)(t.code,{children:`useMutation`}),`:`]}),`
201
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-tsx`,children:`const mutation = useMutation({ mutationFn: createUser });
202
+ mutation.mutate({ name: "Анна" });
203
+ `})}),`
204
+ `,(0,c.jsx)(t.p,{children:`Поведение:`}),`
205
+ `,(0,c.jsxs)(t.ol,{children:[`
206
+ `,(0,c.jsxs)(t.li,{children:[`Вычисляет body через `,(0,c.jsx)(t.code,{children:`mapBody(input)`}),` или использует input.`]}),`
207
+ `,(0,c.jsxs)(t.li,{children:[`Сериализует body через `,(0,c.jsx)(t.code,{children:`JSON.stringify`}),`.`]}),`
208
+ `,(0,c.jsxs)(t.li,{children:[`Использует method `,(0,c.jsx)(t.code,{children:`POST`}),` по умолчанию; поддерживаются `,(0,c.jsx)(t.code,{children:`POST`}),`, `,(0,c.jsx)(t.code,{children:`PUT`}),`, `,(0,c.jsx)(t.code,{children:`PATCH`}),`, `,(0,c.jsx)(t.code,{children:`DELETE`}),`.`]}),`
209
+ `,(0,c.jsxs)(t.li,{children:[`Добавляет `,(0,c.jsx)(t.code,{children:`Content-Type: application/json`}),`, только если header ещё не задан.`]}),`
210
+ `,(0,c.jsxs)(t.li,{children:[`Выполняет запрос и передаёт payload в обязательный `,(0,c.jsx)(t.code,{children:`parse`}),`.`]}),`
211
+ `]}),`
212
+ `,(0,c.jsxs)(t.p,{children:[`Сигнатура mutation function также допускает второй `,(0,c.jsx)(t.code,{children:`AbortSignal`}),` при ручном вызове. Стандартный `,(0,c.jsx)(t.code,{children:`useMutation`}),` TanStack Query не передаёт signal автоматически. Если `,(0,c.jsx)(t.code,{children:`options.init.signal`}),` уже задан, второй signal не заменит его.`]}),`
213
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`JSON.stringify`}),` может бросить ошибку для `,(0,c.jsx)(t.code,{children:`BigInt`}),`/циклического объекта. `,(0,c.jsx)(t.code,{children:`undefined`}),` body сериализуется в `,(0,c.jsx)(t.code,{children:`undefined`}),`; убедитесь, что это соответствует endpoint.`]}),`
214
+ `,(0,c.jsx)(t.h3,{id:`полные-mutation-options`,children:`Полные mutation options`}),`
215
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`type HttpMutationFnOptions<TInput, TResult> = HttpRequestOptions & {
216
+ readonly method?: "POST" | "PUT" | "PATCH" | "DELETE";
217
+ readonly mapBody?: (input: TInput) => unknown;
218
+ readonly parse: (data: unknown) => TResult;
219
+ };
220
+ `})}),`
221
+ `,(0,c.jsx)(t.h3,{id:`mapping-input-в-body`,children:`Mapping input в body`}),`
222
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`type UpdateProfileInput = {
223
+ userId: string;
224
+ draft: {
225
+ name: string;
226
+ email: string;
227
+ };
228
+ };
229
+
230
+ const updateProfile = httpJsonMutationFn<UpdateProfileInput, User>(
231
+ "/api/profile",
232
+ {
233
+ method: "PATCH",
234
+ mapBody: ({ draft }) => ({
235
+ displayName: draft.name,
236
+ emailAddress: draft.email
237
+ }),
238
+ parse: parseUser
239
+ }
240
+ );
241
+ `})}),`
242
+ `,(0,c.jsxs)(t.p,{children:[`URL factory фиксирован при создании. Если path зависит от input, создайте feature wrapper, который внутри строит подходящий mutation function или вызывает `,(0,c.jsx)(t.code,{children:`httpFetchPayload`}),`.`]}),`
243
+ `,(0,c.jsx)(t.h3,{id:`особенность-nullish-body-mapper`,children:`Особенность nullish body mapper`}),`
244
+ `,(0,c.jsx)(t.p,{children:`Implementation выбирает body так:`}),`
245
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const body = options.mapBody?.(input) ?? input;
246
+ `})}),`
247
+ `,(0,c.jsxs)(t.p,{children:[`Если `,(0,c.jsx)(t.code,{children:`mapBody`}),` вернул `,(0,c.jsx)(t.code,{children:`null`}),` или `,(0,c.jsx)(t.code,{children:`undefined`}),`, будет сериализован исходный input. Mapper не может этим способом создать body `,(0,c.jsx)(t.code,{children:`null`}),` или пустой body.`]}),`
248
+ `,(0,c.jsxs)(t.p,{children:[`Для endpoint, которому действительно нужен `,(0,c.jsx)(t.code,{children:`null`}),`, передайте `,(0,c.jsx)(t.code,{children:`null`}),` как input без mapper-а. Для запроса без body используйте `,(0,c.jsx)(t.code,{children:`httpFetchPayload`}),`.`]}),`
249
+ `,(0,c.jsx)(t.h3,{id:`content-type`,children:`Content-Type`}),`
250
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`application/json`}),` добавляется только при отсутствии header. Custom media type сохраняется:`]}),`
251
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const patchResource = httpJsonMutationFn("/api/resource", {
252
+ method: "PATCH",
253
+ init: {
254
+ headers: {
255
+ "Content-Type": "application/merge-patch+json"
256
+ }
257
+ },
258
+ parse: parseResource
259
+ });
260
+ `})}),`
261
+ `,(0,c.jsx)(t.h3,{id:`cache-после-mutation`,children:`Cache после mutation`}),`
262
+ `,(0,c.jsx)(t.p,{children:`Factory не знает query keys и ничего не инвалидирует:`}),`
263
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-tsx`,children:`const queryClient = useQueryClient();
264
+
265
+ const mutation = useMutation({
266
+ mutationFn: updateProfile,
267
+ onSuccess: (updated) => {
268
+ queryClient.setQueryData(userKeys.detail(updated.id), updated);
269
+ void queryClient.invalidateQueries({ queryKey: userKeys.all });
270
+ }
271
+ });
272
+ `})}),`
273
+ `,(0,c.jsx)(t.p,{children:`Query cache хранит server snapshot. Не используйте object из cache как mutable form draft.`}),`
274
+ `,(0,c.jsx)(t.h3,{id:`manual-abort-mutation`,children:`Manual abort mutation`}),`
275
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const controller = new AbortController();
276
+ const promise = updateProfile(input, controller.signal);
277
+ controller.abort();
278
+ await promise;
279
+ `})}),`
280
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`useMutation`}),` сам не передаёт AbortSignal. Не переиспользуйте уже aborted controller.`]}),`
281
+ `,(0,c.jsx)(t.h2,{id:`http-errors`,children:`HTTP errors`}),`
282
+ `,(0,c.jsxs)(t.p,{children:[`Для `,(0,c.jsx)(t.code,{children:`response.ok === false`}),` обе низкоуровневые функции бросают обычный `,(0,c.jsx)(t.code,{children:`Error`}),`:`]}),`
283
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-text`,children:`HTTP error: <message>
284
+ `})}),`
285
+ `,(0,c.jsxs)(t.p,{children:[`Если error body — непустой text, он становится message. Для JSON error object поля `,(0,c.jsx)(t.code,{children:`message`}),`, `,(0,c.jsx)(t.code,{children:`error`}),` и `,(0,c.jsx)(t.code,{children:`details`}),` не извлекаются; fallback — `,(0,c.jsx)(t.code,{children:`<status> <statusText>`}),`.`]}),`
286
+ `,(0,c.jsxs)(t.p,{children:[`Network error/CORS/abort от глобального `,(0,c.jsx)(t.code,{children:`fetch`}),` пробрасывается без обёртки.`]}),`
287
+ `,(0,c.jsx)(t.p,{children:`При non-2xx transport читает error body, чтобы построить message. Consumer уже не получает этот Response.`}),`
288
+ `,(0,c.jsx)(t.p,{children:`Для JSON error object поля не анализируются:`}),`
289
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-json`,children:`{
290
+ "message": "Нет доступа"
291
+ }
292
+ `})}),`
293
+ `,(0,c.jsxs)(t.p,{children:[`При status `,(0,c.jsx)(t.code,{children:`403`}),` message будет fallback `,(0,c.jsx)(t.code,{children:`HTTP error: 403 Forbidden`}),`, потому что parsed payload является object, а не string.`]}),`
294
+ `,(0,c.jsxs)(t.p,{children:[`Модуль не повторяет request. Retry policy принадлежит TanStack Query или caller. Обычный `,(0,c.jsx)(t.code,{children:`Error`}),` из `,(0,c.jsx)(t.code,{children:`httpFetch`}),` не содержит числовой status, поэтому status-aware retry требует отдельного project error contract.`]}),`
295
+ `,(0,c.jsx)(t.h2,{id:`routeerror`,children:(0,c.jsx)(t.code,{children:`RouteError`})}),`
296
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`throw new RouteError(404);
297
+ `})}),`
298
+ `,(0,c.jsxs)(t.p,{children:[`Это маленький `,(0,c.jsx)(t.code,{children:`Error`}),` с числовым полем `,(0,c.jsx)(t.code,{children:`status`}),` и пустым message. `,(0,c.jsx)(t.code,{children:`httpFetch`}),` сам его не создаёт. Класс нужен для routing/error-boundary policy приложения, если оно договорилось понимать такой error.`]}),`
299
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`async function profileLoader() {
300
+ const profile = await loadProfile();
301
+ if (!profile) throw new RouteError(404);
302
+ return profile;
303
+ }
304
+ `})}),`
305
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`Object.setPrototypeOf`}),` внутри class обеспечивает надёжный `,(0,c.jsx)(t.code,{children:`instanceof RouteError`}),`. Класс не содержит response body, headers или `,(0,c.jsx)(t.code,{children:`cause`}),` и не заменяет полноценную structured transport error.`]}),`
306
+ `,(0,c.jsx)(t.h2,{id:`тестирование`,children:`Тестирование`}),`
307
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`import { afterEach, expect, it, vi } from "vitest";
308
+ import {
309
+ httpFetchPayload,
310
+ httpJsonQueryFn
311
+ } from "@ryuzaki13/react-foundation-api/http";
312
+
313
+ afterEach(() => vi.unstubAllGlobals());
314
+
315
+ it("разбирает JSON payload", async () => {
316
+ vi.stubGlobal(
317
+ "fetch",
318
+ vi.fn().mockResolvedValue(
319
+ new Response(JSON.stringify({ id: "u-1", name: "Анна" }), {
320
+ status: 200,
321
+ headers: { "Content-Type": "application/json" }
322
+ })
323
+ )
324
+ );
325
+
326
+ await expect(httpFetchPayload("/api/user")).resolves.toEqual({
327
+ id: "u-1",
328
+ name: "Анна"
329
+ });
330
+ });
331
+
332
+ it("отклоняет неверный runtime shape", async () => {
333
+ vi.stubGlobal(
334
+ "fetch",
335
+ vi.fn().mockResolvedValue(
336
+ new Response(JSON.stringify({ id: 10 }), {
337
+ status: 200,
338
+ headers: { "Content-Type": "application/json" }
339
+ })
340
+ )
341
+ );
342
+
343
+ const queryFn = httpJsonQueryFn("/api/user", { parse: parseUser });
344
+ await expect(queryFn()).rejects.toThrow(
345
+ "User response содержит неверные поля"
346
+ );
347
+ });
348
+ `})}),`
349
+ `,(0,c.jsx)(t.p,{children:`Проверяйте минимум:`}),`
350
+ `,(0,c.jsxs)(t.ul,{children:[`
351
+ `,(0,c.jsxs)(t.li,{children:[`string `,(0,c.jsx)(t.code,{children:`baseUrl + path`}),`;`]}),`
352
+ `,(0,c.jsx)(t.li,{children:`Request/URL input игнорирует baseUrl;`}),`
353
+ `,(0,c.jsxs)(t.li,{children:[`204/205 возвращает `,(0,c.jsx)(t.code,{children:`null`}),`;`]}),`
354
+ `,(0,c.jsx)(t.li,{children:`JSON и text parsing;`}),`
355
+ `,(0,c.jsx)(t.li,{children:`invalid JSON;`}),`
356
+ `,(0,c.jsx)(t.li,{children:`non-2xx error message;`}),`
357
+ `,(0,c.jsx)(t.li,{children:`explicit signal priority;`}),`
358
+ `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`x-sw-cache`}),` header;`]}),`
359
+ `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`mapBody`}),` и JSON serialization;`]}),`
360
+ `,(0,c.jsx)(t.li,{children:`custom Content-Type;`}),`
361
+ `,(0,c.jsx)(t.li,{children:`feature cache strategy после mutation.`}),`
362
+ `]}),`
363
+ `,(0,c.jsx)(t.h2,{id:`частые-ошибки`,children:`Частые ошибки`}),`
364
+ `,(0,c.jsx)(t.h3,{id:`generic-вместо-runtime-parser`,children:`Generic вместо runtime parser`}),`
365
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`payload as User`}),` только заставляет TypeScript поверить разработчику.`]}),`
366
+ `,(0,c.jsx)(t.h3,{id:`неверные-slashes`,children:`Неверные slashes`}),`
367
+ `,(0,c.jsx)(t.p,{children:`URL соединяется простой конкатенацией. Придерживайтесь одной convention.`}),`
368
+ `,(0,c.jsx)(t.h3,{id:`ожидать-sap-side-effects`,children:`Ожидать SAP side effects`}),`
369
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`/http`}),` не добавляет CSRF, SSO, SAP client или OData envelope parser.`]}),`
370
+ `,(0,c.jsxs)(t.h3,{id:`вернуть-null-из-mapbody`,children:[`Вернуть `,(0,c.jsx)(t.code,{children:`null`}),` из `,(0,c.jsx)(t.code,{children:`mapBody`})]}),`
371
+ `,(0,c.jsxs)(t.p,{children:[`Из-за `,(0,c.jsx)(t.code,{children:`?? input`}),` будет отправлен исходный input.`]}),`
372
+ `,(0,c.jsx)(t.h3,{id:`ожидать-automatic-invalidation`,children:`Ожидать automatic invalidation`}),`
373
+ `,(0,c.jsx)(t.p,{children:`Mutation factory не знает query keys. Стратегию cache задаёт owner ресурса.`}),`
374
+ `,(0,c.jsx)(t.h3,{id:`отправлять-formdata-через-json-factory`,children:`Отправлять FormData через JSON factory`}),`
375
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`httpJsonMutationFn`}),` всегда вызывает `,(0,c.jsx)(t.code,{children:`JSON.stringify`}),`. Для FormData используйте `,(0,c.jsx)(t.code,{children:`httpFetch`}),`.`]}),`
376
+ `,(0,c.jsx)(t.h2,{id:`ошибки-runtime-и-безопасность`,children:`Ошибки, runtime и безопасность`}),`
377
+ `,(0,c.jsxs)(t.ul,{children:[`
378
+ `,(0,c.jsxs)(t.li,{children:[`TypeScript generic не валидирует сеть; используйте `,(0,c.jsx)(t.code,{children:`parse`}),`/schema guard.`]}),`
379
+ `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`baseUrl`}),` и path не нормализуются и не кодируются.`]}),`
380
+ `,(0,c.jsxs)(t.li,{children:[`Authorization, cookies, CORS и retry задаёт consumer через `,(0,c.jsx)(t.code,{children:`init`}),` или внешний слой.`]}),`
381
+ `,(0,c.jsxs)(t.li,{children:[`Модуль не делает timeout. Для него используйте `,(0,c.jsx)(t.code,{children:`AbortController`}),`.`]}),`
382
+ `,(0,c.jsx)(t.li,{children:`Не помещайте token/secret в query string и cache key.`}),`
383
+ `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`x-sw-cache`}),` для персональных данных требует изолированной cache policy.`]}),`
384
+ `,(0,c.jsx)(t.li,{children:`На SSR абсолютный/относительный URL и cookies должны быть настроены server runtime-ом.`}),`
385
+ `]}),`
386
+ `,(0,c.jsx)(t.h2,{id:`faq`,children:`FAQ`}),`
387
+ `,(0,c.jsxs)(t.h3,{id:`чем-httpfetchpayload-отличается-от-fetchjson`,children:[`Чем `,(0,c.jsx)(t.code,{children:`httpFetchPayload`}),` отличается от `,(0,c.jsx)(t.code,{children:`fetch(...).json()`}),`?`]}),`
388
+ `,(0,c.jsxs)(t.p,{children:[`Он проверяет `,(0,c.jsx)(t.code,{children:`response.ok`}),`, понимает 204/205 и выбирает JSON/text по Content-Type.`]}),`
389
+ `,(0,c.jsx)(t.h3,{id:`можно-ли-скачать-blob`,children:`Можно ли скачать Blob?`}),`
390
+ `,(0,c.jsxs)(t.p,{children:[`Да: `,(0,c.jsx)(t.code,{children:`httpFetch`}),`, затем `,(0,c.jsx)(t.code,{children:`response.blob()`}),`.`]}),`
391
+ `,(0,c.jsx)(t.h3,{id:`можно-ли-отправить-formdata`,children:`Можно ли отправить FormData?`}),`
392
+ `,(0,c.jsxs)(t.p,{children:[`Да через `,(0,c.jsx)(t.code,{children:`httpFetch`}),`. JSON mutation factory для этого не подходит.`]}),`
393
+ `,(0,c.jsx)(t.h3,{id:`как-задать-timeout`,children:`Как задать timeout?`}),`
394
+ `,(0,c.jsxs)(t.p,{children:[`Передайте signal от `,(0,c.jsx)(t.code,{children:`AbortSignal.timeout(...)`}),` в поддерживаемой среде или используйте `,(0,c.jsx)(t.code,{children:`AbortController`}),`.`]}),`
395
+ `,(0,c.jsx)(t.h3,{id:`почему-json-query-может-получить-textnull`,children:`Почему JSON query может получить text/null?`}),`
396
+ `,(0,c.jsxs)(t.p,{children:[`Low-level parser допускает эти shapes, а обязательный `,(0,c.jsx)(t.code,{children:`parse`}),` определяет валидный result endpoint-а.`]}),`
397
+ `,(0,c.jsx)(t.h3,{id:`где-хранить-query-keys`,children:`Где хранить query keys?`}),`
398
+ `,(0,c.jsxs)(t.p,{children:[`Рядом с public API entity/feature либо в `,(0,c.jsx)(t.code,{children:`/resource`}),`, если нужен generic descriptor.`]}),`
399
+ `,(0,c.jsx)(t.h2,{id:`полный-api`,children:`Полный API`}),`
400
+ `,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Export`}),(0,c.jsx)(t.th,{children:`Результат`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`httpFetch`})}),(0,c.jsxs)(t.td,{children:[`Успешный `,(0,c.jsx)(t.code,{children:`Response`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`httpFetchPayload`})}),(0,c.jsxs)(t.td,{children:[`JSON/text/`,(0,c.jsx)(t.code,{children:`null`}),` как `,(0,c.jsx)(t.code,{children:`unknown`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`httpJsonQueryFn`})}),(0,c.jsx)(t.td,{children:`Query-compatible async function`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`httpJsonMutationFn`})}),(0,c.jsx)(t.td,{children:`Mutation-compatible async function`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`RouteError`})}),(0,c.jsxs)(t.td,{children:[`Error с `,(0,c.jsx)(t.code,{children:`status`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`HttpRequestOptions`})}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`baseUrl`}),` и `,(0,c.jsx)(t.code,{children:`init`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`HttpQueryFnOptions`})}),(0,c.jsxs)(t.td,{children:[`Request options + `,(0,c.jsx)(t.code,{children:`swCache`}),` + `,(0,c.jsx)(t.code,{children:`parse`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`HttpMutationFnOptions`})}),(0,c.jsx)(t.td,{children:`Request options + method/body mapper/parse`})]})]})]})]})}function s(e={}){let{wrapper:t}={...n(),...e.components};return t?(0,c.jsx)(t,{...e,children:(0,c.jsx)(o,{...e})}):o(e)}var c;function l(){return(l=e((()=>{c=t(),r(),a()})))()}l();export{s as default};