@ryuzaki13/react-foundation-ui 1.12.4 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. package/dist/listbox/Listbox.d.ts +3 -1
  2. package/dist/listbox/Listbox.d.ts.map +1 -1
  3. package/dist/listbox/index.js +69 -60
  4. package/dist/listbox/index.js.map +1 -1
  5. package/package.json +5 -5
  6. package/storybook-static/assets/{Badge-D34jY6Gi.js → Badge-DTV2OL5k.js} +1 -1
  7. package/storybook-static/assets/{Badge.stories-BviYPkwq.js → Badge.stories-D4zH_nK5.js} +1 -1
  8. package/storybook-static/assets/{BadgeList-D1opuTdU.js → BadgeList-CnmQ4zmg.js} +1 -1
  9. package/storybook-static/assets/{BarcodeScannerDialog.stories-CGdzqa8a.js → BarcodeScannerDialog.stories-Cm7ouwg8.js} +1 -1
  10. package/storybook-static/assets/{Button-GlOmKXxP.js → Button-6JuiM3Sj.js} +1 -1
  11. package/storybook-static/assets/{Button-TDS2LnG9.js → Button-HheQm8vu.js} +1 -1
  12. package/storybook-static/assets/{Button.stories-DZc3uOlJ.js → Button.stories-B3Q5B_2w.js} +1 -1
  13. package/storybook-static/assets/{CalendarView-BZUnLT-3.js → CalendarView-CEfB4HLd.js} +1 -1
  14. package/storybook-static/assets/{CheckBox-nJdvYZhM.js → CheckBox-CWGCGHUS.js} +1 -1
  15. package/storybook-static/assets/{CheckBox-CLBqWi7z.js → CheckBox-CzvA4ttT.js} +1 -1
  16. package/storybook-static/assets/{CheckBox.stories-CYOLxCPI.js → CheckBox.stories-D2lA5F8B.js} +1 -1
  17. package/storybook-static/assets/{Color-6AOWCN3U-D18f6KeQ.js → Color-6AOWCN3U-RvvVvZ9f.js} +1 -1
  18. package/storybook-static/assets/{ContextMenu-CQSxlBWi.js → ContextMenu-BJnj7lO4.js} +1 -1
  19. package/storybook-static/assets/{ContextMenu-sE3MNnCR.js → ContextMenu-DCpglNe4.js} +1 -1
  20. package/storybook-static/assets/{ContextMenu.stories-BLY5Ujpn.js → ContextMenu.stories-CZabvzR6.js} +1 -1
  21. package/storybook-static/assets/{CustomOptionButton-Dskg5LhM.js → CustomOptionButton-B9bzr3ba.js} +1 -1
  22. package/storybook-static/assets/{DateInput-C1ICOvMl.js → DateInput-Cud2arem.js} +1 -1
  23. package/storybook-static/assets/{DateInput-Bzodnz-9.js → DateInput-DoMGeEvO.js} +1 -1
  24. package/storybook-static/assets/{DateInput.stories-BzVMkjA3.js → DateInput.stories-DFd5wyMy.js} +1 -1
  25. package/storybook-static/assets/{DateRangePresetSelect-Br2__e-_.js → DateRangePresetSelect-C8jA3mur.js} +1 -1
  26. package/storybook-static/assets/{DateRangePresetSelect-D4nDDXcv.js → DateRangePresetSelect-DfGcFHV8.js} +1 -1
  27. package/storybook-static/assets/{DateRangePresetSelect.stories-BGjTzO7y.js → DateRangePresetSelect.stories-DtR83uwx.js} +1 -1
  28. package/storybook-static/assets/{Detail-0FlptHQe.js → Detail-CMcVxOrr.js} +1 -1
  29. package/storybook-static/assets/{Detail.stories-BxrUGFvI.js → Detail.stories-DGT8An8z.js} +1 -1
  30. package/storybook-static/assets/{Dialog-DkLXNVzZ.js → Dialog-BPzpu7Iw.js} +1 -1
  31. package/storybook-static/assets/{Dialog-BfPgyIcU.js → Dialog-DBh-yDZW.js} +1 -1
  32. package/storybook-static/assets/{Dialog.stories-D949y8s0.js → Dialog.stories-DU3SgOkL.js} +1 -1
  33. package/storybook-static/assets/{Disclosure-Cyh5B4JR.js → Disclosure-BGsPaAxH.js} +1 -1
  34. package/storybook-static/assets/{Disclosure.stories-CvuTZlF_.js → Disclosure.stories-DpwyYh7T.js} +1 -1
  35. package/storybook-static/assets/{DisclosureGroup-Wae8qmS8.js → DisclosureGroup-CJI8B2x_.js} +1 -1
  36. package/storybook-static/assets/{DocsRenderer-JROSPFPF-CGjmbQhP.js → DocsRenderer-JROSPFPF-Cf85Uxwt.js} +1 -1
  37. package/storybook-static/assets/{DropZone-BFX_F_oU.js → DropZone-C7qTrvkq.js} +1 -1
  38. package/storybook-static/assets/{DropZone-fvEwB1kz.js → DropZone-cYl1w3wQ.js} +1 -1
  39. package/storybook-static/assets/{DropZone.stories-BKXYN11y.js → DropZone.stories-o02bE6DI.js} +1 -1
  40. package/storybook-static/assets/{DropdownMenu-eld8h4zt.js → DropdownMenu-DqqPU9RU.js} +1 -1
  41. package/storybook-static/assets/{ExpandableActionPanel-CsulBc_X.js → ExpandableActionPanel-B_pjHQ5m.js} +1 -1
  42. package/storybook-static/assets/{ExpandableActionPanel.stories-DorKO7Y7.js → ExpandableActionPanel.stories-C7dJ5dht.js} +1 -1
  43. package/storybook-static/assets/{Flex-Bos8Qsbf.js → Flex-CIHkkwFK.js} +1 -1
  44. package/storybook-static/assets/{Flex.stories-uMO88BD-.js → Flex.stories-DteEPY0y.js} +1 -1
  45. package/storybook-static/assets/{FloatingPopover-Cc604wgC.js → FloatingPopover-yB9tTk9G.js} +1 -1
  46. package/storybook-static/assets/{FormattedTableCell-BBvQf7q4.js → FormattedTableCell-QVYQepjk.js} +3 -3
  47. package/storybook-static/assets/{Grid-DEWQZjLv.js → Grid-BUVtGaZY.js} +1 -1
  48. package/storybook-static/assets/{Grid.stories-BLE0L0zk.js → Grid.stories-CWGqCVB2.js} +1 -1
  49. package/storybook-static/assets/{ImageCropper.stories-BW7Ozi0T.js → ImageCropper.stories-D8l7iHQA.js} +1 -1
  50. package/storybook-static/assets/{ImageRenderer-BejoR1lv.js → ImageRenderer-BcPmp9P9.js} +1 -1
  51. package/storybook-static/assets/{ImageRenderer.stories-DP10_K4c.js → ImageRenderer.stories-CcLUz8Ml.js} +1 -1
  52. package/storybook-static/assets/{ImageView.stories-Bw13WxSu.js → ImageView.stories-BwvjVmuF.js} +1 -1
  53. package/storybook-static/assets/{ImageViewer.stories-B0crB6gM.js → ImageViewer.stories-BjT782dr.js} +2 -2
  54. package/storybook-static/assets/{ImageViewerRuntime-B7phOl_8.js → ImageViewerRuntime-DnQ-rQ_M.js} +1 -1
  55. package/storybook-static/assets/{Input-DiBxtZDI.js → Input-CmEkIaR0.js} +1 -1
  56. package/storybook-static/assets/{Input-B5POVG-l.js → Input-DebpyMJg.js} +1 -1
  57. package/storybook-static/assets/{Input.stories-BBu0KoQ3.js → Input.stories-y2LCVkT2.js} +1 -1
  58. package/storybook-static/assets/{InputDateTime-CF1I9kaz.js → InputDateTime-B5oKuCea.js} +1 -1
  59. package/storybook-static/assets/{InputDateTime.stories-COzwJ_xA.js → InputDateTime.stories-Cwi0acf9.js} +1 -1
  60. package/storybook-static/assets/{InputFile-Czxpud9Y.js → InputFile-B2dVbDrE.js} +1 -1
  61. package/storybook-static/assets/{InputFile-DV4LbiGx.js → InputFile-DbRU7crz.js} +1 -1
  62. package/storybook-static/assets/{InputFile.stories-C4UrANxS.js → InputFile.stories-DrXG5hWA.js} +1 -1
  63. package/storybook-static/assets/{InputFiles-B93BMp0i.js → InputFiles-CsgKJXOD.js} +1 -1
  64. package/storybook-static/assets/{InputFiles-B_WMnvSr.js → InputFiles-DEBKMzlt.js} +1 -1
  65. package/storybook-static/assets/{InputFiles.stories-CTun1-En.js → InputFiles.stories-EZDcefG0.js} +1 -1
  66. package/storybook-static/assets/{InputFilesList-ChdmhHw0.js → InputFilesList-GjMJ14Ln.js} +1 -1
  67. package/storybook-static/assets/{InputImage-xpaTZ7wq.js → InputImage-CFFK9MbG.js} +1 -1
  68. package/storybook-static/assets/{InputImage-DR7Ed0Vu.js → InputImage-qjJ7xrKX.js} +1 -1
  69. package/storybook-static/assets/{InputImage.stories-DTvBlwrQ.js → InputImage.stories-B32AtBda.js} +1 -1
  70. package/storybook-static/assets/{InteractiveComponents-BYjJFrHD.js → InteractiveComponents-DustBT4l.js} +1 -1
  71. package/storybook-static/assets/{InteractiveComponents.stories-CTbNtPbV.js → InteractiveComponents.stories-J-7t7y-v.js} +1 -1
  72. package/storybook-static/assets/{LayoutPicker-CInTlBMe.js → LayoutPicker-DlzXd6kS.js} +1 -1
  73. package/storybook-static/assets/LayoutPicker-DwNtjoeb.js +376 -0
  74. package/storybook-static/assets/{LayoutPicker.stories-DQ_lYy0l.js → LayoutPicker.stories-2bG0TvXm.js} +1 -1
  75. package/storybook-static/assets/{Listbox-D4HihpJQ.js → Listbox-BAhrUu_I.js} +16 -4
  76. package/storybook-static/assets/Listbox-C9qCMY31.js +1 -0
  77. package/storybook-static/assets/{Listbox.stories-CzP9_sD-.js → Listbox.stories-BfakOrPT.js} +1 -1
  78. package/storybook-static/assets/{Modal-DUYVQZu5.js → Modal-D5znEvBs.js} +1 -1
  79. package/storybook-static/assets/{Modal-LmkJ7CHS.js → Modal-wGyoEzau.js} +1 -1
  80. package/storybook-static/assets/{Modal.stories-BGui6fT5.js → Modal.stories-DotZ88Ut.js} +1 -1
  81. package/storybook-static/assets/{ModalManagerProvider-DOLfRB2E.js → ModalManagerProvider-DXPaYU4j.js} +1 -1
  82. package/storybook-static/assets/MultiSelect-BxKmL7sF.js +2 -0
  83. package/storybook-static/assets/{MultiSelect-CWIM68HY.js → MultiSelect-DN1NhXH9.js} +1 -1
  84. package/storybook-static/assets/{MultiSelect.stories-C45HfpYj.js → MultiSelect.stories-Cdrx9hhT.js} +1 -1
  85. package/storybook-static/assets/{NoData-BFixErI8.js → NoData-mAjM6Vuy.js} +1 -1
  86. package/storybook-static/assets/{NotificationsHost-DSFid0wi.js → NotificationsHost-gBWuk9v-.js} +1 -1
  87. package/storybook-static/assets/{NotificationsHost.stories-BRb4w9We.js → NotificationsHost.stories-DONKtSKb.js} +1 -1
  88. package/storybook-static/assets/{ODataMultiSelect-BWAo87rZ.js → ODataMultiSelect-Daq3ksSA.js} +1 -1
  89. package/storybook-static/assets/{ODataMultiSelect.stories-9JY7dCz7.js → ODataMultiSelect.stories-De0WwTKp.js} +1 -1
  90. package/storybook-static/assets/{ODataSelect-CNaZGImQ.js → ODataSelect-BUO-vyqK.js} +1 -1
  91. package/storybook-static/assets/{ODataSelect.stories-DmUKhDNz.js → ODataSelect.stories-CJ2RCZGP.js} +1 -1
  92. package/storybook-static/assets/{ODataTreeMultiSelect-C_qAbPca.js → ODataTreeMultiSelect-Ctyo-uib.js} +1 -1
  93. package/storybook-static/assets/{ODataTreeMultiSelect.stories-CEfHC6t_.js → ODataTreeMultiSelect.stories-BX4wjGkG.js} +1 -1
  94. package/storybook-static/assets/{ODataTreeSelect-BSFpOn9W.js → ODataTreeSelect-BZzwG_Ve.js} +1 -1
  95. package/storybook-static/assets/{ODataTreeSelect.stories-caU47o0f.js → ODataTreeSelect.stories-B0jQNyMj.js} +1 -1
  96. package/storybook-static/assets/{OneStepScroller-Bs7JuMLb.js → OneStepScroller-BL3gxJh1.js} +1 -1
  97. package/storybook-static/assets/{Option-CSnKA-Xd.js → Option-JgQ-duDq.js} +1 -1
  98. package/storybook-static/assets/{OptionButton-DIGMZVy9.js → OptionButton-CATaxLh0.js} +1 -1
  99. package/storybook-static/assets/PeriodSelect-4LpRQDP5.js +5 -0
  100. package/storybook-static/assets/{PeriodSelect-Cd0ESjew.js → PeriodSelect-BIsC_Ew6.js} +1 -1
  101. package/storybook-static/assets/{PeriodSelect.stories-Dir9DbtU.js → PeriodSelect.stories-D5fKpF2P.js} +1 -1
  102. package/storybook-static/assets/PickerField-BkqWIWZw.js +1 -0
  103. package/storybook-static/assets/{PickerTriggerActions-CJMxsesn.js → PickerTriggerActions-BVrXKKJ9.js} +1 -1
  104. package/storybook-static/assets/{Popover-CRhHLoew.js → Popover-BTrxASXR.js} +1 -1
  105. package/storybook-static/assets/{Popover-D6-lu_yc.js → Popover-DZlEnjse.js} +1 -1
  106. package/storybook-static/assets/{Popover.stories-BCMMP7px.js → Popover.stories-BdyB4Q7K.js} +1 -1
  107. package/storybook-static/assets/{PresetRangeDateInput-CrZgAMBR.js → PresetRangeDateInput-Cp66aUGT.js} +1 -1
  108. package/storybook-static/assets/{PresetRangeDateInput-BlRfDcUL.js → PresetRangeDateInput-DUES355B.js} +1 -1
  109. package/storybook-static/assets/{PresetRangeDateInput.stories-Zl5sur2x.js → PresetRangeDateInput.stories-D4jLrF6o.js} +1 -1
  110. package/storybook-static/assets/{PresetSelect-wNDulYVW.js → PresetSelect-CmRrk7FZ.js} +1 -1
  111. package/storybook-static/assets/{README-D65oLCnS.js → README--fYBobJK.js} +1 -1
  112. package/storybook-static/assets/{README-Bdm71C27.js → README-4AGJG--w.js} +1 -1
  113. package/storybook-static/assets/{README-BB-q729e.js → README-52AHLz83.js} +1 -1
  114. package/storybook-static/assets/{README-DFlnpjEv.js → README-55mkSTZb.js} +1 -1
  115. package/storybook-static/assets/README-B00ewV67.js +37 -0
  116. package/storybook-static/assets/{README-C9cYGWK6.js → README-B20cH-BV.js} +1 -1
  117. package/storybook-static/assets/{README-BZdQ6muO.js → README-B4CJVRtX.js} +1 -1
  118. package/storybook-static/assets/{README-DKMmI4G2.js → README-B7BK3gkk.js} +1 -1
  119. package/storybook-static/assets/{README-BdNMeUCv.js → README-B9foBRQ-.js} +1 -1
  120. package/storybook-static/assets/{README-BJ7S9lBU.js → README-BCNsNQNj.js} +1 -1
  121. package/storybook-static/assets/{README-z6dqmkvs.js → README-BGA2Ek3H.js} +1 -1
  122. package/storybook-static/assets/{README-BT0TE4lM.js → README-BUknkyU6.js} +1 -1
  123. package/storybook-static/assets/{README-D55OX9pN.js → README-BfGp1q9n.js} +1 -1
  124. package/storybook-static/assets/{README-Cfj0BoXs.js → README-BhRGrTHx.js} +1 -1
  125. package/storybook-static/assets/{README-BEZWi2C2.js → README-Bh_zrJ_j.js} +1 -1
  126. package/storybook-static/assets/{README-lN1Ljv0O.js → README-BlWMNqE5.js} +1 -1
  127. package/storybook-static/assets/{README-CcRUd05A.js → README-BmKEL3jy.js} +1 -1
  128. package/storybook-static/assets/{README-CN8Y6HC2.js → README-BoGNjKgW.js} +1 -1
  129. package/storybook-static/assets/README-Bq8FLza7.js +121 -0
  130. package/storybook-static/assets/{README-DP8Jhu4s.js → README-BrJaVHU_.js} +1 -1
  131. package/storybook-static/assets/{README-Csisl067.js → README-BsUvf6lk.js} +37 -8
  132. package/storybook-static/assets/{README-BWVWcDb4.js → README-C28SDMRx.js} +1 -1
  133. package/storybook-static/assets/{README-DC6IHyBW.js → README-C8Xo5jEX.js} +1 -1
  134. package/storybook-static/assets/{README-Cf-es484.js → README-CHw6-PVx.js} +9 -2
  135. package/storybook-static/assets/{README-D35QrmDs.js → README-CPYFZwZE.js} +1 -1
  136. package/storybook-static/assets/{README-CaQ_OfNG.js → README-CU_f1CMq.js} +1 -1
  137. package/storybook-static/assets/{README-j3HSmhET.js → README-C_SQjJtW.js} +1 -1
  138. package/storybook-static/assets/{README-Des11J57.js → README-C_WyDQDz.js} +1 -1
  139. package/storybook-static/assets/{README-D93oAq59.js → README-CmK6hELS.js} +1 -1
  140. package/storybook-static/assets/{README-DIgOgGI7.js → README-CnRKlFuJ.js} +1 -1
  141. package/storybook-static/assets/{README-B7i5ChbN.js → README-CoD7FHU_.js} +1 -1
  142. package/storybook-static/assets/{README-CJy-3cCT.js → README-Cs-dnvtW.js} +1 -1
  143. package/storybook-static/assets/{README-CR0j-jFh.js → README-CzKPWsNs.js} +1 -1
  144. package/storybook-static/assets/{README-COQcoKT9.js → README-D-TgbUSA.js} +1 -1
  145. package/storybook-static/assets/{README-CCHc0Xyu.js → README-D6pLFtqL.js} +45 -1
  146. package/storybook-static/assets/{README-CDaOPhz8.js → README-D7jyja4l.js} +1 -1
  147. package/storybook-static/assets/{README-DPYg_Acv.js → README-D8YPmvQw.js} +1 -1
  148. package/storybook-static/assets/{README-Ch7v2uGS.js → README-DG5knhc9.js} +1 -1
  149. package/storybook-static/assets/{README-LyF6lMIs.js → README-DK-Bw1l1.js} +1 -1
  150. package/storybook-static/assets/{README-BRfBuhla.js → README-DK-US_zR.js} +1 -1
  151. package/storybook-static/assets/{README-8YjqwqnH.js → README-DNUrBjgg.js} +1 -1
  152. package/storybook-static/assets/{README-r-4LRVav.js → README-DPuLgYuK.js} +12 -4
  153. package/storybook-static/assets/{README-CaM6cf-O.js → README-DgudM-2t.js} +1 -1
  154. package/storybook-static/assets/{README-iF0ok9Vi.js → README-Ds6OSOC0.js} +1 -1
  155. package/storybook-static/assets/{README-B6h01Pmu.js → README-DsfBjN9N.js} +1 -1
  156. package/storybook-static/assets/{README-Rjv-h87w.js → README-Duppk6f6.js} +4 -2
  157. package/storybook-static/assets/{README-C3jNJJpP.js → README-DvZ8ZhlH.js} +1 -1
  158. package/storybook-static/assets/{README-CRga2fgb.js → README-DyLt9P77.js} +1 -1
  159. package/storybook-static/assets/{README-GIOQUZhr.js → README-DzVNZdfo.js} +1 -1
  160. package/storybook-static/assets/{README-CsYG82LK.js → README-E5QziGK8.js} +1 -1
  161. package/storybook-static/assets/{README-BRKMZAGf.js → README-EIhMMZ0t.js} +107 -28
  162. package/storybook-static/assets/{README-Bubi5gTJ.js → README-LqD1V5ru.js} +1 -1
  163. package/storybook-static/assets/{README-B_NLFfpp.js → README-lgRhlVsq.js} +1 -1
  164. package/storybook-static/assets/{RadioButton-CCR0zu3W.js → RadioButton-BLHXpf6L.js} +1 -1
  165. package/storybook-static/assets/{RadioButton-SDIHkMqE.js → RadioButton-CmcExRQs.js} +1 -1
  166. package/storybook-static/assets/{RadioButton.stories-CWlAzbso.js → RadioButton.stories-P1SEMdJ1.js} +1 -1
  167. package/storybook-static/assets/{RadioGroup-B8dC3Beb.js → RadioGroup-BBv2Na1n.js} +1 -1
  168. package/storybook-static/assets/{RadioGroup-CvMAbZis.js → RadioGroup-DkCSA8me.js} +1 -1
  169. package/storybook-static/assets/{RadioGroup.stories-B7g9iK7V.js → RadioGroup.stories-5-uFHs1b.js} +1 -1
  170. package/storybook-static/assets/{Scrollable-Duhb4hgF.js → Scrollable-XhGz9dwJ.js} +1 -1
  171. package/storybook-static/assets/Select-BEMtNq5M.js +12 -0
  172. package/storybook-static/assets/{Select-HfN2ur_G.js → Select-CyA-PHrU.js} +1 -1
  173. package/storybook-static/assets/{Select.stories-B9ulZxEn.js → Select.stories-B_GbDG58.js} +1 -1
  174. package/storybook-static/assets/{SerializableSelect-CnOm3Egr.js → SerializableSelect-CJ74e_Vc.js} +1 -1
  175. package/storybook-static/assets/{SerializableSelect.stories-Ct4iR6JB.js → SerializableSelect.stories-PUXPFPFx.js} +1 -1
  176. package/storybook-static/assets/SingleDateTimeInput-BlpQ8t9f.js +1 -0
  177. package/storybook-static/assets/{SingleDateTimeInput-CoW7Kbyn.js → SingleDateTimeInput-wqb75Yrz.js} +1 -1
  178. package/storybook-static/assets/{SingleDateTimeInput.stories-CSMgGAWO.js → SingleDateTimeInput.stories-CdogRh5M.js} +1 -1
  179. package/storybook-static/assets/{Slider-N8mF8qmG.js → Slider-CZa1f0vP.js} +1 -1
  180. package/storybook-static/assets/{Slider-B8CLVfcP.js → Slider-r8Be9wJ4.js} +1 -1
  181. package/storybook-static/assets/{Slider.stories-KBmRK3s8.js → Slider.stories-BUwg0h15.js} +1 -1
  182. package/storybook-static/assets/{SliderInput-BDJi-cgo.js → SliderInput-BWFbcA5R.js} +1 -1
  183. package/storybook-static/assets/{SliderInput-BkiUt9jK.js → SliderInput-BaZBNhhF.js} +1 -1
  184. package/storybook-static/assets/{SliderInput.stories-BYJemRSZ.js → SliderInput.stories-Cbxo0ku_.js} +1 -1
  185. package/storybook-static/assets/{Sortable-B9KSdQoM.js → Sortable-JfLmQUdm.js} +1 -1
  186. package/storybook-static/assets/{Sortable.stories-DkgQcmlF.js → Sortable.stories-Cz9xM3Tw.js} +1 -1
  187. package/storybook-static/assets/{Splitter-RwtbhIP_.js → Splitter-BkQcPRYJ.js} +1 -1
  188. package/storybook-static/assets/{Splitter.stories-C7WMeiBU.js → Splitter.stories-zQf1fK4D.js} +1 -1
  189. package/storybook-static/assets/StateSelect-DxH1oWnK.js +4 -0
  190. package/storybook-static/assets/{StateSelect-Cu3-TJjY.js → StateSelect-TLRMUmko.js} +1 -1
  191. package/storybook-static/assets/{StateSelect.stories-C1SXNtZm.js → StateSelect.stories-CReLNG_6.js} +1 -1
  192. package/storybook-static/assets/{StringToggle.stories-CSWTlbeH.js → StringToggle.stories-BYqTdRbD.js} +1 -1
  193. package/storybook-static/assets/{Switch-C0VQpcAN.js → Switch-ChsLVAse.js} +1 -1
  194. package/storybook-static/assets/{Switch-CMm26s02.js → Switch-DE9rqHmp.js} +1 -1
  195. package/storybook-static/assets/{Switch.stories-BdeMw5vh.js → Switch.stories-BaVgLi3_.js} +1 -1
  196. package/storybook-static/assets/{Table-BdN7l9nU.js → Table-qoMvYV1q.js} +1 -1
  197. package/storybook-static/assets/{Table.stories-n1jzcEtU.js → Table.stories-BdLScKfS.js} +1 -1
  198. package/storybook-static/assets/{Tabs-3QRIKQu4.js → Tabs-CuALrdgt.js} +1 -1
  199. package/storybook-static/assets/{Tabs.stories-Br_vn86G.js → Tabs.stories-BrLtxZ_a.js} +1 -1
  200. package/storybook-static/assets/{TabsBox-oUhSAA8j.js → TabsBox-DzfWhIHb.js} +1 -1
  201. package/storybook-static/assets/{TagInput-CXLkDkGR.js → TagInput-Tyn5Jgus.js} +1 -1
  202. package/storybook-static/assets/{TagInput.stories-Oug-n_Cc.js → TagInput.stories-Bbs3olyB.js} +1 -1
  203. package/storybook-static/assets/{Text-EA5QyBz4.js → Text-B4GUKigV.js} +1 -1
  204. package/storybook-static/assets/{Textarea-BhnGClU1.js → Textarea-CNu-scX8.js} +1 -1
  205. package/storybook-static/assets/{Textarea-JWCJNKsl.js → Textarea-D3iwzB-S.js} +1 -1
  206. package/storybook-static/assets/{Textarea.stories-nyyWW7AG.js → Textarea.stories-CE2gt74x.js} +1 -1
  207. package/storybook-static/assets/{TimePanel-CWnqPBjv.js → TimePanel-BESMLCVl.js} +1 -1
  208. package/storybook-static/assets/{TimePanel.stories-C-iXXNjE.js → TimePanel.stories-BYhTpaoS.js} +1 -1
  209. package/storybook-static/assets/{Toggle-C_aM5aMQ.js → Toggle-0-SlfDXC.js} +1 -1
  210. package/storybook-static/assets/{Toggle-DSSRTisC.js → Toggle-BexBc-UO.js} +1 -1
  211. package/storybook-static/assets/{Toggle.stories-mFCOmo4Y.js → Toggle.stories-CG4rBYOZ.js} +1 -1
  212. package/storybook-static/assets/{TreeMultiSelect-CyW6oUN_.js → TreeMultiSelect-Cne9qXjN.js} +1 -1
  213. package/storybook-static/assets/{TreeMultiSelect-CxOnGdzT.js → TreeMultiSelect-QId1DJUn.js} +1 -1
  214. package/storybook-static/assets/{TreeMultiSelect.stories-CC1X33-d.js → TreeMultiSelect.stories-D6ElJY8Y.js} +1 -1
  215. package/storybook-static/assets/{TreePickerBase-B5pChx5i.js → TreePickerBase-Dq3HMrua.js} +2 -2
  216. package/storybook-static/assets/{TreeSelect-LtUUGYjX.js → TreeSelect-BJKtAh4x.js} +1 -1
  217. package/storybook-static/assets/{TreeSelect-PjRafYC5.js → TreeSelect-q4gdFfBH.js} +1 -1
  218. package/storybook-static/assets/{TreeSelect.stories-kT556sYJ.js → TreeSelect.stories-DfCxZuVy.js} +1 -1
  219. package/storybook-static/assets/{TreeTable-MLb4c6PD.js → TreeTable-5fAWCnhQ.js} +1 -1
  220. package/storybook-static/assets/{TreeTable.stories-CAiwbwxz.js → TreeTable.stories-B1fSfYHg.js} +1 -1
  221. package/storybook-static/assets/{array-D-_yMMUK-BQ0uu1hZ.js → array-D-_yMMUK-DYqn1Ozn.js} +1 -1
  222. package/storybook-static/assets/{blocks-DxyL_jCu.js → blocks-B_u8Yt1Z.js} +3 -3
  223. package/storybook-static/assets/{check-BXD_Pkw4.js → check-r01NGn4c.js} +1 -1
  224. package/storybook-static/assets/{chevron-down-PsXs4TLU.js → chevron-down-DxMviYn3.js} +1 -1
  225. package/storybook-static/assets/{chevron-left-C4gxRcJZ.js → chevron-left-mKnQH53V.js} +1 -1
  226. package/storybook-static/assets/{chevron-right-BoNNSE4i.js → chevron-right-CeJNqWTb.js} +1 -1
  227. package/storybook-static/assets/{chunk-W22LQPXL-Bw8Gaqb1.js → chunk-W22LQPXL-DorleiwX.js} +1 -1
  228. package/storybook-static/assets/{circle-alert-C0KskPN2.js → circle-alert-H7OZyDmF.js} +1 -1
  229. package/storybook-static/assets/{circle-check-BU7bRDDY.js → circle-check-my8Ev6ar.js} +1 -1
  230. package/storybook-static/assets/{components-BCyH0mtu.js → components-CDMhSXUo.js} +3 -3
  231. package/storybook-static/assets/{contextMenu-CI7IuUSN.js → contextMenu-fMt3iyZv.js} +1 -1
  232. package/storybook-static/assets/{defaultRenderers-Dinv2uRZ.js → defaultRenderers-CyUQG_f-.js} +1 -1
  233. package/storybook-static/assets/{download-Ba6RrPW1.js → download-BCwj5k1S.js} +1 -1
  234. package/storybook-static/assets/{floating-ui.react-CzenezcL.js → floating-ui.react-Cy32mouo.js} +1 -1
  235. package/storybook-static/assets/formatters-DVE1YVNQ-CMsbb5-m.js +1 -0
  236. package/storybook-static/assets/{foundationApi-Cjni4JEg.js → foundationApi-BtZYXGDY.js} +4 -4
  237. package/storybook-static/assets/{foundationLib-C3-64Grv.js → foundationLib-CHOUG7NK.js} +1 -1
  238. package/storybook-static/assets/{hooks-DNb8U9od.js → hooks-CEvNG7IN.js} +2 -2
  239. package/storybook-static/assets/iframe-CDVsimPQ.js +1 -0
  240. package/storybook-static/assets/{iframe-I7-gyNVJ.js → iframe-DWvPB8Sk.js} +4 -4
  241. package/storybook-static/assets/{info-HJuo7Txr.js → info-CA6M6l6h.js} +1 -1
  242. package/storybook-static/assets/odata-CHl7sWAn.js +1 -0
  243. package/storybook-static/assets/odata-service-CWkHASdw-DAt28ZWr.js +50 -0
  244. package/storybook-static/assets/{odataStoryFixtures-BlAGWLfC.js → odataStoryFixtures-BvjpoqqT.js} +1 -1
  245. package/storybook-static/assets/{react-DOm5uwVv.js → react-B37E__uI.js} +1 -1
  246. package/storybook-static/assets/{refresh-cw-CgbYtCzg.js → refresh-cw-Bt4yd-lG.js} +1 -1
  247. package/storybook-static/assets/{settings-2-B96G1M3R.js → settings-2-B7Uyk4j8.js} +1 -1
  248. package/storybook-static/assets/{sortable-CsGAvVat.js → sortable-B8UMQCaH.js} +1 -1
  249. package/storybook-static/assets/{syntaxhighlighter-QEQV7K2Y-CJHmYDVV.js → syntaxhighlighter-QEQV7K2Y-QGUDFNNj.js} +1 -1
  250. package/storybook-static/assets/{trash-2-NFv7s58u.js → trash-2-Bhjh1o0B.js} +1 -1
  251. package/storybook-static/assets/{triangle-alert-DVmi0Yoe.js → triangle-alert-D1c-iB00.js} +1 -1
  252. package/storybook-static/assets/{useODataSelectBase-DRX6eayS.js → useODataSelectBase-CYnvX8wM.js} +1 -1
  253. package/storybook-static/assets/{useODataTreeData-D7aS01Or.js → useODataTreeData-C2risfo7.js} +1 -1
  254. package/storybook-static/assets/{usePickerDefaultFilter-5Q1pAV4d.js → usePickerDefaultFilter-BMBLqfz8.js} +1 -1
  255. package/storybook-static/assets/{usePickerQuery-D5WukLFG.js → usePickerQuery-CjSFlUmn.js} +1 -1
  256. package/storybook-static/assets/usePickerTriggerController-Bqo5fhOa.js +6 -0
  257. package/storybook-static/assets/validators-D82aYLRK.js +1 -0
  258. package/storybook-static/assets/{x-DlvQAqG5.js → x-B3GmOByS.js} +1 -1
  259. package/storybook-static/iframe.html +2 -2
  260. package/storybook-static/index.json +1 -1
  261. package/storybook-static/project.json +1 -1
  262. package/storybook-static/assets/LayoutPicker-BIB30zdc.js +0 -376
  263. package/storybook-static/assets/Listbox-hDPss1Hf.js +0 -1
  264. package/storybook-static/assets/MultiSelect-BuWgggHX.js +0 -2
  265. package/storybook-static/assets/PeriodSelect-DIIe0NfH.js +0 -5
  266. package/storybook-static/assets/README-C5s5K0h_.js +0 -324
  267. package/storybook-static/assets/Select-B-zeXEgK.js +0 -12
  268. package/storybook-static/assets/SingleDateTimeInput-BmEpx1-W.js +0 -1
  269. package/storybook-static/assets/StateSelect-BrgGuYMY.js +0 -4
  270. package/storybook-static/assets/formatters-D33Uh3si-Df97arf9.js +0 -1
  271. package/storybook-static/assets/iframe-BHNt9Av8.js +0 -1
  272. package/storybook-static/assets/odata-6-rqoXfe.js +0 -1
  273. package/storybook-static/assets/odata-service-CWkHASdw-CXhFi03v.js +0 -3
  274. package/storybook-static/assets/usePickerTriggerController-e8hbwGar.js +0 -6
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-I7-gyNVJ.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-DxyL_jCu.js";function o(e){let t={a:`a`,blockquote:`blockquote`,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/Hooks`}),`
1
+ import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-DWvPB8Sk.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-B_u8Yt1Z.js";function o(e){let t={a:`a`,blockquote:`blockquote`,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/Hooks`}),`
2
2
  `,(0,c.jsx)(t.h1,{id:`react-и-browser-hooks`,children:`React и browser hooks`}),`
