@ryuzaki13/react-foundation-ui 1.8.12 → 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 (257) hide show
  1. package/package.json +2 -2
  2. package/storybook-static/assets/{Badge-CveIo2LZ.js → Badge-BFhBl7yM.js} +1 -1
  3. package/storybook-static/assets/{Badge.stories-Bd8M64xJ.js → Badge.stories-BEu55X4s.js} +1 -1
  4. package/storybook-static/assets/{BadgeList-xT41a0VL.js → BadgeList-mqmnGtRR.js} +1 -1
  5. package/storybook-static/assets/{Button-C5bBSb3k.js → Button-CESdnWrO.js} +1 -1
  6. package/storybook-static/assets/{Button-DkDgfpHL.js → Button-_YPAu9sd.js} +1 -1
  7. package/storybook-static/assets/{Button.stories-CeKPeGK5.js → Button.stories-B0Y_T17B.js} +1 -1
  8. package/storybook-static/assets/{CalendarView-CEqcrblx.js → CalendarView-DLuO2Ywz.js} +1 -1
  9. package/storybook-static/assets/{CheckBox-DKeFkdOt.js → CheckBox-CGiNmAPT.js} +1 -1
  10. package/storybook-static/assets/{CheckBox-OVvAarW-.js → CheckBox-l0pbBm9z.js} +1 -1
  11. package/storybook-static/assets/{CheckBox.stories-CfZ0p1yo.js → CheckBox.stories-ROPAnqh8.js} +1 -1
  12. package/storybook-static/assets/{Color-6AOWCN3U-BWW7zrfs.js → Color-6AOWCN3U-kPaRN0HS.js} +1 -1
  13. package/storybook-static/assets/{ContextMenu-xn2GtiLR.js → ContextMenu-Bob4DtRn.js} +1 -1
  14. package/storybook-static/assets/{ContextMenu-kia7is1N.js → ContextMenu-DxfUAeJS.js} +1 -1
  15. package/storybook-static/assets/{ContextMenu.stories-CYuy9uXF.js → ContextMenu.stories-DCJmWy5n.js} +1 -1
  16. package/storybook-static/assets/{CustomOptionButton-C4w-APws.js → CustomOptionButton-DuEz9CXt.js} +1 -1
  17. package/storybook-static/assets/{DateInput-BiUFIihm.js → DateInput-BQ8SoeLE.js} +1 -1
  18. package/storybook-static/assets/{DateInput-DAzE5mCE.js → DateInput-DmNLD4Dz.js} +1 -1
  19. package/storybook-static/assets/{DateInput.stories-BcowGCRD.js → DateInput.stories-sTpYf7Ob.js} +1 -1
  20. package/storybook-static/assets/{DateRangePresetSelect-CQm4dNLR.js → DateRangePresetSelect-DRq4eJ2n.js} +1 -1
  21. package/storybook-static/assets/{DateRangePresetSelect-RIyqNBk9.js → DateRangePresetSelect-fgJfLaLO.js} +1 -1
  22. package/storybook-static/assets/{DateRangePresetSelect.stories-ypGyuGfy.js → DateRangePresetSelect.stories-ib7Qh_BB.js} +1 -1
  23. package/storybook-static/assets/{Detail-CEypL2Nh.js → Detail-CJniLn1R.js} +1 -1
  24. package/storybook-static/assets/{Detail.stories-DNkT7B-u.js → Detail.stories-BXjdNaL-.js} +1 -1
  25. package/storybook-static/assets/{Dialog-BVFFQJDH.js → Dialog-D6a_qzr3.js} +1 -1
  26. package/storybook-static/assets/{Dialog-DD0grLG3.js → Dialog-DOYnnXlU.js} +1 -1
  27. package/storybook-static/assets/{Dialog.stories-DSCypHqR.js → Dialog.stories-B1cZLRK3.js} +1 -1
  28. package/storybook-static/assets/{Disclosure-DauUgrev.js → Disclosure-Chh5o_0s.js} +1 -1
  29. package/storybook-static/assets/{Disclosure.stories-B1qB8vQZ.js → Disclosure.stories-Cvdvf7V8.js} +1 -1
  30. package/storybook-static/assets/{DisclosureGroup-D9oCCeHf.js → DisclosureGroup-CRnQOgVj.js} +1 -1
  31. package/storybook-static/assets/{DocsRenderer-JROSPFPF-CmSf6tXp.js → DocsRenderer-JROSPFPF-BBiErkeC.js} +1 -1
  32. package/storybook-static/assets/{DropZone-D8hbPCAv.js → DropZone-Bm5gqdi9.js} +1 -1
  33. package/storybook-static/assets/{DropZone-D42ueN1w.js → DropZone-C4L7JAlq.js} +1 -1
  34. package/storybook-static/assets/{DropZone.stories-DO-T_Bh4.js → DropZone.stories-BhA9q8Qv.js} +1 -1
  35. package/storybook-static/assets/{DropdownMenu-CknJDoji.js → DropdownMenu-DtZNSUHF.js} +1 -1
  36. package/storybook-static/assets/{ExpandableActionPanel-Dqi_bo3c.js → ExpandableActionPanel-0ugXlJy_.js} +1 -1
  37. package/storybook-static/assets/{ExpandableActionPanel.stories-BD9QZGZN.js → ExpandableActionPanel.stories-CLgMlA9k.js} +1 -1
  38. package/storybook-static/assets/{Flex-CaVn1IOP.js → Flex-CJlia-8f.js} +1 -1
  39. package/storybook-static/assets/{Flex.stories-Bp9Y6q6b.js → Flex.stories-DCvfi1EY.js} +1 -1
  40. package/storybook-static/assets/{FloatingPopover-U7tx-Jlw.js → FloatingPopover-CsnfPiwV.js} +1 -1
  41. package/storybook-static/assets/{FormattedTableCell-pmmhsAbN.js → FormattedTableCell-Dz5xWVYO.js} +1 -1
  42. package/storybook-static/assets/{Grid-CEpMNurH.js → Grid-C-KwTRAM.js} +1 -1
  43. package/storybook-static/assets/{Grid.stories-BM-gO5DN.js → Grid.stories-CzbqknNR.js} +1 -1
  44. package/storybook-static/assets/{ImageCropper.stories-BWz5XU6U.js → ImageCropper.stories-DaE-gm-b.js} +1 -1
  45. package/storybook-static/assets/{ImageRenderer-BTYZEX5t.js → ImageRenderer-IsNCXCrZ.js} +1 -1
  46. package/storybook-static/assets/{ImageRenderer.stories-Dz2STM95.js → ImageRenderer.stories-BbsjUEfJ.js} +1 -1
  47. package/storybook-static/assets/{ImageView.stories-DBVe0an3.js → ImageView.stories-DY0UITYz.js} +1 -1
  48. package/storybook-static/assets/{ImageViewer.stories-C4Px97lD.js → ImageViewer.stories--9q9b9nv.js} +2 -2
  49. package/storybook-static/assets/{ImageViewerRuntime-TJtlJVfa.js → ImageViewerRuntime-CNEH3XGN.js} +1 -1
  50. package/storybook-static/assets/{Input-CIPgijvW.js → Input-DLubbE7P.js} +1 -1
  51. package/storybook-static/assets/{Input-D8io9jVS.js → Input-Dw2JblYt.js} +1 -1
  52. package/storybook-static/assets/{Input.stories-SUk3aYaC.js → Input.stories-DQeyDULG.js} +1 -1
  53. package/storybook-static/assets/{InputDateTime-DA5pIDuE.js → InputDateTime-BRzl8Vrt.js} +1 -1
  54. package/storybook-static/assets/{InputDateTime.stories-DeudzDSU.js → InputDateTime.stories-BJTj5v8J.js} +1 -1
  55. package/storybook-static/assets/{InputFile-CGAC7ruP.js → InputFile-B8UroZji.js} +1 -1
  56. package/storybook-static/assets/{InputFile-C5mp5Y5I.js → InputFile-DPftxjGw.js} +1 -1
  57. package/storybook-static/assets/{InputFile.stories-Cx1xQ6PE.js → InputFile.stories-C7yyqHqc.js} +1 -1
  58. package/storybook-static/assets/{InputFiles-B7OBcPJN.js → InputFiles-BQVXHVLy.js} +1 -1
  59. package/storybook-static/assets/{InputFiles-Hzl89Ghf.js → InputFiles-UD_9S7-N.js} +1 -1
  60. package/storybook-static/assets/{InputFiles.stories-CG6QjDZH.js → InputFiles.stories-DjjJS5pZ.js} +1 -1
  61. package/storybook-static/assets/{InputFilesList-B6htWHF1.js → InputFilesList-BNjijD3Y.js} +1 -1
  62. package/storybook-static/assets/{InputImage-BTa4S4Wp.js → InputImage-C-pHr-Sx.js} +1 -1
  63. package/storybook-static/assets/{InputImage-CQnoblAE.js → InputImage-DbcbqIhY.js} +1 -1
  64. package/storybook-static/assets/{InputImage.stories-CEI44Eyz.js → InputImage.stories-D-TC9r9t.js} +1 -1
  65. package/storybook-static/assets/{InteractiveComponents-B0ypWz1x.js → InteractiveComponents-DbhWgM9y.js} +1 -1
  66. package/storybook-static/assets/{InteractiveComponents.stories-BadApta9.js → InteractiveComponents.stories-B4mkVSea.js} +1 -1
  67. package/storybook-static/assets/{LayoutPicker-C_Uz7Tnj.js → LayoutPicker-BoV_E3qt.js} +1 -1
  68. package/storybook-static/assets/{LayoutPicker-COB9GlV_.js → LayoutPicker-w1EsRpYP.js} +1 -1
  69. package/storybook-static/assets/{LayoutPicker.stories-Btp0IcaL.js → LayoutPicker.stories--ChGnGxf.js} +1 -1
  70. package/storybook-static/assets/{Listbox-AAaZGSAl.js → Listbox-CzZRsr6a.js} +1 -1
  71. package/storybook-static/assets/{Listbox-CyfuZw7w.js → Listbox-qZdTi11b.js} +1 -1
  72. package/storybook-static/assets/{Listbox.stories-NDKQmjyQ.js → Listbox.stories-C9k_1850.js} +1 -1
  73. package/storybook-static/assets/{Modal-BJDnJ4zv.js → Modal-DCpul8QM.js} +1 -1
  74. package/storybook-static/assets/{Modal.stories-D_X5lTLO.js → Modal.stories-Cy0Xd4LF.js} +1 -1
  75. package/storybook-static/assets/{ModalManagerProvider-ShDjozpW.js → ModalManagerProvider-BrPVMcHV.js} +1 -1
  76. package/storybook-static/assets/{MultiSelect-DqXfrjcH.js → MultiSelect-BEQdl-F4.js} +1 -1
  77. package/storybook-static/assets/{MultiSelect-B5CElQ3-.js → MultiSelect-Dy4X94E2.js} +1 -1
  78. package/storybook-static/assets/{MultiSelect.stories-fB3mcFmx.js → MultiSelect.stories-FuzejJmz.js} +1 -1
  79. package/storybook-static/assets/{NoData-DDb0G7T8.js → NoData-BsQ9EfkA.js} +1 -1
  80. package/storybook-static/assets/{NotificationsHost-CIGL-pKX.js → NotificationsHost-BSrODvw7.js} +1 -1
  81. package/storybook-static/assets/{NotificationsHost.stories-B_MRb3fs.js → NotificationsHost.stories-DeiWspcY.js} +1 -1
  82. package/storybook-static/assets/{ODataMultiSelect-DQAitH4N.js → ODataMultiSelect-BEz9gcd2.js} +1 -1
  83. package/storybook-static/assets/{ODataMultiSelect.stories-DwW221S9.js → ODataMultiSelect.stories-BwMgAkbE.js} +1 -1
  84. package/storybook-static/assets/{ODataSelect-tiZhOIhE.js → ODataSelect-BgC7GHOv.js} +1 -1
  85. package/storybook-static/assets/{ODataSelect.stories-BhaatPjK.js → ODataSelect.stories-DEIRAB-s.js} +1 -1
  86. package/storybook-static/assets/{ODataTreeMultiSelect-B9WqJ-Un.js → ODataTreeMultiSelect-WyZZuX0_.js} +1 -1
  87. package/storybook-static/assets/{ODataTreeMultiSelect.stories-CAfKuhfU.js → ODataTreeMultiSelect.stories-B6cxuagy.js} +1 -1
  88. package/storybook-static/assets/{ODataTreeSelect-Cel1phxZ.js → ODataTreeSelect-OJGi3-S7.js} +1 -1
  89. package/storybook-static/assets/{ODataTreeSelect.stories-BpBCpBA9.js → ODataTreeSelect.stories-wGRGErCH.js} +1 -1
  90. package/storybook-static/assets/{OneStepScroller-BSeGbz02.js → OneStepScroller-DycQ3RuL.js} +1 -1
  91. package/storybook-static/assets/{Option-BBtQ3GdK.js → Option-taxbFfjo.js} +1 -1
  92. package/storybook-static/assets/{OptionButton-B9nZuqqW.js → OptionButton-Q0QaPCII.js} +1 -1
  93. package/storybook-static/assets/{PeriodSelect-DA_zjcdA.js → PeriodSelect-DUJ2nF3F.js} +1 -1
  94. package/storybook-static/assets/{PeriodSelect-BGvhR3to.js → PeriodSelect-DnM7x-uC.js} +1 -1
  95. package/storybook-static/assets/{PeriodSelect.stories-DDP1eXyM.js → PeriodSelect.stories-Db0bqe3J.js} +1 -1
  96. package/storybook-static/assets/{PickerTriggerActions-BgvzqRBd.js → PickerTriggerActions-CGJd7xmR.js} +1 -1
  97. package/storybook-static/assets/{Popover-C0NebUMz.js → Popover-B6oidz5p.js} +1 -1
  98. package/storybook-static/assets/{Popover-BQql18MF.js → Popover-Tbhf8T81.js} +1 -1
  99. package/storybook-static/assets/{Popover.stories-CIyDUtlz.js → Popover.stories-DE1LxZvv.js} +1 -1
  100. package/storybook-static/assets/{PresetRangeDateInput-BsgzPwCV.js → PresetRangeDateInput-CQ5FfmrL.js} +1 -1
  101. package/storybook-static/assets/{PresetRangeDateInput-htbxc3ni.js → PresetRangeDateInput-DfgoR0My.js} +1 -1
  102. package/storybook-static/assets/{PresetRangeDateInput.stories-ClHM5Kah.js → PresetRangeDateInput.stories-CgoYAYBG.js} +1 -1
  103. package/storybook-static/assets/{PresetSelect-Dcx0BOTx.js → PresetSelect-BPtAknAr.js} +1 -1
  104. package/storybook-static/assets/{README-BSh5XUR9.js → README--TpGcM95.js} +1 -1
  105. package/storybook-static/assets/{README-ByALXSEH.js → README-4iBHWAP5.js} +1 -1
  106. package/storybook-static/assets/{README-CHbo4O3Z.js → README-98KIgy5G.js} +1 -1
  107. package/storybook-static/assets/{README-eHCINzP3.js → README-B6II8p0W.js} +1 -1
  108. package/storybook-static/assets/{README-DDBqoI-T.js → README-B6vU5_7I.js} +1 -1
  109. package/storybook-static/assets/README-BFJVjjZR.js +325 -0
  110. package/storybook-static/assets/README-BIT4HlFP.js +441 -0
  111. package/storybook-static/assets/{README-DvAlDsh9.js → README-BK6Epio1.js} +1 -1
  112. package/storybook-static/assets/{README-5M8ajrJp.js → README-BRlPB5_k.js} +1 -1
  113. package/storybook-static/assets/{README-CH_6ZIO2.js → README-BTFpEaXG.js} +1 -1
  114. package/storybook-static/assets/{README-DnA-4W65.js → README-BWhXgC_o.js} +1 -1
  115. package/storybook-static/assets/{README-Byo6DxIF.js → README-BbNHvOoR.js} +1 -1
  116. package/storybook-static/assets/{README-Bqnqu1bC.js → README-BbunUo8b.js} +1 -1
  117. package/storybook-static/assets/{README-CsoHGRve.js → README-BmYpfZKr.js} +1 -1
  118. package/storybook-static/assets/{README-C8E1O7DQ.js → README-Bu5uvhAT.js} +1 -1
  119. package/storybook-static/assets/{README-DE2wk9-v.js → README-Bx6fvSBE.js} +1 -1
  120. package/storybook-static/assets/{README-Am6Fa6-b.js → README-Bx6gIGiA.js} +1 -1
  121. package/storybook-static/assets/README-ByhxsX44.js +324 -0
  122. package/storybook-static/assets/{README-qHKxXU95.js → README-Byi1FFpw.js} +1 -1
  123. package/storybook-static/assets/{README-D9OypaFB.js → README-C3Is3a3B.js} +1 -1
  124. package/storybook-static/assets/{README-CNHemCS2.js → README-C6prwAXw.js} +1 -1
  125. package/storybook-static/assets/{README-BmhhWWEk.js → README-C9S83J_G.js} +1 -1
  126. package/storybook-static/assets/{README-CM-7E-Jf.js → README-CGgxP5Zo.js} +1 -1
  127. package/storybook-static/assets/{README-BIq-FXcN.js → README-CJ2ZVG2U.js} +1 -1
  128. package/storybook-static/assets/{README-B45Cwj2a.js → README-CNGCAm5d.js} +1 -1
  129. package/storybook-static/assets/{README-CAGQnLsv.js → README-Cb_q420B.js} +1 -1
  130. package/storybook-static/assets/{README-BxjYCoYA.js → README-CtIDPNJ3.js} +1 -1
  131. package/storybook-static/assets/{README-C9eh0JLs.js → README-CzO3Dchr.js} +1 -1
  132. package/storybook-static/assets/{README-DEj2wSK0.js → README-D0rzQthv.js} +1 -1
  133. package/storybook-static/assets/{README-Dl92E69Z.js → README-DEQu7djz.js} +1 -1
  134. package/storybook-static/assets/{README-BYSgTTZt.js → README-DFihT_sm.js} +1 -1
  135. package/storybook-static/assets/{README-CIGfHKKE.js → README-DMiWsyv_.js} +1 -1
  136. package/storybook-static/assets/{README-B3bFglqG.js → README-DOx8lXXk.js} +1 -1
  137. package/storybook-static/assets/{README-CWfPiPIB.js → README-DPhDjr43.js} +1 -1
  138. package/storybook-static/assets/{README-DJHVgrpj.js → README-D_NqWPa9.js} +1 -1
  139. package/storybook-static/assets/README-DhJ5Rb1w.js +355 -0
  140. package/storybook-static/assets/{README-DV4fCpqN.js → README-DlwhWCvQ.js} +1 -1
  141. package/storybook-static/assets/README-Dxi73a2Q.js +740 -0
  142. package/storybook-static/assets/README-Dycov6NP.js +583 -0
  143. package/storybook-static/assets/README-GTBkSG4_.js +3591 -0
  144. package/storybook-static/assets/{README-ui-uanyg.js → README-Gfd9tLTw.js} +1 -1
  145. package/storybook-static/assets/{README-B6ltJiw3.js → README-Kfawetke.js} +1 -1
  146. package/storybook-static/assets/{README-DjCArsA5.js → README-UDBM7ZMT.js} +1 -1
  147. package/storybook-static/assets/{README-DIbfpC-2.js → README-VTWQxLm_.js} +1 -1
  148. package/storybook-static/assets/README-YHNWrTZv.js +400 -0
  149. package/storybook-static/assets/README-_0Otw0eD.js +448 -0
  150. package/storybook-static/assets/{README-Ss-3t1nX.js → README-aw2Xu9xu.js} +1 -1
  151. package/storybook-static/assets/{README-BuMMG4_N.js → README-eg1emlll.js} +1 -1
  152. package/storybook-static/assets/{README-B6Nq7NCU.js → README-iqQHdhZ4.js} +1 -1
  153. package/storybook-static/assets/{README-BB_JPejH.js → README-llxZAtCj.js} +1 -1
  154. package/storybook-static/assets/{README-5NhzH8VL.js → README-wFnEIGl4.js} +1 -1
  155. package/storybook-static/assets/{README-CeK4kfFO.js → README-webB1yH0.js} +1 -1
  156. package/storybook-static/assets/{README-C3UcjOGB.js → README-wtreGRCe.js} +1 -1
  157. package/storybook-static/assets/{RadioButton-YIQXt0wx.js → RadioButton-CNOLDk_o.js} +1 -1
  158. package/storybook-static/assets/{RadioButton-CWtjclwT.js → RadioButton-Ce05_q7s.js} +1 -1
  159. package/storybook-static/assets/{RadioButton.stories-Ah-CBpeC.js → RadioButton.stories-CPd4lTl0.js} +1 -1
  160. package/storybook-static/assets/{RadioGroup-BnO-GL7A.js → RadioGroup-BtfD5Szd.js} +1 -1
  161. package/storybook-static/assets/{RadioGroup-CUS0etBD.js → RadioGroup-Ccm7G-dv.js} +1 -1
  162. package/storybook-static/assets/{RadioGroup.stories-DGwCawtU.js → RadioGroup.stories-D-RRPHwi.js} +1 -1
  163. package/storybook-static/assets/{Scrollable-D85fA6pO.js → Scrollable-DvdBIeig.js} +1 -1
  164. package/storybook-static/assets/{Select-gRnfvfGh.js → Select-8PV9PBKF.js} +1 -1
  165. package/storybook-static/assets/{Select-CGCxJjL9.js → Select-G04B41FM.js} +1 -1
  166. package/storybook-static/assets/{Select.stories-CMwt4F9i.js → Select.stories-Cf6CBhV8.js} +1 -1
  167. package/storybook-static/assets/{SerializableSelect-BLXfKJ38.js → SerializableSelect-CdQdHIVp.js} +1 -1
  168. package/storybook-static/assets/{SerializableSelect.stories-Bca1a9ZU.js → SerializableSelect.stories-0AKUGpbS.js} +1 -1
  169. package/storybook-static/assets/{SingleDateTimeInput-CyeQN0Rd.js → SingleDateTimeInput-DWT1ORhL.js} +1 -1
  170. package/storybook-static/assets/{SingleDateTimeInput-xrmZckzw.js → SingleDateTimeInput-DattLt6w.js} +1 -1
  171. package/storybook-static/assets/{SingleDateTimeInput.stories-BYFTQM9z.js → SingleDateTimeInput.stories-BLJV3jzV.js} +1 -1
  172. package/storybook-static/assets/{Slider-D8GtXVGI.js → Slider-DKEI4cDd.js} +1 -1
  173. package/storybook-static/assets/{Slider-1yJ3uVeR.js → Slider-Dci-mJt_.js} +1 -1
  174. package/storybook-static/assets/{Slider.stories-CyQ3ns_C.js → Slider.stories-Dp7oQueF.js} +1 -1
  175. package/storybook-static/assets/{SliderInput-ISSx9vH_.js → SliderInput-BGPQmlgY.js} +1 -1
  176. package/storybook-static/assets/{SliderInput-BOzHhEUA.js → SliderInput-BhjqGOKt.js} +1 -1
  177. package/storybook-static/assets/{SliderInput.stories-7ooTghrS.js → SliderInput.stories-DXNhRU3X.js} +1 -1
  178. package/storybook-static/assets/{Sortable-CCLiMmfZ.js → Sortable-CMd9l1Gd.js} +1 -1
  179. package/storybook-static/assets/{Sortable.stories-B36szI6t.js → Sortable.stories-BN1cFEFJ.js} +1 -1
  180. package/storybook-static/assets/{Splitter-DQGhgRwx.js → Splitter-GL65TlI9.js} +1 -1
  181. package/storybook-static/assets/{Splitter.stories-Hsq1wYaq.js → Splitter.stories-q5PlI6rB.js} +1 -1
  182. package/storybook-static/assets/{StateSelect-C6hldFgO.js → StateSelect-Byik5-iZ.js} +1 -1
  183. package/storybook-static/assets/{StateSelect-DieNn4VC.js → StateSelect-CT0JF2V6.js} +1 -1
  184. package/storybook-static/assets/{StateSelect.stories-CvAhDMix.js → StateSelect.stories-pPEPmgnN.js} +1 -1
  185. package/storybook-static/assets/{StringToggle.stories-CUT1tvt-.js → StringToggle.stories-BQlFmCE7.js} +1 -1
  186. package/storybook-static/assets/{Switch-CX9p_uYU.js → Switch--xGPiYk-.js} +1 -1
  187. package/storybook-static/assets/{Switch-nEMRtcWe.js → Switch-DhaLI9CG.js} +1 -1
  188. package/storybook-static/assets/{Switch.stories-CPsHa2_m.js → Switch.stories-5DisgIyj.js} +1 -1
  189. package/storybook-static/assets/{Table-BhtITVtj.js → Table-Bf6MicdG.js} +1 -1
  190. package/storybook-static/assets/{Table.stories-nWNhSydG.js → Table.stories-CS7rQgj9.js} +1 -1
  191. package/storybook-static/assets/{Tabs-DMQFh2BJ.js → Tabs-B4y4y8Ap.js} +1 -1
  192. package/storybook-static/assets/{Tabs.stories-D23_xvom.js → Tabs.stories-C0SpdGkh.js} +1 -1
  193. package/storybook-static/assets/{TabsBox-B5BsD_j_.js → TabsBox-C5LLLhnj.js} +1 -1
  194. package/storybook-static/assets/{TagInput-DO17z100.js → TagInput-D4BpuCoH.js} +1 -1
  195. package/storybook-static/assets/{TagInput.stories-CMMFnIzb.js → TagInput.stories-rn2wtZP_.js} +1 -1
  196. package/storybook-static/assets/{Text-ClnbDqRk.js → Text-BhBt9e7C.js} +1 -1
  197. package/storybook-static/assets/{Textarea-DkhohiNc.js → Textarea-B-Hz7ujq.js} +1 -1
  198. package/storybook-static/assets/{Textarea-C2IO_zsP.js → Textarea-BHHxY5sd.js} +1 -1
  199. package/storybook-static/assets/{Textarea.stories-NL6Aq8Vc.js → Textarea.stories-CZ2kWz20.js} +1 -1
  200. package/storybook-static/assets/{TimePanel-DNEPDlSW.js → TimePanel-Cg8fgFsn.js} +1 -1
  201. package/storybook-static/assets/{TimePanel.stories-DlfdPsz1.js → TimePanel.stories-BxdwtK2e.js} +1 -1
  202. package/storybook-static/assets/{Toggle-Cc6Ca-HI.js → Toggle-BWwfk9fi.js} +1 -1
  203. package/storybook-static/assets/{Toggle-3U5CceQN.js → Toggle-Ce9rbjBc.js} +1 -1
  204. package/storybook-static/assets/{Toggle.stories-BR-hVLDp.js → Toggle.stories-0fzcmzKy.js} +1 -1
  205. package/storybook-static/assets/{TreeMultiSelect-D9hMQN2O.js → TreeMultiSelect-B06Y0lIc.js} +1 -1
  206. package/storybook-static/assets/{TreeMultiSelect-B0oBc-4y.js → TreeMultiSelect-CrAdR_jM.js} +1 -1
  207. package/storybook-static/assets/{TreeMultiSelect.stories-CslpbvPR.js → TreeMultiSelect.stories-CAVoj56E.js} +1 -1
  208. package/storybook-static/assets/{TreePickerBase-B_dMCe45.js → TreePickerBase-qU2xPlar.js} +1 -1
  209. package/storybook-static/assets/{TreeSelect-2lj0Q8gm.js → TreeSelect-BIHydJFy.js} +1 -1
  210. package/storybook-static/assets/{TreeSelect-DEKNYF2b.js → TreeSelect-BKnWu0C7.js} +1 -1
  211. package/storybook-static/assets/{TreeSelect.stories-CVDxn8Vm.js → TreeSelect.stories-Dp_8ybAf.js} +1 -1
  212. package/storybook-static/assets/{TreeTable-CBIpzYRL.js → TreeTable-pVXjU9dG.js} +1 -1
  213. package/storybook-static/assets/{TreeTable.stories-BMzrr2Kc.js → TreeTable.stories-CV_8Ui6R.js} +1 -1
  214. package/storybook-static/assets/{blocks-B5YBxaaS.js → blocks-BY40djCc.js} +3 -3
  215. package/storybook-static/assets/{check-BjtdCRaW.js → check-CVkPTDzp.js} +1 -1
  216. package/storybook-static/assets/{chevron-down-B4u-y8Z1.js → chevron-down-BtNO4Vhe.js} +1 -1
  217. package/storybook-static/assets/{chevron-left-BQfWs7Ah.js → chevron-left-kceSK3sZ.js} +1 -1
  218. package/storybook-static/assets/{chevron-right-ChokKd-f.js → chevron-right-BA_LO2El.js} +1 -1
  219. package/storybook-static/assets/{chunk-W22LQPXL-meOkhzk4.js → chunk-W22LQPXL-yJiFPv6e.js} +1 -1
  220. package/storybook-static/assets/{circle-alert-B1AnDRf_.js → circle-alert-B2m4a1zz.js} +1 -1
  221. package/storybook-static/assets/{circle-check-JYnlcC1F.js → circle-check-Cfjhotlm.js} +1 -1
  222. package/storybook-static/assets/{components-C_wl1sL5.js → components-D6yV8PLX.js} +3 -3
  223. package/storybook-static/assets/{contextMenu-B-TUGs_1.js → contextMenu-B0pQBIW0.js} +1 -1
  224. package/storybook-static/assets/{download-eR3X8I-h.js → download-Lba8elK9.js} +1 -1
  225. package/storybook-static/assets/{floating-ui.react-D95VPQ0b.js → floating-ui.react-BFNvfMpU.js} +1 -1
  226. package/storybook-static/assets/{foundationApi-QhHXpYLB.js → foundationApi-DZhnQ2cC.js} +1 -1
  227. package/storybook-static/assets/{foundationLib-CEAjnstw.js → foundationLib-CoVTo22U.js} +1 -1
  228. package/storybook-static/assets/{hooks-awde7r2r.js → hooks-Cc6eXN6U.js} +1 -1
  229. package/storybook-static/assets/iframe-BXM-JBuH.js +1 -0
  230. package/storybook-static/assets/{iframe-FSp_AjJa.js → iframe-o7sH2IXC.js} +3 -3
  231. package/storybook-static/assets/{info-12vmb1sT.js → info-BpsVP_dM.js} +1 -1
  232. package/storybook-static/assets/{odata-C0Kpvttz.js → odata-CXsbxsRY.js} +1 -1
  233. package/storybook-static/assets/{odataStoryFixtures-BXZnk_C7.js → odataStoryFixtures-Dj_bzRqh.js} +1 -1
  234. package/storybook-static/assets/{react-BlCqWuXr.js → react-DeJ0JTHb.js} +1 -1
  235. package/storybook-static/assets/{refresh-cw-Bf5ufPte.js → refresh-cw-BvGyjEXe.js} +1 -1
  236. package/storybook-static/assets/{settings-2-DR-dTXIC.js → settings-2-BdXxnHos.js} +1 -1
  237. package/storybook-static/assets/{sortable-B5e5yb_-.js → sortable-XkyN-9r5.js} +1 -1
  238. package/storybook-static/assets/{syntaxhighlighter-QEQV7K2Y-EVJARTec.js → syntaxhighlighter-QEQV7K2Y-Cafn3LV1.js} +1 -1
  239. package/storybook-static/assets/{trash-2-QP7TS18H.js → trash-2-uPH9-fND.js} +1 -1
  240. package/storybook-static/assets/{triangle-alert-qw19mxHr.js → triangle-alert-tT01vSMw.js} +1 -1
  241. package/storybook-static/assets/{useODataSelectBase-Csu_Cct9.js → useODataSelectBase-B2LlOwPZ.js} +1 -1
  242. package/storybook-static/assets/{useODataTreeData-BAv-Twqf.js → useODataTreeData-CU7Rqcb9.js} +1 -1
  243. package/storybook-static/assets/{usePickerQuery-Da-XM_Y0.js → usePickerQuery-D8GHQ6KR.js} +1 -1
  244. package/storybook-static/assets/{usePickerTriggerController-C0TdC2Pz.js → usePickerTriggerController-CcK1jmDy.js} +1 -1
  245. package/storybook-static/assets/{x-aCjYTirW.js → x-BlAURbAH.js} +1 -1
  246. package/storybook-static/iframe.html +2 -2
  247. package/storybook-static/project.json +1 -1
  248. package/storybook-static/assets/README--LCKbep-.js +0 -110
  249. package/storybook-static/assets/README-BXJneZAJ.js +0 -147
  250. package/storybook-static/assets/README-C6BOdXNV.js +0 -322
  251. package/storybook-static/assets/README-CC00hlZK.js +0 -527
  252. package/storybook-static/assets/README-Cj2e6HrF.js +0 -178
  253. package/storybook-static/assets/README-DN9HKtp_.js +0 -124
  254. package/storybook-static/assets/README-DNricOkt.js +0 -136
  255. package/storybook-static/assets/README-DoCA4JXf.js +0 -273
  256. package/storybook-static/assets/README-tm9QH9cF.js +0 -103
  257. package/storybook-static/assets/iframe-DzQq_POR.js +0 -1
