@ryuzaki13/react-foundation-ui 1.12.3 → 2.0.0
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.
- package/package.json +5 -5
- package/src/styles/_base.scss +5 -2
- package/storybook-static/assets/{Badge-Bb-Tlpnk.js → Badge-DTLs_n8R.js} +1 -1
- package/storybook-static/assets/{Badge.stories-53iRTNYI.js → Badge.stories-CovEhEDD.js} +1 -1
- package/storybook-static/assets/{BadgeList-CRHWJedI.js → BadgeList-DjTg_9cc.js} +1 -1
- package/storybook-static/assets/{BarcodeScannerDialog.stories-BFy1-vDi.js → BarcodeScannerDialog.stories-C5rK3W2F.js} +1 -1
- package/storybook-static/assets/{Button-mtj3cku4.js → Button-DMPKoI7-.js} +1 -1
- package/storybook-static/assets/{Button-Bz8g5Qo6.js → Button-xWt087rv.js} +1 -1
- package/storybook-static/assets/{Button.stories-C-242Bt8.js → Button.stories-ClLOimQw.js} +1 -1
- package/storybook-static/assets/{CalendarView-DyBmkFcO.js → CalendarView-C8D421Nm.js} +1 -1
- package/storybook-static/assets/{CheckBox-CBV2_V1l.js → CheckBox-ByaB_AWI.js} +1 -1
- package/storybook-static/assets/{CheckBox-DfopNSxZ.js → CheckBox-CHNYWbr9.js} +1 -1
- package/storybook-static/assets/{CheckBox.stories-Br3wnAPu.js → CheckBox.stories-DMFiXHJV.js} +1 -1
- package/storybook-static/assets/{Color-6AOWCN3U-CFesUjaK.js → Color-6AOWCN3U-CP9Nd4vj.js} +1 -1
- package/storybook-static/assets/{ContextMenu-C3CX-kh1.js → ContextMenu-68QC2EAu.js} +1 -1
- package/storybook-static/assets/{ContextMenu-DcTk4-3g.js → ContextMenu-DSg2_txz.js} +1 -1
- package/storybook-static/assets/{ContextMenu.stories-Da_mFHxI.js → ContextMenu.stories-C8CldSPG.js} +1 -1
- package/storybook-static/assets/{CustomOptionButton-DtyvPLYF.js → CustomOptionButton-xAusSjnU.js} +1 -1
- package/storybook-static/assets/{DateInput-Cd_a0vtG.js → DateInput-2ESK1wDg.js} +1 -1
- package/storybook-static/assets/{DateInput-BsNZw1U8.js → DateInput-DOuoBC8j.js} +1 -1
- package/storybook-static/assets/{DateInput.stories-KsFLAVoc.js → DateInput.stories-D5t5QnTV.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect-DCJo3NSl.js → DateRangePresetSelect-C8k5BN7p.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect-BTOSe7F8.js → DateRangePresetSelect-CD2n8zWv.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect.stories-DLPXXHNi.js → DateRangePresetSelect.stories-COktncMK.js} +1 -1
- package/storybook-static/assets/{Detail-Bst4J2J-.js → Detail-oc_R1sEu.js} +1 -1
- package/storybook-static/assets/{Detail.stories-B_djgU9X.js → Detail.stories-1XrWL_s3.js} +1 -1
- package/storybook-static/assets/{Dialog-C_sQvgfz.js → Dialog-CLTQa6Kw.js} +1 -1
- package/storybook-static/assets/{Dialog-Bywt8Bmy.js → Dialog-CfnOq258.js} +1 -1
- package/storybook-static/assets/{Dialog.stories-D0lOVWN2.js → Dialog.stories-D5PPDse-.js} +1 -1
- package/storybook-static/assets/{Disclosure-D5dicvdj.js → Disclosure-ByNKoHvP.js} +1 -1
- package/storybook-static/assets/{Disclosure.stories-phvJ-bLv.js → Disclosure.stories-CBdZfYjY.js} +1 -1
- package/storybook-static/assets/{DisclosureGroup-D7sFS4CC.js → DisclosureGroup-D3XWBJXQ.js} +1 -1
- package/storybook-static/assets/{DocsRenderer-JROSPFPF-DPZk5iqJ.js → DocsRenderer-JROSPFPF-gxuFq2Pd.js} +1 -1
- package/storybook-static/assets/{DropZone-CAAvh0I0.js → DropZone-BxLXKfqY.js} +1 -1
- package/storybook-static/assets/{DropZone-0YS9qFM0.js → DropZone-C6xiwfG-.js} +1 -1
- package/storybook-static/assets/{DropZone.stories-BL5jgI8z.js → DropZone.stories-BpRrpoAa.js} +1 -1
- package/storybook-static/assets/{DropdownMenu-CJr8Erdo.js → DropdownMenu-CmzYr9oI.js} +1 -1
- package/storybook-static/assets/{ExpandableActionPanel-C0f0nIzL.js → ExpandableActionPanel-YeKyHEkM.js} +1 -1
- package/storybook-static/assets/{ExpandableActionPanel.stories-CQfNPLRJ.js → ExpandableActionPanel.stories-D2Kz4YaV.js} +1 -1
- package/storybook-static/assets/{Flex-3hWAPxhz.js → Flex-QTek1QSS.js} +1 -1
- package/storybook-static/assets/{Flex.stories-CyQLgkGM.js → Flex.stories-DbQJjxyG.js} +1 -1
- package/storybook-static/assets/{FloatingPopover-D_atQsG0.js → FloatingPopover-Z_pT8RTr.js} +1 -1
- package/storybook-static/assets/{FormattedTableCell-C_nFynfE.js → FormattedTableCell-sTTQO4a-.js} +3 -3
- package/storybook-static/assets/{Grid-BcSq0Nr3.js → Grid-BplOAlTQ.js} +1 -1
- package/storybook-static/assets/{Grid.stories-DiClkuyA.js → Grid.stories-3z3Ey-d3.js} +1 -1
- package/storybook-static/assets/{ImageCropper.stories-BhIYMKhb.js → ImageCropper.stories-CRS_mYqv.js} +1 -1
- package/storybook-static/assets/{ImageRenderer-vcayxSYK.js → ImageRenderer-B-6CUiXT.js} +1 -1
- package/storybook-static/assets/{ImageRenderer.stories-CD6CufDR.js → ImageRenderer.stories-r1qsDpQo.js} +1 -1
- package/storybook-static/assets/{ImageView.stories-CwaY5K3d.js → ImageView.stories-JTwPOvTV.js} +1 -1
- package/storybook-static/assets/{ImageViewer.stories-iUxUAbWU.js → ImageViewer.stories-EXX-1Tq3.js} +2 -2
- package/storybook-static/assets/{ImageViewerRuntime-CE78ivMF.js → ImageViewerRuntime-D9mEsiiW.js} +1 -1
- package/storybook-static/assets/{Input-B6o8599q.js → Input-o_oY36pr.js} +1 -1
- package/storybook-static/assets/{Input-Ckq5T_SF.js → Input-t9m3sVNs.js} +1 -1
- package/storybook-static/assets/{Input.stories-DxwML4Uj.js → Input.stories-BWFSZL_N.js} +1 -1
- package/storybook-static/assets/{InputDateTime-Nt13Hoba.js → InputDateTime-lu3pzt-n.js} +1 -1
- package/storybook-static/assets/{InputDateTime.stories-p-wH1C1b.js → InputDateTime.stories-DhWcuSxT.js} +1 -1
- package/storybook-static/assets/{InputFile-BgaMJ6pf.js → InputFile-B5JzTYSK.js} +1 -1
- package/storybook-static/assets/{InputFile-Cp73dufk.js → InputFile-DR6qGFRh.js} +1 -1
- package/storybook-static/assets/{InputFile.stories-DiFRFN8-.js → InputFile.stories-BDkbSn8C.js} +1 -1
- package/storybook-static/assets/{InputFiles-k2CUZgQh.js → InputFiles-CQU1IgFq.js} +1 -1
- package/storybook-static/assets/{InputFiles-BEvr3Tgw.js → InputFiles-D1flVl2f.js} +1 -1
- package/storybook-static/assets/{InputFiles.stories-C0ro4k-g.js → InputFiles.stories-DyNBsbIL.js} +1 -1
- package/storybook-static/assets/{InputFilesList-C1LGsI3P.js → InputFilesList-DcnsEkjI.js} +1 -1
- package/storybook-static/assets/{InputImage-D79gzzHU.js → InputImage-DyS8prBK.js} +1 -1
- package/storybook-static/assets/{InputImage-BVCYEdHK.js → InputImage-trdfpmT-.js} +1 -1
- package/storybook-static/assets/{InputImage.stories-DoyHYjFk.js → InputImage.stories-DEk-50bc.js} +1 -1
- package/storybook-static/assets/{InteractiveComponents-0V31mRaw.js → InteractiveComponents-CJQb2Kqe.js} +1 -1
- package/storybook-static/assets/{InteractiveComponents.stories-CHFTAdsJ.js → InteractiveComponents.stories-A25AcgXi.js} +1 -1
- package/storybook-static/assets/{LayoutPicker-OCUToVfB.js → LayoutPicker-Cyr59f6W.js} +1 -1
- package/storybook-static/assets/{LayoutPicker-gb4E6L0c.js → LayoutPicker-DmMkNRCR.js} +1 -1
- package/storybook-static/assets/{LayoutPicker.stories-C2Ymz0-o.js → LayoutPicker.stories-BN6ES2FK.js} +1 -1
- package/storybook-static/assets/{Listbox-D-eqdnKK.js → Listbox-BL6exIiK.js} +1 -1
- package/storybook-static/assets/{Listbox-BMVbwKBm.js → Listbox-CpOkTSus.js} +1 -1
- package/storybook-static/assets/{Listbox.stories-C_-Gw4Ya.js → Listbox.stories-CuJAPNNF.js} +1 -1
- package/storybook-static/assets/{Modal-C9GzRRz6.js → Modal-0h4g26vg.js} +1 -1
- package/storybook-static/assets/{Modal-B-3lmf7r.js → Modal-BDbbUiVP.js} +1 -1
- package/storybook-static/assets/{Modal.stories-6W74wLRQ.js → Modal.stories-BJTQMX6r.js} +1 -1
- package/storybook-static/assets/{ModalManagerProvider-DP-tasgF.js → ModalManagerProvider-CKUlkLye.js} +1 -1
- package/storybook-static/assets/{MultiSelect-BRxJc0uc.js → MultiSelect-DOFS5VMw.js} +1 -1
- package/storybook-static/assets/{MultiSelect-DTmvc0Sm.js → MultiSelect-jTomHycE.js} +1 -1
- package/storybook-static/assets/{MultiSelect.stories-BWs0Us3D.js → MultiSelect.stories-KUrIgYcH.js} +1 -1
- package/storybook-static/assets/{NoData-BmxGFtEL.js → NoData-Cg-72gvD.js} +1 -1
- package/storybook-static/assets/{NotificationsHost-DAhr6Z4I.js → NotificationsHost-BGUy6Nwm.js} +1 -1
- package/storybook-static/assets/{NotificationsHost.stories-DgSOu02u.js → NotificationsHost.stories-UqcdAxbV.js} +1 -1
- package/storybook-static/assets/{ODataMultiSelect-CPEupmc0.js → ODataMultiSelect-ogSmpbiq.js} +1 -1
- package/storybook-static/assets/{ODataMultiSelect.stories-B1M4I6Mo.js → ODataMultiSelect.stories-CFSWPA1t.js} +1 -1
- package/storybook-static/assets/{ODataSelect-Br_qXUiI.js → ODataSelect-XrSMzI_c.js} +1 -1
- package/storybook-static/assets/{ODataSelect.stories-DGJZUwUv.js → ODataSelect.stories-DzQ8kx1B.js} +1 -1
- package/storybook-static/assets/{ODataTreeMultiSelect-D-5c8C9z.js → ODataTreeMultiSelect-Bd6N1nUD.js} +1 -1
- package/storybook-static/assets/{ODataTreeMultiSelect.stories-DdjePs5T.js → ODataTreeMultiSelect.stories-BL3LegRZ.js} +1 -1
- package/storybook-static/assets/{ODataTreeSelect-tD4un2s_.js → ODataTreeSelect-LP9MrILe.js} +1 -1
- package/storybook-static/assets/{ODataTreeSelect.stories-neC0wK7F.js → ODataTreeSelect.stories-B1xaZzaX.js} +1 -1
- package/storybook-static/assets/{OneStepScroller-r-dCCkMo.js → OneStepScroller-Ccn3TcUI.js} +1 -1
- package/storybook-static/assets/{Option-DnDHcghu.js → Option-CdzPub1C.js} +1 -1
- package/storybook-static/assets/{OptionButton-BPJ77vb9.js → OptionButton-BmRyJTuO.js} +1 -1
- package/storybook-static/assets/PeriodSelect-BngzAU_C.js +5 -0
- package/storybook-static/assets/{PeriodSelect-0bPQBeca.js → PeriodSelect-kQAjEWSH.js} +1 -1
- package/storybook-static/assets/{PeriodSelect.stories-CZq2FnBo.js → PeriodSelect.stories-BRvyn_JH.js} +1 -1
- package/storybook-static/assets/{PickerTriggerActions-CGn6LdIJ.js → PickerTriggerActions-C0nuR9kw.js} +1 -1
- package/storybook-static/assets/{Popover-CgMNWmOI.js → Popover-CsDztf-o.js} +1 -1
- package/storybook-static/assets/{Popover-B5OuO-K7.js → Popover-GYtSL_1f.js} +1 -1
- package/storybook-static/assets/{Popover.stories-OMuOLt7a.js → Popover.stories-Bqt_2L3Y.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput--t_WB4Xn.js → PresetRangeDateInput-BSssho5H.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput-m9AGDd9F.js → PresetRangeDateInput-C9G9Gebd.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput.stories-DoumFweG.js → PresetRangeDateInput.stories-CwdMXBFw.js} +1 -1
- package/storybook-static/assets/{PresetSelect-C4W2pt8e.js → PresetSelect-BPsCLuct.js} +1 -1
- package/storybook-static/assets/{README-bHXns8Ve.js → README-5RP00KZZ.js} +1 -1
- package/storybook-static/assets/{README-3jiOAjxm.js → README-9XRn3-ED.js} +1 -1
- package/storybook-static/assets/{README-h-98fubh.js → README-BIqQ7jYg.js} +1 -1
- package/storybook-static/assets/{README-uolWGEC3.js → README-BLXGXOo5.js} +1 -1
- package/storybook-static/assets/{README-DbQa33tw.js → README-BOBlSnDn.js} +1 -1
- package/storybook-static/assets/{README-DOllumUi.js → README-BRpdVUr9.js} +1 -1
- package/storybook-static/assets/{README-CIZLQQcA.js → README-BXb7J1i8.js} +1 -1
- package/storybook-static/assets/{README-5OGR2Idk.js → README-BYHSzLwv.js} +1 -1
- package/storybook-static/assets/{README-BnR3ISRZ.js → README-Ba0tB6ZN.js} +1 -1
- package/storybook-static/assets/{README-C_ak9GBM.js → README-Bc8lHbXV.js} +1 -1
- package/storybook-static/assets/{README-DCf_OFhT.js → README-BhoxLtlr.js} +9 -2
- package/storybook-static/assets/{README-BjYF32H7.js → README-BmzSVH7U.js} +1 -1
- package/storybook-static/assets/{README-Cj-oAGOW.js → README-BpmlhmtG.js} +1 -1
- package/storybook-static/assets/README-Bq38hDzk.js +37 -0
- package/storybook-static/assets/{README-C4vNkSIZ.js → README-C07t0NIU.js} +1 -1
- package/storybook-static/assets/{README-BYqax1tk.js → README-C53FAkdN.js} +1 -1
- package/storybook-static/assets/{README-CTsukJjV.js → README-C7j7n7jq.js} +1 -1
- package/storybook-static/assets/{README-DPkd1E6y.js → README-CJtOh4Sd.js} +1 -1
- package/storybook-static/assets/{README-N4hwMOQa.js → README-CV61J_JK.js} +1 -1
- package/storybook-static/assets/{README-Bw0WNKXa.js → README-CVql_W36.js} +1 -1
- package/storybook-static/assets/{README-CErN8ivh.js → README-CXq89IOI.js} +1 -1
- package/storybook-static/assets/{README-DPP90ptQ.js → README-Ckp4sw5f.js} +1 -1
- package/storybook-static/assets/{README-BYz8QgnD.js → README-CxDM046q.js} +107 -28
- package/storybook-static/assets/{README-BXR7jq_-.js → README-D-fVNtRb.js} +1 -1
- package/storybook-static/assets/{README-Dobb_68B.js → README-D43Puppu.js} +1 -1
- package/storybook-static/assets/README-D67Ndgh9.js +121 -0
- package/storybook-static/assets/{README-B_7lghc6.js → README-DFCutGv3.js} +1 -1
- package/storybook-static/assets/{README-59WYy693.js → README-DQysVKmM.js} +1 -1
- package/storybook-static/assets/{README-DDawnRvx.js → README-DS_nuTod.js} +1 -1
- package/storybook-static/assets/{README-B_r0a-8W.js → README-DXBpQ2ho.js} +1 -1
- package/storybook-static/assets/{README-Co__w5yZ.js → README-DXRNhATk.js} +1 -1
- package/storybook-static/assets/{README-_hmkmeNS.js → README-D_a06RNK.js} +1 -1
- package/storybook-static/assets/{README-QlGGPMq8.js → README-DcWifa4y.js} +1 -1
- package/storybook-static/assets/{README-hTXC2gCB.js → README-Del1wUfr.js} +1 -1
- package/storybook-static/assets/{README-DPlmMvoG.js → README-Do7nnQ_n.js} +1 -1
- package/storybook-static/assets/{README-BVb_gVDX.js → README-DoPWzeQH.js} +1 -1
- package/storybook-static/assets/{README-Bnpspv-W.js → README-DqbwD6RO.js} +4 -2
- package/storybook-static/assets/{README-BAh5Xus0.js → README-DtQcSyrT.js} +37 -8
- package/storybook-static/assets/{README-BFaqbIdb.js → README-Dz8_KWoz.js} +1 -1
- package/storybook-static/assets/{README-Sr1IKAzc.js → README-GLir3V8b.js} +1 -1
- package/storybook-static/assets/{README-qa-yOB1-.js → README-HY5c2Bbn.js} +1 -1
- package/storybook-static/assets/{README-tQpBd04D.js → README-PcQNwv17.js} +1 -1
- package/storybook-static/assets/{README-S62e_HzW.js → README-Tw0ZHHwr.js} +1 -1
- package/storybook-static/assets/{README-nkCvXl2d.js → README-V9DD9H9z.js} +1 -1
- package/storybook-static/assets/{README-kw2yQ8Ly.js → README-XW0y0mGh.js} +1 -1
- package/storybook-static/assets/{README-BUcEfAaT.js → README-Y1Smckdh.js} +1 -1
- package/storybook-static/assets/{README-CeUtVNHb.js → README-ZguU3X5y.js} +1 -1
- package/storybook-static/assets/{README-CKv69_JF.js → README-e8EWTIws.js} +1 -1
- package/storybook-static/assets/{README-C4OysABl.js → README-n1zI-vYE.js} +45 -1
- package/storybook-static/assets/{README-BhckV3_p.js → README-oKCgmTdw.js} +12 -4
- package/storybook-static/assets/{README-BQ7AtNNR.js → README-pexCW3yI.js} +1 -1
- package/storybook-static/assets/{README-BAZjnIqN.js → README-vDg-39Yq.js} +1 -1
- package/storybook-static/assets/{README-BWsH4rJw.js → README-wKqwiHb4.js} +1 -1
- package/storybook-static/assets/{RadioButton-CfX3osFJ.js → RadioButton-DGT616TU.js} +1 -1
- package/storybook-static/assets/{RadioButton-BUnpjers.js → RadioButton-DvDDf9wn.js} +1 -1
- package/storybook-static/assets/{RadioButton.stories-H8zzkkO1.js → RadioButton.stories-BSA2eNrW.js} +1 -1
- package/storybook-static/assets/{RadioGroup-DqXzJFTf.js → RadioGroup-C_ZapH6C.js} +1 -1
- package/storybook-static/assets/{RadioGroup-qEBEahRK.js → RadioGroup-Cj-zQisA.js} +1 -1
- package/storybook-static/assets/{RadioGroup.stories-Fw903xfW.js → RadioGroup.stories-B6HK1X-8.js} +1 -1
- package/storybook-static/assets/{Scrollable-hz1NQNaK.js → Scrollable-DCvN6Jjw.js} +1 -1
- package/storybook-static/assets/{Select-Bx7jfO8v.js → Select-DPdZSw3l.js} +1 -1
- package/storybook-static/assets/{Select-DMfWBkBz.js → Select-DY9-upm8.js} +1 -1
- package/storybook-static/assets/{Select.stories-Du-OjTNW.js → Select.stories-CZ_QR5HG.js} +1 -1
- package/storybook-static/assets/{SerializableSelect-qHSRjx3u.js → SerializableSelect-11vTkd0H.js} +1 -1
- package/storybook-static/assets/{SerializableSelect.stories-psdGMsQh.js → SerializableSelect.stories-BguIknSO.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput-CgM7dvqm.js → SingleDateTimeInput-BoGhy8Ht.js} +1 -1
- package/storybook-static/assets/SingleDateTimeInput-DCsz6UCV.js +1 -0
- package/storybook-static/assets/{SingleDateTimeInput.stories-DZuJywm7.js → SingleDateTimeInput.stories-DxuSYUFA.js} +1 -1
- package/storybook-static/assets/{Slider-DrlH-Yc8.js → Slider-CysM6SsH.js} +1 -1
- package/storybook-static/assets/{Slider-BOrjmti5.js → Slider-OjWEFAVX.js} +1 -1
- package/storybook-static/assets/{Slider.stories-zGf5JH7B.js → Slider.stories-D9yfMGAr.js} +1 -1
- package/storybook-static/assets/{SliderInput-BXhb-G_f.js → SliderInput-CI_NLQ0q.js} +1 -1
- package/storybook-static/assets/{SliderInput-8tBsLdl3.js → SliderInput-DBTFSE4e.js} +1 -1
- package/storybook-static/assets/{SliderInput.stories-Bfh2gqKd.js → SliderInput.stories-D0oX3RFL.js} +1 -1
- package/storybook-static/assets/{Sortable-CmIfgixe.js → Sortable-wMgs80Np.js} +1 -1
- package/storybook-static/assets/{Sortable.stories-C78JlelK.js → Sortable.stories-CzLFp8Yi.js} +1 -1
- package/storybook-static/assets/{Splitter-BTSXnqj_.js → Splitter-BKw_fa4-.js} +1 -1
- package/storybook-static/assets/{Splitter.stories-Dh7hL3px.js → Splitter.stories-BESoJ6o1.js} +1 -1
- package/storybook-static/assets/{StateSelect-CoJ39Kdx.js → StateSelect-BO-jFCLn.js} +1 -1
- package/storybook-static/assets/StateSelect-BwNBFERr.js +4 -0
- package/storybook-static/assets/{StateSelect.stories-DeWav8T9.js → StateSelect.stories-BK7SyuXQ.js} +1 -1
- package/storybook-static/assets/{StringToggle.stories-CPBa-lFY.js → StringToggle.stories-A6pkEO-O.js} +1 -1
- package/storybook-static/assets/{Switch-BAJOte6Q.js → Switch-8JotpfFf.js} +1 -1
- package/storybook-static/assets/{Switch-Bi2pIHDI.js → Switch-Ca3gnf5f.js} +1 -1
- package/storybook-static/assets/{Switch.stories-ByhJBHq4.js → Switch.stories-o3vvp8L8.js} +1 -1
- package/storybook-static/assets/{Table-DH0AckX2.js → Table-C_IPJbR2.js} +1 -1
- package/storybook-static/assets/{Table.stories-C5HKyd7X.js → Table.stories-DOFEu7Ua.js} +1 -1
- package/storybook-static/assets/{Tabs-COnb8huQ.js → Tabs-BLBo4OAv.js} +1 -1
- package/storybook-static/assets/{Tabs.stories-gaBFPOqg.js → Tabs.stories-RBnCQrM-.js} +1 -1
- package/storybook-static/assets/{TabsBox-DGmKDKFT.js → TabsBox-apqD4XLH.js} +1 -1
- package/storybook-static/assets/{TagInput-fiG22GmX.js → TagInput-CSYOG896.js} +1 -1
- package/storybook-static/assets/{TagInput.stories-BOvucwBk.js → TagInput.stories-BnGuMi6T.js} +1 -1
- package/storybook-static/assets/{Text-CrffLlt2.js → Text-mRhkARXu.js} +1 -1
- package/storybook-static/assets/{Textarea-Bk_2AVYG.js → Textarea-Covk__BL.js} +1 -1
- package/storybook-static/assets/{Textarea-DlBIfLlw.js → Textarea-DS1hM5rM.js} +1 -1
- package/storybook-static/assets/{Textarea.stories-O7urUyHw.js → Textarea.stories-BdpsMxDY.js} +1 -1
- package/storybook-static/assets/{TimePanel-Dla4JAOt.js → TimePanel-PDYyBCbF.js} +1 -1
- package/storybook-static/assets/{TimePanel.stories-D5SMqIsI.js → TimePanel.stories-BFS31y6L.js} +1 -1
- package/storybook-static/assets/{Toggle-bq8UTDMZ.js → Toggle-DTX4Q7y6.js} +1 -1
- package/storybook-static/assets/{Toggle-Cbkn8Hau.js → Toggle-zWHGLyKm.js} +1 -1
- package/storybook-static/assets/{Toggle.stories-Ds55x4cO.js → Toggle.stories-fZ7WRE_7.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect-CZX9pAkb.js → TreeMultiSelect-BSZO9xe1.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect-D4B4pqZz.js → TreeMultiSelect-C4y6p4PX.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect.stories-BWpPvnJl.js → TreeMultiSelect.stories-DXKBBf5r.js} +1 -1
- package/storybook-static/assets/{TreePickerBase-BKCLqkhB.js → TreePickerBase-CMHFqHVa.js} +1 -1
- package/storybook-static/assets/{TreeSelect-0jFcLZm3.js → TreeSelect-DGXveWx3.js} +1 -1
- package/storybook-static/assets/{TreeSelect-BNpVo2oN.js → TreeSelect-Dh5uT4_T.js} +1 -1
- package/storybook-static/assets/{TreeSelect.stories-D0M--uBR.js → TreeSelect.stories-Byy-mMTP.js} +1 -1
- package/storybook-static/assets/{TreeTable-DzUNzP-c.js → TreeTable-BN7J72I8.js} +1 -1
- package/storybook-static/assets/{TreeTable.stories-CRHUMdfS.js → TreeTable.stories-FYHTdBr3.js} +1 -1
- package/storybook-static/assets/{array-D-_yMMUK-BQ0uu1hZ.js → array-D-_yMMUK-DYqn1Ozn.js} +1 -1
- package/storybook-static/assets/{blocks-BJgKfTeb.js → blocks-o5-z1BZu.js} +3 -3
- package/storybook-static/assets/{check-BzkxQ8WU.js → check-C4AaNZYo.js} +1 -1
- package/storybook-static/assets/{chevron-down-DGvYv14U.js → chevron-down-DvNqUDlQ.js} +1 -1
- package/storybook-static/assets/{chevron-left-BPaDbp9T.js → chevron-left-DjMG1A8Y.js} +1 -1
- package/storybook-static/assets/{chevron-right-DMTjVndT.js → chevron-right-Mitq9JQN.js} +1 -1
- package/storybook-static/assets/{chunk-W22LQPXL-B730-y87.js → chunk-W22LQPXL-DNwhYDee.js} +1 -1
- package/storybook-static/assets/{circle-alert-C27j3MuB.js → circle-alert-RsaUYk8p.js} +1 -1
- package/storybook-static/assets/{circle-check-H9j-t9F9.js → circle-check-Bf5GP89g.js} +1 -1
- package/storybook-static/assets/{components-DFWEBfcy.js → components-B4tZ3-vQ.js} +3 -3
- package/storybook-static/assets/{contextMenu-CnvFzk6C.js → contextMenu-Ftv13fjh.js} +1 -1
- package/storybook-static/assets/{defaultRenderers-Dinv2uRZ.js → defaultRenderers-CyUQG_f-.js} +1 -1
- package/storybook-static/assets/{download-D53jj6OB.js → download-BmjzCCZo.js} +1 -1
- package/storybook-static/assets/{floating-ui.react-BldWHyvZ.js → floating-ui.react-BY7cYh9B.js} +1 -1
- package/storybook-static/assets/formatters-DVE1YVNQ-CMsbb5-m.js +1 -0
- package/storybook-static/assets/{foundationApi-DUPa0kJf.js → foundationApi-C7zGaHuR.js} +4 -4
- package/storybook-static/assets/{foundationLib-BgsO8s2Q.js → foundationLib-CQpPkJlc.js} +1 -1
- package/storybook-static/assets/{hooks-CItSQalB.js → hooks-DQXnNniA.js} +2 -2
- package/storybook-static/assets/iframe-B-sjM2X5.js +1 -0
- package/storybook-static/assets/{iframe-8t-iSZRw.js → iframe-Cb11iJVP.js} +4 -4
- package/storybook-static/assets/iframe-IhWQT6NX.css +1 -0
- package/storybook-static/assets/{info-D6YLTeJv.js → info-BmiY6Ur5.js} +1 -1
- package/storybook-static/assets/odata-D-cQAIdp.js +1 -0
- package/storybook-static/assets/odata-service-CWkHASdw-DAt28ZWr.js +50 -0
- package/storybook-static/assets/{odataStoryFixtures-DkfxDG-j.js → odataStoryFixtures-BddSr1SB.js} +1 -1
- package/storybook-static/assets/{react-C5Qye0r6.js → react-wmXnhrTV.js} +1 -1
- package/storybook-static/assets/{refresh-cw-BirMeJd2.js → refresh-cw-BoUt7cjC.js} +1 -1
- package/storybook-static/assets/{settings-2-CyWHqbgu.js → settings-2-BnEmfu4n.js} +1 -1
- package/storybook-static/assets/{sortable-DhM5eZtm.js → sortable-BG6M9j0E.js} +1 -1
- package/storybook-static/assets/{syntaxhighlighter-QEQV7K2Y-1DmtB-7j.js → syntaxhighlighter-QEQV7K2Y-DTU-Nj55.js} +1 -1
- package/storybook-static/assets/{trash-2-CTWGv9x4.js → trash-2-CEuSrdHe.js} +1 -1
- package/storybook-static/assets/{triangle-alert-0JLo0Lt9.js → triangle-alert-BB6HrHL-.js} +1 -1
- package/storybook-static/assets/{useODataSelectBase-Bij1tnHS.js → useODataSelectBase-DiMVVy-k.js} +1 -1
- package/storybook-static/assets/{useODataTreeData-BkicHJRI.js → useODataTreeData-DiV_gN4z.js} +1 -1
- package/storybook-static/assets/{usePickerDefaultFilter-5Q1pAV4d.js → usePickerDefaultFilter-BMBLqfz8.js} +1 -1
- package/storybook-static/assets/{usePickerQuery-DI3kx12L.js → usePickerQuery-Dc3Jdhg0.js} +1 -1
- package/storybook-static/assets/{usePickerTriggerController-fbTOudOs.js → usePickerTriggerController-BjY_AiUm.js} +1 -1
- package/storybook-static/assets/validators-D82aYLRK.js +1 -0
- package/storybook-static/assets/{x-Dl2v2p0F.js → x-CcdATVNL.js} +1 -1
- package/storybook-static/iframe.html +3 -3
- package/storybook-static/index.json +1 -1
- package/storybook-static/project.json +1 -1
- package/storybook-static/assets/PeriodSelect-Cg7KGZji.js +0 -5
- package/storybook-static/assets/README-Ak1zhbTl.js +0 -324
- package/storybook-static/assets/SingleDateTimeInput-ByD1qCqD.js +0 -1
- package/storybook-static/assets/StateSelect-CBBFuY4Y.js +0 -4
- package/storybook-static/assets/formatters-D33Uh3si-Df97arf9.js +0 -1
- package/storybook-static/assets/iframe-DUr12u4y.js +0 -1
- package/storybook-static/assets/iframe-DjMdxawD.css +0 -1
- package/storybook-static/assets/odata-Dl5qN0UA.js +0 -1
- package/storybook-static/assets/odata-service-CWkHASdw-CXhFi03v.js +0 -3
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.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/Date`}),`
|
|
2
2
|
`,(0,c.jsx)(t.h1,{id:`даты-время-и-календарные-диапазоны`,children:`Даты, время и календарные диапазоны`}),`
|
|
3
3
|
`,(0,c.jsx)(t.p,{children:`Модуль решает четыре связанные задачи:`}),`
|
|
4
4
|
`,(0,c.jsxs)(t.ul,{children:[`
|
|
@@ -10,6 +10,7 @@ import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-8
|
|
|
10
10
|
`,(0,c.jsx)(t.p,{children:`Все функции и типы экспортируются через общий entrypoint:`}),`
|
|
11
11
|
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`import {
|
|
12
12
|
formatDateAsDate,
|
|
13
|
+
formatInstantDateTime,
|
|
13
14
|
getCalendarPeriod,
|
|
14
15
|
normalizeDateRange,
|
|
15
16
|
parseDate,
|
|
@@ -35,6 +36,12 @@ date?.getHours(); // 18
|
|
|
35
36
|
date?.toISOString(); // "2026-03-03T13:03:50.000Z"
|
|
36
37
|
`})}),`
|
|
37
38
|
`,(0,c.jsxs)(t.p,{children:[`Локальные getters такого `,(0,c.jsx)(t.code,{children:`Date`}),` зависят от timezone среды. Используйте TZ-вариант, когда значение означает настоящий момент события: timestamp аудита, время серверного события, instant для сортировки между часовыми поясами.`]}),`
|
|
39
|
+
`,(0,c.jsx)(t.p,{children:`Для одинакового отображения абсолютной метки времени на SSR-сервере и в браузере
|
|
40
|
+
используйте явный часовой пояс IANA:`}),`
|
|
41
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`formatInstantDateTime("2026-09-04T10:22:28Z", {
|
|
42
|
+
timeZone: "Asia/Yekaterinburg"
|
|
43
|
+
}); // "4 сент. 2026 г., 15:22:28"
|
|
44
|
+
`})}),`
|
|
38
45
|
`,(0,c.jsx)(t.h3,{id:`простое-правило-выбора`,children:`Простое правило выбора`}),`
|
|
39
46
|
`,(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:`Видимую календарную дату/время`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`parseDate`}),`, `,(0,c.jsx)(t.code,{children:`parseDateValue`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Абсолютный момент времени`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`parseDateTZ`}),`, `,(0,c.jsx)(t.code,{children:`parseDateValueTZ`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Строку для обычного UI`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`formatDate*`}),` — внутри floating parser`]})]})]})]}),`
|
|
40
47
|
`,(0,c.jsxs)(t.p,{children:[`Не выбирайте вариант по наличию буквы `,(0,c.jsx)(t.code,{children:`Z`}),` во входе. Выбирайте по бизнес-смыслу данных.`]}),`
|
|
@@ -402,7 +409,7 @@ const unixMs = eventInstant?.getTime();
|
|
|
402
409
|
`,(0,c.jsx)(t.h3,{id:`регистрировать-preset-при-каждом-рендере`,children:`Регистрировать preset при каждом рендере`}),`
|
|
403
410
|
`,(0,c.jsx)(t.p,{children:`Реестр глобальный, а компиляция должна выполняться один раз. Настраивайте presets на bootstrap-stage.`}),`
|
|
404
411
|
`,(0,c.jsx)(t.h2,{id:`api-справка`,children:`API-справка`}),`
|
|
405
|
-
`,(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:`Parsing`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`parseDateValue`}),`, `,(0,c.jsx)(t.code,{children:`parseDateValueTZ`}),`, `,(0,c.jsx)(t.code,{children:`parseDate`}),`, `,(0,c.jsx)(t.code,{children:`parseDateTZ`}),`, `,(0,c.jsx)(t.code,{children:`parseDateByPattern`}),`, `,(0,c.jsx)(t.code,{children:`parseDateByFormat`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Universal format`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`formatDate`}),`, `,(0,c.jsx)(t.code,{children:`formatDateRange`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`UI wrappers`}),(0,c.jsxs)(t.td,{children:[`все `,(0,c.jsx)(t.code,{children:`formatDateAsDate*`}),`, `,(0,c.jsx)(t.code,{children:`formatDateAsMonth*`}),`, `,(0,c.jsx)(t.code,{children:`formatDateAsTime*`}),`, `,(0,c.jsx)(t.code,{children:`formatDateAsDatetime*`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Machine wrappers`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`formatDateAsAbapYear`}),`, `,(0,c.jsx)(t.code,{children:`formatDateAsAbapMonth`}),`, `,(0,c.jsx)(t.code,{children:`formatDateAsAbapDate`}),`, `,(0,c.jsx)(t.code,{children:`formatDateAsAbapDatetime`}),`, `,(0,c.jsx)(t.code,{children:`formatDateAsODataDate`}),`, `,(0,c.jsx)(t.code,{children:`formatDateAsODataDatetime`}),`, `,(0,c.jsx)(t.code,{children:`formatDateAsODataTime`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Presets`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`DATE_FORMAT_DEFAULTS`}),`, `,(0,c.jsx)(t.code,{children:`DEFAULT_DATE_PRESET_NAMES`}),`, `,(0,c.jsx)(t.code,{children:`DATE_FORMAT_STYLE_PRESET_NAMES`}),`, `,(0,c.jsx)(t.code,{children:`getDatePreset`}),`, `,(0,c.jsx)(t.code,{children:`getDatePresetNames`}),`, `,(0,c.jsx)(t.code,{children:`registerDatePreset`}),`, `,(0,c.jsx)(t.code,{children:`resetDatePresets`}),`, `,(0,c.jsx)(t.code,{children:`resolveDateFormatName`}),`, `,(0,c.jsx)(t.code,{children:`resolveDateFormatPreset`}),`, type guards`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Calendar`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`createCalendarDate`}),`, `,(0,c.jsx)(t.code,{children:`getStartOfDay`}),`, `,(0,c.jsx)(t.code,{children:`getEndOfDay`}),`, `,(0,c.jsx)(t.code,{children:`getStartOfWeek`}),`, `,(0,c.jsx)(t.code,{children:`getStartOfMonth`}),`, `,(0,c.jsx)(t.code,{children:`getStartOfYear`}),`, `,(0,c.jsx)(t.code,{children:`addCalendarDays`}),`, `,(0,c.jsx)(t.code,{children:`addCalendarMonths`}),`, `,(0,c.jsx)(t.code,{children:`addCalendarYears`}),`, `,(0,c.jsx)(t.code,{children:`isSameCalendarDay`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Ranges`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`isValidDate`}),`, `,(0,c.jsx)(t.code,{children:`isDateRangeTuple`}),`, `,(0,c.jsx)(t.code,{children:`cloneDate`}),`, `,(0,c.jsx)(t.code,{children:`orderDates`}),`, `,(0,c.jsx)(t.code,{children:`resolveDateRangePair`}),`, `,(0,c.jsx)(t.code,{children:`normalizeDateRange`}),`, `,(0,c.jsx)(t.code,{children:`requireDateRange`}),`, `,(0,c.jsx)(t.code,{children:`countCalendarDaysInDateRange`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Periods`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`getCalendarPeriod`}),`, `,(0,c.jsx)(t.code,{children:`isDateInsideCalendarPeriod`}),`, `,(0,c.jsx)(t.code,{children:`isCalendarPeriodWithinDateBounds`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Relative ranges`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`normalizeDateRangeReferenceDate`}),`, `,(0,c.jsx)(t.code,{children:`resolveTodayRange`}),`, `,(0,c.jsx)(t.code,{children:`resolveYesterdayRange`}),`, `,(0,c.jsx)(t.code,{children:`resolveMonthStartToTodayRange`}),`, `,(0,c.jsx)(t.code,{children:`resolveMonthStartToYesterdayRange`}),`, `,(0,c.jsx)(t.code,{children:`resolveMonthAgoRange`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Education`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`parseEducationDateKey`}),`, `,(0,c.jsx)(t.code,{children:`formatEducationDateKey`}),`, `,(0,c.jsx)(t.code,{children:`formatEducationTimeKey`}),`, `,(0,c.jsx)(t.code,{children:`createEducationDateTime`}),`, `,(0,c.jsx)(t.code,{children:`getEducationYear`}),`, `,(0,c.jsx)(t.code,{children:`getEducationYearRange`}),`, `,(0,c.jsx)(t.code,{children:`isEducationDateInCurrentYear`}),`, `,(0,c.jsx)(t.code,{children:`getEducationWeekStartDate`}),`, `,(0,c.jsx)(t.code,{children:`getEducationWeekRange`}),`, `,(0,c.jsx)(t.code,{children:`getEducationWeekDays`}),`, `,(0,c.jsx)(t.code,{children:`getCurrentEducationWeekKey`}),`, `,(0,c.jsx)(t.code,{children:`normalizeEducationWeekKey`}),`, `,(0,c.jsx)(t.code,{children:`resolveEducationWeekKey`}),`, `,(0,c.jsx)(t.code,{children:`isCurrentEducationWeek`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Pattern metadata`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`DATE_PATTERN_DATE_TOKENS`}),`, `,(0,c.jsx)(t.code,{children:`DATE_PATTERN_TIME_TOKENS`}),`, `,(0,c.jsx)(t.code,{children:`DATE_PATTERN_TOKENS`}),`, `,(0,c.jsx)(t.code,{children:`DATE_PATTERN_TOKEN_RE`})]})]})]})]}),`
|
|
412
|
+
`,(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:`Parsing`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`parseDateValue`}),`, `,(0,c.jsx)(t.code,{children:`parseDateValueTZ`}),`, `,(0,c.jsx)(t.code,{children:`parseDate`}),`, `,(0,c.jsx)(t.code,{children:`parseDateTZ`}),`, `,(0,c.jsx)(t.code,{children:`parseDateByPattern`}),`, `,(0,c.jsx)(t.code,{children:`parseDateByFormat`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Universal format`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`formatDate`}),`, `,(0,c.jsx)(t.code,{children:`formatDateRange`}),`, `,(0,c.jsx)(t.code,{children:`formatInstantDateTime`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`UI wrappers`}),(0,c.jsxs)(t.td,{children:[`все `,(0,c.jsx)(t.code,{children:`formatDateAsDate*`}),`, `,(0,c.jsx)(t.code,{children:`formatDateAsMonth*`}),`, `,(0,c.jsx)(t.code,{children:`formatDateAsTime*`}),`, `,(0,c.jsx)(t.code,{children:`formatDateAsDatetime*`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Machine wrappers`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`formatDateAsAbapYear`}),`, `,(0,c.jsx)(t.code,{children:`formatDateAsAbapMonth`}),`, `,(0,c.jsx)(t.code,{children:`formatDateAsAbapDate`}),`, `,(0,c.jsx)(t.code,{children:`formatDateAsAbapDatetime`}),`, `,(0,c.jsx)(t.code,{children:`formatDateAsODataDate`}),`, `,(0,c.jsx)(t.code,{children:`formatDateAsODataDatetime`}),`, `,(0,c.jsx)(t.code,{children:`formatDateAsODataTime`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Presets`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`DATE_FORMAT_DEFAULTS`}),`, `,(0,c.jsx)(t.code,{children:`DEFAULT_DATE_PRESET_NAMES`}),`, `,(0,c.jsx)(t.code,{children:`DATE_FORMAT_STYLE_PRESET_NAMES`}),`, `,(0,c.jsx)(t.code,{children:`getDatePreset`}),`, `,(0,c.jsx)(t.code,{children:`getDatePresetNames`}),`, `,(0,c.jsx)(t.code,{children:`registerDatePreset`}),`, `,(0,c.jsx)(t.code,{children:`resetDatePresets`}),`, `,(0,c.jsx)(t.code,{children:`resolveDateFormatName`}),`, `,(0,c.jsx)(t.code,{children:`resolveDateFormatPreset`}),`, type guards`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Calendar`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`createCalendarDate`}),`, `,(0,c.jsx)(t.code,{children:`getStartOfDay`}),`, `,(0,c.jsx)(t.code,{children:`getEndOfDay`}),`, `,(0,c.jsx)(t.code,{children:`getStartOfWeek`}),`, `,(0,c.jsx)(t.code,{children:`getStartOfMonth`}),`, `,(0,c.jsx)(t.code,{children:`getStartOfYear`}),`, `,(0,c.jsx)(t.code,{children:`addCalendarDays`}),`, `,(0,c.jsx)(t.code,{children:`addCalendarMonths`}),`, `,(0,c.jsx)(t.code,{children:`addCalendarYears`}),`, `,(0,c.jsx)(t.code,{children:`isSameCalendarDay`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Ranges`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`isValidDate`}),`, `,(0,c.jsx)(t.code,{children:`isDateRangeTuple`}),`, `,(0,c.jsx)(t.code,{children:`cloneDate`}),`, `,(0,c.jsx)(t.code,{children:`orderDates`}),`, `,(0,c.jsx)(t.code,{children:`resolveDateRangePair`}),`, `,(0,c.jsx)(t.code,{children:`normalizeDateRange`}),`, `,(0,c.jsx)(t.code,{children:`requireDateRange`}),`, `,(0,c.jsx)(t.code,{children:`countCalendarDaysInDateRange`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Periods`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`getCalendarPeriod`}),`, `,(0,c.jsx)(t.code,{children:`isDateInsideCalendarPeriod`}),`, `,(0,c.jsx)(t.code,{children:`isCalendarPeriodWithinDateBounds`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Relative ranges`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`normalizeDateRangeReferenceDate`}),`, `,(0,c.jsx)(t.code,{children:`resolveTodayRange`}),`, `,(0,c.jsx)(t.code,{children:`resolveYesterdayRange`}),`, `,(0,c.jsx)(t.code,{children:`resolveMonthStartToTodayRange`}),`, `,(0,c.jsx)(t.code,{children:`resolveMonthStartToYesterdayRange`}),`, `,(0,c.jsx)(t.code,{children:`resolveMonthAgoRange`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Education`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`parseEducationDateKey`}),`, `,(0,c.jsx)(t.code,{children:`formatEducationDateKey`}),`, `,(0,c.jsx)(t.code,{children:`formatEducationTimeKey`}),`, `,(0,c.jsx)(t.code,{children:`createEducationDateTime`}),`, `,(0,c.jsx)(t.code,{children:`getEducationYear`}),`, `,(0,c.jsx)(t.code,{children:`getEducationYearRange`}),`, `,(0,c.jsx)(t.code,{children:`isEducationDateInCurrentYear`}),`, `,(0,c.jsx)(t.code,{children:`getEducationWeekStartDate`}),`, `,(0,c.jsx)(t.code,{children:`getEducationWeekRange`}),`, `,(0,c.jsx)(t.code,{children:`getEducationWeekDays`}),`, `,(0,c.jsx)(t.code,{children:`getCurrentEducationWeekKey`}),`, `,(0,c.jsx)(t.code,{children:`normalizeEducationWeekKey`}),`, `,(0,c.jsx)(t.code,{children:`resolveEducationWeekKey`}),`, `,(0,c.jsx)(t.code,{children:`isCurrentEducationWeek`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Pattern metadata`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`DATE_PATTERN_DATE_TOKENS`}),`, `,(0,c.jsx)(t.code,{children:`DATE_PATTERN_TIME_TOKENS`}),`, `,(0,c.jsx)(t.code,{children:`DATE_PATTERN_TOKENS`}),`, `,(0,c.jsx)(t.code,{children:`DATE_PATTERN_TOKEN_RE`})]})]})]})]}),`
|
|
406
413
|
`,(0,c.jsxs)(t.p,{children:[`Соответствующие types (`,(0,c.jsx)(t.code,{children:`DateFormatPreset`}),`, `,(0,c.jsx)(t.code,{children:`FormatDateOptions`}),`, range/period/education types и parse options) экспортируются из того же `,(0,c.jsx)(t.code,{children:`/formatters`}),` entrypoint.`]}),`
|
|
407
414
|
`,(0,c.jsx)(t.h3,{id:`каталог-публичных-типов`,children:`Каталог публичных типов`}),`
|
|
408
415
|
`,(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:`Parsing и format`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`DateInputSource`}),`, `,(0,c.jsx)(t.code,{children:`ParsedDateValue`}),`, `,(0,c.jsx)(t.code,{children:`DateFormatPattern`}),`, `,(0,c.jsx)(t.code,{children:`DateFormatStyle`}),`, `,(0,c.jsx)(t.code,{children:`DateFormatPrecision`}),`, `,(0,c.jsx)(t.code,{children:`DateFormatPreset`}),`, `,(0,c.jsx)(t.code,{children:`DateFormatPresetConfig`}),`, `,(0,c.jsx)(t.code,{children:`FormatDateOptions`}),`, `,(0,c.jsx)(t.code,{children:`ParseDateByPatternOptions`}),`, `,(0,c.jsx)(t.code,{children:`ParseDateByFormatOptions`}),`, `,(0,c.jsx)(t.code,{children:`ResolveDateFormatPresetOptions`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Диапазоны`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`NullableDateRange`}),`, `,(0,c.jsx)(t.code,{children:`DateRange`}),`, `,(0,c.jsx)(t.code,{children:`DateRangeInput`}),`, `,(0,c.jsx)(t.code,{children:`DateRangeTimeMode`}),`, `,(0,c.jsx)(t.code,{children:`NormalizeDateRangeOptions`}),`, `,(0,c.jsx)(t.code,{children:`DateRangeReferenceContext`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Периоды`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`CalendarPeriod`}),`, `,(0,c.jsx)(t.code,{children:`CalendarPeriodOptions`}),`, `,(0,c.jsx)(t.code,{children:`CalendarPeriodSelectionMode`}),`, `,(0,c.jsx)(t.code,{children:`CalendarWeekEndDay`}),`, `,(0,c.jsx)(t.code,{children:`CalendarPeriodDateBounds`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Учебный календарь`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`EducationDateKey`}),`, `,(0,c.jsx)(t.code,{children:`EducationYearRange`}),`, `,(0,c.jsx)(t.code,{children:`EducationWeekRange`})]})]})]})]}),`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.js";function o(e){let t={a:`a`,code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,table:`table`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation Lib/API/Formatters/Pipeline`}),`
|
|
2
2
|
`,(0,c.jsx)(t.h1,{id:`formatter-pipeline`,children:`Formatter pipeline`}),`
|
|
3
3
|
`,(0,c.jsx)(t.p,{children:`Formatter pipeline — конфигурируемая последовательность преобразований значения ячейки. Она умеет:`}),`
|
|
4
4
|
`,(0,c.jsxs)(t.ul,{children:[`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.js";function o(e){let t={a:`a`,code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,table:`table`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation Lib/API/Formulas`}),`
|
|
2
2
|
`,(0,c.jsx)(t.h1,{id:`табличные-формулы`,children:`Табличные формулы`}),`
|
|
3
3
|
`,(0,c.jsxs)(t.p,{children:[`Модуль `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/formulas`}),` предоставляет безопасную инфраструктуру для заранее написанных клиентских формул таблицы.`]}),`
|
|
4
4
|
`,(0,c.jsx)(t.p,{children:`Формула получает значения других полей текущей строки, выполняет синхронный расчёт и возвращает конечное JavaScript-число. Например, она может вычислить сумму, разницу, отношение или процент для calculated-колонки.`}),`
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.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 API/WebSocket`}),`
|
|
2
|
+
`,(0,c.jsxs)(t.h1,{id:`websocket-transport-через-ryuzaki13react-foundation-apiwebsocket`,children:[`WebSocket transport через `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-api/websocket`})]}),`
|
|
3
|
+
`,(0,c.jsx)(t.p,{children:`Entrypoint содержит только предметно-независимый transport lifecycle:`}),`
|
|
4
|
+
`,(0,c.jsxs)(t.ul,{children:[`
|
|
5
|
+
`,(0,c.jsx)(t.li,{children:`один активный socket;`}),`
|
|
6
|
+
`,(0,c.jsx)(t.li,{children:`bounded exponential reconnect с jitter;`}),`
|
|
7
|
+
`,(0,c.jsx)(t.li,{children:`наблюдаемый connection snapshot;`}),`
|
|
8
|
+
`,(0,c.jsxs)(t.li,{children:[`проверку браузерного `,(0,c.jsx)(t.code,{children:`Origin`}),` на серверном upgrade boundary.`]}),`
|
|
9
|
+
`]}),`
|
|
10
|
+
`,(0,c.jsx)(t.p,{children:`Доменный event envelope, авторизация, подписки, replay/resync и обновление TanStack Query принадлежат host-приложению.`}),`
|
|
11
|
+
`,(0,c.jsx)(t.h2,{id:`управляемое-соединение`,children:`Управляемое соединение`}),`
|
|
12
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`import { createManagedWebSocket } from "@ryuzaki13/react-foundation-api/websocket";
|
|
13
|
+
|
|
14
|
+
const connection = createManagedWebSocket({
|
|
15
|
+
url: () => new URL("/ws/events", window.location.href).href.replace(/^http/, "ws"),
|
|
16
|
+
onMessage(event) {
|
|
17
|
+
console.log(event.data);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
const unsubscribe = connection.subscribe(() => {
|
|
22
|
+
console.log(connection.getSnapshot());
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
connection.connect();
|
|
26
|
+
connection.stop();
|
|
27
|
+
unsubscribe();
|
|
28
|
+
`})}),`
|
|
29
|
+
`,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`send`}),` возвращает `,(0,c.jsx)(t.code,{children:`false`}),`, если socket ещё не открыт. Normal close `,(0,c.jsx)(t.code,{children:`1000`}),` и policy violation `,(0,c.jsx)(t.code,{children:`1008`}),` по умолчанию не запускают reconnect; это можно переопределить через `,(0,c.jsx)(t.code,{children:`reconnect.shouldReconnect`}),`.`]}),`
|
|
30
|
+
`,(0,c.jsxs)(t.p,{children:[`В SSR `,(0,c.jsx)(t.code,{children:`WebSocket`}),` обычно отсутствует. Создавайте соединение только в браузерном lifecycle либо передайте совместимый `,(0,c.jsx)(t.code,{children:`socketFactory`}),`.`]}),`
|
|
31
|
+
`,(0,c.jsx)(t.h2,{id:`origin-policy-на-upgrade`,children:`Origin policy на upgrade`}),`
|
|
32
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`import { evaluateWebSocketRequestOrigin } from "@ryuzaki13/react-foundation-api/websocket";
|
|
33
|
+
|
|
34
|
+
const decision = evaluateWebSocketRequestOrigin(request);
|
|
35
|
+
if (!decision.allowed) return new Response("Forbidden", { status: 403 });
|
|
36
|
+
`})}),`
|
|
37
|
+
`,(0,c.jsxs)(t.p,{children:[`По умолчанию обязателен `,(0,c.jsx)(t.code,{children:`Origin`}),`, равный origin request URL. За reverse proxy следует сохранять внешний `,(0,c.jsx)(t.code,{children:`Host`}),` и protocol; альтернативные origins передаются только явным allowlist. `,(0,c.jsx)(t.code,{children:`allowMissingOrigin`}),` предназначен для отдельно доверенных non-browser clients и по умолчанию выключен.`]})]})}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-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.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,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.js";function o(e){let t={a:`a`,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 API/Query/Persisted Records`}),`
|
|
2
2
|
`,(0,c.jsxs)(t.h1,{id:`сохранённые-записи-через-ryuzaki13react-foundation-apipersisted`,children:[`Сохранённые записи через `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-api/persisted`})]}),`
|
|
3
3
|
`,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`persisted`}),` — специализированный слой поверх TanStack Query для данных, которые пользователь сохраняет и позднее восстанавливает: presets, variants, view configs и другие versioned records.`]}),`
|
|
4
4
|
`,(0,c.jsxs)(t.p,{children:[`Слово `,(0,c.jsx)(t.code,{children:`persisted`}),` здесь означает backend-сущности «сохранённая запись». Это не то же самое, что persistence TanStack Query cache в IndexedDB.`]}),`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.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/Interaction/Context Menu State`}),`
|
|
2
2
|
`,(0,c.jsx)(t.h1,{id:`состояние-и-anchors-контекстного-меню`,children:`Состояние и anchors контекстного меню`}),`
|
|
3
3
|
`,(0,c.jsx)(t.p,{children:`Модуль описывает открытое/закрытое состояние контекстного меню, источник открытия и два вида anchor: DOM element или экранная точка. Также он создаёт virtual anchor для Floating UI.`}),`
|
|
4
4
|
`,(0,c.jsx)(t.p,{children:`Модуль не содержит React hook и не рисует меню.`}),`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.js";function o(e){let t={a:`a`,code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,table:`table`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation Lib/API/Copy`}),`
|
|
2
2
|
`,(0,c.jsx)(t.h1,{id:`копирование-текста`,children:`Копирование текста`}),`
|
|
3
3
|
`,(0,c.jsxs)(t.p,{children:[`Модуль `,(0,c.jsx)(t.code,{children:`copy`}),` содержит React hooks для копирования текста в системный буфер обмена, чтения текста из DOM-элемента и показа короткого состояния «скопировано».`]}),`
|
|
4
4
|
`,(0,c.jsx)(t.p,{children:`Основные сценарии:`}),`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.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/Media`}),`
|
|
2
2
|
`,(0,c.jsx)(t.h1,{id:`адаптивность-и-media-queries`,children:`Адаптивность и media queries`}),`
|
|
3
3
|
`,(0,c.jsxs)(t.p,{children:[`Модуль `,(0,c.jsx)(t.code,{children:`media`}),` содержит общий низкоуровневый контракт адаптивности для React-приложений:`]}),`
|
|
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-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.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-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.js";function o(e){let t={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 API/Orchestration/Async Tasks`}),`
|
|
2
2
|
`,(0,c.jsxs)(t.h1,{id:`асинхронные-задачи-через-ryuzaki13react-foundation-apiasync`,children:[`Асинхронные задачи через `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-api/async`})]}),`
|
|
3
3
|
`,(0,c.jsx)(t.p,{children:`Модуль запускает независимые Promise-задачи, сохраняет связь результата с исходным элементом и формирует удобную сводку для UI/логов.`}),`
|
|
4
4
|
`,(0,c.jsx)(t.h2,{id:`какой-runner-выбрать`,children:`Какой runner выбрать`}),`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.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 API/SAP/Transport Requests`}),`
|
|
2
2
|
`,(0,c.jsxs)(t.h1,{id:`sap-transport-requests-через-ryuzaki13react-foundation-apitransport`,children:[`SAP transport requests через `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-api/transport`})]}),`
|
|
3
3
|
`,(0,c.jsx)(t.p,{children:`Модуль получает transport requests текущего пользователя из SAP UI2 OData endpoints и нормализует workbench/customizing records.`}),`
|
|
4
4
|
`,(0,c.jsxs)(t.blockquote,{children:[`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.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`}),` собирает клиентскую диагностику ошибки в
|
|
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-8
|
|
|
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:[
|
|
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 и предоставляет
|
|
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-8
|
|
|
33
37
|
→ нормализация + diagnostics + breadcrumbs
|
|
34
38
|
→ ErrorReportDraft(status = pending)
|
|
35
39
|
→ sessionStorage, максимум 10 drafts
|
|
36
|
-
→
|
|
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-
|
|
63
|
-
__APP_BUILD_ID__: JSON.stringify(process.env.
|
|
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`}),` и
|
|
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.
|
|
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:`Возвращаемый массив является
|
|
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.
|
|
193
|
-
`,(0,c.jsxs)(t.p,{children:[`Код не читает `,(0,c.jsx)(t.code,{children:`input.value`})
|
|
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.
|
|
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`}),`
|
|
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:[`Сохраняются
|
|
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,
|
|
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:[`
|
|
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`}),`.
|
|
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 и
|
|
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:`
|
|
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:`
|
|
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.
|
|
403
|
-
`,(0,c.
|
|
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-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.js";function o(e){let t={a:`a`,code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,table:`table`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation API/OData/OData V2 and SAP Gateway`}),`
|
|
2
2
|
`,(0,c.jsx)(t.h1,{id:`odata-v2-и-sap-gateway`,children:`OData V2 и SAP Gateway`}),`
|
|
3
3
|
`,(0,c.jsxs)(t.p,{children:[`Entrypoint `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-api/odata`}),` — основной API-модуль для browser-приложений, работающих с SAP Gateway и OData V2.`]}),`
|
|
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-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.js";function o(e){let t={a:`a`,blockquote:`blockquote`,code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,h4:`h4`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,strong:`strong`,table:`table`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation Lib/Data/Table and Tree Table`}),`
|
|
2
2
|
`,(0,c.jsx)(t.h1,{id:`table-и-tree-table`,children:`Table и Tree Table`}),`
|
|
3
3
|
`,(0,c.jsx)(t.p,{children:`Эта страница описывает два связанных публичных модуля:`}),`
|
|
4
4
|
`,(0,c.jsxs)(t.ul,{children:[`
|