3
3
  `,(0,c.jsxs)(t.p,{children:[`Модуль `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/hooks`}),` содержит общие React hooks для задач, которые повторяются в разных приложениях:`]}),`
4
4
  `,(0,c.jsxs)(t.ul,{children:[`
@@ -95,7 +95,7 @@ import { useDebounce } from "@ryuzaki13/react-foundation-lib/hooks";
95
95
  `})}),`
96
96
  `,(0,c.jsxs)(t.p,{children:[`В development Strict Mode может выполнить дополнительный setup/cleanup cycle. Timers и listeners очищаются, но callback с `,(0,c.jsx)(t.code,{children:`flushOnUnmount: true`}),` является side effect cleanup и должен быть идемпотентным.`]}),`
97
97
  `,(0,c.jsx)(t.h2,{id:`быстрый-выбор`,children:`Быстрый выбор`}),`
98
- `,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Сценарий`}),(0,c.jsx)(t.th,{children:`API`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Значение после паузы во вводе`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useDebounce`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Callback после паузы от последнего события`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useDebouncedCallback`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Ограничение частоты с leading и trailing вызовами`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useThrottledCallback`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Pointer и Keyboard sensors DnD Kit`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useDndSortableSensors`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Собственный доступный floating listbox`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useFloatingListbox`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Чтение и replace-navigation search state`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useSearchParams`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsxs)(t.td,{children:[`Построение `,(0,c.jsx)(t.code,{children:`href`}),` без navigation`]}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useSearchLink`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Lazy component внутри component/custom hook`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useLazyComponent`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Диагностика reference identity`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useReferenceTrace`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsxs)(t.td,{children:[`Блокировка `,(0,c.jsx)(t.code,{children:`Ctrl + wheel`})]}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useBlockBrowserZoom`})})]})]})]}),`
98
+ `,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Сценарий`}),(0,c.jsx)(t.th,{children:`API`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Значение после паузы во вводе`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useDebounce`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Callback после паузы от последнего события`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useDebouncedCallback`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Ограничение частоты с leading и trailing вызовами`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useThrottledCallback`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Pointer/Mouse, Touch и Keyboard sensors DnD Kit`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useDndSortableSensors`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Собственный доступный floating listbox`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useFloatingListbox`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Чтение и replace-navigation search state`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useSearchParams`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsxs)(t.td,{children:[`Построение `,(0,c.jsx)(t.code,{children:`href`}),` без navigation`]}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useSearchLink`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Lazy component внутри component/custom hook`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useLazyComponent`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Диагностика reference identity`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useReferenceTrace`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsxs)(t.td,{children:[`Блокировка `,(0,c.jsx)(t.code,{children:`Ctrl + wheel`})]}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useBlockBrowserZoom`})})]})]})]}),`
99
99
  `,(0,c.jsx)(t.h2,{id:`debounce-и-throttle-простыми-словами`,children:`Debounce и throttle простыми словами`}),`
100
100
  `,(0,c.jsx)(t.p,{children:`Debounce ждёт тишины:`}),`
101
101
  `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-text`,children:`события: A -- B -- C ----------------