@@ -0,0 +1,324 @@
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={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/Errors/Error Report Delivery`}),`
2
+ `,(0,c.jsxs)(t.h1,{id:`доставка-error-reports-через-ryuzaki13react-foundation-apierror-report`,children:[`Доставка error reports через `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-api/error-report`})]}),`
3
+ `,(0,c.jsxs)(t.p,{children:[`Модуль превращает сохранённый черновик отчёта из `,(0,c.jsx)(t.code,{children:`foundation-lib`}),` в delivery body, вызывает adapter приложения и обновляет статус черновика.`]}),`
4
+ `,(0,c.jsx)(t.h2,{id:`граница-ответственности`,children:`Граница ответственности`}),`
5
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-text`,children:`foundation-lib/error-report foundation-api/error-report host backend adapter
6
+ collect + sanitize + draft store ──► lifecycle + delivery body ─────► HTTP/OData/serverFn
7
+ `})}),`
8
+ `,(0,c.jsxs)(t.p,{children:[`Модуль не собирает browser diagnostics, не выбирает endpoint и не отправляет запрос самостоятельно. Transport явно передаёт приложение через `,(0,c.jsx)(t.code,{children:`adapter`}),`.`]}),`
9
+ `,(0,c.jsx)(t.h2,{id:`установка-и-импорт`,children:`Установка и импорт`}),`
10
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`import {
11
+ createErrorReportDeliveryBody,
12
+ sendErrorReport
13
+ } from "@ryuzaki13/react-foundation-api/error-report";
14
+
15
+ import type {
16
+ ErrorReportDeliveryAdapter,
17
+ ErrorReportDeliveryBody,
18
+ ErrorReportDeliveryContext,
19
+ SendErrorReportOptions
20
+ } from "@ryuzaki13/react-foundation-api/error-report";
21
+ `})}),`
22
+ `,(0,c.jsxs)(t.p,{children:[`Нужны `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib`}),` и `,(0,c.jsx)(t.code,{children:`@tanstack/react-query`}),`.`]}),`
23
+ `,(0,c.jsx)(t.h2,{id:`полный-сценарий`,children:`Полный сценарий`}),`
24
+ `,(0,c.jsxs)(t.p,{children:[`Сначала другой слой создаёт и сохраняет draft средствами `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/error-report`}),`. Затем API-слой получает только его `,(0,c.jsx)(t.code,{children:`reportId`}),`:`]}),`
25
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`import { httpFetchPayload } from "@ryuzaki13/react-foundation-api/http";
26
+ import { sendErrorReport } from "@ryuzaki13/react-foundation-api/error-report";
27
+ import type { ErrorReportDeliveryAdapter } from "@ryuzaki13/react-foundation-api/error-report";
28
+
29
+ const deliveryAdapter: ErrorReportDeliveryAdapter = async (body) => {
30
+ await httpFetchPayload("/api/error-reports", {
31
+ init: {
32
+ method: "POST",
33
+ headers: { "Content-Type": "application/json" },
34
+ body: JSON.stringify(body)
35
+ }
36
+ });
37
+ };
38
+
39
+ await sendErrorReport(reportId, {
40
+ adapter: deliveryAdapter,
41
+ queryClient
42
+ });
43
+ `})}),`
44
+ `,(0,c.jsx)(t.h2,{id:`createerrorreportdeliverybody`,children:(0,c.jsx)(t.code,{children:`createErrorReportDeliveryBody`})}),`
45
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const body = createErrorReportDeliveryBody(draft);
46
+ `})}),`
47
+ `,(0,c.jsx)(t.p,{children:`Результат:`}),`
48
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`type ErrorReportDeliveryBody = {
49
+ reportId: string;
50
+ sessionId: string;
51
+ createdUtc: string;
52
+ category: ErrorReportCategory;
53
+ errorClass: string;
54
+ errorMessage: string;
55
+ stackTrace?: string;
56
+ payload: string;
57
+ };
58
+ `})}),`
59
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`payload`}),` — JSON string всего payload черновика, а не вложенный object. Это важно для backend contract.`]}),`
60
+ `,(0,c.jsxs)(t.p,{children:[`Если `,(0,c.jsx)(t.code,{children:`draft.payload.error.message`}),` пуст, обязательные `,(0,c.jsx)(t.code,{children:`errorMessage`}),` и message внутри сериализованного payload получают значение `,(0,c.jsx)(t.code,{children:`"Неизвестная ошибка"`}),`. Остальной draft не нормализуется.`]}),`
61
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`JSON.stringify`}),` может выбросить ошибку при циклических или неподдерживаемых данных. Draft должен соответствовать сериализуемому контракту `,(0,c.jsx)(t.code,{children:`foundation-lib`}),`.`]}),`
62
+ `,(0,c.jsx)(t.h3,{id:`что-такое-draft-и-delivery-body`,children:`Что такое draft и delivery body`}),`
63
+ `,(0,c.jsx)(t.p,{children:`Для начинающего разработчика важно не смешивать две формы:`}),`
64
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-text`,children:`ErrorReportDraft
65
+ ├── локальный lifecycle status
66
+ ├── retry information
67
+ ├── collected/sanitized payload
68
+ └── identifiers
69
+
70
+ ErrorReportDeliveryBody
71
+ ├── плоские обязательные backend fields
72
+ └── payload: JSON string
73
+ `})}),`
74
+ `,(0,c.jsxs)(t.p,{children:[`Draft принадлежит локальному хранилищу `,(0,c.jsx)(t.code,{children:`foundation-lib`}),`. Delivery body — одноразовый snapshot для transport adapter-а.`]}),`
75
+ `,(0,c.jsx)(t.p,{children:`Нельзя отправлять draft целиком только потому, что он уже похож на body: backend contract намеренно отделён от local store contract.`}),`
76
+ `,(0,c.jsx)(t.h3,{id:`соответствие-полей`,children:`Соответствие полей`}),`
77
+ `,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Delivery field`}),(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:`reportId`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`draft.reportId`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`sessionId`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`draft.sessionId`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`createdUtc`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`draft.createdUtc`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`category`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`draft.category`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`errorClass`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`draft.payload.error.name`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`errorMessage`})}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`draft.payload.error.message`}),` или fallback`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`stackTrace`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`draft.payload.error.stackTrace`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`payload`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`JSON.stringify(normalized payload)`})})]})]})]}),`
78
+ `,(0,c.jsx)(t.p,{children:`Если message содержит непустой текст с пробелами по краям, проверка считает его валидным, но в delivery сохраняется исходная строка. Функция не выполняет общий trim draft-а.`}),`
79
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`draft.payload.error.message = " Ошибка сохранения ";
80
+
81
+ const body = createErrorReportDeliveryBody(draft);
82
+ body.errorMessage;
83
+ // " Ошибка сохранения "
84
+ `})}),`
85
+ `,(0,c.jsx)(t.p,{children:`Если message пустой или whitespace-only:`}),`
86
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`draft.payload.error.message = " ";
87
+
88
+ const body = createErrorReportDeliveryBody(draft);
89
+ body.errorMessage;
90
+ // "Неизвестная ошибка"
91
+
92
+ JSON.parse(body.payload).error.message;
93
+ // "Неизвестная ошибка"
94
+ `})}),`
95
+ `,(0,c.jsx)(t.p,{children:`Функция создаёт новые wrapper objects и не записывает fallback обратно в draft.`}),`
96
+ `,(0,c.jsx)(t.h2,{id:`senderrorreport`,children:(0,c.jsx)(t.code,{children:`sendErrorReport`})}),`
97
+ `,(0,c.jsx)(t.p,{children:`Lifecycle:`}),`
98
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-text`,children:`draft отсутствует ─────────► undefined
99
+ status sent/sending ───────► текущий draft, adapter не вызывается
100
+ остальной draft ───────────► sending
101
+
102
+ adapter success / error
103
+ │ │
104
+ ▼ ▼
105
+ sent failed + failedReason
106
+ `})}),`
107
+ `,(0,c.jsx)(t.p,{children:`Пошагово функция:`}),`
108
+ `,(0,c.jsxs)(t.ol,{children:[`
109
+ `,(0,c.jsxs)(t.li,{children:[`Ищет draft по `,(0,c.jsx)(t.code,{children:`reportId`}),` в store из `,(0,c.jsx)(t.code,{children:`foundation-lib`}),`.`]}),`
110
+ `,(0,c.jsxs)(t.li,{children:[`Возвращает `,(0,c.jsx)(t.code,{children:`undefined`}),`, если draft не найден.`]}),`
111
+ `,(0,c.jsxs)(t.li,{children:[`Не отправляет повторно draft со статусом `,(0,c.jsx)(t.code,{children:`sent`}),` или `,(0,c.jsx)(t.code,{children:`sending`}),`.`]}),`
112
+ `,(0,c.jsxs)(t.li,{children:[`Устанавливает `,(0,c.jsx)(t.code,{children:`status: "sending"`}),` и очищает `,(0,c.jsx)(t.code,{children:`failedReason`}),`.`]}),`
113
+ `,(0,c.jsx)(t.li,{children:`Создаёт delivery body.`}),`
114
+ `,(0,c.jsxs)(t.li,{children:[`Вызывает `,(0,c.jsx)(t.code,{children:`adapter(body, { draft, queryClient })`}),`.`]}),`
115
+ `,(0,c.jsxs)(t.li,{children:[`При успехе устанавливает `,(0,c.jsx)(t.code,{children:`status: "sent"`}),` и `,(0,c.jsx)(t.code,{children:`sentUtc`}),`.`]}),`
116
+ `,(0,c.jsxs)(t.li,{children:[`При ошибке устанавливает `,(0,c.jsx)(t.code,{children:`status: "failed"`}),`, сохраняет нормализованное сообщение и повторно бросает исходную ошибку.`]}),`
117
+ `]}),`
118
+ `,(0,c.jsxs)(t.p,{children:[`Adapter получает исходный snapshot `,(0,c.jsx)(t.code,{children:`draft`}),`, прочитанный до перевода store в `,(0,c.jsx)(t.code,{children:`sending`}),`. Используйте `,(0,c.jsx)(t.code,{children:`body`}),` как delivery payload, а context — для query invalidation или transport, которому нужен `,(0,c.jsx)(t.code,{children:`QueryClient`}),`.`]}),`
119
+ `,(0,c.jsx)(t.h3,{id:`status-table`,children:`Status table`}),`
120
+ `,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Status draft до вызова`}),(0,c.jsx)(t.th,{children:`Вызывается adapter`}),(0,c.jsx)(t.th,{children:`Результат`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`draft отсутствует`}),(0,c.jsx)(t.td,{children:`нет`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`undefined`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`sent`})}),(0,c.jsx)(t.td,{children:`нет`}),(0,c.jsx)(t.td,{children:`текущий draft`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`sending`})}),(0,c.jsx)(t.td,{children:`нет`}),(0,c.jsx)(t.td,{children:`текущий draft`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`pending`}),` или эквивалентный начальный`]}),(0,c.jsx)(t.td,{children:`да`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`sent`}),` либо exception + `,(0,c.jsx)(t.code,{children:`failed`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`failed`})}),(0,c.jsx)(t.td,{children:`да`}),(0,c.jsx)(t.td,{children:`повторная попытка`})]})]})]}),`
121
+ `,(0,c.jsxs)(t.p,{children:[`Функция не создаёт draft. Если `,(0,c.jsx)(t.code,{children:`reportId`}),` ошибочный, это не exception: result равен `,(0,c.jsx)(t.code,{children:`undefined`}),`.`]}),`
122
+ `,(0,c.jsx)(t.h3,{id:`время-отправки`,children:`Время отправки`}),`
123
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`sentUtc`}),` создаётся на client после успешного завершения adapter-а:`]}),`
124
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`new Date().toISOString()
125
+ `})}),`
126
+ `,(0,c.jsx)(t.p,{children:`Это client timestamp, а не server acknowledgement time. Для аудита используйте server time из backend record.`}),`
127
+ `,(0,c.jsx)(t.h3,{id:`ошибка-построения-body`,children:`Ошибка построения body`}),`
128
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`createErrorReportDeliveryBody`}),` вызывается внутри `,(0,c.jsx)(t.code,{children:`try`}),`. Если `,(0,c.jsx)(t.code,{children:`JSON.stringify`}),` выбросил error:`]}),`
129
+ `,(0,c.jsxs)(t.ul,{children:[`
130
+ `,(0,c.jsx)(t.li,{children:`adapter не вызывается;`}),`
131
+ `,(0,c.jsxs)(t.li,{children:[`draft становится `,(0,c.jsx)(t.code,{children:`failed`}),`;`]}),`
132
+ `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`failedReason`}),` формируется через `,(0,c.jsx)(t.code,{children:`createErrorInfo`}),`;`]}),`
133
+ `,(0,c.jsx)(t.li,{children:`исходный error снова выбрасывается caller-у.`}),`
134
+ `]}),`
135
+ `,(0,c.jsx)(t.h3,{id:`ui-flow`,children:`UI flow`}),`
136
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-tsx`,children:`import { useState } from "react";
137
+ import { useQueryClient } from "@tanstack/react-query";
138
+ import { sendErrorReport } from "@ryuzaki13/react-foundation-api/error-report";
139
+
140
+ function SendReportButton({ reportId }: { reportId: string }) {
141
+ const queryClient = useQueryClient();
142
+ const [isSending, setIsSending] = useState(false);
143
+ const [errorMessage, setErrorMessage] = useState<string>();
144
+
145
+ const handleSend = async () => {
146
+ setIsSending(true);
147
+ setErrorMessage(undefined);
148
+
149
+ try {
150
+ const result = await sendErrorReport(reportId, {
151
+ adapter: deliveryAdapter,
152
+ queryClient
153
+ });
154
+
155
+ if (!result) {
156
+ setErrorMessage("Черновик отчёта не найден");
157
+ }
158
+ } catch (error) {
159
+ setErrorMessage(
160
+ error instanceof Error ? error.message : "Не удалось отправить отчёт"
161
+ );
162
+ } finally {
163
+ setIsSending(false);
164
+ }
165
+ };
166
+
167
+ return (
168
+ <>
169
+ <button type="button" disabled={isSending} onClick={handleSend}>
170
+ {isSending ? "Отправка…" : "Отправить отчёт"}
171
+ </button>
172
+ {errorMessage ? <p role="alert">{errorMessage}</p> : null}
173
+ </>
174
+ );
175
+ }
176
+ `})}),`
177
+ `,(0,c.jsxs)(t.p,{children:[`Local `,(0,c.jsx)(t.code,{children:`isSending`}),` нужен UI для немедленной блокировки повторного click. Draft status остаётся источником долгоживущего lifecycle, но component может не быть подписан на store.`]}),`
178
+ `,(0,c.jsx)(t.h2,{id:`варианты-delivery-adapter-а`,children:`Варианты delivery adapter-а`}),`
179
+ `,(0,c.jsx)(t.h3,{id:`обычный-http`,children:`Обычный HTTP`}),`
180
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`import { httpFetchPayload } from "@ryuzaki13/react-foundation-api/http";
181
+ import type { ErrorReportDeliveryAdapter } from "@ryuzaki13/react-foundation-api/error-report";
182
+
183
+ export const deliveryAdapter: ErrorReportDeliveryAdapter = async (body) => {
184
+ await httpFetchPayload("/api/error-reports", {
185
+ init: {
186
+ method: "POST",
187
+ headers: { "Content-Type": "application/json" },
188
+ body: JSON.stringify(body)
189
+ }
190
+ });
191
+ };
192
+ `})}),`
193
+ `,(0,c.jsx)(t.h3,{id:`odata-functionimport`,children:`OData FunctionImport`}),`
194
+ `,(0,c.jsx)(t.p,{children:`Если backend contract опубликован как FunctionImport, operation определяется metadata:`}),`
195
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`import { odataFunctionImportFn } from "@ryuzaki13/react-foundation-api/odata";
196
+ import { wrapODataParams } from "@ryuzaki13/react-foundation-lib/odata-service";
197
+
198
+ const deliveryAdapter: ErrorReportDeliveryAdapter = async (body, { queryClient }) => {
199
+ await odataFunctionImportFn({
200
+ odata: {
201
+ service: "ZERROR_REPORT_SRV",
202
+ target: "SendErrorReport"
203
+ },
204
+ params: wrapODataParams({
205
+ ReportId: body.reportId,
206
+ Payload: body.payload
207
+ })
208
+ })({ client: queryClient });
209
+ };
210
+ `})}),`
211
+ `,(0,c.jsx)(t.p,{children:`Это только пример mapping: точные parameter names должны соответствовать metadata вашего сервиса.`}),`
212
+ `,(0,c.jsx)(t.h3,{id:`server-function`,children:`Server function`}),`
213
+ `,(0,c.jsxs)(t.p,{children:[`Adapter может вызвать client-safe serverFn operation. Модуль error-report не знает о transport и не ограничивает его, пока adapter возвращает `,(0,c.jsx)(t.code,{children:`Promise<void>`}),`.`]}),`
214
+ `,(0,c.jsx)(t.h3,{id:`почему-adapter-ничего-не-возвращает`,children:`Почему adapter ничего не возвращает`}),`
215
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`sendErrorReport`}),` управляет local draft lifecycle, а не server entity. Если backend вернул receipt, adapter может обработать его внутри: сохранить в отдельный Query cache, telemetry или domain store. Public delivery contract считает успехом fulfilled promise.`]}),`
216
+ `,(0,c.jsx)(t.h2,{id:`adapter-с-cache-invalidation`,children:`Adapter с cache invalidation`}),`
217
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const adapter: ErrorReportDeliveryAdapter = async (body, { queryClient }) => {
218
+ await postReport(body);
219
+ await queryClient.invalidateQueries({ queryKey: ["error-reports"] });
220
+ };
221
+ `})}),`
222
+ `,(0,c.jsxs)(t.p,{children:[`Если invalidation бросит ошибку, вся доставка считается неуспешной и draft станет `,(0,c.jsx)(t.code,{children:`failed`}),`, даже если backend уже принял отчёт. Для non-critical cache update обработайте ошибку внутри adapter-а.`]}),`
223
+ `,(0,c.jsx)(t.p,{children:`Безопасный вариант для необязательного refresh:`}),`
224
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const adapter: ErrorReportDeliveryAdapter = async (body, { queryClient }) => {
225
+ await postReport(body);
226
+
227
+ try {
228
+ await queryClient.invalidateQueries({ queryKey: ["error-reports"] });
229
+ } catch (error) {
230
+ console.warn("Отчёт отправлен, но cache не обновлён", error);
231
+ }
232
+ };
233
+ `})}),`
234
+ `,(0,c.jsx)(t.p,{children:`Решение зависит от contract: если fresh cache является частью успешной операции, не поглощайте ошибку.`}),`
235
+ `,(0,c.jsx)(t.h2,{id:`повторная-отправка-и-concurrency`,children:`Повторная отправка и concurrency`}),`
236
+ `,(0,c.jsxs)(t.p,{children:[`После `,(0,c.jsx)(t.code,{children:`failed`}),` функцию можно вызвать повторно. Проверка `,(0,c.jsx)(t.code,{children:`sending`}),` защищает от обычного повторного нажатия, но это не распределённая блокировка: два практически одновременных вызова могут успеть прочитать старый статус до его обновления. Backend желательно сделать идемпотентным по `,(0,c.jsx)(t.code,{children:`reportId`}),`.`]}),`
237
+ `,(0,c.jsx)(t.h3,{id:`idempotency-backend-а`,children:`Idempotency backend-а`}),`
238
+ `,(0,c.jsx)(t.p,{children:`Рекомендуемый server contract:`}),`
239
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-text`,children:`UNIQUE(reportId)
240
+ `})}),`
241
+ `,(0,c.jsxs)(t.p,{children:[`Повтор с тем же `,(0,c.jsx)(t.code,{children:`reportId`}),` должен либо вернуть прежний успешный result, либо завершиться предсказуемым «already accepted», которое adapter считает успехом.`]}),`
242
+ `,(0,c.jsx)(t.p,{children:`Это защищает сценарий:`}),`
243
+ `,(0,c.jsxs)(t.ol,{children:[`
244
+ `,(0,c.jsx)(t.li,{children:`Backend принял report.`}),`
245
+ `,(0,c.jsx)(t.li,{children:`Network response потерялся.`}),`
246
+ `,(0,c.jsxs)(t.li,{children:[`Client пометил draft как `,(0,c.jsx)(t.code,{children:`failed`}),`.`]}),`
247
+ `,(0,c.jsx)(t.li,{children:`Пользователь повторил отправку.`}),`
248
+ `]}),`
249
+ `,(0,c.jsx)(t.p,{children:`Без idempotency server создаст duplicate.`}),`
250
+ `,(0,c.jsx)(t.h3,{id:`несколько-tabs`,children:`Несколько tabs`}),`
251
+ `,(0,c.jsxs)(t.p,{children:[`Status `,(0,c.jsx)(t.code,{children:`sending`}),` в local store не является cross-tab distributed lock, если storage implementation явно не гарантирует это. Idempotency по `,(0,c.jsx)(t.code,{children:`reportId`}),` остаётся обязательной защитой.`]}),`
252
+ `,(0,c.jsx)(t.h2,{id:`тестирование`,children:`Тестирование`}),`
253
+ `,(0,c.jsx)(t.h3,{id:`body-builder`,children:`Body builder`}),`
254
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`import { expect, it } from "vitest";
255
+
256
+ it("подставляет fallback message в оба места", () => {
257
+ const body = createErrorReportDeliveryBody({
258
+ ...draftFixture,
259
+ payload: {
260
+ ...draftFixture.payload,
261
+ error: {
262
+ ...draftFixture.payload.error,
263
+ message: " "
264
+ }
265
+ }
266
+ });
267
+
268
+ expect(body.errorMessage).toBe("Неизвестная ошибка");
269
+ expect(JSON.parse(body.payload).error.message).toBe("Неизвестная ошибка");
270
+ });
271
+ `})}),`
272
+ `,(0,c.jsx)(t.h3,{id:`delivery-lifecycle`,children:`Delivery lifecycle`}),`
273
+ `,(0,c.jsx)(t.p,{children:`В package/feature test проверяйте:`}),`
274
+ `,(0,c.jsxs)(t.ul,{children:[`
275
+ `,(0,c.jsx)(t.li,{children:`отсутствующий id не вызывает adapter;`}),`
276
+ `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`sent`}),` не отправляется повторно;`]}),`
277
+ `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`sending`}),` не отправляется повторно;`]}),`
278
+ `,(0,c.jsxs)(t.li,{children:[`success переводит status в `,(0,c.jsx)(t.code,{children:`sent`}),` и задаёт ISO `,(0,c.jsx)(t.code,{children:`sentUtc`}),`;`]}),`
279
+ `,(0,c.jsxs)(t.li,{children:[`adapter error переводит status в `,(0,c.jsx)(t.code,{children:`failed`}),`;`]}),`
280
+ `,(0,c.jsx)(t.li,{children:`исходный error сохраняет identity и выбрасывается повторно;`}),`
281
+ `,(0,c.jsxs)(t.li,{children:[`retry после `,(0,c.jsx)(t.code,{children:`failed`}),` снова вызывает adapter.`]}),`
282
+ `]}),`
283
+ `,(0,c.jsx)(t.p,{children:`Adapter удобно делать mock-функцией:`}),`
284
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const adapter = vi.fn<ErrorReportDeliveryAdapter>().mockResolvedValue(undefined);
285
+ `})}),`
286
+ `,(0,c.jsx)(t.p,{children:`Не помещайте реальные stack traces, cookies, tokens или пользовательские данные в test snapshots.`}),`
287
+ `,(0,c.jsx)(t.h2,{id:`частые-ошибки`,children:`Частые ошибки`}),`
288
+ `,(0,c.jsx)(t.h3,{id:`передавать-draft-вместо-body`,children:`Передавать draft вместо body`}),`
289
+ `,(0,c.jsxs)(t.p,{children:[`Adapter contract уже получает подготовленный `,(0,c.jsx)(t.code,{children:`body`}),`. Не сериализуйте `,(0,c.jsx)(t.code,{children:`context.draft`}),` вместо него.`]}),`
290
+ `,(0,c.jsxs)(t.h3,{id:`дважды-сериализовать-payload`,children:[`Дважды сериализовать `,(0,c.jsx)(t.code,{children:`payload`})]}),`
291
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`body.payload`}),` уже string:`]}),`
292
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`JSON.stringify(body)
293
+ `})}),`
294
+ `,(0,c.jsxs)(t.p,{children:[`правильно сериализует outer HTTP body. Не делайте `,(0,c.jsx)(t.code,{children:`body.payload = JSON.stringify(body.payload)`}),`.`]}),`
295
+ `,(0,c.jsxs)(t.h3,{id:`считать-sending-надёжной-блокировкой`,children:[`Считать `,(0,c.jsx)(t.code,{children:`sending`}),` надёжной блокировкой`]}),`
296
+ `,(0,c.jsx)(t.p,{children:`Это local lifecycle guard. Server idempotency всё равно нужна.`}),`
297
+ `,(0,c.jsx)(t.h3,{id:`поглощать-adapter-error-в-ui`,children:`Поглощать adapter error в UI`}),`
298
+ `,(0,c.jsx)(t.p,{children:`Функция намеренно rethrow-ит error. Покажите feedback и оставьте возможность retry.`}),`
299
+ `,(0,c.jsx)(t.h3,{id:`добавлять-transport-в-shared-delivery-module`,children:`Добавлять transport в shared delivery module`}),`
300
+ `,(0,c.jsx)(t.p,{children:`Endpoint и auth policy специфичны проекту. Они должны оставаться adapter-ом host application.`}),`
301
+ `,(0,c.jsx)(t.h2,{id:`ошибки-и-безопасность`,children:`Ошибки и безопасность`}),`
302
+ `,(0,c.jsxs)(t.ul,{children:[`
303
+ `,(0,c.jsx)(t.li,{children:`Ошибка adapter-а не поглощается: вызывающий код обязан её обработать.`}),`
304
+ `,(0,c.jsx)(t.li,{children:`Не добавляйте secrets в draft. Delivery layer не выполняет дополнительную redaction всего payload.`}),`
305
+ `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`queryClient`}),` передаётся adapter-у, но модуль сам не инвалидирует queries.`]}),`
306
+ `,(0,c.jsx)(t.li,{children:`Функция управляет локальным draft store; не вызывайте её в среде без подходящего storage/runtime, если draft store там недоступен.`}),`
307
+ `,(0,c.jsxs)(t.li,{children:[`Статус `,(0,c.jsx)(t.code,{children:`sent`}),` означает успешное завершение adapter-а, а не обязательное подтверждение бизнес-обработки backend-ом.`]}),`
308
+ `,(0,c.jsx)(t.li,{children:`Delivery body содержит stack trace и diagnostic payload: передавайте его только по защищённому каналу авторизованному endpoint.`}),`
309
+ `,(0,c.jsxs)(t.li,{children:[`Не логируйте `,(0,c.jsx)(t.code,{children:`body.payload`}),` целиком в production.`]}),`
310
+ `,(0,c.jsxs)(t.li,{children:[`Redaction должна происходить при сборе draft в `,(0,c.jsx)(t.code,{children:`foundation-lib`}),`; delivery boundary не может безопасно угадать все domain secrets.`]}),`
311
+ `]}),`
312
+ `,(0,c.jsx)(t.h2,{id:`faq`,children:`FAQ`}),`
313
+ `,(0,c.jsxs)(t.h3,{id:`почему-функции-нужен-queryclient-даже-если-adapter-его-не-использует`,children:[`Почему функции нужен `,(0,c.jsx)(t.code,{children:`QueryClient`}),`, даже если adapter его не использует?`]}),`
314
+ `,(0,c.jsx)(t.p,{children:`Это единый adapter context. Он позволяет OData operations и cache synchronization без глобального QueryClient.`}),`
315
+ `,(0,c.jsx)(t.h3,{id:`можно-ли-отправить-report-которого-нет-в-store`,children:`Можно ли отправить report, которого нет в store?`}),`
316
+ `,(0,c.jsxs)(t.p,{children:[`Нет. `,(0,c.jsx)(t.code,{children:`sendErrorReport`}),` принимает id существующего draft и вернёт `,(0,c.jsx)(t.code,{children:`undefined`}),`.`]}),`
317
+ `,(0,c.jsx)(t.h3,{id:`можно-ли-изменить-body-перед-отправкой`,children:`Можно ли изменить body перед отправкой?`}),`
318
+ `,(0,c.jsx)(t.p,{children:`Да, внутри project adapter можно построить backend-specific envelope. Не мутируйте входной body; создайте новый object.`}),`
319
+ `,(0,c.jsx)(t.h3,{id:`когда-разрешён-retry`,children:`Когда разрешён retry?`}),`
320
+ `,(0,c.jsxs)(t.p,{children:[`После status `,(0,c.jsx)(t.code,{children:`failed`}),`. `,(0,c.jsx)(t.code,{children:`sent`}),` и `,(0,c.jsx)(t.code,{children:`sending`}),` являются no-op states.`]}),`
321
+ `,(0,c.jsx)(t.h3,{id:`кто-отвечает-за-offline-queue`,children:`Кто отвечает за offline queue?`}),`
322
+ `,(0,c.jsx)(t.p,{children:`Не этот модуль. Он хранит lifecycle одного draft и вызывает adapter. Background sync/retry scheduler должен быть отдельной явно спроектированной инфраструктурой.`}),`
323
+ `,(0,c.jsx)(t.h2,{id:`полный-api`,children:`Полный API`}),`
324
+ `,(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:`createErrorReportDeliveryBody`})}),(0,c.jsx)(t.td,{children:`Строит сериализуемый backend body`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`sendErrorReport`})}),(0,c.jsx)(t.td,{children:`Управляет status и вызывает adapter`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`ErrorReportDeliveryBody`})}),(0,c.jsx)(t.td,{children:`Поля delivery payload`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`ErrorReportDeliveryContext`})}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`draft`}),` и `,(0,c.jsx)(t.code,{children:`queryClient`}),` для adapter-а`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`ErrorReportDeliveryAdapter`})}),(0,c.jsx)(t.td,{children:`Контракт функции доставки`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`SendErrorReportOptions`})}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`adapter`}),` и `,(0,c.jsx)(t.code,{children:`queryClient`})]})]})]})]})]})}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};
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-FSp_AjJa.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-B5YBxaaS.js";function o(e){let t={a:`a`,code:`code`,h1:`h1`,h2:`h2`,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/Data/XML`}),`
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`,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/Data/XML`}),`
2
2
  `,(0,c.jsxs)(t.h1,{id:`простые-xml-helpers-через-ryuzaki13react-foundation-libxml`,children:[`Простые XML helpers через `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/xml`})]}),`
3
3
  `,(0,c.jsxs)(t.p,{children:[`Модуль экранирует XML-текст, строит последовательность простых полей и читает текст первого тега через `,(0,c.jsx)(t.code,{children:`DOMParser`}),`.`]}),`
4
4
  `,(0,c.jsx)(t.h2,{id:`содержание`,children:`Содержание`}),`
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-FSp_AjJa.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-B5YBxaaS.js";function o(e){let t={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/Data/Number Scale`}),`
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={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/Data/Number Scale`}),`
2
2
  `,(0,c.jsx)(t.h1,{id:`number-scale`,children:`Number Scale`}),`
3
3
  `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/number-scale`}),` содержит чистую математику для slider, range, числовой шкалы и управления значением с клавиатуры. Модуль не содержит React-компонентов и не рисует ползунок.`]}),`
4
4
  `,(0,c.jsx)(t.p,{children:`Он решает четыре связанные задачи:`}),`
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-FSp_AjJa.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-B5YBxaaS.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/Formatters/Number`}),`
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/Formatters/Number`}),`
2
2
  `,(0,c.jsx)(t.h1,{id:`числовые-форматтеры`,children:`Числовые форматтеры`}),`
3
3
  `,(0,c.jsx)(t.p,{children:`Модуль форматирует числа для интерфейса, читает распространённые SAP-подобные числовые строки и управляет реестром именованных presets.`}),`
4
4
  `,(0,c.jsx)(t.p,{children:`Все API доступны через один публичный entrypoint:`}),`
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-FSp_AjJa.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-B5YBxaaS.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/Formulas`}),`
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/Formulas`}),`
2
2
  `,(0,c.jsx)(t.h1,{id:`табличные-формулы`,children:`Табличные формулы`}),`
3
3
  `,(0,c.jsxs)(t.p,{children:[`Модуль `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/formulas`}),` предоставляет безопасную инфраструктуру для заранее написанных клиентских формул таблицы.`]}),`
4
4
  `,(0,c.jsx)(t.p,{children:`Формула получает значения других полей текущей строки, выполняет синхронный расчёт и возвращает конечное JavaScript-число. Например, она может вычислить сумму, разницу, отношение или процент для calculated-колонки.`}),`
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-FSp_AjJa.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-B5YBxaaS.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/Formatters/Row-Based`}),`
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/Formatters/Row-Based`}),`
2
2
  `,(0,c.jsx)(t.h1,{id:`row-based-форматтеры`,children:`Row-based форматтеры`}),`
3
3
  `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`rowBased`}),` — небольшой runtime-слой для формул, которые вычисляют отображаемое значение одной ячейки на основании других полей той же строки.`]}),`
4
4
  `,(0,c.jsxs)(t.p,{children:[`Он используется шагом `,(0,c.jsx)(t.code,{children:`rowBasedOverride`}),` в `,(0,c.jsx)(t.a,{href:`../pipeline/README.mdx`,children:`formatter pipeline`}),`. Сам модуль не содержит бизнес-формул: host-приложение создаёт их, собирает в реестр и один раз передаёт реестр библиотеке.`]}),`
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-FSp_AjJa.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-B5YBxaaS.js";function o(e){let t={a:`a`,blockquote:`blockquote`,code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,h4:`h4`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,strong:`strong`,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/Data/Table and Tree Table`}),`
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`,blockquote:`blockquote`,code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,h4:`h4`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,strong:`strong`,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/Data/Table and Tree Table`}),`
2
2
  `,(0,c.jsx)(t.h1,{id:`table-и-tree-table`,children:`Table и Tree Table`}),`
3
3
  `,(0,c.jsx)(t.p,{children:`Эта страница описывает два связанных публичных модуля:`}),`
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-FSp_AjJa.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-B5YBxaaS.js";function o(e){let t={code:`code`,h1:`h1`,h2:`h2`,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/React/Virtualizer Pagination`}),`
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={code:`code`,h1:`h1`,h2:`h2`,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/React/Virtualizer Pagination`}),`
2
2
  `,(0,c.jsxs)(t.h1,{id:`дозагрузка-virtualized-списка-через-ryuzaki13react-foundation-libvirtualizer`,children:[`Дозагрузка virtualized списка через `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/virtualizer`})]}),`
3
3
  `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`useFetchNextPageEffect`}),` вызывает `,(0,c.jsx)(t.code,{children:`fetchNextPage`}),`, когда последняя отрендеренная virtual item достигает конца уже загруженного списка.`]}),`
4
4
  `,(0,c.jsx)(t.h2,{id:`установка-и-импорт`,children:`Установка и импорт`}),`
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-FSp_AjJa.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-B5YBxaaS.js";function o(e){let t={a:`a`,blockquote:`blockquote`,code:`code`,h1:`h1`,h2:`h2`,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/HTTP/Headers and Text Response`}),`
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`,blockquote:`blockquote`,code:`code`,h1:`h1`,h2:`h2`,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/HTTP/Headers and Text Response`}),`
2
2
  `,(0,c.jsxs)(t.h1,{id:`http-headers-и-текстовые-ответы-через-ryuzaki13react-foundation-libhttp`,children:[`HTTP headers и текстовые ответы через `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/http`})]}),`
3
3
  `,(0,c.jsxs)(t.p,{children:[`Модуль создаёт стандартный набор HTTP-заголовков запрета кеширования и обычный `,(0,c.jsx)(t.code,{children:`Response`}),` с UTF-8 plain text.`]}),`
4
4
  `,(0,c.jsx)(t.h2,{id:`содержание`,children:`Содержание`}),`
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-FSp_AjJa.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-B5YBxaaS.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/Data/Bounded Copy Stack`}),`
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/Data/Bounded Copy Stack`}),`
2
2
  `,(0,c.jsxs)(t.h1,{id:`ограниченный-стек-копий-через-ryuzaki13react-foundation-libbounded-copy-stack`,children:[`Ограниченный стек копий через `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/bounded-copy-stack`})]}),`
3
3
  `,(0,c.jsxs)(t.p,{children:[`Модуль хранит небольшой список последних скопированных сущностей. Новый элемент помещается в начало, повтор по `,(0,c.jsx)(t.code,{children:`fingerprint`}),` обновляет существующую запись, а старые записи удаляются при превышении лимита.`]}),`
4
4
  `,(0,c.jsxs)(t.p,{children:[`Документ рассчитан на разработчика без доступа к исходникам пакета. Ниже объясняются структура элемента, различие `,(0,c.jsx)(t.code,{children:`id`}),` и `,(0,c.jsx)(t.code,{children:`fingerprint`}),`, порядок записей, ссылки на payload и все граничные случаи.`]}),`
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-FSp_AjJa.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-B5YBxaaS.js";function o(e){let t={code:`code`,h1:`h1`,h2:`h2`,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/Errors/Missing Context`}),`
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={code:`code`,h1:`h1`,h2:`h2`,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/Errors/Missing Context`}),`
2
2
  `,(0,c.jsxs)(t.h1,{id:`ошибка-отсутствующего-react-context-через-ryuzaki13react-foundation-liberror`,children:[`Ошибка отсутствующего React context через `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/error`})]}),`
3
3
  `,(0,c.jsx)(t.p,{children:`Модуль создаёт единообразное диагностическое сообщение, когда custom hook вызван вне нужного Provider.`}),`
4
4
  `,(0,c.jsx)(t.h2,{id:`установка-и-импорт`,children:`Установка и импорт`}),`
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-FSp_AjJa.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-B5YBxaaS.js";function o(e){let t={code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,strong:`strong`,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/Infrastructure/PWA`}),`
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={code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,strong:`strong`,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/Infrastructure/PWA`}),`
2
2
  `,(0,c.jsx)(t.h1,{id:`pwa`,children:`PWA`}),`
3
3
  `,(0,c.jsx)(t.p,{children:`Модуль PWA состоит из двух публичных входов с разной ответственностью:`}),`
4
4
  `,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Import path`}),(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:`@ryuzaki13/react-foundation-lib/pwa`})}),(0,c.jsx)(t.td,{children:`React-hook обновления Service Worker и все функции cache policy`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/pwa/sw-cache-policy`})}),(0,c.jsxs)(t.td,{children:[`Только чистый parser/builder политики `,(0,c.jsx)(t.code,{children:`x-sw-cache`}),`, без React update-flow`]})]})]})]}),`
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-FSp_AjJa.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-B5YBxaaS.js";function o(e){let t={a:`a`,blockquote:`blockquote`,code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,h4:`h4`,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/Infrastructure/Query Client`}),`
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`,blockquote:`blockquote`,code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,h4:`h4`,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/Infrastructure/Query Client`}),`
2
2
  `,(0,c.jsx)(t.h1,{id:`query-client`,children:`Query Client`}),`
3
3
  `,(0,c.jsxs)(t.p,{children:[`Модуль `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/query-client`}),` предоставляет общую инфраструктуру TanStack Query для browser-приложения:`]}),`
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-FSp_AjJa.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-B5YBxaaS.js";function o(e){let t={code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,strong:`strong`,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/Data/Excel`}),`
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={code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,strong:`strong`,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/Data/Excel`}),`
2
2
  `,(0,c.jsx)(t.h1,{id:`excel`,children:`Excel`}),`
3
3
  `,(0,c.jsxs)(t.p,{children:[`Модуль `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/excel`}),` формирует и скачивает `,(0,c.jsx)(t.code,{children:`.xlsx`}),`-файлы в браузере. Он поддерживает:`]}),`
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-FSp_AjJa.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-B5YBxaaS.js";function o(e){let t={a:`a`,code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,h4:`h4`,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/Array`}),`
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`,h4:`h4`,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/Array`}),`
2
2
  `,(0,c.jsxs)(t.h1,{id:`работа-с-массивами-через-ryuzaki13react-foundation-libarray`,children:[`Работа с массивами через `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/array`})]}),`
3
3
  `,(0,c.jsxs)(t.p,{children:[`Модуль `,(0,c.jsx)(t.code,{children:`array`}),` содержит небольшие типизированные функции для типовых операций с массивами:`]}),`
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-FSp_AjJa.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-B5YBxaaS.js";function o(e){let t={code:`code`,h1:`h1`,h2:`h2`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation Lib/Browser/Session Storage ID`}),`
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={code:`code`,h1:`h1`,h2:`h2`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation Lib/Browser/Session Storage ID`}),`
2
2
  `,(0,c.jsxs)(t.h1,{id:`идентификатор-вкладочной-сессии-через-ryuzaki13react-foundation-libsession-storage`,children:[`Идентификатор вкладочной сессии через `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/session-storage`})]}),`
3
3
  `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`getSessionStorageId`}),` возвращает стабильный id в пределах одной browser-вкладки. При первом вызове id создаётся и сохраняется в `,(0,c.jsx)(t.code,{children:`sessionStorage`}),`, при следующих — читается по тому же ключу.`]}),`
4
4
  `,(0,c.jsx)(t.h2,{id:`установка-и-импорт`,children:`Установка и импорт`}),`
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-FSp_AjJa.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-B5YBxaaS.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/Formatters/Strings`}),`
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/Formatters/Strings`}),`
2
2
  `,(0,c.jsx)(t.h1,{id:`строковые-форматтеры`,children:`Строковые форматтеры`}),`
3
3
  `,(0,c.jsx)(t.p,{children:`Модуль содержит небольшие предсказуемые функции для подготовки пользовательского текста: обрезки пробелов, безопасного преобразования в строку, удаления ведущих нулей, сокращения длинного текста и выбора русской формы слова.`}),`
4
4
  `,(0,c.jsx)(t.p,{children:`Все функции экспортируются через один публичный entrypoint:`}),`
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-FSp_AjJa.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-B5YBxaaS.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/Formatters/Pipeline`}),`
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/Formatters/Pipeline`}),`
2
2
  `,(0,c.jsx)(t.h1,{id:`formatter-pipeline`,children:`Formatter pipeline`}),`
3
3
  `,(0,c.jsx)(t.p,{children:`Formatter pipeline — конфигурируемая последовательность преобразований значения ячейки. Она умеет:`}),`
4
4
  `,(0,c.jsxs)(t.ul,{children:[`