@@ -276,8 +276,15 @@ function PointerTracker({ onChange }: { onChange: (point: Point) => void }) {
276
276
  `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`PointerSensor`}),` с activation distance;`]}),`
277
277
  `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`KeyboardSensor`}),` с `,(0,c.jsx)(t.code,{children:`sortableKeyboardCoordinates`}),`.`]}),`
278
278
  `]}),`
279
+ `,(0,c.jsxs)(t.p,{children:[`Опциональная `,(0,c.jsx)(t.code,{children:`touchActivation`}),` заменяет общий pointer-путь на отдельные
280
+ `,(0,c.jsx)(t.code,{children:`MouseSensor`}),` и `,(0,c.jsx)(t.code,{children:`TouchSensor`}),`: mouse сохраняет distance, а touch ждёт long press
281
+ и отменяет DnD при движении больше tolerance, оставляя нативную прокрутку доступной.
282
+ Предметная матрица также может передать собственные keyboard coordinates/codes.`]}),`
279
283
  `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`interface UseDndSortableSensorsOptions {
280
284
  activationDistance?: number;
285
+ touchActivation?: { delay: number; tolerance?: number };
286
+ keyboardCoordinateGetter?: KeyboardCoordinateGetter;
287
+ keyboardCodes?: KeyboardCodes;
281
288
  }
282
289
 
283
290
  function useDndSortableSensors(distanceOrOptions?: number | UseDndSortableSensorsOptions): SensorDescriptor<SensorOptions>[];
@@ -289,7 +296,8 @@ import { useDndSortableSensors } from "@ryuzaki13/react-foundation-lib/hooks";
289
296
 
290
297
  function SortableArea({ children }: { children: React.ReactNode }) {
291
298
  const sensors = useDndSortableSensors({
292
- activationDistance: 8
299
+ activationDistance: 10,
300
+ touchActivation: { delay: 250, tolerance: 10 }
293
301
  });
294
302
 
295
303
  return <DndContext sensors={sensors}>{children}</DndContext>;
@@ -653,7 +661,7 @@ await act(async () => {
653
661
  `,(0,c.jsx)(t.h2,{id:`частые-ошибки`,children:`Частые ошибки`}),`
654
662
  `,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Симптом`}),(0,c.jsx)(t.th,{children:`Причина / решение`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Invalid hook call`}),(0,c.jsx)(t.td,{children:`Вызов вне component/custom hook или условно.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsxs)(t.td,{children:[`Callback не получил `,(0,c.jsx)(t.code,{children:`null`})]}),(0,c.jsxs)(t.td,{children:[`Передайте `,(0,c.jsx)(t.code,{children:`{ value: null }`}),`.`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Throttle ждёт после cancel`}),(0,c.jsx)(t.td,{children:`Cancel не сбрасывает timestamp.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Search allowedKeys не компилируется`}),(0,c.jsx)(t.td,{children:`Фильтруйте result явно до исправления generic.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Escape/outside click не работают`}),(0,c.jsxs)(t.td,{children:[`Не применён `,(0,c.jsx)(t.code,{children:`getFloatingProps`}),`.`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Active option не scroll-ится`}),(0,c.jsxs)(t.td,{children:[`Нет `,(0,c.jsx)(t.code,{children:`setOptionRef`}),`.`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Popup не фокусируется`}),(0,c.jsxs)(t.td,{children:[`Нет `,(0,c.jsx)(t.code,{children:`setFloating`}),` или `,(0,c.jsx)(t.code,{children:`tabIndex`}),`.`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Controlled popup не закрывается`}),(0,c.jsxs)(t.td,{children:[`Нужны и `,(0,c.jsx)(t.code,{children:`open`}),`, и `,(0,c.jsx)(t.code,{children:`onOpenChange`}),`.`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Lazy component remount-ится`}),(0,c.jsx)(t.td,{children:`Стабилизируйте loader/cacheKey.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`__DEV__ is not defined`})}),(0,c.jsx)(t.td,{children:`Настройте host bundler.`})]})]})]}),`
655
663
  `,(0,c.jsx)(t.h2,{id:`api-справочник`,children:`API-справочник`}),`
656
- `,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Экспорт`}),(0,c.jsx)(t.th,{children:`Contract`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useBlockBrowserZoom`})}),(0,c.jsxs)(t.td,{children:[`Global `,(0,c.jsx)(t.code,{children:`Ctrl + wheel`}),` prevention.`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useDebounce`})}),(0,c.jsx)(t.td,{children:`Debounced value.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useDebouncedCallback`})}),(0,c.jsx)(t.td,{children:`Trailing debounce.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useDndSortableSensors`})}),(0,c.jsx)(t.td,{children:`Pointer/Keyboard sensors.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useFloatingListbox`})}),(0,c.jsx)(t.td,{children:`Headless listbox.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useLazyComponent`})}),(0,c.jsx)(t.td,{children:`Memoized lazy factory.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useReferenceTrace`})}),(0,c.jsx)(t.td,{children:`Reference diagnostics.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useSearchLink`})}),(0,c.jsx)(t.td,{children:`Link builder.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useSearchParams`})}),(0,c.jsx)(t.td,{children:`Search read/replace navigation.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useThrottledCallback`})}),(0,c.jsx)(t.td,{children:`Leading/trailing throttle.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`FloatingListboxPlacementStrategy`})}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`"flip" | "auto"`}),`.`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`FloatingListboxSizeContext`})}),(0,c.jsx)(t.td,{children:`Геометрия popup/reference/viewport.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`FloatingListboxSizeResolver`})}),(0,c.jsx)(t.td,{children:`Context → style.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`FloatingListboxSizeStyle`})}),(0,c.jsx)(t.td,{children:`Size fields и CSS properties.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`ThrottledCallback`})}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`call/flush/cancel`}),`.`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`UseDndSortableSensorsOptions`})}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`activationDistance`}),`.`]})]})]})]}),`
664
+ `,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Экспорт`}),(0,c.jsx)(t.th,{children:`Contract`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useBlockBrowserZoom`})}),(0,c.jsxs)(t.td,{children:[`Global `,(0,c.jsx)(t.code,{children:`Ctrl + wheel`}),` prevention.`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useDebounce`})}),(0,c.jsx)(t.td,{children:`Debounced value.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useDebouncedCallback`})}),(0,c.jsx)(t.td,{children:`Trailing debounce.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useDndSortableSensors`})}),(0,c.jsx)(t.td,{children:`Pointer/Mouse/Touch/Keyboard sensors.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useFloatingListbox`})}),(0,c.jsx)(t.td,{children:`Headless listbox.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useLazyComponent`})}),(0,c.jsx)(t.td,{children:`Memoized lazy factory.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useReferenceTrace`})}),(0,c.jsx)(t.td,{children:`Reference diagnostics.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useSearchLink`})}),(0,c.jsx)(t.td,{children:`Link builder.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useSearchParams`})}),(0,c.jsx)(t.td,{children:`Search read/replace navigation.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useThrottledCallback`})}),(0,c.jsx)(t.td,{children:`Leading/trailing throttle.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`FloatingListboxPlacementStrategy`})}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`"flip" | "auto"`}),`.`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`FloatingListboxSizeContext`})}),(0,c.jsx)(t.td,{children:`Геометрия popup/reference/viewport.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`FloatingListboxSizeResolver`})}),(0,c.jsx)(t.td,{children:`Context → style.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`FloatingListboxSizeStyle`})}),(0,c.jsx)(t.td,{children:`Size fields и CSS properties.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`ThrottledCallback`})}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`call/flush/cancel`}),`.`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`UseDndSortableSensorsOptions`})}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`activationDistance`}),`.`]})]})]})]}),`
657
665
  `,(0,c.jsx)(t.h2,{id:`что-модуль-не-делает`,children:`Что модуль не делает`}),`
658
666
  `,(0,c.jsxs)(t.ul,{children:[`
659
667
  `,(0,c.jsx)(t.li,{children:`не выполняет requests и не хранит backend state;`}),`
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-I7-gyNVJ.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-DxyL_jCu.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-DWvPB8Sk.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-B_u8Yt1Z.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-I7-gyNVJ.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-DxyL_jCu.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/Data/Presets`}),`
1
+ import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-DWvPB8Sk.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-B_u8Yt1Z.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/Data/Presets`}),`
2
2
  `,(0,c.jsx)(t.h1,{id:`общие-preset-helpers`,children:`Общие preset helpers`}),`
3
3
  `,(0,c.jsx)(t.p,{children:`Модуль проверяет восстановленные preset ids, сопоставляет их с option objects и ищет одну option по id.`}),`
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-I7-gyNVJ.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-DxyL_jCu.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-DWvPB8Sk.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-B_u8Yt1Z.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.jsx)(t.h1,{id:`http-headers-и-текстовые-ответы`,children:`HTTP headers и текстовые ответы`}),`
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,8 +1,10 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-I7-gyNVJ.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-DxyL_jCu.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-DWvPB8Sk.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-B_u8Yt1Z.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`]})]})]})]}),`
5
5
  `,(0,c.jsxs)(t.p,{children:[`Используйте точный subpath. Внутренний файл `,(0,c.jsx)(t.code,{children:`serviceWorker`}),` не является самостоятельным публичным export, даже если отдельные функции используются самим hook.`]}),`
6
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`useBrowserOnlineStatus()`}),` возвращает browser hint `,(0,c.jsx)(t.code,{children:`navigator.onLine`}),` через `,(0,c.jsx)(t.code,{children:`useSyncExternalStore`}),` и подписывается на события
7
+ `,(0,c.jsx)(t.code,{children:`online`}),`/`,(0,c.jsx)(t.code,{children:`offline`}),`. Это сигнал для UX и запуска revalidation, а не доказательство доступности конкретного backend.`]}),`
6
8
  `,(0,c.jsx)(t.h2,{id:`часть-1-обновление-service-worker`,children:`Часть 1. Обновление Service Worker`}),`
7
9
  `,(0,c.jsx)(t.h3,{id:`задача-hook`,children:`Задача hook`}),`
8
10
  `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`import { useServiceWorkerUpdate } from "@ryuzaki13/react-foundation-lib/pwa";
@@ -257,4 +259,4 @@ buildSwCachePolicyValue(draft);
257
259
  `,(0,c.jsxs)(t.h3,{id:`считать-forever-безопасным-default`,children:[`Считать `,(0,c.jsx)(t.code,{children:`forever`}),` безопасным default`]}),`
258
260
  `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`ttlMs: Infinity`}),` требует явной стратегии bust/invalidation. Без неё клиент может долго видеть устаревшие данные.`]}),`
259
261
  `,(0,c.jsx)(t.h2,{id:`краткая-карта-api`,children:`Краткая карта API`}),`
260
- `,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Экспорт`}),(0,c.jsx)(t.th,{children:`Публичный 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:`useServiceWorkerUpdate()`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`/pwa`})}),(0,c.jsx)(t.td,{children:`Регистрация, проверка и UI-состояние обновления SW`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`parseSwCachePolicy()`})}),(0,c.jsx)(t.td,{children:`оба`}),(0,c.jsx)(t.td,{children:`Разобрать текстовую политику`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`buildSwCachePolicyValue()`})}),(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:`normalizeSwCacheName()`})}),(0,c.jsx)(t.td,{children:`оба`}),(0,c.jsx)(t.td,{children:`Подготовить безопасную часть cache name`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`resolveSwCacheCacheNameByPolicy()`})}),(0,c.jsx)(t.td,{children:`оба`}),(0,c.jsx)(t.td,{children:`Получить имя cache из валидной политики`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`ParsedSwCachePolicy`})}),(0,c.jsx)(t.td,{children:`оба`}),(0,c.jsx)(t.td,{children:`Тип разобранного результата`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`SwCachePolicyDraft`})}),(0,c.jsx)(t.td,{children:`оба`}),(0,c.jsx)(t.td,{children:`Тип данных формы/builder`})]})]})]})]})}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};
262
+ `,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Экспорт`}),(0,c.jsx)(t.th,{children:`Публичный 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:`useServiceWorkerUpdate()`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`/pwa`})}),(0,c.jsx)(t.td,{children:`Регистрация, проверка и UI-состояние обновления SW`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useBrowserOnlineStatus()`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`/pwa`})}),(0,c.jsx)(t.td,{children:`Реактивный browser online/offline hint`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`parseSwCachePolicy()`})}),(0,c.jsx)(t.td,{children:`оба`}),(0,c.jsx)(t.td,{children:`Разобрать текстовую политику`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`buildSwCachePolicyValue()`})}),(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:`normalizeSwCacheName()`})}),(0,c.jsx)(t.td,{children:`оба`}),(0,c.jsx)(t.td,{children:`Подготовить безопасную часть cache name`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`resolveSwCacheCacheNameByPolicy()`})}),(0,c.jsx)(t.td,{children:`оба`}),(0,c.jsx)(t.td,{children:`Получить имя cache из валидной политики`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`ParsedSwCachePolicy`})}),(0,c.jsx)(t.td,{children:`оба`}),(0,c.jsx)(t.td,{children:`Тип разобранного результата`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`SwCachePolicyDraft`})}),(0,c.jsx)(t.td,{children:`оба`}),(0,c.jsx)(t.td,{children:`Тип данных формы/builder`})]})]})]})]})}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-I7-gyNVJ.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-DxyL_jCu.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-DWvPB8Sk.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-B_u8Yt1Z.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-I7-gyNVJ.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-DxyL_jCu.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-DWvPB8Sk.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-B_u8Yt1Z.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.jsx)(t.h1,{id:`идентификатор-вкладочной-сессии`,children:`Идентификатор вкладочной сессии`}),`
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-I7-gyNVJ.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-DxyL_jCu.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/DOM`}),`
1
+ import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-DWvPB8Sk.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-B_u8Yt1Z.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/DOM`}),`
2
2
  `,(0,c.jsx)(t.h1,{id:`browser-dom-и-focus-helpers`,children:`Browser DOM и focus helpers`}),`
3
3
  `,(0,c.jsxs)(t.p,{children:[`Модуль `,(0,c.jsx)(t.code,{children:`dom`}),` содержит небольшие browser helpers и React hooks для типовых инфраструктурных задач:`]}),`
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-I7-gyNVJ.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-DxyL_jCu.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-DWvPB8Sk.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-B_u8Yt1Z.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.jsx)(t.h1,{id:`ошибка-отсутствующего-react-context`,children:`Ошибка отсутствующего React context`}),`
3
3
  `,(0,c.jsx)(t.p,{children:`Модуль создаёт единообразное диагностическое сообщение, когда custom hook вызван вне нужного Provider.`}),`
4
4
  `,(0,c.jsx)(t.h2,{id:`импорт`,children:`Импорт`}),`
@@ -1,6 +1,6 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-I7-gyNVJ.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-DxyL_jCu.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/Errors/Error Report`}),`
1
+ import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-DWvPB8Sk.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-B_u8Yt1Z.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/Errors/Error Report`}),`
2
2
  `,(0,c.jsx)(t.h1,{id:`error-report`,children:`Error Report`}),`
3
- `,(0,c.jsxs)(t.p,{children:[`Модуль `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/error-report`}),` собирает клиентскую диагностику ошибки в структурированный draft и временно хранит последние drafts в `,(0,c.jsx)(t.code,{children:`sessionStorage`}),`.`]}),`
3
+ `,(0,c.jsxs)(t.p,{children:[`Модуль `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/error-report`}),` собирает клиентскую диагностику ошибки в versioned bounded draft, временно хранит последние drafts в `,(0,c.jsx)(t.code,{children:`sessionStorage`}),` и предоставляет durable IndexedDB queue для отложенной доставки.`]}),`
4
4
  `,(0,c.jsx)(t.p,{children:`Он умеет объединить:`}),`
5
5
  `,(0,c.jsxs)(t.ul,{children:[`
6
6
  `,(0,c.jsx)(t.li,{children:`нормализованную ошибку и stack trace;`}),`
@@ -10,20 +10,24 @@ import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-I
10
10
  `,(0,c.jsx)(t.li,{children:`состояние TanStack Query без полного query data;`}),`
11
11
  `,(0,c.jsx)(t.li,{children:`технические сведения о persisted queries;`}),`
12
12
  `,(0,c.jsx)(t.li,{children:`контекст React/runtime/transport;`}),`
13
- `,(0,c.jsxs)(t.li,{children:[`lifecycle доставки: `,(0,c.jsx)(t.code,{children:`pending`}),`, `,(0,c.jsx)(t.code,{children:`sending`}),`, `,(0,c.jsx)(t.code,{children:`sent`}),`, `,(0,c.jsx)(t.code,{children:`failed`}),`.`]}),`
13
+ `,(0,c.jsxs)(t.li,{children:[`локальный draft lifecycle: `,(0,c.jsx)(t.code,{children:`pending`}),`, `,(0,c.jsx)(t.code,{children:`sending`}),`, `,(0,c.jsx)(t.code,{children:`sent`}),`, `,(0,c.jsx)(t.code,{children:`failed`}),`;`]}),`
14
+ `,(0,c.jsx)(t.li,{children:`durable queue с TTL, bounded capacity и атомарным межвкладочным lease.`}),`
14
15
  `]}),`
15
- `,(0,c.jsxs)(t.p,{children:[`Важная граница: `,(0,c.jsx)(t.strong,{children:`lib-пакет не отправляет отчёт на сервер`}),`. Он формирует draft и предоставляет точки подключения. Авторизация, HTTP/API delivery, retry, пользовательское согласие и UI принадлежат приложению либо API-пакету.`]}),`
16
+ `,(0,c.jsxs)(t.p,{children:[`Важная граница: `,(0,c.jsx)(t.strong,{children:`lib-пакет не отправляет отчёт на сервер`}),`. Он формирует draft, хранит queue и предоставляет атомарные переходы. Авторизация, HTTP/API delivery, retry, пользовательское согласие и UI принадлежат приложению либо API-пакету.`]}),`
16
17
  `,(0,c.jsx)(t.h2,{id:`установка`,children:`Установка`}),`
17
18
  `,(0,c.jsx)(t.p,{children:`Модуль интегрируется с TanStack Query и query persistence.`}),`
18
19
  `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-bash`,children:`npm install @ryuzaki13/react-foundation-lib \\
19
20
  @tanstack/react-query \\
20
- @tanstack/query-persist-client-core
21
+ @tanstack/query-persist-client-core \\
22
+ zod
21
23
  `})}),`
22
24
  `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`import {
23
25
  captureRuntimeErrorReport,
26
+ createErrorReportQueue,
24
27
  createErrorInfo,
25
28
  installErrorReportBrowserBreadcrumbs,
26
29
  setErrorReportRuntimeErrorReporter,
30
+ setErrorReportSanitizer,
27
31
  type ErrorReportDraft
28
32
  } from "@ryuzaki13/react-foundation-lib/error-report";
29
33
  `})}),`
@@ -33,7 +37,8 @@ import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-I
33
37
  → нормализация + diagnostics + breadcrumbs
34
38
  → ErrorReportDraft(status = pending)
35
39
  → sessionStorage, максимум 10 drafts
36
- → app/API delivery
40
+ → enqueue payload в IndexedDB, максимум 50 записей / 7 суток
41
+ → app/API delivery через lease
37
42
  → updateErrorReportDraft(status = sending/sent/failed)
38
43
  `})}),`
39
44
  `,(0,c.jsx)(t.p,{children:`Сбор отчёта — дополнительный диагностический сценарий. Ошибка репортера не должна заменять исходную ошибку и ломать основной пользовательский поток.`}),`
@@ -55,12 +60,12 @@ isErrorReportingEnabled({ isDev: false });
55
60
  declare const __APP_ID__: string;
56
61
  declare const __APP_BUILD_ID__: string;
57
62
  `})}),`
58
- `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`__APP_ID__`}),` входит в ключи `,(0,c.jsx)(t.code,{children:`sessionStorage`}),`, а `,(0,c.jsx)(t.code,{children:`__APP_BUILD_ID__`}),` помогает связать ошибку с деплоем.`]}),`
63
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`__APP_ID__`}),` входит в payload как `,(0,c.jsx)(t.code,{children:`application`}),` и в ключи `,(0,c.jsx)(t.code,{children:`sessionStorage`}),`, а `,(0,c.jsx)(t.code,{children:`__APP_BUILD_ID__`}),` помогает связать ошибку с деплоем. Приложение обязано использовать устойчивый deployment identifier, а не display name. Например, KTK-приложения используют `,(0,c.jsx)(t.code,{children:`ru.education-system`}),` и `,(0,c.jsx)(t.code,{children:`ru.ktk-website`}),`.`]}),`
59
64
  `,(0,c.jsx)(t.p,{children:`Пример Vite:`}),`
60
65
  `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`define: {
61
66
  __DEV__: JSON.stringify(mode !== "production"),
62
- __APP_ID__: JSON.stringify("education-arm"),
63
- __APP_BUILD_ID__: JSON.stringify(process.env.BUILD_ID ?? "local"),
67
+ __APP_ID__: JSON.stringify("ru.education-system"),
68
+ __APP_BUILD_ID__: JSON.stringify(process.env.GIT_COMMIT_SHA ?? "local"),
64
69
  }
65
70
  `})}),`
66
71
  `,(0,c.jsxs)(t.p,{children:[`Модуль persisted diagnostics использует инфраструктуру `,(0,c.jsx)(t.code,{children:`/query-client`}),`; её compile-time persistence-константы тоже должны быть настроены, если приложение включает соответствующую часть query persistence.`]}),`
@@ -115,7 +120,7 @@ declare const __APP_BUILD_ID__: string;
115
120
  httpStatus?: number;
116
121
  };
117
122
  `})}),`
118
- `,(0,c.jsxs)(t.p,{children:[`Для обычного `,(0,c.jsx)(t.code,{children:`Error`}),` сохраняются `,(0,c.jsx)(t.code,{children:`name`}),`, непустой `,(0,c.jsx)(t.code,{children:`message`}),` и полный `,(0,c.jsx)(t.code,{children:`stack`}),`.`]}),`
123
+ `,(0,c.jsxs)(t.p,{children:[`Для обычного `,(0,c.jsx)(t.code,{children:`Error`}),` сохраняются `,(0,c.jsx)(t.code,{children:`name`}),`, непустой `,(0,c.jsx)(t.code,{children:`message`}),` и `,(0,c.jsx)(t.code,{children:`stack`}),` до 64 KiB.`]}),`
119
124
  `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`createErrorInfo(new Error("Не удалось сохранить"));
120
125
  // { name: "Error", message: "Не удалось сохранить", stackTrace: "..." }
121
126
  `})}),`
@@ -130,14 +135,27 @@ declare const __APP_BUILD_ID__: string;
130
135
  `,(0,c.jsx)(t.li,{children:`максимальная глубина — 4;`}),`
131
136
  `,(0,c.jsx)(t.li,{children:`максимум 20 элементов массива;`}),`
132
137
  `,(0,c.jsx)(t.li,{children:`максимум 40 ключей объекта;`}),`
138
+ `,(0,c.jsx)(t.li,{children:`строка — не более 4096 символов;`}),`
133
139
  `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`undefined`}),`, function, symbol и усечённая ветка получают специальные объекты `,(0,c.jsx)(t.code,{children:`{ type: ... }`}),`;`]}),`
140
+ `,(0,c.jsxs)(t.li,{children:[`циклическая ссылка получает `,(0,c.jsx)(t.code,{children:`{ type: "circular" }`}),`;`]}),`
134
141
  `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`bigint`}),` превращается в строку;`]}),`
135
142
  `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`Date`}),` — в ISO-строку.`]}),`
143
+ `,(0,c.jsxs)(t.li,{children:[`известные secret-like keys (`,(0,c.jsx)(t.code,{children:`authorization`}),`, `,(0,c.jsx)(t.code,{children:`cookie`}),`, `,(0,c.jsx)(t.code,{children:`password`}),`, `,(0,c.jsx)(t.code,{children:`token`}),`, `,(0,c.jsx)(t.code,{children:`secret`}),`, CSRF/API keys) получают `,(0,c.jsx)(t.code,{children:`[REDACTED]`}),`;`]}),`
144
+ `,(0,c.jsxs)(t.li,{children:[`email в свободной строке заменяется на `,(0,c.jsx)(t.code,{children:`[REDACTED_EMAIL]`}),`;`]}),`
145
+ `,(0,c.jsxs)(t.li,{children:[`значения полей с именем `,(0,c.jsx)(t.code,{children:`*Url`}),` сохраняются без search/hash.`]}),`
136
146
  `]}),`
137
147
  `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`createDiagnosticValue({ retry: 2, handler: () => undefined });
138
148
  // { retry: 2, handler: { type: "function" } }
139
149
  `})}),`
140
- `,(0,c.jsxs)(t.p,{children:[`Критически важно: функция `,(0,c.jsx)(t.strong,{children:`не скрывает значения по имени ключа`}),`. Поля `,(0,c.jsx)(t.code,{children:`token`}),`, `,(0,c.jsx)(t.code,{children:`password`}),`, `,(0,c.jsx)(t.code,{children:`authorization`}),`, email и другие секреты сохранятся, если их передать. Это ограничитель размера и типа, а не security sanitizer.`]}),`
150
+ `,(0,c.jsx)(t.p,{children:`Built-in redaction является страховочной сеткой и не распознаёт ФИО, телефоны и все предметные идентификаторы. Он не заменяет app-level allow-list.`}),`
151
+ `,(0,c.jsx)(t.h3,{id:`seterrorreportsanitizersanitizer`,children:(0,c.jsx)(t.code,{children:`setErrorReportSanitizer(sanitizer?)`})}),`
152
+ `,(0,c.jsxs)(t.p,{children:[`Регистрирует единственный sanitizer приложения для error message/stack, delivery failure reason, query/mutation keys, meta, context, data shape и breadcrumb detail. Callback получает уже bounded `,(0,c.jsx)(t.code,{children:`ErrorReportSafeValue`}),` и scope, возвращает разрешённое значение либо `,(0,c.jsx)(t.code,{children:`undefined`}),`, чтобы удалить секцию. Результат повторно нормализуется foundation-ограничителями.`]}),`
153
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`setErrorReportSanitizer((value, context) => {
154
+ if (context.scope !== "context" || !value || Array.isArray(value) || typeof value !== "object") return value;
155
+ return "operation" in value ? { operation: value.operation } : undefined;
156
+ });
157
+ `})}),`
158
+ `,(0,c.jsxs)(t.p,{children:[`Callback должен быть чистым и идемпотентным: capture может повторно применить его к уже подготовленной секции перед storage write. Если callback бросает исключение, рискованная секция удаляется. При teardown/hot reload вызовите `,(0,c.jsx)(t.code,{children:`setErrorReportSanitizer(undefined)`}),`.`]}),`
141
159
  `,(0,c.jsx)(t.h3,{id:`sanitizedetaildetail`,children:(0,c.jsx)(t.code,{children:`sanitizeDetail(detail)`})}),`
142
160
  `,(0,c.jsxs)(t.p,{children:[`Применяет `,(0,c.jsx)(t.code,{children:`createDiagnosticValue`}),` к первым 40 полям объекта. Для `,(0,c.jsx)(t.code,{children:`undefined`}),` или пустого объекта возвращает `,(0,c.jsx)(t.code,{children:`undefined`}),`.`]}),`
143
161
  `,(0,c.jsx)(t.p,{children:`Передавайте только заранее отобранные технические данные:`}),`
@@ -177,7 +195,7 @@ declare const __APP_BUILD_ID__: string;
177
195
  `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`getErrorReportBreadcrumbs();
178
196
  clearErrorReportBreadcrumbs();
179
197
  `})}),`
180
- `,(0,c.jsx)(t.p,{children:`Возвращаемый массив является текущим внутренним массивом, а не глубокой копией. Считайте его readonly и не меняйте элементы вручную.`}),`
198
+ `,(0,c.jsx)(t.p,{children:`Возвращаемый массив является shallow copy. Вложенные элементы считайте readonly и не меняйте вручную.`}),`
181
199
  `,(0,c.jsx)(t.h3,{id:`автоматические-browser-breadcrumbs`,children:`Автоматические browser breadcrumbs`}),`
182
200
  `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const uninstallBreadcrumbs = installErrorReportBrowserBreadcrumbs();
183
201
 
@@ -189,14 +207,14 @@ uninstallBreadcrumbs();
189
207
  `,(0,c.jsx)(t.li,{children:`click в capture phase;`}),`
190
208
  `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`document.visibilitychange`}),`.`]}),`
191
209
  `]}),`
192
- `,(0,c.jsx)(t.p,{children:`Для click сохраняются координаты/модификаторы и ограниченное описание meaningful target: tag, стабильные атрибуты, короткий текст и цепочка родителей. Глубина DOM-цепочки ограничена 20, текст — 80 символами, атрибут — 120.`}),`
193
- `,(0,c.jsxs)(t.p,{children:[`Код не читает `,(0,c.jsx)(t.code,{children:`input.value`}),` и не копирует CSS class list, но текст/ARIA/title/data-атрибуты тоже могут содержать чувствительные данные. Не помещайте секреты в DOM-атрибуты и UI-текст.`]}),`
210
+ `,(0,c.jsxs)(t.p,{children:[`Для click сохраняются координаты/модификаторы и ограниченное техническое описание meaningful target: tag, role, input type и цепочка родителей. Приложение может явно добавить slug-like `,(0,c.jsx)(t.code,{children:`data-error-report-target`}),`, например `,(0,c.jsx)(t.code,{children:`student-save`}),`. Глубина DOM-цепочки ограничена 20, атрибут — 120 символами.`]}),`
211
+ `,(0,c.jsxs)(t.p,{children:[`Код не читает `,(0,c.jsx)(t.code,{children:`input.value`}),`, DOM text, `,(0,c.jsx)(t.code,{children:`id`}),`, `,(0,c.jsx)(t.code,{children:`title`}),`, `,(0,c.jsx)(t.code,{children:`aria-*`}),`, CSS classes, `,(0,c.jsx)(t.code,{children:`data-ui`}),`, `,(0,c.jsx)(t.code,{children:`data-action`}),` и произвольные `,(0,c.jsx)(t.code,{children:`data-*`}),`. Значение `,(0,c.jsx)(t.code,{children:`data-error-report-target`}),` принимается только из латинских букв, цифр и символов `,(0,c.jsx)(t.code,{children:`._:/-`}),`; свободный текст в него помещать нельзя.`]}),`
194
212
  `,(0,c.jsx)(t.p,{children:`На сервере установщик возвращает пустую cleanup-функцию.`}),`
195
213
  `,(0,c.jsx)(t.h2,{id:`диагностика-tanstack-query`,children:`Диагностика TanStack Query`}),`
196
214
  `,(0,c.jsx)(t.h3,{id:`collectquerydiagnosticsquery`,children:(0,c.jsx)(t.code,{children:`collectQueryDiagnostics(query)`})}),`
197
215
  `,(0,c.jsx)(t.p,{children:`Собирает:`}),`
198
216
  `,(0,c.jsxs)(t.ul,{children:[`
199
- `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`queryHash`}),` и диагностическое представление `,(0,c.jsx)(t.code,{children:`queryKey`}),`;`]}),`
217
+ `,(0,c.jsx)(t.li,{children:`безопасный hash уже очищенного query key и его диагностическое представление;`}),`
200
218
  `,(0,c.jsx)(t.li,{children:`status/fetchStatus;`}),`
201
219
  `,(0,c.jsx)(t.li,{children:`timestamps обновления data/error;`}),`
202
220
  `,(0,c.jsx)(t.li,{children:`failure count, invalidation и observer count;`}),`
@@ -204,14 +222,14 @@ uninstallBreadcrumbs();
204
222
  `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`dataShape`}),` вместо data;`]}),`
205
223
  `,(0,c.jsx)(t.li,{children:`нормализованную query error.`}),`
206
224
  `]}),`
207
- `,(0,c.jsxs)(t.p,{children:[`Значения `,(0,c.jsx)(t.code,{children:`queryKey`}),` и `,(0,c.jsx)(t.code,{children:`meta`}),` сохраняются. Если туда попал token или персональный идентификатор, он попадёт в отчёт. Проектируйте query keys как диагностически безопасный контракт.`]}),`
225
+ `,(0,c.jsxs)(t.p,{children:[`Значения `,(0,c.jsx)(t.code,{children:`queryKey`}),` и `,(0,c.jsx)(t.code,{children:`meta`}),` проходят built-in redaction и app sanitizer. Предметные персональные идентификаторы всё равно должны удаляться policy приложения.`]}),`
208
226
  `,(0,c.jsx)(t.h3,{id:`collectmutationdiagnosticsmutation`,children:(0,c.jsx)(t.code,{children:`collectMutationDiagnostics(mutation)`})}),`
209
227
  `,(0,c.jsx)(t.p,{children:`Собирает mutation key, status, failure count, submitted timestamp, meta и error. Mutation variables/data не копируются.`}),`
210
228
  `,(0,c.jsx)(t.h3,{id:`collectqueryclientdiagnosticsqueryclient`,children:(0,c.jsx)(t.code,{children:`collectQueryClientDiagnostics(queryClient)`})}),`
211
229
  `,(0,c.jsx)(t.p,{children:`Возвращает последние 40 query и последние 40 mutations из соответствующих cache. Это синхронный snapshot текущего QueryClient.`}),`
212
230
  `,(0,c.jsx)(t.h3,{id:`collectpersistedquerydiagnostics`,children:(0,c.jsx)(t.code,{children:`collectPersistedQueryDiagnostics()`})}),`
213
231
  `,(0,c.jsxs)(t.p,{children:[`Асинхронно читает IndexedDB persistence из `,(0,c.jsx)(t.code,{children:`/query-client`}),` и возвращает максимум 40 записей.`]}),`
214
- `,(0,c.jsxs)(t.p,{children:[`Сохраняются storage key, buster, query hash/key, statuses, timestamps, failure count и error. `,(0,c.jsx)(t.code,{children:`state.data`}),` намеренно исключён полностью.`]}),`
232
+ `,(0,c.jsxs)(t.p,{children:[`Сохраняются buster, безопасный hash/key, statuses, timestamps, failure count и error. IndexedDB storage key и `,(0,c.jsx)(t.code,{children:`state.data`}),` намеренно исключены полностью.`]}),`
215
233
  `,(0,c.jsx)(t.p,{children:`Если IndexedDB/persistence недоступны или чтение бросает ошибку, возвращается пустой массив — сбор отчёта не падает.`}),`
216
234
  `,(0,c.jsx)(t.h2,{id:`capture-query-ошибки`,children:`Capture query-ошибки`}),`
217
235
  `,(0,c.jsx)(t.h3,{id:`capturequeryerrorreporterror-query-queryclient-context`,children:(0,c.jsx)(t.code,{children:`captureQueryErrorReport(error, query, queryClient, context?)`})}),`
@@ -236,7 +254,7 @@ uninstallBreadcrumbs();
236
254
  `,(0,c.jsx)(t.p,{children:`Работает аналогично query capture: подавляет дублирующий transport-report, добавляет mutation breadcrumb и собирает QueryClient/persistence snapshot.`}),`
237
255
  `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const draft = await captureMutationErrorReport(error, mutation, queryClient, { source: "save-order", detail: { form: "order-edit" } });
238
256
  `})}),`
239
- `,(0,c.jsxs)(t.p,{children:[`Текущая реализация включает `,(0,c.jsx)(t.code,{children:`detail`}),` в breadcrumb, но не переносит его в `,(0,c.jsx)(t.code,{children:`payload.context`}),` mutation draft. Если этот контекст критичен для доставки, добавьте безопасные данные в app-level envelope либо используйте явную согласованную модель до capture.`]}),`
257
+ `,(0,c.jsxs)(t.p,{children:[`Текущая реализация включает очищенный `,(0,c.jsx)(t.code,{children:`detail`}),` и в breadcrumb, и в `,(0,c.jsx)(t.code,{children:`payload.context`}),` mutation draft.`]}),`
240
258
  `,(0,c.jsx)(t.h2,{id:`capture-runtimereact-ошибки`,children:`Capture runtime/React-ошибки`}),`
241
259
  `,(0,c.jsx)(t.h3,{id:`captureruntimeerrorreporterror-context-queryclient`,children:(0,c.jsx)(t.code,{children:`captureRuntimeErrorReport(error, context?, queryClient?)`})}),`
242
260
  `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const draft = await captureRuntimeErrorReport(
@@ -269,10 +287,72 @@ type ErrorReportDraft = {
269
287
  `})}),`
270
288
  `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`reportId`}),` — UUID отдельного отчёта. `,(0,c.jsx)(t.code,{children:`sessionId`}),` стабилен в текущем `,(0,c.jsx)(t.code,{children:`sessionStorage`}),`. `,(0,c.jsx)(t.code,{children:`createdUtc`}),` формируется как OData datetime UTC.`]}),`
271
289
  `,(0,c.jsx)(t.p,{children:`Payload содержит category/source/error, build environment, client, location, viewport, breadcrumbs и optional секции query/mutation/react/context.`}),`
290
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`ErrorReportPayload`}),` содержит обязательные `,(0,c.jsx)(t.code,{children:`payloadVersion: 1`}),` и `,(0,c.jsx)(t.code,{children:`application`}),`. Runtime parser принимает только текущую версию; unversioned и будущие формы не интерпретируются эвристически.`]}),`
291
+ `,(0,c.jsx)(t.h3,{id:`runtime-parsing`,children:`Runtime parsing`}),`
292
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`parseErrorReportPayload(value);
293
+ parseErrorReportDraft(value);
294
+ parseErrorReportDrafts(value);
295
+ `})}),`
296
+ `,(0,c.jsxs)(t.p,{children:[`Первые две функции возвращают текущий typed contract либо `,(0,c.jsx)(t.code,{children:`undefined`}),`. Parser массива независимо отбрасывает повреждённые элементы, сохраняя соседние валидные drafts. Дополнительно проверяется совпадение identity полей draft и payload и фактический размер payload.`]}),`
297
+ `,(0,c.jsx)(t.h3,{id:`bounded-payload`,children:`Bounded payload`}),`
298
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`limitErrorReportPayload(payload)`}),` сначала повторно применяет sanitization, затем проверяет UTF-8 размер `,(0,c.jsx)(t.code,{children:`JSON.stringify`}),`. Предел — `,(0,c.jsx)(t.code,{children:`ERROR_REPORT_PAYLOAD_MAX_BYTES`}),` (256 KiB). При превышении optional diagnostics удаляются в фиксированном порядке, а `,(0,c.jsx)(t.code,{children:`payload.truncation`}),` фиксирует исходный размер, limit и список удалённых секций. `,(0,c.jsx)(t.code,{children:`getErrorReportPayloadSize(payload)`}),` возвращает фактический сериализованный размер в байтах.`]}),`
272
299
  `,(0,c.jsx)(t.h3,{id:`хранение`,children:`Хранение`}),`
273
- `,(0,c.jsxs)(t.p,{children:[`Drafts сохраняются под ключом `,(0,c.jsx)(t.code,{children:"${__APP_ID__}.errorReport.drafts.v1"}),`. В одной вкладке остаются последние 10 элементов. Старые удаляются с начала массива.`]}),`
300
+ `,(0,c.jsxs)(t.p,{children:[`Versioned drafts сохраняются под ключом `,(0,c.jsx)(t.code,{children:"${__APP_ID__}.errorReport.drafts.v2"}),`. В одной вкладке остаются последние 10 элементов. Старые удаляются с начала массива. Предыдущая unversioned storage-форма не загружается.`]}),`
274
301
  `,(0,c.jsx)(t.p,{children:`Storage errors и некорректный JSON подавляются. При переполнении sessionStorage текущее in-memory состояние обновится, но запись на диск может не сохраниться.`}),`
275
302
  `,(0,c.jsx)(t.p,{children:`Модуль загружает drafts при первом импорте. Это модульное состояние, общее для всех consumers одного bundle.`}),`
303
+ `,(0,c.jsx)(t.h2,{id:`durable-indexeddb-queue`,children:`Durable IndexedDB queue`}),`
304
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`sessionStorage`}),` draft остаётся кратким диагностическим lifecycle текущей вкладки. Надёжную отложенную доставку обеспечивает отдельная queue:`]}),`
305
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const queue = createErrorReportQueue();
306
+ if (!queue) {
307
+ // IndexedDB отсутствует: app фиксирует безопасную деградацию без рекурсии report flow.
308
+ return;
309
+ }
310
+
311
+ const draft = await captureRuntimeErrorReport(error, context, queryClient);
312
+ if (draft) {
313
+ await queue.enqueue(draft.payload);
314
+ }
315
+ `})}),`
316
+ `,(0,c.jsxs)(t.p,{children:[`Создание возвращает `,(0,c.jsx)(t.code,{children:`undefined`}),`, когда IndexedDB недоступен. Ошибки открывания, quota и транзакций не поглощаются: coordinator обязан отделить storage failure от исходной пользовательской ошибки и применить безопасную recovery policy.`]}),`
317
+ `,(0,c.jsx)(t.h3,{id:`storage-schema-и-limits`,children:`Storage schema и limits`}),`
318
+ `,(0,c.jsxs)(t.ul,{children:[`
319
+ `,(0,c.jsxs)(t.li,{children:[`база: `,(0,c.jsx)(t.code,{children:"${__APP_ID__}.error-report.queue.v1"}),`;`]}),`
320
+ `,(0,c.jsxs)(t.li,{children:[`object store: `,(0,c.jsx)(t.code,{children:`records`}),`;`]}),`
321
+ `,(0,c.jsxs)(t.li,{children:[`атомарная envelope-запись: `,(0,c.jsx)(t.code,{children:`queue.v1`}),`;`]}),`
322
+ `,(0,c.jsxs)(t.li,{children:[`queue schema: `,(0,c.jsx)(t.code,{children:`queueVersion: 1`}),`;`]}),`
323
+ `,(0,c.jsx)(t.li,{children:`максимум: 50 записей;`}),`
324
+ `,(0,c.jsxs)(t.li,{children:[`TTL каждой записи: 7 суток от `,(0,c.jsx)(t.code,{children:`enqueue`}),`, независимо от client `,(0,c.jsx)(t.code,{children:`createdUtc`}),`;`]}),`
325
+ `,(0,c.jsx)(t.li,{children:`lease по умолчанию: 30 секунд.`}),`
326
+ `]}),`
327
+ `,(0,c.jsxs)(t.p,{children:[`Одна bounded envelope используется намеренно: `,(0,c.jsx)(t.code,{children:`createIndexedDbQueryStorage.updateItem`}),` изменяет её в одной `,(0,c.jsx)(t.code,{children:`readwrite`}),` транзакции, поэтому две вкладки не могут одновременно получить один report. Payload уже ограничен 256 KiB, а число записей — 50; отдельная база не смешивается с persisted Query cache.`]}),`
328
+ `,(0,c.jsxs)(t.p,{children:[`При заполнении удаляется самый старый отчёт без активного lease, чтобы сохранить более свежую диагностику. Активные leases не вытесняются; если все 50 записей leased, `,(0,c.jsx)(t.code,{children:`enqueue`}),` возвращает `,(0,c.jsx)(t.code,{children:`capacity-exceeded`}),`. Повторный `,(0,c.jsx)(t.code,{children:`reportId`}),` возвращает `,(0,c.jsx)(t.code,{children:`duplicate`}),` и не заменяет сохранённый payload.`]}),`
329
+ `,(0,c.jsx)(t.h3,{id:`lease-flow`,children:`Lease flow`}),`
330
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const lease = await queue.leaseNext({ ownerId: tabId });
331
+ if (!lease) return;
332
+
333
+ try {
334
+ await deliver(lease.payload);
335
+ await queue.acknowledge(lease.reportId, tabId);
336
+ } catch {
337
+ await queue.reschedule(lease.reportId, tabId, {
338
+ nextAttemptUtc,
339
+ failure: { utc: new Date().toISOString(), kind: "network" }
340
+ });
341
+ }
342
+ `})}),`
343
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`acknowledge`}),`, `,(0,c.jsx)(t.code,{children:`reschedule`}),` и `,(0,c.jsx)(t.code,{children:`discard`}),` изменяют запись только при совпадении `,(0,c.jsx)(t.code,{children:`ownerId`}),`. После crash/закрытия вкладки lease автоматически снова становится доступным по `,(0,c.jsx)(t.code,{children:`expiresUtc`}),`. Если server принял отчёт, а acknowledgement потерялся, клиент повторит тот же `,(0,c.jsx)(t.code,{children:`reportId`}),`; backend обязан быть идемпотентным.`]}),`
344
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`lastFailure`}),` хранит только технический класс, UTC и optional HTTP status. Текст transport error не попадает в durable storage.`]}),`
345
+ `,(0,c.jsx)(t.h3,{id:`queue-api`,children:`Queue API`}),`
346
+ `,(0,c.jsxs)(t.ul,{children:[`
347
+ `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`enqueue(payload, now?)`}),` — runtime-валидирует payload, удаляет expired и добавляет запись;`]}),`
348
+ `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`leaseNext({ ownerId, now?, leaseDurationMs? })`}),` — атомарно выбирает ближайшую due-запись;`]}),`
349
+ `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`acknowledge(reportId, ownerId)`}),` — удаляет подтверждённую запись;`]}),`
350
+ `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`reschedule(reportId, ownerId, retry)`}),` — снимает lease и задаёт следующую попытку;`]}),`
351
+ `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`discard(reportId, ownerId)`}),` — удаляет terminal-запись;`]}),`
352
+ `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`getRecords(now?)`}),` — bounded диагностический snapshot;`]}),`
353
+ `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`getNextWakeUtc(now?)`}),` — ближайшее due/lease-expiry время для scheduler-а.`]}),`
354
+ `]}),`
355
+ `,(0,c.jsxs)(t.p,{children:[`Queue не использует `,(0,c.jsx)(t.code,{children:`navigator.onLine`}),` как источник истины и не владеет timer/event lifecycle. Этим занимается delivery coordinator из `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-api/error-report`}),`.`]}),`
276
356
  `,(0,c.jsxs)(t.h2,{id:`низкоуровневый-captureerrorreportdraftargs`,children:[`Низкоуровневый `,(0,c.jsx)(t.code,{children:`captureErrorReportDraft(args)`})]}),`
277
357
  `,(0,c.jsx)(t.p,{children:`Используйте, когда все diagnostic sections уже подготовлены вручную:`}),`
278
358
  `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const draft = captureErrorReportDraft({
@@ -304,7 +384,7 @@ try {
304
384
  });
305
385
  }
306
386
  `})}),`
307
- `,(0,c.jsxs)(t.p,{children:[`Для неизвестного ID update возвращает `,(0,c.jsx)(t.code,{children:`undefined`}),`. Обновление поверхностное и принимает `,(0,c.jsx)(t.code,{children:`Partial<ErrorReportDraft>`}),`: библиотека не проверяет разрешённые переходы статусов. App delivery обязан не менять `,(0,c.jsx)(t.code,{children:`reportId`}),`, payload и другие identity-поля без необходимости.`]}),`
387
+ `,(0,c.jsxs)(t.p,{children:[`Для неизвестного ID update возвращает `,(0,c.jsx)(t.code,{children:`undefined`}),`. Функция принимает только lifecycle-поля `,(0,c.jsx)(t.code,{children:`status`}),`, `,(0,c.jsx)(t.code,{children:`sentUtc`}),`, `,(0,c.jsx)(t.code,{children:`failedReason`}),`; identity и payload изменить через неё нельзя. Runtime parser повторно проверяет draft, а свободный текст причины ограничивается и очищается перед storage write. Семантику разрешённых переходов статусов задаст delivery coordinator.`]}),`
308
388
  `,(0,c.jsx)(t.h2,{id:`environment-api`,children:`Environment API`}),`
309
389
  `,(0,c.jsx)(t.h3,{id:`geterrorreportenvironment`,children:(0,c.jsx)(t.code,{children:`getErrorReportEnvironment()`})}),`
310
390
  `,(0,c.jsxs)(t.p,{children:[`Возвращает mode из `,(0,c.jsx)(t.code,{children:`__DEV__`}),` и build ID.`]}),`
@@ -331,7 +411,7 @@ try {
331
411
  `})}),`
332
412
  `,(0,c.jsxs)(t.p,{children:[`Для отключения передайте `,(0,c.jsx)(t.code,{children:`undefined`}),`. Регистрация очищает недавние transport keys.`]}),`
333
413
  `,(0,c.jsx)(t.h3,{id:`reporttransporterrorerror-context`,children:(0,c.jsx)(t.code,{children:`reportTransportError(error, context)`})}),`
334
- `,(0,c.jsxs)(t.p,{children:[`Context имеет source `,(0,c.jsx)(t.code,{children:`fetch.parseResponse`}),` или `,(0,c.jsx)(t.code,{children:`fetch.buildHttpError`}),` и может содержать URL, method, SAP client, status/content type, redirect/response type и безопасное summary HTML-response.`]}),`
414
+ `,(0,c.jsxs)(t.p,{children:[`Context имеет source `,(0,c.jsx)(t.code,{children:`fetch.parseResponse`}),` или `,(0,c.jsx)(t.code,{children:`fetch.buildHttpError`}),` и может содержать URL, method, SAP client, status/content type, redirect/response type и только техническое summary HTML-response. HTML title и text preview больше не входят в контракт, потому что являются содержимым response body.`]}),`
335
415
  `,(0,c.jsxs)(t.p,{children:[`Вызов планирует reporter через 250 мс. Задержка позволяет TanStack Query перехватить тот же `,(0,c.jsx)(t.code,{children:`Error`}),` и создать более полезный query/mutation report.`]}),`
336
416
  `,(0,c.jsx)(t.h3,{id:`подавление-дубля`,children:`Подавление дубля`}),`
337
417
  `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`isTransportErrorReportScheduled(error);
@@ -381,11 +461,10 @@ suppressTransportErrorReport(error);
381
461
  `,(0,c.jsx)(t.li,{children:`queryKey и mutationKey;`}),`
382
462
  `,(0,c.jsx)(t.li,{children:`query/mutation meta;`}),`
383
463
  `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`context.detail`}),`;`]}),`
384
- `,(0,c.jsx)(t.li,{children:`URL и pathname;`}),`
464
+ `,(0,c.jsx)(t.li,{children:`pathname без search/hash;`}),`
385
465
  `,(0,c.jsx)(t.li,{children:`error message/stack;`}),`
386
- `,(0,c.jsx)(t.li,{children:`UI text, ARIA/title/data attributes breadcrumbs;`}),`
466
+ `,(0,c.jsx)(t.li,{children:`app-provided context, если policy ошибочно разрешила предметные данные;`}),`
387
467
  `,(0,c.jsx)(t.li,{children:`user agent, language, timezone;`}),`
388
- `,(0,c.jsx)(t.li,{children:`имена persisted storage keys.`}),`
389
468
  `]}),`
390
469
  `,(0,c.jsx)(t.p,{children:`Поэтому:`}),`
391
470
  `,(0,c.jsxs)(t.ol,{children:[`
@@ -399,9 +478,9 @@ suppressTransportErrorReport(error);
399
478
  `]}),`
400
479
  `,(0,c.jsx)(t.h2,{id:`частые-ошибки`,children:`Частые ошибки`}),`
401
480
  `,(0,c.jsx)(t.h3,{id:`ожидать-автоматическую-отправку`,children:`Ожидать автоматическую отправку`}),`
402
- `,(0,c.jsx)(t.p,{children:`Capture только создаёт draft. Delivery нужно явно подключить.`}),`
403
- `,(0,c.jsxs)(t.h3,{id:`использовать-creatediagnosticvalue-как-redactor`,children:[`Использовать `,(0,c.jsx)(t.code,{children:`createDiagnosticValue`}),` как redactor`]}),`
404
- `,(0,c.jsx)(t.p,{children:`Он ограничивает размер, но сохраняет значения независимо от имени поля.`}),`
481
+ `,(0,c.jsx)(t.p,{children:`Capture только создаёт draft. Приложение должно enqueue-ить его payload и один раз запустить API coordinator в client lifecycle.`}),`
482
+ `,(0,c.jsx)(t.h3,{id:`считать-built-in-redaction-полной-privacy-policy`,children:`Считать built-in redaction полной privacy policy`}),`
483
+ `,(0,c.jsx)(t.p,{children:`Foundation удаляет известные secret-like keys и email, но не умеет надёжно распознавать ФИО, телефоны и предметные IDs. Настройте app sanitizer по allow-list.`}),`
405
484
  `,(0,c.jsx)(t.h3,{id:`вызывать-production-capture-в-development-и-ждать-draft`,children:`Вызывать production capture в development и ждать draft`}),`
406
485
  `,(0,c.jsxs)(t.p,{children:[`По контракту вернётся `,(0,c.jsx)(t.code,{children:`undefined`}),`.`]}),`
407
486
  `,(0,c.jsx)(t.h3,{id:`не-очищать-глобальные-reporters`,children:`Не очищать глобальные reporters`}),`
@@ -413,4 +492,4 @@ suppressTransportErrorReport(error);
413
492
  `,(0,c.jsx)(t.h3,{id:`создать-цикл-отчётов`,children:`Создать цикл отчётов`}),`
414
493
  `,(0,c.jsx)(t.p,{children:`Ошибка endpoint доставки не должна снова проходить через тот же автоматический transport reporter. Пометьте/исключите delivery transport или используйте отдельный канал.`}),`
415
494
  `,(0,c.jsx)(t.h2,{id:`краткая-карта-api`,children:`Краткая карта API`}),`
416
- `,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Группа`}),(0,c.jsx)(t.th,{children:`Экспорты`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Capture`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`captureQueryErrorReport`}),`, `,(0,c.jsx)(t.code,{children:`captureMutationErrorReport`}),`, `,(0,c.jsx)(t.code,{children:`captureRuntimeErrorReport`}),`, `,(0,c.jsx)(t.code,{children:`captureErrorReportDraft`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Errors`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`createErrorInfo`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Safe values`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`createDiagnosticValue`}),`, `,(0,c.jsx)(t.code,{children:`createDataShape`}),`, `,(0,c.jsx)(t.code,{children:`sanitizeDetail`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Breadcrumbs`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`addErrorReportBreadcrumb`}),`, `,(0,c.jsx)(t.code,{children:`getErrorReportBreadcrumbs`}),`, `,(0,c.jsx)(t.code,{children:`clearErrorReportBreadcrumbs`}),`, `,(0,c.jsx)(t.code,{children:`installErrorReportBrowserBreadcrumbs`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Diagnostics`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`collectQueryDiagnostics`}),`, `,(0,c.jsx)(t.code,{children:`collectMutationDiagnostics`}),`, `,(0,c.jsx)(t.code,{children:`collectQueryClientDiagnostics`}),`, `,(0,c.jsx)(t.code,{children:`collectPersistedQueryDiagnostics`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Drafts`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`getErrorReportDraft`}),`, `,(0,c.jsx)(t.code,{children:`getErrorReportDrafts`}),`, `,(0,c.jsx)(t.code,{children:`updateErrorReportDraft`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Environment`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`isErrorReportingEnabled`}),`, `,(0,c.jsx)(t.code,{children:`getErrorReportEnvironment`}),`, `,(0,c.jsx)(t.code,{children:`getErrorReportClientEnvironment`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Runtime facade`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`setErrorReportRuntimeErrorReporter`}),`, `,(0,c.jsx)(t.code,{children:`reportRuntimeError`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Transport facade`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`setErrorReportTransportErrorReporter`}),`, `,(0,c.jsx)(t.code,{children:`reportTransportError`}),`, `,(0,c.jsx)(t.code,{children:`isTransportErrorReportScheduled`}),`, `,(0,c.jsx)(t.code,{children:`suppressTransportErrorReport`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Contracts`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`ErrorReportDraft`}),`, `,(0,c.jsx)(t.code,{children:`ErrorReportPayload`}),`, contexts, diagnostics и transport types`]})]})]})]})]})}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};
495
+ `,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Группа`}),(0,c.jsx)(t.th,{children:`Экспорты`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Capture`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`captureQueryErrorReport`}),`, `,(0,c.jsx)(t.code,{children:`captureMutationErrorReport`}),`, `,(0,c.jsx)(t.code,{children:`captureRuntimeErrorReport`}),`, `,(0,c.jsx)(t.code,{children:`captureErrorReportDraft`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Errors`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`createErrorInfo`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Safe values`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`createDiagnosticValue`}),`, `,(0,c.jsx)(t.code,{children:`createDataShape`}),`, `,(0,c.jsx)(t.code,{children:`sanitizeDetail`}),`, `,(0,c.jsx)(t.code,{children:`sanitizeErrorReportValue`}),`, `,(0,c.jsx)(t.code,{children:`setErrorReportSanitizer`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Payload contract`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`ERROR_REPORT_PAYLOAD_VERSION`}),`, `,(0,c.jsx)(t.code,{children:`ERROR_REPORT_PAYLOAD_MAX_BYTES`}),`, `,(0,c.jsx)(t.code,{children:`limitErrorReportPayload`}),`, `,(0,c.jsx)(t.code,{children:`getErrorReportPayloadSize`}),`, parsers`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Durable queue`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`createErrorReportQueue`}),`, queue limits, record/parser и atomic lease transitions`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Breadcrumbs`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`addErrorReportBreadcrumb`}),`, `,(0,c.jsx)(t.code,{children:`getErrorReportBreadcrumbs`}),`, `,(0,c.jsx)(t.code,{children:`clearErrorReportBreadcrumbs`}),`, `,(0,c.jsx)(t.code,{children:`installErrorReportBrowserBreadcrumbs`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Diagnostics`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`collectQueryDiagnostics`}),`, `,(0,c.jsx)(t.code,{children:`collectMutationDiagnostics`}),`, `,(0,c.jsx)(t.code,{children:`collectQueryClientDiagnostics`}),`, `,(0,c.jsx)(t.code,{children:`collectPersistedQueryDiagnostics`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Drafts`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`getErrorReportDraft`}),`, `,(0,c.jsx)(t.code,{children:`getErrorReportDrafts`}),`, `,(0,c.jsx)(t.code,{children:`updateErrorReportDraft`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Environment`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`isErrorReportingEnabled`}),`, `,(0,c.jsx)(t.code,{children:`getErrorReportEnvironment`}),`, `,(0,c.jsx)(t.code,{children:`getErrorReportClientEnvironment`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Runtime facade`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`setErrorReportRuntimeErrorReporter`}),`, `,(0,c.jsx)(t.code,{children:`reportRuntimeError`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Transport facade`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`setErrorReportTransportErrorReporter`}),`, `,(0,c.jsx)(t.code,{children:`reportTransportError`}),`, `,(0,c.jsx)(t.code,{children:`isTransportErrorReportScheduled`}),`, `,(0,c.jsx)(t.code,{children:`suppressTransportErrorReport`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Contracts`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`ErrorReportDraft`}),`, `,(0,c.jsx)(t.code,{children:`ErrorReportPayload`}),`, contexts, diagnostics и transport types`]})]})]})]})]})}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-I7-gyNVJ.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-DxyL_jCu.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/Binary`}),`
1
+ import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-DWvPB8Sk.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-B_u8Yt1Z.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/Binary`}),`
2
2
  `,(0,c.jsx)(t.h1,{id:`работа-с-бинарными-данными`,children:`Работа с бинарными данными`}),`
3
3
  `,(0,c.jsxs)(t.p,{children:[`Модуль `,(0,c.jsx)(t.code,{children:`binary`}),` преобразует строковое бинарное содержимое в браузерный `,(0,c.jsx)(t.code,{children:`Blob`}),`, определяет предполагаемый MIME-тип документа и предоставляет React hook для типового сценария «base64 → `,(0,c.jsx)(t.code,{children:`{ blob, mime }`}),`».`]}),`
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-I7-gyNVJ.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-DxyL_jCu.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-DWvPB8Sk.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-B_u8Yt1Z.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.jsx)(t.h1,{id:`дозагрузка-virtualized-списка`,children:`Дозагрузка virtualized списка`}),`
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 +1 @@
1
- import{a as e,n as t}from"./rolldown-runtime-DkW27tQK.js";import{t as n}from"./react-BZJXY1be.js";import{i as r,n as i,r as a}from"./iframe-I7-gyNVJ.js";import{a as o,i as s}from"./utils-tg3ibbzi.js";import{n as c,t as l}from"./ui.module-31LPbZGK.js";import{i as u,r as d}from"./uiClasses-Bz6cvlDQ.js";import{n as f,t as p}from"./CheckBox.module-BOAVN-Ny.js";var m,h;function g(){return(g=t((()=>{r(),m=[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]],h=a(`circle`,m)})))()}var _,v;function y(){return(y=t((()=>{_=`gu8UMB`,v={radioInput:_}})))()}var b,x,S;function C(){return(C=t((()=>{b=e(n(),1),s(),g(),f(),l(),u(),y(),x=i(),S=({label:e,description:t,placeholder:n,disabled:r,size:i,className:a,onChange:s,value:l,id:u,tone:f=`neutral`,...m})=>{let g=(0,b.useId)(),_=u??g,y=t?`${_}-description`:void 0,S=e??n,C=l??!1;return(0,x.jsxs)(`div`,{className:o(c.uiElement,i&&c.uiSizable,i&&c[i],r&&c.disabled,a),children:[(0,x.jsxs)(`div`,{className:p.row,children:[(0,x.jsxs)(`div`,{className:o(p.wrapper,d(f)),children:[(0,x.jsx)(`input`,{...m,id:_,type:`radio`,checked:C,disabled:r,"aria-disabled":r,"aria-describedby":y,className:o(c.uiSelectionControl,p.input,v.radioInput),onChange:e=>s?.(e.currentTarget.checked)}),(0,x.jsx)(`div`,{className:o(c.uiSelectionIcon,p.icon),"aria-hidden":`true`,children:(0,x.jsx)(h,{fill:`currentColor`})})]}),S&&(0,x.jsx)(`label`,{htmlFor:_,className:c.uiLabel,children:S})]}),t&&(0,x.jsx)(`p`,{id:y,className:c.uiDescription,children:t})]})},S.__docgenInfo={description:'Компонент радиокнопки для выбора одного варианта.\nНативный `input[type="radio"]` обеспечивает взаимоисключение элементов с\nобщим `name`, а controlled API продолжает публиковать булево состояние.\nПоддерживает tone + appearance и использует общие selection utility-классы из ui.module.scss.',methods:[],displayName:`RadioButton`,props:{label:{required:!1,tsType:{name:`ReactNode`},description:``},description:{required:!1,tsType:{name:`string`},description:``},placeholder:{required:!1,tsType:{name:`string`},description:``},disabled:{required:!1,tsType:{name:`boolean`},description:``},size:{required:!1,tsType:{name:`union`,raw:`"xs" | "sm" | "md" | "lg" | "xl"`,elements:[{name:`literal`,value:`"xs"`},{name:`literal`,value:`"sm"`},{name:`literal`,value:`"md"`},{name:`literal`,value:`"lg"`},{name:`literal`,value:`"xl"`}]},description:``},value:{required:!0,tsType:{name:`V`},description:"Если начальное состояние может быть `null | undefined`\nзначит `onChange` тоже должен ументь сбрасывать.\nПоэтому такой контрол явно должен передавать `UiBaseProps<AnyType | undefined>`"},onChange:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(value: T) => void`,signature:{arguments:[{type:{name:`C`},name:`value`}],return:{name:`void`}}},description:``},tone:{required:!1,tsType:{name:`union`,raw:`"neutral" | "brand" | "error" | "warning" | "success" | "info"`,elements:[{name:`literal`,value:`"neutral"`},{name:`literal`,value:`"brand"`},{name:`literal`,value:`"error"`},{name:`literal`,value:`"warning"`},{name:`literal`,value:`"success"`},{name:`literal`,value:`"info"`}]},description:``,defaultValue:{value:`"neutral"`,computed:!1}}},composes:[`Omit`]}})))()}export{C as n,S as t};
1
+ import{a as e,n as t}from"./rolldown-runtime-DkW27tQK.js";import{t as n}from"./react-BZJXY1be.js";import{i as r,n as i,r as a}from"./iframe-DWvPB8Sk.js";import{a as o,i as s}from"./utils-tg3ibbzi.js";import{n as c,t as l}from"./ui.module-31LPbZGK.js";import{i as u,r as d}from"./uiClasses-Bz6cvlDQ.js";import{n as f,t as p}from"./CheckBox.module-BOAVN-Ny.js";var m,h;function g(){return(g=t((()=>{r(),m=[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]],h=a(`circle`,m)})))()}var _,v;function y(){return(y=t((()=>{_=`gu8UMB`,v={radioInput:_}})))()}var b,x,S;function C(){return(C=t((()=>{b=e(n(),1),s(),g(),f(),l(),u(),y(),x=i(),S=({label:e,description:t,placeholder:n,disabled:r,size:i,className:a,onChange:s,value:l,id:u,tone:f=`neutral`,...m})=>{let g=(0,b.useId)(),_=u??g,y=t?`${_}-description`:void 0,S=e??n,C=l??!1;return(0,x.jsxs)(`div`,{className:o(c.uiElement,i&&c.uiSizable,i&&c[i],r&&c.disabled,a),children:[(0,x.jsxs)(`div`,{className:p.row,children:[(0,x.jsxs)(`div`,{className:o(p.wrapper,d(f)),children:[(0,x.jsx)(`input`,{...m,id:_,type:`radio`,checked:C,disabled:r,"aria-disabled":r,"aria-describedby":y,className:o(c.uiSelectionControl,p.input,v.radioInput),onChange:e=>s?.(e.currentTarget.checked)}),(0,x.jsx)(`div`,{className:o(c.uiSelectionIcon,p.icon),"aria-hidden":`true`,children:(0,x.jsx)(h,{fill:`currentColor`})})]}),S&&(0,x.jsx)(`label`,{htmlFor:_,className:c.uiLabel,children:S})]}),t&&(0,x.jsx)(`p`,{id:y,className:c.uiDescription,children:t})]})},S.__docgenInfo={description:'Компонент радиокнопки для выбора одного варианта.\nНативный `input[type="radio"]` обеспечивает взаимоисключение элементов с\nобщим `name`, а controlled API продолжает публиковать булево состояние.\nПоддерживает tone + appearance и использует общие selection utility-классы из ui.module.scss.',methods:[],displayName:`RadioButton`,props:{label:{required:!1,tsType:{name:`ReactNode`},description:``},description:{required:!1,tsType:{name:`string`},description:``},placeholder:{required:!1,tsType:{name:`string`},description:``},disabled:{required:!1,tsType:{name:`boolean`},description:``},size:{required:!1,tsType:{name:`union`,raw:`"xs" | "sm" | "md" | "lg" | "xl"`,elements:[{name:`literal`,value:`"xs"`},{name:`literal`,value:`"sm"`},{name:`literal`,value:`"md"`},{name:`literal`,value:`"lg"`},{name:`literal`,value:`"xl"`}]},description:``},value:{required:!0,tsType:{name:`V`},description:"Если начальное состояние может быть `null | undefined`\nзначит `onChange` тоже должен ументь сбрасывать.\nПоэтому такой контрол явно должен передавать `UiBaseProps<AnyType | undefined>`"},onChange:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(value: T) => void`,signature:{arguments:[{type:{name:`C`},name:`value`}],return:{name:`void`}}},description:``},tone:{required:!1,tsType:{name:`union`,raw:`"neutral" | "brand" | "error" | "warning" | "success" | "info"`,elements:[{name:`literal`,value:`"neutral"`},{name:`literal`,value:`"brand"`},{name:`literal`,value:`"error"`},{name:`literal`,value:`"warning"`},{name:`literal`,value:`"success"`},{name:`literal`,value:`"info"`}]},description:``,defaultValue:{value:`"neutral"`,computed:!1}}},composes:[`Omit`]}})))()}export{C as n,S as t};
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-I7-gyNVJ.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-DxyL_jCu.js";import{a as p,i as m,n as h,r as g,t as _}from"./RadioButton.stories-CWlAzbso.js";function v(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(s,{of:m,parameters:{docs:{toc:!0}}}),`
1
+ import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-DWvPB8Sk.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-B_u8Yt1Z.js";import{a as p,i as m,n as h,r as g,t as _}from"./RadioButton.stories-P1SEMdJ1.js";function v(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(s,{of:m,parameters:{docs:{toc:!0}}}),`
2
2
  `,(0,b.jsx)(u,{children:`RadioButton`}),`
3
3
  `,(0,b.jsx)(o,{children:`Одиночная radio-кнопка для ручной сборки наборов выбора и специальных компоновок`}),`
4
4
  `,(0,b.jsx)(t.p,{children:`RadioButton уже имеет живые stories, а эта страница собирает их в структурированную документацию с краткими рекомендациями, примерами подключения и API.
@@ -1,4 +1,4 @@
1
- import{n as e,r as t}from"./rolldown-runtime-DkW27tQK.js";import{t as n}from"./react-BZJXY1be.js";import{n as r,t as i}from"./RadioButton-CCR0zu3W.js";import{n as a}from"./iframe-I7-gyNVJ.js";import{n as o,t as s}from"./createControlledStoryRender-BouhvX-R.js";var c=t({Controlled:()=>p,Disabled:()=>h,Group:()=>m,__namedExportsOrder:()=>g,default:()=>f}),l,u,d,f,p,m,h,g;function _(){return(_=e((()=>{l=n(),o(),r(),u=a(),d=s((e,t)=>(0,u.jsx)(i,{...e,value:e.value??!1,onChange:n=>{e.onChange?.(n),t({value:n})}})),f={title:`UI/RadioButton`,component:i,args:{value:!1,onChange:()=>{}},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{label:{description:`Текст подписи радиокнопки.`,control:`text`},description:{description:`Дополнительное описание под элементом.`,control:`text`},placeholder:{description:"Резервная подпись, если `label` не задан.",control:`text`},value:{description:`Признак выбранного состояния.`,control:`boolean`},onChange:{description:`Вызывается при изменении выбранности.`,control:!1},disabled:{description:`Блокирует взаимодействие.`,control:`boolean`},size:{description:`Размер визуального контрола и подписи.`,control:`select`,options:[`xs`,`sm`,`md`,`lg`,`xl`]},tone:{description:`Цветовой тон радиокнопки.`,control:`inline-radio`,options:[`neutral`,`brand`,`error`,`warning`,`success`,`info`]}}},p={render:d,args:{label:`Выбрать опцию`,description:`Одиночная радиокнопка в controlled-режиме.`,value:!1,tone:`neutral`}},m={render:()=>{let[e,t]=(0,l.useState)(`email`);return(0,u.jsxs)(`div`,{role:`radiogroup`,"aria-label":`Канал уведомлений`,style:{display:`grid`,gap:12},children:[(0,u.jsx)(i,{name:`notification-channel`,label:`Email`,value:e===`email`,onChange:e=>e&&t(`email`),tone:`info`}),(0,u.jsx)(i,{name:`notification-channel`,label:`SMS`,value:e===`sms`,onChange:e=>e&&t(`sms`),tone:`info`})]})},args:{value:void 0}},h={render:d,args:{label:`Недоступная опция`,description:`Заблокировано политикой конфигурации.`,value:!0,disabled:!0,tone:`neutral`}},p.parameters={...p.parameters,docs:{...p.parameters?.docs,source:{originalSource:`{
1
+ import{n as e,r as t}from"./rolldown-runtime-DkW27tQK.js";import{t as n}from"./react-BZJXY1be.js";import{n as r,t as i}from"./RadioButton-BLHXpf6L.js";import{n as a}from"./iframe-DWvPB8Sk.js";import{n as o,t as s}from"./createControlledStoryRender-BouhvX-R.js";var c=t({Controlled:()=>p,Disabled:()=>h,Group:()=>m,__namedExportsOrder:()=>g,default:()=>f}),l,u,d,f,p,m,h,g;function _(){return(_=e((()=>{l=n(),o(),r(),u=a(),d=s((e,t)=>(0,u.jsx)(i,{...e,value:e.value??!1,onChange:n=>{e.onChange?.(n),t({value:n})}})),f={title:`UI/RadioButton`,component:i,args:{value:!1,onChange:()=>{}},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{label:{description:`Текст подписи радиокнопки.`,control:`text`},description:{description:`Дополнительное описание под элементом.`,control:`text`},placeholder:{description:"Резервная подпись, если `label` не задан.",control:`text`},value:{description:`Признак выбранного состояния.`,control:`boolean`},onChange:{description:`Вызывается при изменении выбранности.`,control:!1},disabled:{description:`Блокирует взаимодействие.`,control:`boolean`},size:{description:`Размер визуального контрола и подписи.`,control:`select`,options:[`xs`,`sm`,`md`,`lg`,`xl`]},tone:{description:`Цветовой тон радиокнопки.`,control:`inline-radio`,options:[`neutral`,`brand`,`error`,`warning`,`success`,`info`]}}},p={render:d,args:{label:`Выбрать опцию`,description:`Одиночная радиокнопка в controlled-режиме.`,value:!1,tone:`neutral`}},m={render:()=>{let[e,t]=(0,l.useState)(`email`);return(0,u.jsxs)(`div`,{role:`radiogroup`,"aria-label":`Канал уведомлений`,style:{display:`grid`,gap:12},children:[(0,u.jsx)(i,{name:`notification-channel`,label:`Email`,value:e===`email`,onChange:e=>e&&t(`email`),tone:`info`}),(0,u.jsx)(i,{name:`notification-channel`,label:`SMS`,value:e===`sms`,onChange:e=>e&&t(`sms`),tone:`info`})]})},args:{value:void 0}},h={render:d,args:{label:`Недоступная опция`,description:`Заблокировано политикой конфигурации.`,value:!0,disabled:!0,tone:`neutral`}},p.parameters={...p.parameters,docs:{...p.parameters?.docs,source:{originalSource:`{
2
2
  render: renderRadioButtonStory,
3
3
  args: {
4
4
  label: "Выбрать опцию",
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-I7-gyNVJ.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-DxyL_jCu.js";import{a as p,i as m,n as h,r as g,t as _}from"./RadioGroup.stories-B7g9iK7V.js";function v(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(s,{of:g,parameters:{docs:{toc:!0}}}),`
1
+ import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-DWvPB8Sk.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-B_u8Yt1Z.js";import{a as p,i as m,n as h,r as g,t as _}from"./RadioGroup.stories-5-uFHs1b.js";function v(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(s,{of:g,parameters:{docs:{toc:!0}}}),`
2
2
  `,(0,b.jsx)(u,{children:`RadioGroup`}),`
3
3
  `,(0,b.jsx)(o,{children:`Группа взаимоисключающих опций с поддержкой горизонтальной и вертикальной раскладки`}),`
4
4
  `,(0,b.jsx)(t.p,{children:`RadioGroup уже имеет живые stories, а эта страница собирает их в структурированную документацию с краткими рекомендациями, примерами подключения и API.