@ryuzaki13/react-foundation-ui 1.12.4 → 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/storybook-static/assets/{Badge-D34jY6Gi.js → Badge-DTLs_n8R.js} +1 -1
- package/storybook-static/assets/{Badge.stories-BviYPkwq.js → Badge.stories-CovEhEDD.js} +1 -1
- package/storybook-static/assets/{BadgeList-D1opuTdU.js → BadgeList-DjTg_9cc.js} +1 -1
- package/storybook-static/assets/{BarcodeScannerDialog.stories-CGdzqa8a.js → BarcodeScannerDialog.stories-C5rK3W2F.js} +1 -1
- package/storybook-static/assets/{Button-TDS2LnG9.js → Button-DMPKoI7-.js} +1 -1
- package/storybook-static/assets/{Button-GlOmKXxP.js → Button-xWt087rv.js} +1 -1
- package/storybook-static/assets/{Button.stories-DZc3uOlJ.js → Button.stories-ClLOimQw.js} +1 -1
- package/storybook-static/assets/{CalendarView-BZUnLT-3.js → CalendarView-C8D421Nm.js} +1 -1
- package/storybook-static/assets/{CheckBox-CLBqWi7z.js → CheckBox-ByaB_AWI.js} +1 -1
- package/storybook-static/assets/{CheckBox-nJdvYZhM.js → CheckBox-CHNYWbr9.js} +1 -1
- package/storybook-static/assets/{CheckBox.stories-CYOLxCPI.js → CheckBox.stories-DMFiXHJV.js} +1 -1
- package/storybook-static/assets/{Color-6AOWCN3U-D18f6KeQ.js → Color-6AOWCN3U-CP9Nd4vj.js} +1 -1
- package/storybook-static/assets/{ContextMenu-sE3MNnCR.js → ContextMenu-68QC2EAu.js} +1 -1
- package/storybook-static/assets/{ContextMenu-CQSxlBWi.js → ContextMenu-DSg2_txz.js} +1 -1
- package/storybook-static/assets/{ContextMenu.stories-BLY5Ujpn.js → ContextMenu.stories-C8CldSPG.js} +1 -1
- package/storybook-static/assets/{CustomOptionButton-Dskg5LhM.js → CustomOptionButton-xAusSjnU.js} +1 -1
- package/storybook-static/assets/{DateInput-Bzodnz-9.js → DateInput-2ESK1wDg.js} +1 -1
- package/storybook-static/assets/{DateInput-C1ICOvMl.js → DateInput-DOuoBC8j.js} +1 -1
- package/storybook-static/assets/{DateInput.stories-BzVMkjA3.js → DateInput.stories-D5t5QnTV.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect-D4nDDXcv.js → DateRangePresetSelect-C8k5BN7p.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect-Br2__e-_.js → DateRangePresetSelect-CD2n8zWv.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect.stories-BGjTzO7y.js → DateRangePresetSelect.stories-COktncMK.js} +1 -1
- package/storybook-static/assets/{Detail-0FlptHQe.js → Detail-oc_R1sEu.js} +1 -1
- package/storybook-static/assets/{Detail.stories-BxrUGFvI.js → Detail.stories-1XrWL_s3.js} +1 -1
- package/storybook-static/assets/{Dialog-DkLXNVzZ.js → Dialog-CLTQa6Kw.js} +1 -1
- package/storybook-static/assets/{Dialog-BfPgyIcU.js → Dialog-CfnOq258.js} +1 -1
- package/storybook-static/assets/{Dialog.stories-D949y8s0.js → Dialog.stories-D5PPDse-.js} +1 -1
- package/storybook-static/assets/{Disclosure-Cyh5B4JR.js → Disclosure-ByNKoHvP.js} +1 -1
- package/storybook-static/assets/{Disclosure.stories-CvuTZlF_.js → Disclosure.stories-CBdZfYjY.js} +1 -1
- package/storybook-static/assets/{DisclosureGroup-Wae8qmS8.js → DisclosureGroup-D3XWBJXQ.js} +1 -1
- package/storybook-static/assets/{DocsRenderer-JROSPFPF-CGjmbQhP.js → DocsRenderer-JROSPFPF-gxuFq2Pd.js} +1 -1
- package/storybook-static/assets/{DropZone-fvEwB1kz.js → DropZone-BxLXKfqY.js} +1 -1
- package/storybook-static/assets/{DropZone-BFX_F_oU.js → DropZone-C6xiwfG-.js} +1 -1
- package/storybook-static/assets/{DropZone.stories-BKXYN11y.js → DropZone.stories-BpRrpoAa.js} +1 -1
- package/storybook-static/assets/{DropdownMenu-eld8h4zt.js → DropdownMenu-CmzYr9oI.js} +1 -1
- package/storybook-static/assets/{ExpandableActionPanel-CsulBc_X.js → ExpandableActionPanel-YeKyHEkM.js} +1 -1
- package/storybook-static/assets/{ExpandableActionPanel.stories-DorKO7Y7.js → ExpandableActionPanel.stories-D2Kz4YaV.js} +1 -1
- package/storybook-static/assets/{Flex-Bos8Qsbf.js → Flex-QTek1QSS.js} +1 -1
- package/storybook-static/assets/{Flex.stories-uMO88BD-.js → Flex.stories-DbQJjxyG.js} +1 -1
- package/storybook-static/assets/{FloatingPopover-Cc604wgC.js → FloatingPopover-Z_pT8RTr.js} +1 -1
- package/storybook-static/assets/{FormattedTableCell-BBvQf7q4.js → FormattedTableCell-sTTQO4a-.js} +3 -3
- package/storybook-static/assets/{Grid-DEWQZjLv.js → Grid-BplOAlTQ.js} +1 -1
- package/storybook-static/assets/{Grid.stories-BLE0L0zk.js → Grid.stories-3z3Ey-d3.js} +1 -1
- package/storybook-static/assets/{ImageCropper.stories-BW7Ozi0T.js → ImageCropper.stories-CRS_mYqv.js} +1 -1
- package/storybook-static/assets/{ImageRenderer-BejoR1lv.js → ImageRenderer-B-6CUiXT.js} +1 -1
- package/storybook-static/assets/{ImageRenderer.stories-DP10_K4c.js → ImageRenderer.stories-r1qsDpQo.js} +1 -1
- package/storybook-static/assets/{ImageView.stories-Bw13WxSu.js → ImageView.stories-JTwPOvTV.js} +1 -1
- package/storybook-static/assets/{ImageViewer.stories-B0crB6gM.js → ImageViewer.stories-EXX-1Tq3.js} +2 -2
- package/storybook-static/assets/{ImageViewerRuntime-B7phOl_8.js → ImageViewerRuntime-D9mEsiiW.js} +1 -1
- package/storybook-static/assets/{Input-B5POVG-l.js → Input-o_oY36pr.js} +1 -1
- package/storybook-static/assets/{Input-DiBxtZDI.js → Input-t9m3sVNs.js} +1 -1
- package/storybook-static/assets/{Input.stories-BBu0KoQ3.js → Input.stories-BWFSZL_N.js} +1 -1
- package/storybook-static/assets/{InputDateTime-CF1I9kaz.js → InputDateTime-lu3pzt-n.js} +1 -1
- package/storybook-static/assets/{InputDateTime.stories-COzwJ_xA.js → InputDateTime.stories-DhWcuSxT.js} +1 -1
- package/storybook-static/assets/{InputFile-Czxpud9Y.js → InputFile-B5JzTYSK.js} +1 -1
- package/storybook-static/assets/{InputFile-DV4LbiGx.js → InputFile-DR6qGFRh.js} +1 -1
- package/storybook-static/assets/{InputFile.stories-C4UrANxS.js → InputFile.stories-BDkbSn8C.js} +1 -1
- package/storybook-static/assets/{InputFiles-B93BMp0i.js → InputFiles-CQU1IgFq.js} +1 -1
- package/storybook-static/assets/{InputFiles-B_WMnvSr.js → InputFiles-D1flVl2f.js} +1 -1
- package/storybook-static/assets/{InputFiles.stories-CTun1-En.js → InputFiles.stories-DyNBsbIL.js} +1 -1
- package/storybook-static/assets/{InputFilesList-ChdmhHw0.js → InputFilesList-DcnsEkjI.js} +1 -1
- package/storybook-static/assets/{InputImage-xpaTZ7wq.js → InputImage-DyS8prBK.js} +1 -1
- package/storybook-static/assets/{InputImage-DR7Ed0Vu.js → InputImage-trdfpmT-.js} +1 -1
- package/storybook-static/assets/{InputImage.stories-DTvBlwrQ.js → InputImage.stories-DEk-50bc.js} +1 -1
- package/storybook-static/assets/{InteractiveComponents-BYjJFrHD.js → InteractiveComponents-CJQb2Kqe.js} +1 -1
- package/storybook-static/assets/{InteractiveComponents.stories-CTbNtPbV.js → InteractiveComponents.stories-A25AcgXi.js} +1 -1
- package/storybook-static/assets/{LayoutPicker-CInTlBMe.js → LayoutPicker-Cyr59f6W.js} +1 -1
- package/storybook-static/assets/{LayoutPicker-BIB30zdc.js → LayoutPicker-DmMkNRCR.js} +1 -1
- package/storybook-static/assets/{LayoutPicker.stories-DQ_lYy0l.js → LayoutPicker.stories-BN6ES2FK.js} +1 -1
- package/storybook-static/assets/{Listbox-hDPss1Hf.js → Listbox-BL6exIiK.js} +1 -1
- package/storybook-static/assets/{Listbox-D4HihpJQ.js → Listbox-CpOkTSus.js} +1 -1
- package/storybook-static/assets/{Listbox.stories-CzP9_sD-.js → Listbox.stories-CuJAPNNF.js} +1 -1
- package/storybook-static/assets/{Modal-DUYVQZu5.js → Modal-0h4g26vg.js} +1 -1
- package/storybook-static/assets/{Modal-LmkJ7CHS.js → Modal-BDbbUiVP.js} +1 -1
- package/storybook-static/assets/{Modal.stories-BGui6fT5.js → Modal.stories-BJTQMX6r.js} +1 -1
- package/storybook-static/assets/{ModalManagerProvider-DOLfRB2E.js → ModalManagerProvider-CKUlkLye.js} +1 -1
- package/storybook-static/assets/{MultiSelect-BuWgggHX.js → MultiSelect-DOFS5VMw.js} +1 -1
- package/storybook-static/assets/{MultiSelect-CWIM68HY.js → MultiSelect-jTomHycE.js} +1 -1
- package/storybook-static/assets/{MultiSelect.stories-C45HfpYj.js → MultiSelect.stories-KUrIgYcH.js} +1 -1
- package/storybook-static/assets/{NoData-BFixErI8.js → NoData-Cg-72gvD.js} +1 -1
- package/storybook-static/assets/{NotificationsHost-DSFid0wi.js → NotificationsHost-BGUy6Nwm.js} +1 -1
- package/storybook-static/assets/{NotificationsHost.stories-BRb4w9We.js → NotificationsHost.stories-UqcdAxbV.js} +1 -1
- package/storybook-static/assets/{ODataMultiSelect-BWAo87rZ.js → ODataMultiSelect-ogSmpbiq.js} +1 -1
- package/storybook-static/assets/{ODataMultiSelect.stories-9JY7dCz7.js → ODataMultiSelect.stories-CFSWPA1t.js} +1 -1
- package/storybook-static/assets/{ODataSelect-CNaZGImQ.js → ODataSelect-XrSMzI_c.js} +1 -1
- package/storybook-static/assets/{ODataSelect.stories-DmUKhDNz.js → ODataSelect.stories-DzQ8kx1B.js} +1 -1
- package/storybook-static/assets/{ODataTreeMultiSelect-C_qAbPca.js → ODataTreeMultiSelect-Bd6N1nUD.js} +1 -1
- package/storybook-static/assets/{ODataTreeMultiSelect.stories-CEfHC6t_.js → ODataTreeMultiSelect.stories-BL3LegRZ.js} +1 -1
- package/storybook-static/assets/{ODataTreeSelect-BSFpOn9W.js → ODataTreeSelect-LP9MrILe.js} +1 -1
- package/storybook-static/assets/{ODataTreeSelect.stories-caU47o0f.js → ODataTreeSelect.stories-B1xaZzaX.js} +1 -1
- package/storybook-static/assets/{OneStepScroller-Bs7JuMLb.js → OneStepScroller-Ccn3TcUI.js} +1 -1
- package/storybook-static/assets/{Option-CSnKA-Xd.js → Option-CdzPub1C.js} +1 -1
- package/storybook-static/assets/{OptionButton-DIGMZVy9.js → OptionButton-BmRyJTuO.js} +1 -1
- package/storybook-static/assets/PeriodSelect-BngzAU_C.js +5 -0
- package/storybook-static/assets/{PeriodSelect-Cd0ESjew.js → PeriodSelect-kQAjEWSH.js} +1 -1
- package/storybook-static/assets/{PeriodSelect.stories-Dir9DbtU.js → PeriodSelect.stories-BRvyn_JH.js} +1 -1
- package/storybook-static/assets/{PickerTriggerActions-CJMxsesn.js → PickerTriggerActions-C0nuR9kw.js} +1 -1
- package/storybook-static/assets/{Popover-CRhHLoew.js → Popover-CsDztf-o.js} +1 -1
- package/storybook-static/assets/{Popover-D6-lu_yc.js → Popover-GYtSL_1f.js} +1 -1
- package/storybook-static/assets/{Popover.stories-BCMMP7px.js → Popover.stories-Bqt_2L3Y.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput-BlRfDcUL.js → PresetRangeDateInput-BSssho5H.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput-CrZgAMBR.js → PresetRangeDateInput-C9G9Gebd.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput.stories-Zl5sur2x.js → PresetRangeDateInput.stories-CwdMXBFw.js} +1 -1
- package/storybook-static/assets/{PresetSelect-wNDulYVW.js → PresetSelect-BPsCLuct.js} +1 -1
- package/storybook-static/assets/{README-CDaOPhz8.js → README-5RP00KZZ.js} +1 -1
- package/storybook-static/assets/{README-DP8Jhu4s.js → README-9XRn3-ED.js} +1 -1
- package/storybook-static/assets/{README-D93oAq59.js → README-BIqQ7jYg.js} +1 -1
- package/storybook-static/assets/{README-CN8Y6HC2.js → README-BLXGXOo5.js} +1 -1
- package/storybook-static/assets/{README-BEZWi2C2.js → README-BOBlSnDn.js} +1 -1
- package/storybook-static/assets/{README-DKMmI4G2.js → README-BRpdVUr9.js} +1 -1
- package/storybook-static/assets/{README-CsYG82LK.js → README-BXb7J1i8.js} +1 -1
- package/storybook-static/assets/{README-CRga2fgb.js → README-BYHSzLwv.js} +1 -1
- package/storybook-static/assets/{README-GIOQUZhr.js → README-Ba0tB6ZN.js} +1 -1
- package/storybook-static/assets/{README-8YjqwqnH.js → README-Bc8lHbXV.js} +1 -1
- package/storybook-static/assets/{README-Cf-es484.js → README-BhoxLtlr.js} +9 -2
- package/storybook-static/assets/{README-Des11J57.js → README-BmzSVH7U.js} +1 -1
- package/storybook-static/assets/{README-C9cYGWK6.js → README-BpmlhmtG.js} +1 -1
- package/storybook-static/assets/README-Bq38hDzk.js +37 -0
- package/storybook-static/assets/{README-B_NLFfpp.js → README-C07t0NIU.js} +1 -1
- package/storybook-static/assets/{README-z6dqmkvs.js → README-C53FAkdN.js} +1 -1
- package/storybook-static/assets/{README-BdNMeUCv.js → README-C7j7n7jq.js} +1 -1
- package/storybook-static/assets/{README-B7i5ChbN.js → README-CJtOh4Sd.js} +1 -1
- package/storybook-static/assets/{README-COQcoKT9.js → README-CV61J_JK.js} +1 -1
- package/storybook-static/assets/{README-C3jNJJpP.js → README-CVql_W36.js} +1 -1
- package/storybook-static/assets/{README-Cfj0BoXs.js → README-CXq89IOI.js} +1 -1
- package/storybook-static/assets/{README-D35QrmDs.js → README-Ckp4sw5f.js} +1 -1
- package/storybook-static/assets/{README-BRKMZAGf.js → README-CxDM046q.js} +107 -28
- package/storybook-static/assets/{README-DFlnpjEv.js → README-D-fVNtRb.js} +1 -1
- package/storybook-static/assets/{README-Ch7v2uGS.js → README-D43Puppu.js} +1 -1
- package/storybook-static/assets/README-D67Ndgh9.js +121 -0
- package/storybook-static/assets/{README-j3HSmhET.js → README-DFCutGv3.js} +1 -1
- package/storybook-static/assets/{README-B6h01Pmu.js → README-DQysVKmM.js} +1 -1
- package/storybook-static/assets/{README-DPYg_Acv.js → README-DS_nuTod.js} +1 -1
- package/storybook-static/assets/{README-iF0ok9Vi.js → README-DXBpQ2ho.js} +1 -1
- package/storybook-static/assets/{README-BZdQ6muO.js → README-DXRNhATk.js} +1 -1
- package/storybook-static/assets/{README-CR0j-jFh.js → README-D_a06RNK.js} +1 -1
- package/storybook-static/assets/{README-BRfBuhla.js → README-DcWifa4y.js} +1 -1
- package/storybook-static/assets/{README-LyF6lMIs.js → README-Del1wUfr.js} +1 -1
- package/storybook-static/assets/{README-DIgOgGI7.js → README-Do7nnQ_n.js} +1 -1
- package/storybook-static/assets/{README-BT0TE4lM.js → README-DoPWzeQH.js} +1 -1
- package/storybook-static/assets/{README-Rjv-h87w.js → README-DqbwD6RO.js} +4 -2
- package/storybook-static/assets/{README-Csisl067.js → README-DtQcSyrT.js} +37 -8
- package/storybook-static/assets/{README-BB-q729e.js → README-Dz8_KWoz.js} +1 -1
- package/storybook-static/assets/{README-CaQ_OfNG.js → README-GLir3V8b.js} +1 -1
- package/storybook-static/assets/{README-CcRUd05A.js → README-HY5c2Bbn.js} +1 -1
- package/storybook-static/assets/{README-CJy-3cCT.js → README-PcQNwv17.js} +1 -1
- package/storybook-static/assets/{README-DC6IHyBW.js → README-Tw0ZHHwr.js} +1 -1
- package/storybook-static/assets/{README-Bubi5gTJ.js → README-V9DD9H9z.js} +1 -1
- package/storybook-static/assets/{README-lN1Ljv0O.js → README-XW0y0mGh.js} +1 -1
- package/storybook-static/assets/{README-BWVWcDb4.js → README-Y1Smckdh.js} +1 -1
- package/storybook-static/assets/{README-D55OX9pN.js → README-ZguU3X5y.js} +1 -1
- package/storybook-static/assets/{README-D65oLCnS.js → README-e8EWTIws.js} +1 -1
- package/storybook-static/assets/{README-CCHc0Xyu.js → README-n1zI-vYE.js} +45 -1
- package/storybook-static/assets/{README-r-4LRVav.js → README-oKCgmTdw.js} +12 -4
- package/storybook-static/assets/{README-BJ7S9lBU.js → README-pexCW3yI.js} +1 -1
- package/storybook-static/assets/{README-Bdm71C27.js → README-vDg-39Yq.js} +1 -1
- package/storybook-static/assets/{README-CaM6cf-O.js → README-wKqwiHb4.js} +1 -1
- package/storybook-static/assets/{RadioButton-SDIHkMqE.js → RadioButton-DGT616TU.js} +1 -1
- package/storybook-static/assets/{RadioButton-CCR0zu3W.js → RadioButton-DvDDf9wn.js} +1 -1
- package/storybook-static/assets/{RadioButton.stories-CWlAzbso.js → RadioButton.stories-BSA2eNrW.js} +1 -1
- package/storybook-static/assets/{RadioGroup-CvMAbZis.js → RadioGroup-C_ZapH6C.js} +1 -1
- package/storybook-static/assets/{RadioGroup-B8dC3Beb.js → RadioGroup-Cj-zQisA.js} +1 -1
- package/storybook-static/assets/{RadioGroup.stories-B7g9iK7V.js → RadioGroup.stories-B6HK1X-8.js} +1 -1
- package/storybook-static/assets/{Scrollable-Duhb4hgF.js → Scrollable-DCvN6Jjw.js} +1 -1
- package/storybook-static/assets/{Select-B-zeXEgK.js → Select-DPdZSw3l.js} +1 -1
- package/storybook-static/assets/{Select-HfN2ur_G.js → Select-DY9-upm8.js} +1 -1
- package/storybook-static/assets/{Select.stories-B9ulZxEn.js → Select.stories-CZ_QR5HG.js} +1 -1
- package/storybook-static/assets/{SerializableSelect-CnOm3Egr.js → SerializableSelect-11vTkd0H.js} +1 -1
- package/storybook-static/assets/{SerializableSelect.stories-Ct4iR6JB.js → SerializableSelect.stories-BguIknSO.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput-CoW7Kbyn.js → SingleDateTimeInput-BoGhy8Ht.js} +1 -1
- package/storybook-static/assets/SingleDateTimeInput-DCsz6UCV.js +1 -0
- package/storybook-static/assets/{SingleDateTimeInput.stories-CSMgGAWO.js → SingleDateTimeInput.stories-DxuSYUFA.js} +1 -1
- package/storybook-static/assets/{Slider-N8mF8qmG.js → Slider-CysM6SsH.js} +1 -1
- package/storybook-static/assets/{Slider-B8CLVfcP.js → Slider-OjWEFAVX.js} +1 -1
- package/storybook-static/assets/{Slider.stories-KBmRK3s8.js → Slider.stories-D9yfMGAr.js} +1 -1
- package/storybook-static/assets/{SliderInput-BDJi-cgo.js → SliderInput-CI_NLQ0q.js} +1 -1
- package/storybook-static/assets/{SliderInput-BkiUt9jK.js → SliderInput-DBTFSE4e.js} +1 -1
- package/storybook-static/assets/{SliderInput.stories-BYJemRSZ.js → SliderInput.stories-D0oX3RFL.js} +1 -1
- package/storybook-static/assets/{Sortable-B9KSdQoM.js → Sortable-wMgs80Np.js} +1 -1
- package/storybook-static/assets/{Sortable.stories-DkgQcmlF.js → Sortable.stories-CzLFp8Yi.js} +1 -1
- package/storybook-static/assets/{Splitter-RwtbhIP_.js → Splitter-BKw_fa4-.js} +1 -1
- package/storybook-static/assets/{Splitter.stories-C7WMeiBU.js → Splitter.stories-BESoJ6o1.js} +1 -1
- package/storybook-static/assets/{StateSelect-Cu3-TJjY.js → StateSelect-BO-jFCLn.js} +1 -1
- package/storybook-static/assets/StateSelect-BwNBFERr.js +4 -0
- package/storybook-static/assets/{StateSelect.stories-C1SXNtZm.js → StateSelect.stories-BK7SyuXQ.js} +1 -1
- package/storybook-static/assets/{StringToggle.stories-CSWTlbeH.js → StringToggle.stories-A6pkEO-O.js} +1 -1
- package/storybook-static/assets/{Switch-CMm26s02.js → Switch-8JotpfFf.js} +1 -1
- package/storybook-static/assets/{Switch-C0VQpcAN.js → Switch-Ca3gnf5f.js} +1 -1
- package/storybook-static/assets/{Switch.stories-BdeMw5vh.js → Switch.stories-o3vvp8L8.js} +1 -1
- package/storybook-static/assets/{Table-BdN7l9nU.js → Table-C_IPJbR2.js} +1 -1
- package/storybook-static/assets/{Table.stories-n1jzcEtU.js → Table.stories-DOFEu7Ua.js} +1 -1
- package/storybook-static/assets/{Tabs-3QRIKQu4.js → Tabs-BLBo4OAv.js} +1 -1
- package/storybook-static/assets/{Tabs.stories-Br_vn86G.js → Tabs.stories-RBnCQrM-.js} +1 -1
- package/storybook-static/assets/{TabsBox-oUhSAA8j.js → TabsBox-apqD4XLH.js} +1 -1
- package/storybook-static/assets/{TagInput-CXLkDkGR.js → TagInput-CSYOG896.js} +1 -1
- package/storybook-static/assets/{TagInput.stories-Oug-n_Cc.js → TagInput.stories-BnGuMi6T.js} +1 -1
- package/storybook-static/assets/{Text-EA5QyBz4.js → Text-mRhkARXu.js} +1 -1
- package/storybook-static/assets/{Textarea-JWCJNKsl.js → Textarea-Covk__BL.js} +1 -1
- package/storybook-static/assets/{Textarea-BhnGClU1.js → Textarea-DS1hM5rM.js} +1 -1
- package/storybook-static/assets/{Textarea.stories-nyyWW7AG.js → Textarea.stories-BdpsMxDY.js} +1 -1
- package/storybook-static/assets/{TimePanel-CWnqPBjv.js → TimePanel-PDYyBCbF.js} +1 -1
- package/storybook-static/assets/{TimePanel.stories-C-iXXNjE.js → TimePanel.stories-BFS31y6L.js} +1 -1
- package/storybook-static/assets/{Toggle-DSSRTisC.js → Toggle-DTX4Q7y6.js} +1 -1
- package/storybook-static/assets/{Toggle-C_aM5aMQ.js → Toggle-zWHGLyKm.js} +1 -1
- package/storybook-static/assets/{Toggle.stories-mFCOmo4Y.js → Toggle.stories-fZ7WRE_7.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect-CyW6oUN_.js → TreeMultiSelect-BSZO9xe1.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect-CxOnGdzT.js → TreeMultiSelect-C4y6p4PX.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect.stories-CC1X33-d.js → TreeMultiSelect.stories-DXKBBf5r.js} +1 -1
- package/storybook-static/assets/{TreePickerBase-B5pChx5i.js → TreePickerBase-CMHFqHVa.js} +1 -1
- package/storybook-static/assets/{TreeSelect-LtUUGYjX.js → TreeSelect-DGXveWx3.js} +1 -1
- package/storybook-static/assets/{TreeSelect-PjRafYC5.js → TreeSelect-Dh5uT4_T.js} +1 -1
- package/storybook-static/assets/{TreeSelect.stories-kT556sYJ.js → TreeSelect.stories-Byy-mMTP.js} +1 -1
- package/storybook-static/assets/{TreeTable-MLb4c6PD.js → TreeTable-BN7J72I8.js} +1 -1
- package/storybook-static/assets/{TreeTable.stories-CAiwbwxz.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-DxyL_jCu.js → blocks-o5-z1BZu.js} +3 -3
- package/storybook-static/assets/{check-BXD_Pkw4.js → check-C4AaNZYo.js} +1 -1
- package/storybook-static/assets/{chevron-down-PsXs4TLU.js → chevron-down-DvNqUDlQ.js} +1 -1
- package/storybook-static/assets/{chevron-left-C4gxRcJZ.js → chevron-left-DjMG1A8Y.js} +1 -1
- package/storybook-static/assets/{chevron-right-BoNNSE4i.js → chevron-right-Mitq9JQN.js} +1 -1
- package/storybook-static/assets/{chunk-W22LQPXL-Bw8Gaqb1.js → chunk-W22LQPXL-DNwhYDee.js} +1 -1
- package/storybook-static/assets/{circle-alert-C0KskPN2.js → circle-alert-RsaUYk8p.js} +1 -1
- package/storybook-static/assets/{circle-check-BU7bRDDY.js → circle-check-Bf5GP89g.js} +1 -1
- package/storybook-static/assets/{components-BCyH0mtu.js → components-B4tZ3-vQ.js} +3 -3
- package/storybook-static/assets/{contextMenu-CI7IuUSN.js → contextMenu-Ftv13fjh.js} +1 -1
- package/storybook-static/assets/{defaultRenderers-Dinv2uRZ.js → defaultRenderers-CyUQG_f-.js} +1 -1
- package/storybook-static/assets/{download-Ba6RrPW1.js → download-BmjzCCZo.js} +1 -1
- package/storybook-static/assets/{floating-ui.react-CzenezcL.js → floating-ui.react-BY7cYh9B.js} +1 -1
- package/storybook-static/assets/formatters-DVE1YVNQ-CMsbb5-m.js +1 -0
- package/storybook-static/assets/{foundationApi-Cjni4JEg.js → foundationApi-C7zGaHuR.js} +4 -4
- package/storybook-static/assets/{foundationLib-C3-64Grv.js → foundationLib-CQpPkJlc.js} +1 -1
- package/storybook-static/assets/{hooks-DNb8U9od.js → hooks-DQXnNniA.js} +2 -2
- package/storybook-static/assets/iframe-B-sjM2X5.js +1 -0
- package/storybook-static/assets/{iframe-I7-gyNVJ.js → iframe-Cb11iJVP.js} +4 -4
- package/storybook-static/assets/{info-HJuo7Txr.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-BlAGWLfC.js → odataStoryFixtures-BddSr1SB.js} +1 -1
- package/storybook-static/assets/{react-DOm5uwVv.js → react-wmXnhrTV.js} +1 -1
- package/storybook-static/assets/{refresh-cw-CgbYtCzg.js → refresh-cw-BoUt7cjC.js} +1 -1
- package/storybook-static/assets/{settings-2-B96G1M3R.js → settings-2-BnEmfu4n.js} +1 -1
- package/storybook-static/assets/{sortable-CsGAvVat.js → sortable-BG6M9j0E.js} +1 -1
- package/storybook-static/assets/{syntaxhighlighter-QEQV7K2Y-CJHmYDVV.js → syntaxhighlighter-QEQV7K2Y-DTU-Nj55.js} +1 -1
- package/storybook-static/assets/{trash-2-NFv7s58u.js → trash-2-CEuSrdHe.js} +1 -1
- package/storybook-static/assets/{triangle-alert-DVmi0Yoe.js → triangle-alert-BB6HrHL-.js} +1 -1
- package/storybook-static/assets/{useODataSelectBase-DRX6eayS.js → useODataSelectBase-DiMVVy-k.js} +1 -1
- package/storybook-static/assets/{useODataTreeData-D7aS01Or.js → useODataTreeData-DiV_gN4z.js} +1 -1
- package/storybook-static/assets/{usePickerDefaultFilter-5Q1pAV4d.js → usePickerDefaultFilter-BMBLqfz8.js} +1 -1
- package/storybook-static/assets/{usePickerQuery-D5WukLFG.js → usePickerQuery-Dc3Jdhg0.js} +1 -1
- package/storybook-static/assets/{usePickerTriggerController-e8hbwGar.js → usePickerTriggerController-BjY_AiUm.js} +1 -1
- package/storybook-static/assets/validators-D82aYLRK.js +1 -0
- package/storybook-static/assets/{x-DlvQAqG5.js → x-CcdATVNL.js} +1 -1
- package/storybook-static/iframe.html +2 -2
- package/storybook-static/index.json +1 -1
- package/storybook-static/project.json +1 -1
- package/storybook-static/assets/PeriodSelect-DIIe0NfH.js +0 -5
- package/storybook-static/assets/README-C5s5K0h_.js +0 -324
- package/storybook-static/assets/SingleDateTimeInput-BmEpx1-W.js +0 -1
- package/storybook-static/assets/StateSelect-BrgGuYMY.js +0 -4
- package/storybook-static/assets/formatters-D33Uh3si-Df97arf9.js +0 -1
- package/storybook-static/assets/iframe-BHNt9Av8.js +0 -1
- package/storybook-static/assets/odata-6-rqoXfe.js +0 -1
- package/storybook-static/assets/odata-service-CWkHASdw-CXhFi03v.js +0 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"generatedAt":
|
|
1
|
+
{"generatedAt":1788959360680,"hasCustomBabel":false,"hasCustomWebpack":false,"hasStaticDirs":false,"hasStorybookEslint":false,"refCount":0,"metaFramework":{"name":"tanstack-react","packageName":"@tanstack/react-router","version":"1.170.32"},"knownPackages":{"testPackages":{"@chromatic-com/storybook":"5.3.0","@storybook/addon-vitest":"10.5.10","@testing-library/dom":"10.4.1","@testing-library/react":"16.3.3","@testing-library/user-event":"^14.6.1","@vitest/browser":"4.1.11","playwright":"1.62.1","vitest":"4.1.11"},"stateManagementPackages":{"zustand":"5.0.0"},"dataFetchingPackages":{"@tanstack/react-query":"5.101.4"},"routerPackages":{"@tanstack/react-router":"1.170.23"}},"hasRouterPackage":false,"packageManager":{"type":"npm","version":"11.7.0","agent":"npm","nodeLinker":"node_modules"},"preview":{"usesGlobals":false},"framework":{"name":"@storybook/react-vite","options":{}},"builder":"@storybook/builder-vite","renderer":"@storybook/react","portableStoriesFileCount":1,"applicationFileCount":9,"storybookVersion":"10.5.10","storybookVersionSpecifier":"^10.5.5","language":"typescript","storybookPackages":{"@storybook/react-vite":{"version":"10.5.10"},"storybook":{}},"addons":{"@chromatic-com/storybook":{"version":"5.3.0"},"@storybook/addon-docs":{"version":"10.5.10"},"@storybook/addon-a11y":{"version":"10.5.10"},"@storybook/addon-vitest":{"version":"10.5.10"}},"packageJsonType":"module"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{t}from"./react-BZJXY1be.js";import{n}from"./iframe-I7-gyNVJ.js";import{g as r,m as i}from"./odata-service-CWkHASdw-CXhFi03v.js";import{a,y as o}from"./formatters-D33Uh3si-Df97arf9.js";import{l as s,o as c}from"./DateInput-Bzodnz-9.js";import{n as l,t as u}from"./PresetSelect-wNDulYVW.js";function d(e){return typeof e==`string`&&y.has(e)}function f(e,t=v){let n=c(e,d,t),r=n.length>0?n:v,i=new Set(r);return v.filter(e=>i.has(e))}function p(e,t=_){return s(e,t)}function m({maxDayRangeDays:e,maxWeekRangeWeeks:t,labels:n}={}){let r=i(e),a=i(t);return _.map(e=>{let t={...e,label:n?.[e.id]??e.label};return e.id===`day`&&r!==void 0?{...t,maxRangeDays:r}:e.id===`week`&&a!==void 0?{...t,maxRangeDays:a*7}:t})}function h(e,t){let n=i(e.maxRangeDays);if(n===void 0||t===void 0)return!1;let r=a(t);return r!==null&&r>n}function g(e,t,n){if(t.length===0)return;let r=e===void 0?-1:t.findIndex(t=>t.id===e),i=r>=0?t[r]:void 0;return i&&!h(i,n)?i.id:(r>=0?t.slice(r+1):t).find(e=>!h(e,n))?.id??t.find(e=>!h(e,n))?.id}var _,v,y;function b(){return(b=e((()=>{o(),r(),_=Object.freeze([{id:`day`,label:`по дням`},{id:`week`,label:`по неделям`},{id:`month`,label:`по месяцам`},{id:`year`,label:`по годам`}]),v=Object.freeze([`day`,`week`,`month`,`year`]),y=new Set(_.map(e=>e.id))})))()}function x({value:e,onChange:t,options:n,labels:r,presetIds:i,dateRange:a,maxDayRangeDays:o,maxWeekRangeWeeks:s,...c}){let l=(0,S.useMemo)(()=>n??p(f(i),m({maxDayRangeDays:o,maxWeekRangeWeeks:s,labels:r})),[r,o,s,n,i]),d=(0,S.useMemo)(()=>g(e,l,a),[a,l,e]),_=(0,S.useRef)(null),v=(0,S.useEffectEvent)(()=>{if(d===void 0||d===e){_.current=null;return}let n=_.current;n&&n.value===e&&n.availableValue===d||(_.current={value:e,availableValue:d},t(d))});return(0,S.useEffect)(()=>{v()},[d,e]),(0,C.jsx)(u,{...c,options:l,value:d,onChange:t,getOptionDisabled:e=>h(e,a)})}var S,C;function w(){return(w=e((()=>{S=t(),l(),b(),C=n(),x.__docgenInfo={description:`Select периода детализации, который может ограничивать доступные варианты по диапазону дат.`,methods:[],displayName:`PeriodSelect`,props:{label:{required:!1,tsType:{name:`ReactNode`},description:``},description:{required:!1,tsType:{name:`string`},description:``},placeholder:{required:!1,tsType:{name:`string`},description:``},disabled:{required:!1,tsType:{name:`boolean`},description:``},size:{required:!1,tsType:{name:`union`,raw:`"xs" | "sm" | "md" | "lg" | "xl"`,elements:[{name:`literal`,value:`"xs"`},{name:`literal`,value:`"sm"`},{name:`literal`,value:`"md"`},{name:`literal`,value:`"lg"`},{name:`literal`,value:`"xl"`}]},description:``},value:{required:!0,tsType:{name:`V`},description:"Если начальное состояние может быть `null | undefined`\nзначит `onChange` тоже должен ументь сбрасывать.\nПоэтому такой контрол явно должен передавать `UiBaseProps<AnyType | undefined>`"},onChange:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(value: T) => void`,signature:{arguments:[{type:{name:`C`},name:`value`}],return:{name:`void`}}},description:``},options:{required:!1,tsType:{name:`unknown`},description:"Полный список custom options с высшим приоритетом. При его передаче\nвстроенные `presetIds`, `labels` и пороги диапазона не применяются."},labels:{required:!1,tsType:{name:`Partial`,elements:[{name:`Readonly`,elements:[{name:`Record`,elements:[{name:`union`,raw:`"day" | "week" | "month" | "year"`,elements:[{name:`literal`,value:`"day"`},{name:`literal`,value:`"week"`},{name:`literal`,value:`"month"`},{name:`literal`,value:`"year"`}]},{name:`string`}],raw:`Record<PeriodSelectPresetId, string>`}],raw:`Readonly<Record<PeriodSelectPresetId, string>>`}],raw:`Partial<PeriodSelectLabels>`},description:`Частично заменяет подписи встроенных вариантов, не изменяя их id,
|
|
2
|
-
канонический порядок и правила доступности.
|
|
3
|
-
Не применяется, когда передан собственный \`options\`.`},presetIds:{required:!1,tsType:{name:`unknown`},description:`Разрешенные встроенные варианты периода. Значение нормализуется в канонический
|
|
4
|
-
порядок, а пустой либо невалидный список безопасно заменяется полным набором.
|
|
5
|
-
Не применяется, когда передан собственный \`options\`.`},dateRange:{required:!1,tsType:{name:`DateRangeInput`},description:``},maxDayRangeDays:{required:!1,tsType:{name:`number`},description:``},maxWeekRangeWeeks:{required:!1,tsType:{name:`number`},description:``}}}})))()}export{b as i,w as n,v as r,x as t};
|
|
@@ -1,324 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-I7-gyNVJ.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-DxyL_jCu.js";function o(e){let t={code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,table:`table`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation API/Errors/Error Report Delivery`}),`
|
|
2
|
-
`,(0,c.jsxs)(t.h1,{id:`доставка-error-reports-через-ryuzaki13react-foundation-apierror-report`,children:[`Доставка error reports через `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-api/error-report`})]}),`
|
|
3
|
-
`,(0,c.jsxs)(t.p,{children:[`Модуль превращает сохранённый черновик отчёта из `,(0,c.jsx)(t.code,{children:`foundation-lib`}),` в delivery body, вызывает adapter приложения и обновляет статус черновика.`]}),`
|
|
4
|
-
`,(0,c.jsx)(t.h2,{id:`граница-ответственности`,children:`Граница ответственности`}),`
|
|
5
|
-
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-text`,children:`foundation-lib/error-report foundation-api/error-report host backend adapter
|
|
6
|
-
collect + sanitize + draft store ──► lifecycle + delivery body ─────► HTTP/OData/serverFn
|
|
7
|
-
`})}),`
|
|
8
|
-
`,(0,c.jsxs)(t.p,{children:[`Модуль не собирает browser diagnostics, не выбирает endpoint и не отправляет запрос самостоятельно. Transport явно передаёт приложение через `,(0,c.jsx)(t.code,{children:`adapter`}),`.`]}),`
|
|
9
|
-
`,(0,c.jsx)(t.h2,{id:`установка-и-импорт`,children:`Установка и импорт`}),`
|
|
10
|
-
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`import {
|
|
11
|
-
createErrorReportDeliveryBody,
|
|
12
|
-
sendErrorReport
|
|
13
|
-
} from "@ryuzaki13/react-foundation-api/error-report";
|
|
14
|
-
|
|
15
|
-
import type {
|
|
16
|
-
ErrorReportDeliveryAdapter,
|
|
17
|
-
ErrorReportDeliveryBody,
|
|
18
|
-
ErrorReportDeliveryContext,
|
|
19
|
-
SendErrorReportOptions
|
|
20
|
-
} from "@ryuzaki13/react-foundation-api/error-report";
|
|
21
|
-
`})}),`
|
|
22
|
-
`,(0,c.jsxs)(t.p,{children:[`Нужны `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib`}),` и `,(0,c.jsx)(t.code,{children:`@tanstack/react-query`}),`.`]}),`
|
|
23
|
-
`,(0,c.jsx)(t.h2,{id:`полный-сценарий`,children:`Полный сценарий`}),`
|
|
24
|
-
`,(0,c.jsxs)(t.p,{children:[`Сначала другой слой создаёт и сохраняет draft средствами `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/error-report`}),`. Затем API-слой получает только его `,(0,c.jsx)(t.code,{children:`reportId`}),`:`]}),`
|
|
25
|
-
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`import { httpFetchPayload } from "@ryuzaki13/react-foundation-api/http";
|
|
26
|
-
import { sendErrorReport } from "@ryuzaki13/react-foundation-api/error-report";
|
|
27
|
-
import type { ErrorReportDeliveryAdapter } from "@ryuzaki13/react-foundation-api/error-report";
|
|
28
|
-
|
|
29
|
-
const deliveryAdapter: ErrorReportDeliveryAdapter = async (body) => {
|
|
30
|
-
await httpFetchPayload("/api/error-reports", {
|
|
31
|
-
init: {
|
|
32
|
-
method: "POST",
|
|
33
|
-
headers: { "Content-Type": "application/json" },
|
|
34
|
-
body: JSON.stringify(body)
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
await sendErrorReport(reportId, {
|
|
40
|
-
adapter: deliveryAdapter,
|
|
41
|
-
queryClient
|
|
42
|
-
});
|
|
43
|
-
`})}),`
|
|
44
|
-
`,(0,c.jsx)(t.h2,{id:`createerrorreportdeliverybody`,children:(0,c.jsx)(t.code,{children:`createErrorReportDeliveryBody`})}),`
|
|
45
|
-
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const body = createErrorReportDeliveryBody(draft);
|
|
46
|
-
`})}),`
|
|
47
|
-
`,(0,c.jsx)(t.p,{children:`Результат:`}),`
|
|
48
|
-
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`type ErrorReportDeliveryBody = {
|
|
49
|
-
reportId: string;
|
|
50
|
-
sessionId: string;
|
|
51
|
-
createdUtc: string;
|
|
52
|
-
category: ErrorReportCategory;
|
|
53
|
-
errorClass: string;
|
|
54
|
-
errorMessage: string;
|
|
55
|
-
stackTrace?: string;
|
|
56
|
-
payload: string;
|
|
57
|
-
};
|
|
58
|
-
`})}),`
|
|
59
|
-
`,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`payload`}),` — JSON string всего payload черновика, а не вложенный object. Это важно для backend contract.`]}),`
|
|
60
|
-
`,(0,c.jsxs)(t.p,{children:[`Если `,(0,c.jsx)(t.code,{children:`draft.payload.error.message`}),` пуст, обязательные `,(0,c.jsx)(t.code,{children:`errorMessage`}),` и message внутри сериализованного payload получают значение `,(0,c.jsx)(t.code,{children:`"Неизвестная ошибка"`}),`. Остальной draft не нормализуется.`]}),`
|
|
61
|
-
`,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`JSON.stringify`}),` может выбросить ошибку при циклических или неподдерживаемых данных. Draft должен соответствовать сериализуемому контракту `,(0,c.jsx)(t.code,{children:`foundation-lib`}),`.`]}),`
|
|
62
|
-
`,(0,c.jsx)(t.h3,{id:`что-такое-draft-и-delivery-body`,children:`Что такое draft и delivery body`}),`
|
|
63
|
-
`,(0,c.jsx)(t.p,{children:`Для начинающего разработчика важно не смешивать две формы:`}),`
|
|
64
|
-
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-text`,children:`ErrorReportDraft
|
|
65
|
-
├── локальный lifecycle status
|
|
66
|
-
├── retry information
|
|
67
|
-
├── collected/sanitized payload
|
|
68
|
-
└── identifiers
|
|
69
|
-
|
|
70
|
-
ErrorReportDeliveryBody
|
|
71
|
-
├── плоские обязательные backend fields
|
|
72
|
-
└── payload: JSON string
|
|
73
|
-
`})}),`
|
|
74
|
-
`,(0,c.jsxs)(t.p,{children:[`Draft принадлежит локальному хранилищу `,(0,c.jsx)(t.code,{children:`foundation-lib`}),`. Delivery body — одноразовый snapshot для transport adapter-а.`]}),`
|
|
75
|
-
`,(0,c.jsx)(t.p,{children:`Нельзя отправлять draft целиком только потому, что он уже похож на body: backend contract намеренно отделён от local store contract.`}),`
|
|
76
|
-
`,(0,c.jsx)(t.h3,{id:`соответствие-полей`,children:`Соответствие полей`}),`
|
|
77
|
-
`,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Delivery field`}),(0,c.jsx)(t.th,{children:`Источник`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`reportId`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`draft.reportId`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`sessionId`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`draft.sessionId`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`createdUtc`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`draft.createdUtc`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`category`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`draft.category`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`errorClass`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`draft.payload.error.name`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`errorMessage`})}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`draft.payload.error.message`}),` или fallback`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`stackTrace`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`draft.payload.error.stackTrace`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`payload`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`JSON.stringify(normalized payload)`})})]})]})]}),`
|
|
78
|
-
`,(0,c.jsx)(t.p,{children:`Если message содержит непустой текст с пробелами по краям, проверка считает его валидным, но в delivery сохраняется исходная строка. Функция не выполняет общий trim draft-а.`}),`
|
|
79
|
-
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`draft.payload.error.message = " Ошибка сохранения ";
|
|
80
|
-
|
|
81
|
-
const body = createErrorReportDeliveryBody(draft);
|
|
82
|
-
body.errorMessage;
|
|
83
|
-
// " Ошибка сохранения "
|
|
84
|
-
`})}),`
|
|
85
|
-
`,(0,c.jsx)(t.p,{children:`Если message пустой или whitespace-only:`}),`
|
|
86
|
-
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`draft.payload.error.message = " ";
|
|
87
|
-
|
|
88
|
-
const body = createErrorReportDeliveryBody(draft);
|
|
89
|
-
body.errorMessage;
|
|
90
|
-
// "Неизвестная ошибка"
|
|
91
|
-
|
|
92
|
-
JSON.parse(body.payload).error.message;
|
|
93
|
-
// "Неизвестная ошибка"
|
|
94
|
-
`})}),`
|
|
95
|
-
`,(0,c.jsx)(t.p,{children:`Функция создаёт новые wrapper objects и не записывает fallback обратно в draft.`}),`
|
|
96
|
-
`,(0,c.jsx)(t.h2,{id:`senderrorreport`,children:(0,c.jsx)(t.code,{children:`sendErrorReport`})}),`
|
|
97
|
-
`,(0,c.jsx)(t.p,{children:`Lifecycle:`}),`
|
|
98
|
-
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-text`,children:`draft отсутствует ─────────► undefined
|
|
99
|
-
status sent/sending ───────► текущий draft, adapter не вызывается
|
|
100
|
-
остальной draft ───────────► sending
|
|
101
|
-
│
|
|
102
|
-
adapter success / error
|
|
103
|
-
│ │
|
|
104
|
-
▼ ▼
|
|
105
|
-
sent failed + failedReason
|
|
106
|
-
`})}),`
|
|
107
|
-
`,(0,c.jsx)(t.p,{children:`Пошагово функция:`}),`
|
|
108
|
-
`,(0,c.jsxs)(t.ol,{children:[`
|
|
109
|
-
`,(0,c.jsxs)(t.li,{children:[`Ищет draft по `,(0,c.jsx)(t.code,{children:`reportId`}),` в store из `,(0,c.jsx)(t.code,{children:`foundation-lib`}),`.`]}),`
|
|
110
|
-
`,(0,c.jsxs)(t.li,{children:[`Возвращает `,(0,c.jsx)(t.code,{children:`undefined`}),`, если draft не найден.`]}),`
|
|
111
|
-
`,(0,c.jsxs)(t.li,{children:[`Не отправляет повторно draft со статусом `,(0,c.jsx)(t.code,{children:`sent`}),` или `,(0,c.jsx)(t.code,{children:`sending`}),`.`]}),`
|
|
112
|
-
`,(0,c.jsxs)(t.li,{children:[`Устанавливает `,(0,c.jsx)(t.code,{children:`status: "sending"`}),` и очищает `,(0,c.jsx)(t.code,{children:`failedReason`}),`.`]}),`
|
|
113
|
-
`,(0,c.jsx)(t.li,{children:`Создаёт delivery body.`}),`
|
|
114
|
-
`,(0,c.jsxs)(t.li,{children:[`Вызывает `,(0,c.jsx)(t.code,{children:`adapter(body, { draft, queryClient })`}),`.`]}),`
|
|
115
|
-
`,(0,c.jsxs)(t.li,{children:[`При успехе устанавливает `,(0,c.jsx)(t.code,{children:`status: "sent"`}),` и `,(0,c.jsx)(t.code,{children:`sentUtc`}),`.`]}),`
|
|
116
|
-
`,(0,c.jsxs)(t.li,{children:[`При ошибке устанавливает `,(0,c.jsx)(t.code,{children:`status: "failed"`}),`, сохраняет нормализованное сообщение и повторно бросает исходную ошибку.`]}),`
|
|
117
|
-
`]}),`
|
|
118
|
-
`,(0,c.jsxs)(t.p,{children:[`Adapter получает исходный snapshot `,(0,c.jsx)(t.code,{children:`draft`}),`, прочитанный до перевода store в `,(0,c.jsx)(t.code,{children:`sending`}),`. Используйте `,(0,c.jsx)(t.code,{children:`body`}),` как delivery payload, а context — для query invalidation или transport, которому нужен `,(0,c.jsx)(t.code,{children:`QueryClient`}),`.`]}),`
|
|
119
|
-
`,(0,c.jsx)(t.h3,{id:`status-table`,children:`Status table`}),`
|
|
120
|
-
`,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Status draft до вызова`}),(0,c.jsx)(t.th,{children:`Вызывается adapter`}),(0,c.jsx)(t.th,{children:`Результат`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`draft отсутствует`}),(0,c.jsx)(t.td,{children:`нет`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`undefined`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`sent`})}),(0,c.jsx)(t.td,{children:`нет`}),(0,c.jsx)(t.td,{children:`текущий draft`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`sending`})}),(0,c.jsx)(t.td,{children:`нет`}),(0,c.jsx)(t.td,{children:`текущий draft`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`pending`}),` или эквивалентный начальный`]}),(0,c.jsx)(t.td,{children:`да`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`sent`}),` либо exception + `,(0,c.jsx)(t.code,{children:`failed`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`failed`})}),(0,c.jsx)(t.td,{children:`да`}),(0,c.jsx)(t.td,{children:`повторная попытка`})]})]})]}),`
|
|
121
|
-
`,(0,c.jsxs)(t.p,{children:[`Функция не создаёт draft. Если `,(0,c.jsx)(t.code,{children:`reportId`}),` ошибочный, это не exception: result равен `,(0,c.jsx)(t.code,{children:`undefined`}),`.`]}),`
|
|
122
|
-
`,(0,c.jsx)(t.h3,{id:`время-отправки`,children:`Время отправки`}),`
|
|
123
|
-
`,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`sentUtc`}),` создаётся на client после успешного завершения adapter-а:`]}),`
|
|
124
|
-
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`new Date().toISOString()
|
|
125
|
-
`})}),`
|
|
126
|
-
`,(0,c.jsx)(t.p,{children:`Это client timestamp, а не server acknowledgement time. Для аудита используйте server time из backend record.`}),`
|
|
127
|
-
`,(0,c.jsx)(t.h3,{id:`ошибка-построения-body`,children:`Ошибка построения body`}),`
|
|
128
|
-
`,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`createErrorReportDeliveryBody`}),` вызывается внутри `,(0,c.jsx)(t.code,{children:`try`}),`. Если `,(0,c.jsx)(t.code,{children:`JSON.stringify`}),` выбросил error:`]}),`
|
|
129
|
-
`,(0,c.jsxs)(t.ul,{children:[`
|
|
130
|
-
`,(0,c.jsx)(t.li,{children:`adapter не вызывается;`}),`
|
|
131
|
-
`,(0,c.jsxs)(t.li,{children:[`draft становится `,(0,c.jsx)(t.code,{children:`failed`}),`;`]}),`
|
|
132
|
-
`,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`failedReason`}),` формируется через `,(0,c.jsx)(t.code,{children:`createErrorInfo`}),`;`]}),`
|
|
133
|
-
`,(0,c.jsx)(t.li,{children:`исходный error снова выбрасывается caller-у.`}),`
|
|
134
|
-
`]}),`
|
|
135
|
-
`,(0,c.jsx)(t.h3,{id:`ui-flow`,children:`UI flow`}),`
|
|
136
|
-
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-tsx`,children:`import { useState } from "react";
|
|
137
|
-
import { useQueryClient } from "@tanstack/react-query";
|
|
138
|
-
import { sendErrorReport } from "@ryuzaki13/react-foundation-api/error-report";
|
|
139
|
-
|
|
140
|
-
function SendReportButton({ reportId }: { reportId: string }) {
|
|
141
|
-
const queryClient = useQueryClient();
|
|
142
|
-
const [isSending, setIsSending] = useState(false);
|
|
143
|
-
const [errorMessage, setErrorMessage] = useState<string>();
|
|
144
|
-
|
|
145
|
-
const handleSend = async () => {
|
|
146
|
-
setIsSending(true);
|
|
147
|
-
setErrorMessage(undefined);
|
|
148
|
-
|
|
149
|
-
try {
|
|
150
|
-
const result = await sendErrorReport(reportId, {
|
|
151
|
-
adapter: deliveryAdapter,
|
|
152
|
-
queryClient
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
if (!result) {
|
|
156
|
-
setErrorMessage("Черновик отчёта не найден");
|
|
157
|
-
}
|
|
158
|
-
} catch (error) {
|
|
159
|
-
setErrorMessage(
|
|
160
|
-
error instanceof Error ? error.message : "Не удалось отправить отчёт"
|
|
161
|
-
);
|
|
162
|
-
} finally {
|
|
163
|
-
setIsSending(false);
|
|
164
|
-
}
|
|
165
|
-
};
|
|
166
|
-
|
|
167
|
-
return (
|
|
168
|
-
<>
|
|
169
|
-
<button type="button" disabled={isSending} onClick={handleSend}>
|
|
170
|
-
{isSending ? "Отправка…" : "Отправить отчёт"}
|
|
171
|
-
</button>
|
|
172
|
-
{errorMessage ? <p role="alert">{errorMessage}</p> : null}
|
|
173
|
-
</>
|
|
174
|
-
);
|
|
175
|
-
}
|
|
176
|
-
`})}),`
|
|
177
|
-
`,(0,c.jsxs)(t.p,{children:[`Local `,(0,c.jsx)(t.code,{children:`isSending`}),` нужен UI для немедленной блокировки повторного click. Draft status остаётся источником долгоживущего lifecycle, но component может не быть подписан на store.`]}),`
|
|
178
|
-
`,(0,c.jsx)(t.h2,{id:`варианты-delivery-adapter-а`,children:`Варианты delivery adapter-а`}),`
|
|
179
|
-
`,(0,c.jsx)(t.h3,{id:`обычный-http`,children:`Обычный HTTP`}),`
|
|
180
|
-
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`import { httpFetchPayload } from "@ryuzaki13/react-foundation-api/http";
|
|
181
|
-
import type { ErrorReportDeliveryAdapter } from "@ryuzaki13/react-foundation-api/error-report";
|
|
182
|
-
|
|
183
|
-
export const deliveryAdapter: ErrorReportDeliveryAdapter = async (body) => {
|
|
184
|
-
await httpFetchPayload("/api/error-reports", {
|
|
185
|
-
init: {
|
|
186
|
-
method: "POST",
|
|
187
|
-
headers: { "Content-Type": "application/json" },
|
|
188
|
-
body: JSON.stringify(body)
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
|
-
};
|
|
192
|
-
`})}),`
|
|
193
|
-
`,(0,c.jsx)(t.h3,{id:`odata-functionimport`,children:`OData FunctionImport`}),`
|
|
194
|
-
`,(0,c.jsx)(t.p,{children:`Если backend contract опубликован как FunctionImport, operation определяется metadata:`}),`
|
|
195
|
-
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`import { odataFunctionImportFn } from "@ryuzaki13/react-foundation-api/odata";
|
|
196
|
-
import { wrapODataParams } from "@ryuzaki13/react-foundation-lib/odata-service";
|
|
197
|
-
|
|
198
|
-
const deliveryAdapter: ErrorReportDeliveryAdapter = async (body, { queryClient }) => {
|
|
199
|
-
await odataFunctionImportFn({
|
|
200
|
-
odata: {
|
|
201
|
-
service: "ZERROR_REPORT_SRV",
|
|
202
|
-
target: "SendErrorReport"
|
|
203
|
-
},
|
|
204
|
-
params: wrapODataParams({
|
|
205
|
-
ReportId: body.reportId,
|
|
206
|
-
Payload: body.payload
|
|
207
|
-
})
|
|
208
|
-
})({ client: queryClient });
|
|
209
|
-
};
|
|
210
|
-
`})}),`
|
|
211
|
-
`,(0,c.jsx)(t.p,{children:`Это только пример mapping: точные parameter names должны соответствовать metadata вашего сервиса.`}),`
|
|
212
|
-
`,(0,c.jsx)(t.h3,{id:`server-function`,children:`Server function`}),`
|
|
213
|
-
`,(0,c.jsxs)(t.p,{children:[`Adapter может вызвать client-safe serverFn operation. Модуль error-report не знает о transport и не ограничивает его, пока adapter возвращает `,(0,c.jsx)(t.code,{children:`Promise<void>`}),`.`]}),`
|
|
214
|
-
`,(0,c.jsx)(t.h3,{id:`почему-adapter-ничего-не-возвращает`,children:`Почему adapter ничего не возвращает`}),`
|
|
215
|
-
`,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`sendErrorReport`}),` управляет local draft lifecycle, а не server entity. Если backend вернул receipt, adapter может обработать его внутри: сохранить в отдельный Query cache, telemetry или domain store. Public delivery contract считает успехом fulfilled promise.`]}),`
|
|
216
|
-
`,(0,c.jsx)(t.h2,{id:`adapter-с-cache-invalidation`,children:`Adapter с cache invalidation`}),`
|
|
217
|
-
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const adapter: ErrorReportDeliveryAdapter = async (body, { queryClient }) => {
|
|
218
|
-
await postReport(body);
|
|
219
|
-
await queryClient.invalidateQueries({ queryKey: ["error-reports"] });
|
|
220
|
-
};
|
|
221
|
-
`})}),`
|
|
222
|
-
`,(0,c.jsxs)(t.p,{children:[`Если invalidation бросит ошибку, вся доставка считается неуспешной и draft станет `,(0,c.jsx)(t.code,{children:`failed`}),`, даже если backend уже принял отчёт. Для non-critical cache update обработайте ошибку внутри adapter-а.`]}),`
|
|
223
|
-
`,(0,c.jsx)(t.p,{children:`Безопасный вариант для необязательного refresh:`}),`
|
|
224
|
-
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const adapter: ErrorReportDeliveryAdapter = async (body, { queryClient }) => {
|
|
225
|
-
await postReport(body);
|
|
226
|
-
|
|
227
|
-
try {
|
|
228
|
-
await queryClient.invalidateQueries({ queryKey: ["error-reports"] });
|
|
229
|
-
} catch (error) {
|
|
230
|
-
console.warn("Отчёт отправлен, но cache не обновлён", error);
|
|
231
|
-
}
|
|
232
|
-
};
|
|
233
|
-
`})}),`
|
|
234
|
-
`,(0,c.jsx)(t.p,{children:`Решение зависит от contract: если fresh cache является частью успешной операции, не поглощайте ошибку.`}),`
|
|
235
|
-
`,(0,c.jsx)(t.h2,{id:`повторная-отправка-и-concurrency`,children:`Повторная отправка и concurrency`}),`
|
|
236
|
-
`,(0,c.jsxs)(t.p,{children:[`После `,(0,c.jsx)(t.code,{children:`failed`}),` функцию можно вызвать повторно. Проверка `,(0,c.jsx)(t.code,{children:`sending`}),` защищает от обычного повторного нажатия, но это не распределённая блокировка: два практически одновременных вызова могут успеть прочитать старый статус до его обновления. Backend желательно сделать идемпотентным по `,(0,c.jsx)(t.code,{children:`reportId`}),`.`]}),`
|
|
237
|
-
`,(0,c.jsx)(t.h3,{id:`idempotency-backend-а`,children:`Idempotency backend-а`}),`
|
|
238
|
-
`,(0,c.jsx)(t.p,{children:`Рекомендуемый server contract:`}),`
|
|
239
|
-
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-text`,children:`UNIQUE(reportId)
|
|
240
|
-
`})}),`
|
|
241
|
-
`,(0,c.jsxs)(t.p,{children:[`Повтор с тем же `,(0,c.jsx)(t.code,{children:`reportId`}),` должен либо вернуть прежний успешный result, либо завершиться предсказуемым «already accepted», которое adapter считает успехом.`]}),`
|
|
242
|
-
`,(0,c.jsx)(t.p,{children:`Это защищает сценарий:`}),`
|
|
243
|
-
`,(0,c.jsxs)(t.ol,{children:[`
|
|
244
|
-
`,(0,c.jsx)(t.li,{children:`Backend принял report.`}),`
|
|
245
|
-
`,(0,c.jsx)(t.li,{children:`Network response потерялся.`}),`
|
|
246
|
-
`,(0,c.jsxs)(t.li,{children:[`Client пометил draft как `,(0,c.jsx)(t.code,{children:`failed`}),`.`]}),`
|
|
247
|
-
`,(0,c.jsx)(t.li,{children:`Пользователь повторил отправку.`}),`
|
|
248
|
-
`]}),`
|
|
249
|
-
`,(0,c.jsx)(t.p,{children:`Без idempotency server создаст duplicate.`}),`
|
|
250
|
-
`,(0,c.jsx)(t.h3,{id:`несколько-tabs`,children:`Несколько tabs`}),`
|
|
251
|
-
`,(0,c.jsxs)(t.p,{children:[`Status `,(0,c.jsx)(t.code,{children:`sending`}),` в local store не является cross-tab distributed lock, если storage implementation явно не гарантирует это. Idempotency по `,(0,c.jsx)(t.code,{children:`reportId`}),` остаётся обязательной защитой.`]}),`
|
|
252
|
-
`,(0,c.jsx)(t.h2,{id:`тестирование`,children:`Тестирование`}),`
|
|
253
|
-
`,(0,c.jsx)(t.h3,{id:`body-builder`,children:`Body builder`}),`
|
|
254
|
-
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`import { expect, it } from "vitest";
|
|
255
|
-
|
|
256
|
-
it("подставляет fallback message в оба места", () => {
|
|
257
|
-
const body = createErrorReportDeliveryBody({
|
|
258
|
-
...draftFixture,
|
|
259
|
-
payload: {
|
|
260
|
-
...draftFixture.payload,
|
|
261
|
-
error: {
|
|
262
|
-
...draftFixture.payload.error,
|
|
263
|
-
message: " "
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
});
|
|
267
|
-
|
|
268
|
-
expect(body.errorMessage).toBe("Неизвестная ошибка");
|
|
269
|
-
expect(JSON.parse(body.payload).error.message).toBe("Неизвестная ошибка");
|
|
270
|
-
});
|
|
271
|
-
`})}),`
|
|
272
|
-
`,(0,c.jsx)(t.h3,{id:`delivery-lifecycle`,children:`Delivery lifecycle`}),`
|
|
273
|
-
`,(0,c.jsx)(t.p,{children:`В package/feature test проверяйте:`}),`
|
|
274
|
-
`,(0,c.jsxs)(t.ul,{children:[`
|
|
275
|
-
`,(0,c.jsx)(t.li,{children:`отсутствующий id не вызывает adapter;`}),`
|
|
276
|
-
`,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`sent`}),` не отправляется повторно;`]}),`
|
|
277
|
-
`,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`sending`}),` не отправляется повторно;`]}),`
|
|
278
|
-
`,(0,c.jsxs)(t.li,{children:[`success переводит status в `,(0,c.jsx)(t.code,{children:`sent`}),` и задаёт ISO `,(0,c.jsx)(t.code,{children:`sentUtc`}),`;`]}),`
|
|
279
|
-
`,(0,c.jsxs)(t.li,{children:[`adapter error переводит status в `,(0,c.jsx)(t.code,{children:`failed`}),`;`]}),`
|
|
280
|
-
`,(0,c.jsx)(t.li,{children:`исходный error сохраняет identity и выбрасывается повторно;`}),`
|
|
281
|
-
`,(0,c.jsxs)(t.li,{children:[`retry после `,(0,c.jsx)(t.code,{children:`failed`}),` снова вызывает adapter.`]}),`
|
|
282
|
-
`]}),`
|
|
283
|
-
`,(0,c.jsx)(t.p,{children:`Adapter удобно делать mock-функцией:`}),`
|
|
284
|
-
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const adapter = vi.fn<ErrorReportDeliveryAdapter>().mockResolvedValue(undefined);
|
|
285
|
-
`})}),`
|
|
286
|
-
`,(0,c.jsx)(t.p,{children:`Не помещайте реальные stack traces, cookies, tokens или пользовательские данные в test snapshots.`}),`
|
|
287
|
-
`,(0,c.jsx)(t.h2,{id:`частые-ошибки`,children:`Частые ошибки`}),`
|
|
288
|
-
`,(0,c.jsx)(t.h3,{id:`передавать-draft-вместо-body`,children:`Передавать draft вместо body`}),`
|
|
289
|
-
`,(0,c.jsxs)(t.p,{children:[`Adapter contract уже получает подготовленный `,(0,c.jsx)(t.code,{children:`body`}),`. Не сериализуйте `,(0,c.jsx)(t.code,{children:`context.draft`}),` вместо него.`]}),`
|
|
290
|
-
`,(0,c.jsxs)(t.h3,{id:`дважды-сериализовать-payload`,children:[`Дважды сериализовать `,(0,c.jsx)(t.code,{children:`payload`})]}),`
|
|
291
|
-
`,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`body.payload`}),` уже string:`]}),`
|
|
292
|
-
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`JSON.stringify(body)
|
|
293
|
-
`})}),`
|
|
294
|
-
`,(0,c.jsxs)(t.p,{children:[`правильно сериализует outer HTTP body. Не делайте `,(0,c.jsx)(t.code,{children:`body.payload = JSON.stringify(body.payload)`}),`.`]}),`
|
|
295
|
-
`,(0,c.jsxs)(t.h3,{id:`считать-sending-надёжной-блокировкой`,children:[`Считать `,(0,c.jsx)(t.code,{children:`sending`}),` надёжной блокировкой`]}),`
|
|
296
|
-
`,(0,c.jsx)(t.p,{children:`Это local lifecycle guard. Server idempotency всё равно нужна.`}),`
|
|
297
|
-
`,(0,c.jsx)(t.h3,{id:`поглощать-adapter-error-в-ui`,children:`Поглощать adapter error в UI`}),`
|
|
298
|
-
`,(0,c.jsx)(t.p,{children:`Функция намеренно rethrow-ит error. Покажите feedback и оставьте возможность retry.`}),`
|
|
299
|
-
`,(0,c.jsx)(t.h3,{id:`добавлять-transport-в-shared-delivery-module`,children:`Добавлять transport в shared delivery module`}),`
|
|
300
|
-
`,(0,c.jsx)(t.p,{children:`Endpoint и auth policy специфичны проекту. Они должны оставаться adapter-ом host application.`}),`
|
|
301
|
-
`,(0,c.jsx)(t.h2,{id:`ошибки-и-безопасность`,children:`Ошибки и безопасность`}),`
|
|
302
|
-
`,(0,c.jsxs)(t.ul,{children:[`
|
|
303
|
-
`,(0,c.jsx)(t.li,{children:`Ошибка adapter-а не поглощается: вызывающий код обязан её обработать.`}),`
|
|
304
|
-
`,(0,c.jsx)(t.li,{children:`Не добавляйте secrets в draft. Delivery layer не выполняет дополнительную redaction всего payload.`}),`
|
|
305
|
-
`,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`queryClient`}),` передаётся adapter-у, но модуль сам не инвалидирует queries.`]}),`
|
|
306
|
-
`,(0,c.jsx)(t.li,{children:`Функция управляет локальным draft store; не вызывайте её в среде без подходящего storage/runtime, если draft store там недоступен.`}),`
|
|
307
|
-
`,(0,c.jsxs)(t.li,{children:[`Статус `,(0,c.jsx)(t.code,{children:`sent`}),` означает успешное завершение adapter-а, а не обязательное подтверждение бизнес-обработки backend-ом.`]}),`
|
|
308
|
-
`,(0,c.jsx)(t.li,{children:`Delivery body содержит stack trace и diagnostic payload: передавайте его только по защищённому каналу авторизованному endpoint.`}),`
|
|
309
|
-
`,(0,c.jsxs)(t.li,{children:[`Не логируйте `,(0,c.jsx)(t.code,{children:`body.payload`}),` целиком в production.`]}),`
|
|
310
|
-
`,(0,c.jsxs)(t.li,{children:[`Redaction должна происходить при сборе draft в `,(0,c.jsx)(t.code,{children:`foundation-lib`}),`; delivery boundary не может безопасно угадать все domain secrets.`]}),`
|
|
311
|
-
`]}),`
|
|
312
|
-
`,(0,c.jsx)(t.h2,{id:`faq`,children:`FAQ`}),`
|
|
313
|
-
`,(0,c.jsxs)(t.h3,{id:`почему-функции-нужен-queryclient-даже-если-adapter-его-не-использует`,children:[`Почему функции нужен `,(0,c.jsx)(t.code,{children:`QueryClient`}),`, даже если adapter его не использует?`]}),`
|
|
314
|
-
`,(0,c.jsx)(t.p,{children:`Это единый adapter context. Он позволяет OData operations и cache synchronization без глобального QueryClient.`}),`
|
|
315
|
-
`,(0,c.jsx)(t.h3,{id:`можно-ли-отправить-report-которого-нет-в-store`,children:`Можно ли отправить report, которого нет в store?`}),`
|
|
316
|
-
`,(0,c.jsxs)(t.p,{children:[`Нет. `,(0,c.jsx)(t.code,{children:`sendErrorReport`}),` принимает id существующего draft и вернёт `,(0,c.jsx)(t.code,{children:`undefined`}),`.`]}),`
|
|
317
|
-
`,(0,c.jsx)(t.h3,{id:`можно-ли-изменить-body-перед-отправкой`,children:`Можно ли изменить body перед отправкой?`}),`
|
|
318
|
-
`,(0,c.jsx)(t.p,{children:`Да, внутри project adapter можно построить backend-specific envelope. Не мутируйте входной body; создайте новый object.`}),`
|
|
319
|
-
`,(0,c.jsx)(t.h3,{id:`когда-разрешён-retry`,children:`Когда разрешён retry?`}),`
|
|
320
|
-
`,(0,c.jsxs)(t.p,{children:[`После status `,(0,c.jsx)(t.code,{children:`failed`}),`. `,(0,c.jsx)(t.code,{children:`sent`}),` и `,(0,c.jsx)(t.code,{children:`sending`}),` являются no-op states.`]}),`
|
|
321
|
-
`,(0,c.jsx)(t.h3,{id:`кто-отвечает-за-offline-queue`,children:`Кто отвечает за offline queue?`}),`
|
|
322
|
-
`,(0,c.jsx)(t.p,{children:`Не этот модуль. Он хранит lifecycle одного draft и вызывает adapter. Background sync/retry scheduler должен быть отдельной явно спроектированной инфраструктурой.`}),`
|
|
323
|
-
`,(0,c.jsx)(t.h2,{id:`полный-api`,children:`Полный API`}),`
|
|
324
|
-
`,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Export`}),(0,c.jsx)(t.th,{children:`Назначение`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`createErrorReportDeliveryBody`})}),(0,c.jsx)(t.td,{children:`Строит сериализуемый backend body`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`sendErrorReport`})}),(0,c.jsx)(t.td,{children:`Управляет status и вызывает adapter`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`ErrorReportDeliveryBody`})}),(0,c.jsx)(t.td,{children:`Поля delivery payload`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`ErrorReportDeliveryContext`})}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`draft`}),` и `,(0,c.jsx)(t.code,{children:`queryClient`}),` для adapter-а`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`ErrorReportDeliveryAdapter`})}),(0,c.jsx)(t.td,{children:`Контракт функции доставки`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`SendErrorReportOptions`})}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`adapter`}),` и `,(0,c.jsx)(t.code,{children:`queryClient`})]})]})]})]})]})}function s(e={}){let{wrapper:t}={...n(),...e.components};return t?(0,c.jsx)(t,{...e,children:(0,c.jsx)(o,{...e})}):o(e)}var c;function l(){return(l=e((()=>{c=t(),r(),a()})))()}l();export{s as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{t}from"./react-BZJXY1be.js";import{c as n,n as r,s as i,t as a}from"./CalendarView-BZUnLT-3.js";import{i as o,n as s,r as c}from"./iframe-I7-gyNVJ.js";import{a as l,i as u}from"./utils-tg3ibbzi.js";import{C as d,b as f,y as p}from"./formatters-D33Uh3si-Df97arf9.js";import{n as m,t as h}from"./Popover-CRhHLoew.js";import{n as g,t as _}from"./ui.module-31LPbZGK.js";import{d as v,l as y,r as b,s as x,u as S}from"./Input-B5POVG-l.js";import{a as C,i as w,n as ee,r as te,t as T}from"./date-segments-DeoMkKv9.js";import{a as E,c as ne,d as D,i as O,l as re,n as ie,o as k,r as ae,s as A,t as oe,u as j}from"./TimePanel-CWnqPBjv.js";var M,se;function N(){return(N=e((()=>{o(),M=[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 6v6h4`,key:`135r8i`}]],se=c(`clock-3`,M)})))()}function P(e){let t=[];return e.forEach((e,n)=>{e.kind===`editable`&&t.push(n)}),t}function ce({value:e,onChange:t,onClearError:n,disabled:r,minDate:i,maxDate:a,mode:o=`date-time`}){let s=(0,F.useMemo)(()=>E(o),[o]),c=(0,F.useMemo)(()=>w(s),[s]),l=(0,F.useMemo)(()=>P(c),[c]),u=(0,F.useMemo)(()=>ee(e??null,c),[c,e]),d=e?.getTime()??null,[f,p]=(0,F.useState)(null),m=(f?.sourceValueTime===d&&f.sourceMode===o?f.values:null)??u,h=(0,F.useRef)(new Map),g=(0,F.useRef)(0),_=(0,F.useCallback)(e=>{p(e===null?null:{sourceValueTime:d,sourceMode:o,values:e})},[d,o]),v=(0,F.useCallback)(n=>{if(T(c,n))return t(null),null;let r=C(c,n,{defaultDate:o===`time`?j(e,`time`)??O():void 0});return!r||!A(r,i,a,o)?null:(t(r),r)},[a,i,o,t,c,e]),y=(0,F.useCallback)((e,t=!0)=>{let n=h.current.get(e);n&&(n.focus(),t&&requestAnimationFrame(()=>n.select()))},[]),b=(0,F.useCallback)(e=>{let t=l.indexOf(e);return t<l.length-1?l[t+1]:null},[l]),x=(0,F.useCallback)(e=>{let t=l.indexOf(e);return t>0?l[t-1]:null},[l]),S=(0,F.useCallback)((e,t)=>e.padStart(t.length,`0`),[]);return{segments:c,segmentValues:m,registerRef:(0,F.useCallback)(e=>t=>{if(t){h.current.set(e,t);return}h.current.delete(e)},[]),handleInput:(0,F.useCallback)(e=>t=>{if(r)return;let i=c[e];if(i.kind!==`editable`)return;let a=t.target.value.replace(/\D/g,``).slice(0,i.length),o=new Map(m);if(o.set(e,a),_(o),n?.(),a.length===i.length){let t=b(e);t!==null&&requestAnimationFrame(()=>y(t))}v(o)},[r,y,b,n,m,c,_,v]),handleKeyDown:(0,F.useCallback)(e=>t=>{if(r)return;let n=c[e];if(n.kind!==`editable`)return;let i=m.get(e)??``,a=t.currentTarget;switch(t.key){case`ArrowRight`:if(a.selectionStart===i.length||i===``){t.preventDefault();let n=b(e);n!==null&&y(n)}break;case`ArrowLeft`:if(a.selectionStart===0||i===``){t.preventDefault();let n=x(e);n!==null&&y(n)}break;case`ArrowUp`:{t.preventDefault();let r=i===``?n.min:Number.parseInt(i,10)+1;r>n.max&&(r=n.min);let o=new Map(m);o.set(e,S(String(r),n)),_(o),v(o),requestAnimationFrame(()=>a.select());break}case`ArrowDown`:{t.preventDefault();let r=i===``?n.max:Number.parseInt(i,10)-1;r<n.min&&(r=n.max);let o=new Map(m);o.set(e,S(String(r),n)),_(o),v(o),requestAnimationFrame(()=>a.select());break}case`Backspace`:if(i===``){t.preventDefault();let n=x(e);n!==null&&y(n)}break;case`Delete`:{t.preventDefault();let n=new Map(m);n.set(e,``),_(n),v(n);break}}},[r,y,b,x,S,m,c,_,v]),handleFocus:(0,F.useCallback)(()=>e=>{e.target.select()},[]),handleContainerFocus:(0,F.useCallback)(()=>{clearTimeout(g.current)},[]),handleContainerBlur:(0,F.useCallback)(()=>{let n=new Map(m);g.current=window.setTimeout(()=>{if(T(c,n)){t(null),_(n);return}let r=C(c,n,{defaultDate:o===`time`?j(e,`time`)??O():void 0});if(!r||!A(r,i,a,o)){_(null);return}_(n)},0)},[a,i,o,t,m,c,_,e]),focusFirstEmpty:(0,F.useCallback)(()=>{let e=l.find(e=>!(m.get(e)??``))??l[l.length-1];e!==void 0&&y(e)},[l,y,m])}}var F;function I(){return(I=e((()=>{F=t(),te(),k()})))()}var L,R,z,B,V,H,U,W,G,K,q;function J(){return(J=e((()=>{L=`AvG-mf`,R=`ig7KtT`,z=`YQHPZa`,B=`-RZe-i`,V=`Ox0SRE`,H=`gfaRup`,U=`_59kEea`,W=`Jjdu1Q`,G=`Q8Y2xS`,K=`XxZYTW`,q={segmentInput:L,separator:R,popoverContent:z,bottom:B,right:V,calendarPane:H,timePanelPane:U,timeOnlyPopoverContent:W,timePanelPaneBottom:G,timePanelPaneRight:K}})))()}function Y({value:e,onChange:t,label:n,description:r,placeholder:o,disabled:s,size:c,error:u,onClearError:p,minDate:m,maxDate:_,timePanelPlacement:y=`right`,mode:S=`date-time`}){let C=(0,X.useMemo)(()=>j(e,S),[S,e]),w=(0,X.useMemo)(()=>d(new Date),[]),[ee,te]=(0,X.useState)(!1),[T,E]=(0,X.useState)(C??null),[O,ie]=(0,X.useState)(`day`),[k,M]=(0,X.useState)(()=>D(C,w,S)),{controlId:N,labelId:P,descriptionId:F,errorId:I,describedBy:L}=v({hasLabel:n!=null,hasDescription:!!r,hasError:!!u}),{segments:R,segmentValues:z,registerRef:B,handleInput:V,handleKeyDown:H,handleFocus:U,handleContainerFocus:W,handleContainerBlur:G,focusFirstEmpty:K}=ce({value:C,onChange:t,onClearError:p,disabled:s,minDate:m,maxDate:_,mode:S}),J=e=>{if(S===`time`||f(e)||s)return;let t=ne(e,T??C??k),{hours:n,minutes:r}=ae(e,t.getHours(),t.getMinutes(),m,_,S),i=re(e,n,r);A(i,m,_,S)&&(p?.(),E(i),M(i))},Y=(e,t)=>{if(s)return;let n=T??C??k,r=ae(n,e,t,m,_,S),i=re(n,r.hours,r.minutes,S);A(i,m,_,S)&&(p?.(),E(i),M(i))},Q=e=>{e&&(E(C??null),M(D(C,w,S))),te(e)},le=()=>{(C?.getTime()??null)!==(T?.getTime()??null)&&t(T)},ue=y===`right`?q.timePanelPaneRight:q.timePanelPaneBottom,de=S===`time`?`Открыть выбор времени`:`Открыть календарь даты и времени`,fe=o??(S===`time`?`чч:мм`:`дд.мм.гггг чч:мм`),$=T??C??k;return(0,Z.jsxs)(h,{open:ee,onOpenChange:Q,children:[(0,Z.jsx)(x,{label:n,description:r,disabled:s,size:c,error:u,controlId:N,labelId:P,descriptionId:F,errorId:I,children:(0,Z.jsx)(b,{endAdornmentWidth:`var(--control-height)`,endAdornment:(0,Z.jsx)(h.Trigger,{children:(0,Z.jsx)(`div`,{className:g.uiToggleButtonContainer,children:(0,Z.jsx)(`button`,{type:`button`,disabled:s,"aria-label":de,className:g.uiToggleButton,children:S===`time`?(0,Z.jsx)(se,{}):(0,Z.jsx)(i,{})})})}),children:({controlClassName:e})=>(0,Z.jsx)(`div`,{id:N,className:l(g.uiInputControlFake,e),"data-disabled":s||void 0,"data-invalid":u?``:void 0,role:`group`,"aria-invalid":!!u||void 0,"aria-placeholder":fe,"aria-labelledby":P,"aria-describedby":L,onFocus:W,onBlur:G,onClick:e=>{e.target===e.currentTarget&&K()},children:R.map((e,t)=>e.kind===`literal`?(0,Z.jsx)(`span`,{className:q.separator,"data-disabled":s||void 0,children:e.text},t):(0,Z.jsx)(`input`,{ref:B(t),type:`text`,inputMode:`numeric`,className:q.segmentInput,style:{width:`${e.length+.5}ch`},value:z.get(t)??``,placeholder:e.placeholder,maxLength:e.length,disabled:s,"aria-label":e.ariaLabel,autoComplete:`off`,onChange:V(t),onKeyDown:H(t),onFocus:U()},t))})})}),(0,Z.jsx)(h.Content,{background:`primary`,onClose:le,children:S===`time`?(0,Z.jsx)(`div`,{className:q.timeOnlyPopoverContent,children:(0,Z.jsx)(oe,{value:$,disabled:s,minDate:m,maxDate:_,mode:S,onChange:Y})}):(0,Z.jsxs)(`div`,{className:l(q.popoverContent,q[y]),children:[(0,Z.jsx)(`div`,{className:q.calendarPane,children:(0,Z.jsx)(a,{view:O,datePickerLevel:`day`,selectionMode:`day`,onViewChange:ie,value:$,onChange:J,minDate:m,maxDate:_,currentDate:k,onCurrentDateChange:M})}),(0,Z.jsx)(`div`,{className:l(q.timePanelPane,ue),children:(0,Z.jsx)(oe,{value:$,disabled:s,minDate:m,maxDate:_,mode:S,onChange:Y})})]})})]})}var X,Z;function Q(){return(Q=e((()=>{X=t(),p(),u(),n(),N(),r(),y(),S(),m(),_(),k(),I(),J(),ie(),Z=s(),Y.__docgenInfo={description:`Поле выбора даты-времени со строгой сегментной маской и popover-пикером.`,methods:[],displayName:`SingleDateTimeInput`,props:{error:{required:!1,tsType:{name:`string`},description:``},onClearError:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},minDate:{required:!1,tsType:{name:`Date`},description:``},maxDate:{required:!1,tsType:{name:`Date`},description:``},timePanelPlacement:{required:!1,tsType:{name:`union`,raw:`"bottom" | "right"`,elements:[{name:`literal`,value:`"bottom"`},{name:`literal`,value:`"right"`}]},description:``,defaultValue:{value:`"right"`,computed:!1}},mode:{required:!1,tsType:{name:`union`,raw:`"date-time" | "time"`,elements:[{name:`literal`,value:`"date-time"`},{name:`literal`,value:`"time"`}]},description:``,defaultValue:{value:`"date-time"`,computed:!1}},label:{required:!1,tsType:{name:`ReactNode`},description:``},description:{required:!1,tsType:{name:`string`},description:``},placeholder:{required:!1,tsType:{name:`string`},description:``},disabled:{required:!1,tsType:{name:`boolean`},description:``},size:{required:!1,tsType:{name:`union`,raw:`"xs" | "sm" | "md" | "lg" | "xl"`,elements:[{name:`literal`,value:`"xs"`},{name:`literal`,value:`"sm"`},{name:`literal`,value:`"md"`},{name:`literal`,value:`"lg"`},{name:`literal`,value:`"xl"`}]},description:``},value:{required:!0,tsType:{name:`V`},description:"Если начальное состояние может быть `null | undefined`\nзначит `onChange` тоже должен ументь сбрасывать.\nПоэтому такой контрол явно должен передавать `UiBaseProps<AnyType | undefined>`"},onChange:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(value: T) => void`,signature:{arguments:[{type:{name:`C`},name:`value`}],return:{name:`void`}}},description:``}}}})))()}export{Q as n,Y as t};
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{t}from"./react-BZJXY1be.js";import{n}from"./iframe-I7-gyNVJ.js";import{a as r,i}from"./utils-tg3ibbzi.js";import{d as a,l as o,y as s}from"./formatters-D33Uh3si-Df97arf9.js";import{n as c,t as l}from"./Select-B-zeXEgK.js";var u,d,f,p,m,h,g,_,v,y,b,x;function S(){return(S=e((()=>{u=`p4nQdZ`,d=`_94tg5v`,f=`HyK7Zs`,p=`Mm4hrB`,m=`clxxBQ`,h=`_5pJ7o-`,g=`VV6hKN`,_=`cuQNP0`,v=`w7nIOT`,y=`ed-Afj`,b=`Lbxloe`,x={button:u,valueContainer:d,swatch:f,optionsPalette:p,optionsDetailed:m,option:h,optionPalette:g,optionDetailed:_,optionMeta:v,optionMetaIcon:y,optionMetaLabel:b}})))()}function C({state:e,className:t}){return(0,A.jsx)(`span`,{className:r(x.swatch,t),"data-empty":e===`none`?``:void 0,style:{"--state-color":a[e]}})}function w(e){return!!(e?.icon||e?.label)}function T(e,t){return typeof t?.label==`string`&&t.label.trim()?t.label:e||`empty`}function E(e){return w(e)?(0,A.jsxs)(`span`,{className:x.optionMeta,children:[e?.icon?(0,A.jsx)(`span`,{className:x.optionMetaIcon,children:e.icon}):null,e?.label?(0,A.jsx)(`span`,{className:x.optionMetaLabel,children:e.label}):null]}):null}function D(e,t){return(0,A.jsxs)(`div`,{className:x.valueContainer,children:[(0,A.jsx)(C,{state:e}),E(t)]})}function O({label:e,description:t,disabled:n,placeholder:i,size:a,value:s,onChange:c,options:u=o,stateMeta:d,className:f,clearable:p}){let m=(0,k.useMemo)(()=>Array.from(new Set(u)),[u]),h=m.some(e=>w(d?.[e])),g={getOptionKey:e=>e||`__empty_state__`,getOptionLabel:e=>d?.[e]?.label??e,getOptionAriaLabel:e=>T(e,d?.[e]),renderValue:e=>D(e,d?.[e]),renderOption:e=>(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(C,{state:e}),h?E(d?.[e]):null]}),buttonClassName:x.button,optionsContentClassName:r(h?x.optionsDetailed:x.optionsPalette),getOptionClassName:()=>r(x.option,h?x.optionDetailed:x.optionPalette)};return(0,A.jsx)(l,{label:e,description:t,disabled:n,placeholder:i,size:a,value:s,onChange:c,options:m,className:f,clearable:p,...g})}var k,A;function j(){return(j=e((()=>{k=t(),s(),i(),c(),S(),A=n(),O.__docgenInfo={description:`Специализированный селект для выбора цветового или статусного состояния. Используется там, где значению соответствует визуальный swatch.`,methods:[],displayName:`StateSelect`,props:{placeholder:{required:!1,tsType:{name:`string`},description:``},options:{required:!1,tsType:{name:`unknown`},description:``,defaultValue:{value:`DEFAULT_VALUE_STATES`,computed:!0}},stateMeta:{required:!1,tsType:{name:`Partial`,elements:[{name:`Record`,elements:[{name:`State`},{name:`signature`,type:`object`,raw:`{
|
|
2
|
-
label?: string;
|
|
3
|
-
icon?: ReactNode;
|
|
4
|
-
}`,signature:{properties:[{key:`label`,value:{name:`string`,required:!1}},{key:`icon`,value:{name:`ReactNode`,required:!1}}]}}],raw:`Record<State, StateMeta>`}],raw:`Partial<Record<State, StateMeta>>`},description:``},className:{required:!1,tsType:{name:`string`},description:``},clearable:{required:!1,tsType:{name:`boolean`},description:``}},composes:[`Omit`]}})))()}export{j as n,O as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{a as t,i as n,t as r}from"./array-D-_yMMUK-BQ0uu1hZ.js";import{C as i,d as a,f as o,g as s,n as c,p as l,s as u,w as d,y as f}from"./odata-service-CWkHASdw-CXhFi03v.js";function ee(){for(let e of ue)b.set(e.name,{...y,...e})}function p(e){return b.get(e)}function te(e){if(typeof e!=`string`)return e;let t=p(e);if(!t)throw Error(`Предустановка "${e}" не найдена`);return t}function ne(e){let t=[...e.keys??[]],n=n=>{if(!Number.isInteger(n)||n<0){e.instrumentation?.onOutOfRangeIndex?.(n);return}if(e.instrumentation?.onReadIndex?.(n),n>=t.length){e.instrumentation?.onOutOfRangeIndex?.(n);return}return t[n]};return{rowData:e.rowData,rawValue:e.rawValue,columnId:e.columnId,key:n,value:t=>{let r=n(t);if(r)return e.rowData[r]},num:t=>{let r=n(t);return r?f(e.rowData[r]):0}}}function re(e){let t=new Map,n=[];for(let r of e){let e=r.id.trim();if(!e)throw Error(`Formula id для RowBasedFormatter не может быть пустым`);if(t.has(e))throw Error(`Найден дублирующийся formulaId в RowBasedFormatter: ${e}`);let i=Object.freeze({...r,id:e,name:r.name.trim(),description:r.description.trim()});t.set(e,i),n.push(i)}return Object.freeze({list:Object.freeze(n),byId:t})}function m(e){let t=e?.trim();if(t)return de.byId.get(t)}function h(e,t,n){e.errors.push({code:t,message:n})}function g(e,t,n){e.warnings.push({code:t,message:n})}function ie(e){return[...e].sort((e,t)=>e-t)}function _(e,t){return e.reduce((e,n,r)=>(e[n]=(r+1)*t,e),{})}function ae(e,t){if(!e.formulaId.trim()){h(t,`step_row_based_override_formula_id_empty`,`Для rowBasedOverride (formula) необходимо заполнить formulaId.`);return}let n=m(e.formulaId),r=[...e.dependencyIds??[]];if(!n){h(t,`step_row_based_override_formula_not_found`,`Формула rowBasedOverride не найдена в реестре.`);return}let i=new Set,a=new Set,o=0,s=e=>{try{let t=ne({rowData:e,rawValue:100,columnId:`__validation__`,keys:r,instrumentation:{onReadIndex:e=>{i.add(e)},onOutOfRangeIndex:e=>{a.add(e)}}});n.fn(t)}catch{o+=1}};s(_(r,100)),s(_(r,-100));let c=ie(i),l=c.length>0?c[c.length-1]+1:0;a.size>0&&h(t,`step_row_based_override_dependency_index_out_of_range`,`Формула rowBasedOverride обращается к несуществующим индексам. Минимально требуется зависимостей: ${l}, выбрано: ${r.length}.`),c.length===0&&g(t,`step_row_based_override_formula_does_not_use_dependencies`,`Формула rowBasedOverride не использует dependencyIds.`);let u=r.filter((e,t)=>!i.has(t));u.length>0&&g(t,`step_row_based_override_unused_dependencies`,`Выбраны, но не используются формулой rowBasedOverride: ${u.join(`, `)}.`),o>0&&g(t,`step_row_based_override_formula_runtime_error`,`На тестовых данных формула rowBasedOverride завершилась с ошибкой.`)}function v(e,t){let n=new Set,r={normalizeLeadingZeros:0,rowBasedOverride:0,resolveValueState:0,typedValueFormat:0};for(let i of e){let e=i.id.trim();if(!e){h(t,`step_id_duplicate`,`Шаг pipeline не может иметь пустой id.`);continue}switch(n.has(e)&&h(t,`step_id_duplicate`,`Найден дублирующийся id шага pipeline: ${e}.`),n.add(e),i.type){case`normalizeLeadingZeros`:r.normalizeLeadingZeros+=1;break;case`rowBasedOverride`:r.rowBasedOverride+=1,i.config.mode===`field`&&!i.config.fieldKey.trim()&&h(t,`step_row_based_override_field_key_empty`,`Для rowBasedOverride (field) необходимо заполнить fieldKey.`),i.config.mode===`formula`&&ae(i.config,t);break;case`resolveValueState`:r.resolveValueState+=1,i.config.resolver.kind===`threshold`&&i.config.resolver.states.length!==i.config.resolver.thresholds.length+1&&h(t,`step_threshold_states_count_invalid`,`Для threshold-резолвера количество states должно быть равно thresholds + 1.`);break;case`typedValueFormat`:if(r.typedValueFormat+=1,i.config?.numberPresetName!==void 0){let e=i.config.numberPresetName.trim();if(!e){h(t,`step_typed_value_format_preset_empty`,`Для typedValueFormat указан пустой numberPresetName.`);break}p(e)||h(t,`step_typed_value_format_preset_not_found`,`Для typedValueFormat указан неизвестный пресет: ${e}.`)}}}r.normalizeLeadingZeros>1&&h(t,`step_normalize_leading_zeros_multiple`,`В pipeline может быть только один шаг normalizeLeadingZeros.`),r.rowBasedOverride>1&&h(t,`step_row_based_override_multiple`,`В pipeline может быть только один шаг rowBasedOverride.`),r.resolveValueState>1&&h(t,`step_resolve_value_state_multiple`,`В pipeline может быть только один шаг resolveValueState.`),r.typedValueFormat>1&&h(t,`step_typed_value_format_multiple`,`В pipeline может быть только один шаг typedValueFormat.`);let i=e.findIndex(e=>e.type===`resolveValueState`),a=e.findIndex(e=>e.type===`typedValueFormat`);i!==-1&&a!==-1&&a<i&&h(t,`step_typed_before_value_state`,`Шаг typedValueFormat не может выполняться до шага resolveValueState.`);for(let n of e)n.type===`resolveValueState`&&!n.config.icon?.enabled&&n.config.icon?.showValue===!1&&g(t,`step_value_hidden_without_icon`,`Для resolveValueState установлено showValue=false при выключенной иконке: значение не будет отображаться.`)}function oe(e){let t={errors:[],warnings:[]};return v(e.steps,t),{ok:t.errors.length===0,errors:t.errors,warnings:t.warnings,plan:t.errors.length===0?{steps:[...e.steps]}:void 0}}function se(e,t,n){let r=new Map(e.map(e=>[e.id,e])),i=new Map,a=new Map;for(let t of e)i.set(t.id,[]),a.set(t.id,[]);for(let e of t){let t=e.source.trim(),o=e.target.trim();if(!r.has(t)||!r.has(o)){h(n,`edge_node_not_found`,`Ребро ${e.id} ссылается на несуществующий узел: ${t} -> ${o}.`);continue}i.get(t)?.push(o),a.get(o)?.push(t)}let o=e.filter(e=>e.type===`source`),s=e.filter(e=>e.type===`sink`);if(o.length!==1&&h(n,`source_count_invalid`,`В графе должен быть ровно один узел source.`),s.length!==1&&h(n,`sink_count_invalid`,`В графе должен быть ровно один узел sink.`),n.errors.length>0)return;let c=o[0].id,l=s[0].id;for(let t of e){let e=a.get(t.id)?.length??0,r=i.get(t.id)?.length??0;if(t.type===`source`){e!==0&&h(n,`source_incoming_invalid`,`Узел source не должен иметь входящих рёбер.`),r!==1&&h(n,`node_degree_invalid`,`Узел source должен иметь ровно одно исходящее ребро.`);continue}if(t.type===`sink`){r!==0&&h(n,`sink_outgoing_invalid`,`Узел sink не должен иметь исходящих рёбер.`),e!==1&&h(n,`node_degree_invalid`,`Узел sink должен иметь ровно одно входящее ребро.`);continue}(e!==1||r!==1)&&h(n,`node_degree_invalid`,`Узел ${t.id} должен иметь ровно одно входящее и одно исходящее ребро для линейного pipeline.`)}if(n.errors.length>0)return;let u=new Set,d=[],f=c;for(;;){if(u.has(f)){h(n,`path_cycle_detected`,`В графе pipeline обнаружен цикл.`);return}if(u.add(f),d.push(f),f===l)break;let e=i.get(f)??[];if(e.length!==1){h(n,`path_broken`,`Не удалось построить линейный путь от source к sink.`);return}f=e[0]}if(u.size!==e.length){h(n,`path_disconnected_nodes`,`Граф содержит узлы, которые не входят в линейный путь source -> sink.`);return}return d}function ce(e){let t={errors:[],warnings:[]};if(!e.nodes.length)return h(t,`path_broken`,`Граф pipeline не содержит узлов.`),{ok:!1,errors:t.errors,warnings:t.warnings};let n=new Map;for(let r of e.nodes){let e=r.id.trim();if(!e){h(t,`node_id_duplicate`,`Узел pipeline не может иметь пустой id.`);continue}if(n.has(e)){h(t,`node_id_duplicate`,`Найден дублирующийся id узла pipeline: ${e}.`);continue}n.set(e,r)}let r=new Set;for(let n of e.edges){let e=n.id.trim();if(!e){h(t,`edge_id_duplicate`,`Ребро pipeline не может иметь пустой id.`);continue}if(r.has(e)){h(t,`edge_id_duplicate`,`Найден дублирующийся id ребра pipeline: ${e}.`);continue}r.add(e)}if(t.errors.length>0)return{ok:!1,errors:t.errors,warnings:t.warnings};let i=se(e.nodes,e.edges,t);if(!i)return{ok:!1,errors:t.errors,warnings:t.warnings};let a=[];for(let e of i){let t=n.get(e);if(!(!t||t.type===`source`||t.type===`sink`))switch(t.type){case`normalizeLeadingZeros`:a.push({id:t.id,type:`normalizeLeadingZeros`,config:t.config?{...t.config}:void 0});break;case`rowBasedOverride`:a.push({id:t.id,type:`rowBasedOverride`,config:t.config.mode===`formula`?{...t.config,dependencyIds:t.config.dependencyIds?[...t.config.dependencyIds]:void 0}:{...t.config}});break;case`resolveValueState`:a.push({id:t.id,type:`resolveValueState`,config:{resolver:t.config.resolver.kind===`fixed`?{kind:`fixed`,entries:{...t.config.resolver.entries},fallbackState:t.config.resolver.fallbackState}:{kind:`threshold`,thresholds:t.config.resolver.thresholds.map(e=>typeof e==`number`?e:{...e}),states:[...t.config.resolver.states],invalidState:t.config.resolver.invalidState},icon:t.config.icon?{...t.config.icon}:void 0}});break;case`typedValueFormat`:a.push({id:t.id,type:`typedValueFormat`,config:t.config?{...t.config}:void 0})}}return v(a,t),{ok:t.errors.length===0,errors:t.errors,warnings:t.warnings,plan:t.errors.length===0?{steps:a}:void 0}}function le(e){let t={errors:[],warnings:[]};if(!e)return h(t,`config_not_defined`,`Конфигурация pipeline не задана.`),{ok:!1,errors:t.errors,warnings:t.warnings};if(e.version!==1)return h(t,`unsupported_version`,`Неподдерживаемая версия pipeline: ${String(e.version)}.`),{ok:!1,errors:t.errors,warnings:t.warnings};if(!e.plan&&!e.graph)return h(t,`graph_or_plan_required`,`Для pipeline должен быть задан хотя бы один источник: graph или plan.`),{ok:!1,errors:t.errors,warnings:t.warnings};if(e.plan){let n=oe(e.plan);if(t.errors.push(...n.errors),t.warnings.push(...n.warnings),n.ok&&n.plan)return{ok:!0,errors:t.errors,warnings:t.warnings,plan:n.plan};if(e.graph)g(t,`path_broken`,`Линейный plan невалиден. Выполнена попытка построить план из graph.`),t.errors.length=0;else return{ok:!1,errors:t.errors,warnings:t.warnings}}if(e.graph){let n=ce(e.graph);return{ok:n.ok,errors:[...t.errors,...n.errors],warnings:[...t.warnings,...n.warnings],plan:n.plan}}return{ok:!1,errors:t.errors,warnings:t.warnings}}var y,ue,b,de;function fe(){return(fe=e((()=>{s(),y={decimals:1,decimalSeparator:`,`,grouping:!0,groupingSeparator:new Intl.NumberFormat(`ru-RU`).formatToParts(1e3).find(e=>e.type===`group`)?.value??`\xA0`,groupingSize:3},Object.freeze({integer:`integer`,decimal:`decimal`,decimal2:`decimal-2`,decimal3:`decimal-3`,currency:`currency`,price:`price`,percent:`percent`,tonnage:`tonnage`,compactCurrency:`compact-currency`,compactCurrencyRound:`compact-currency-round`,compactPercent:`compact-percent`,compactPercentRound:`compact-percent-round`,compactTonnage:`compact-tonnage`,compactTonnageRound:`compact-tonnage-round`}),ue=[{name:`integer`,decimals:0,decimalSeparator:``},{name:`decimal`},{name:`decimal-2`,decimals:2},{name:`decimal-3`,decimals:3},{name:`currency`,decimals:0,decimalSeparator:``},{name:`price`,decimals:0,decimalSeparator:``},{name:`percent`,decimals:2},{name:`tonnage`},{name:`compact-currency`,decimals:0,decimalSeparator:``,compact:{}},{name:`compact-currency-round`,decimals:0,decimalSeparator:``,compact:{roundingMode:`round`}},{name:`compact-percent`,decimals:2,compact:{maxDecimals:2}},{name:`compact-percent-round`,decimals:2,compact:{maxDecimals:2,roundingMode:`round`}},{name:`compact-tonnage`,compact:{maxDecimals:1}},{name:`compact-tonnage-round`,compact:{maxDecimals:1,roundingMode:`round`}}],b=new Map,ee(),de=re([])})))()}function x(e){return e!=null}function S(){return(S=e((()=>{})))()}function pe(e){let t=new Map,n=[];for(let r of e){let e=r.id.trim();if(!e)throw Error(`Formula id не может быть пустым`);if(t.has(e))throw Error(`Найден дублирующийся formulaId: ${e}`);let i=Object.freeze({...r,id:e,name:r.name.trim(),description:r.description.trim(),keywords:r.keywords?[...r.keywords]:void 0});t.set(e,i),n.push(i)}return Object.freeze({list:Object.freeze(n),byId:t})}function me(e){let t=e?.trim();if(t)return C.byId.get(t)}function he(e){let t=Number(e);return Number.isFinite(t)?t:0}function ge(e){let t=me(e.formulaId);if(!t)return{ok:!1,reason:`formula_not_found`};let n=[...e.keys??[]],r={},i={key:e=>Number.isInteger(e)&&e>=0&&e<n.length?n[e]:void 0,value:e=>{if(!Number.isInteger(e)||e<0||e>=n.length)return;let t=n[e];if(t)return r[t]},num:e=>{if(!Number.isInteger(e)||e<0||e>=n.length)return 0;let t=n[e];return t?he(r[t]):0}};return{ok:!0,execute:e=>{r=e;try{let e=t.fn(i);return Number.isFinite(e)?{ok:!0,value:e}:{ok:!1,reason:`invalid_result`}}catch{return{ok:!1,reason:`runtime_error`}}}}}var C;function w(){return(w=e((()=>{C=pe([])})))()}function _e(e,t){if(!Number.isFinite(e))throw RangeError(`Количество должно быть конечным числом.`);switch(G.select(e)){case`one`:return t.one;case`few`:return t.few;case`many`:return t.many;default:return t.other??t.few}}function ve(e,t){return`${e} ${_e(e,t)}`}function ye(e,t){let n=(e||``).toLowerCase().replace(/^0+/,``),r=(t||``).toLowerCase().replace(/^0+/,``);return n.startsWith(r)}function be(e,t){let n=r(e);if(n)return n.length>t?`${n.slice(0,t)}...`:n}function T(e,t,n,r=0,i=0,a=0,o=0){return new Date(e,t,n,r,i,a,o)}function E(e){return T(e.getFullYear(),e.getMonth(),e.getDate(),0,0,0,0)}function D(e){return T(e.getFullYear(),e.getMonth(),e.getDate(),23,59,59,0)}function O(e){return T(e.getFullYear(),e.getMonth(),1,0,0,0,0)}function xe(e){return T(e.getFullYear(),0,1,0,0,0,0)}function Se(e,t=1){let n=Number.isInteger(t)?(t%7+7)%7:1,r=E(e);return k(r,-((r.getDay()-n+7)%7))}function k(e,t){return T(e.getFullYear(),e.getMonth(),e.getDate()+t,0,0,0,0)}function A(e,t){return T(e.getFullYear(),e.getMonth()+t,e.getDate(),0,0,0,0)}function Ce(e,t){return T(e.getFullYear()+t,e.getMonth(),e.getDate(),0,0,0,0)}function we(e,t){return!(e instanceof Date)||!(t instanceof Date)?!1:e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()}function j(e){return e instanceof Date&&Number.isFinite(e.getTime())}function Te(e){return e??`sunday`}function Ee(e){return e??`day`}function De(e,t={}){if(!j(e))return null;switch(Ee(t.selectionMode)){case`day`:return{start:E(e),end:D(e)};case`week`:{let n=Se(e),r=K[Te(t.weekEndDay)];return{start:n,end:D(k(n,r))}}case`month`:return{start:O(e),end:D(T(e.getFullYear(),e.getMonth()+1,0))};case`year`:return{start:xe(e),end:D(T(e.getFullYear(),11,31))};default:return null}}function Oe(e,t){if(!j(e)||!t)return!1;let n=E(e).getTime();return n>=t.start.getTime()&&n<=t.end.getTime()}function ke(e,t={}){return!(!e||t.minDate&&e.start.getTime()<E(t.minDate).getTime()||t.maxDate&&e.end.getTime()>D(t.maxDate).getTime())}function M(e){return e instanceof Date&&Number.isFinite(e.getTime())}function N(e){return Array.isArray(e)}function P(e){return new Date(e.getTime())}function Ae(e,t){return e.getTime()<=t.getTime()?[e,t]:[t,e]}function je(e){if(N(e)){let[t,n]=e,r=M(t),i=M(n);return r&&i?Ae(t,n):r?[t,t]:i?[n,n]:null}return M(e)?[e,e]:null}function Me(e,t={}){let n=je(e);if(!n)return null;let[r,i]=n;return t.timeMode===`preserve`?[P(r),P(i)]:[E(r),D(i)]}function F(e){return Date.UTC(e.getFullYear(),e.getMonth(),e.getDate())}function Ne(e){let t=Me(e);if(!t)return null;let[n,r]=t;return Math.floor((F(r)-F(n))/q)+1}function I(e){return E(e)}function Pe({referenceDate:e}){let t=I(e),n=O(t),r=k(t,-1);return[n,D(r<n?n:r)]}function Fe({referenceDate:e}){let t=I(e);return[O(t),D(t)]}function Ie({referenceDate:e}){let t=I(e);return[t,D(t)]}function Le({referenceDate:e}){let t=k(I(e),-1);return[t,D(t)]}function Re({referenceDate:e}){let t=I(e);return[E(A(t,-1)),D(t)]}function L(e,t){switch(t){case`round`:return Math.round(e);case`floor`:return Math.floor(e);case`ceil`:return Math.ceil(e);case`trunc`:return Math.trunc(e)}}function ze(e,t,n){if(t===0)return L(e,n);let r=10**t;return L(e*r,n)/r}function Be(e){return e>=10?0:1}function Ve(e,t){if(t===0)return 0;let n=e.toFixed(t),r=n.indexOf(`.`);return r===-1?0:n.slice(r+1).replace(/0+$/,``).length}function He(e,t){return t.findIndex(t=>e>=t.value)}function Ue(e,t){return{name:e.name,decimals:t,decimalSeparator:t>0?e.decimalSeparator||xt:e.decimalSeparator,grouping:e.grouping,groupingSeparator:e.groupingSeparator,groupingSize:e.groupingSize}}function R(e,t,n,r,i){let a=n.units[t];if(!a)return i(e,r);let o=e/a.value,s=n.maxDecimals??Be(o),c=ze(o,s,n.roundingMode);return c>=1e3&&t>0?R(e,t-1,n,r,i):`${i(c,Ue(r,Ve(c,s)))}${n.suffixSeparator}${a.suffix}`}function We(e){let{minCompactValue:t=Y.minCompactValue,roundingMode:n=Y.roundingMode,suffixSeparator:r=Y.suffixSeparator,maxDecimals:i,units:a=J}=e.options,o=Math.abs(e.value);if(o<t)return e.formatPlainNumber(e.value,e.preset);let s=He(o,a);return s===-1?e.formatPlainNumber(e.value,e.preset):`${e.value<0?`-`:``}${R(o,s,{roundingMode:n,suffixSeparator:r,maxDecimals:i,units:a},e.preset,e.formatPlainNumber)}`}function Ge(e){let t=l(e);return typeof t==`number`?t===0:typeof t==`bigint`&&t===0n}function z(e,t){let n=`${e}:${+!!t}`,r=X.get(n);return r||(r=new Intl.NumberFormat(`ru-RU`,{minimumFractionDigits:e,maximumFractionDigits:e,useGrouping:t}),X.set(n,r)),r}function Ke(e){return e.groupingSize===3&&(e.groupingSeparator===y.groupingSeparator||!e.grouping)&&(e.decimalSeparator===`,`||e.decimals===0)}function qe(e,t,n){return z(t,n).format(e)}function Je(e,t){let n=z(t.decimals,t.grouping).formatToParts(e),r=``;for(let e of n)e.type===`group`?r+=t.groupingSeparator:e.type===`decimal`?r+=t.decimalSeparator:r+=e.value;return r}function Ye(e,t){let n=z(t.decimals,!1).format(e),r=n.indexOf(`,`),i=r===-1?n:n.slice(0,r),a=r===-1?null:n.slice(r+1),o=i.startsWith(`-`),s=o?i.slice(1):i,c=t.groupingSize,l=[];for(let e=s.length;e>0;e-=c)l.unshift(s.slice(Math.max(0,e-c),e));let u=(o?`-`:``)+l.join(t.groupingSeparator);return a!==null&&(u+=t.decimalSeparator+a),u}function B(e,t){return Ke(t)?qe(e,t.decimals,t.grouping):t.groupingSize===3||!t.grouping?Je(e,t):Ye(e,t)}function Xe(e,t){if(typeof e==`string`&&e.trim()===``)return`0`;let n=Number(e);if(!Number.isFinite(n))return`0`;let r=te(t);return r.compact?We({value:n,preset:r,options:r.compact,formatPlainNumber:B}):B(n,r)}function Ze(e,t){let n=typeof e==`number`?e:Number(e);if(!Number.isFinite(n))return e;let r=String(n);if(typeof t==`number`&&t>0){let e=0,n=``,i=r.charCodeAt(0);(i===45||i===43)&&(n=r[0],e=1);let a=r.indexOf(`.`,e),o=a===-1?r.length:a,s=r.slice(e,o),c=a===-1?``:r.slice(a);s||=`0`;let l=s.length;return l<t&&(s=`0`.repeat(t-l)+s),n+s+c}return r}function Qe(e){let t=5381;for(let n=0;n<e.length;n++)t=(t<<5)+t+e.charCodeAt(n)>>>0;return`id_`+t.toString(36)}function V(e,t){let n=Q.get(e);if(n)return{id:n,isNew:!1};let r=Qe(e),i=t();return Z.set(r,i),Q.set(e,r),{id:r,isNew:!0}}function $e(e,t){let n=Z.get(e);return n?n(t):`none`}function et(e,t){return`fixed|${e.map(([e,t])=>`${e}:${t}`).join(`,`)}|${t}`}function tt(e,t){let n=new Map(Object.entries(e));return e=>{if(e==null)return t;let r=String(e);return n.get(r)??t}}function nt(e){let t=e.fallbackState??`none`,n=et(Object.entries(e.entries).sort(([e],[t])=>d(e,t)),t);return{entries:e.entries,fallbackState:t,canonicalKey:n}}function rt(e){let{entries:t,fallbackState:n,canonicalKey:r}=nt(e),{id:i}=V(r,()=>tt(t,n));return i}function it(e){return typeof e==`number`?{value:e,boundary:`upper`}:{value:e.value,boundary:e.boundary??`upper`}}function at(e,t,n){return`threshold|${e.map(e=>`${e.value}:${e.boundary}`).join(`,`)}|${t.join(`,`)}|${n}`}function ot(e,t){if(t.length!==e.length+1)throw Error(`Количество состояний (${t.length}) должно быть равно количеству порогов + 1 (${e.length+1})`);let n=new Set;for(let t of e)n.has(t.value)&&console.warn(`Дублирующееся пороговое значение: ${t.value}`),n.add(t.value)}function st(e,t,n){let r=e.map(e=>e.value),i=e.map(e=>e.boundary===`lower`),a=[...t];return e=>{if(e===``||e==null)return n;let t=+e;if(!Number.isFinite(t))return n;for(let e=0;e<r.length;e++)if(i[e]?t<=r[e]:t<r[e])return a[e];return a[a.length-1]}}function ct(e){let t=e.invalidState??`none`,n=e.thresholds.map(it).sort((e,t)=>e.value-t.value);return ot(n,e.states),{sortedThresholds:n,invalidState:t,canonicalKey:at(n,e.states,t),states:e.states}}function lt(e){let{sortedThresholds:t,invalidState:n,canonicalKey:r,states:i}=ct(e),{id:a}=V(r,()=>st(t,i,n));return a}function H(e,t,r){if(!x(e))return``;let i=o(t.type);if(i===`number`){let t=r?.numberPresetName?.trim();return Xe(e,t&&p(t)?t:$.number)}if(i===`date`){let t=r?.datePresetName?.trim(),n=t&&a(t)?t:$.date;return c(u(e),n)}return n(e)}function ut(e){if(e===`success`||e===`warning`||e===`error`||e===`information`)return e}function dt(e,t){switch(e.rowKind){case`group`:case`plain`:case`tree`:return!0;case`totals`:return t===`formula`}}function ft(e){let t=le(e.config);if(!t.ok||!t.plan)return t.errors.some(e=>e.code===`step_row_based_override_formula_not_found`)?{ok:!1,reason:`row_based_formula_not_found`}:{ok:!1,reason:`pipeline_invalid`};let{steps:n}=t.plan,r=n.some(e=>e.type===`rowBasedOverride`),i=n.some(e=>e.type===`typedValueFormat`),a=n.find(e=>e.type===`resolveValueState`),o=a?.config.resolver.kind===`fixed`?rt({entries:a.config.resolver.entries,fallbackState:a.config.resolver.fallbackState}):a?.config.resolver.kind===`threshold`?lt({thresholds:a.config.resolver.thresholds,states:a.config.resolver.states,invalidState:a.config.resolver.invalidState}):void 0,s=n.find(e=>e.type===`rowBasedOverride`),c=s?.config.mode===`formula`?m(s.config.formulaId):void 0;return s?.config.mode===`formula`&&!c?{ok:!1,reason:`row_based_formula_not_found`}:{ok:!0,executor:{hasRowBasedOverride:r,hasTypedValueFormat:i,execute:t=>{let r=t.value,a=`none`,s=!1,l=!0,u=`left`,d;for(let i of n)switch(i.type){case`normalizeLeadingZeros`:r=Ze(r,i.config?.fixed);break;case`rowBasedOverride`:if(!dt(t,i.config.mode))break;if(i.config.mode===`field`){let e=t.rowData[i.config.fieldKey];if(e==null&&i.config.fallbackToRaw!==!1)break;r=e;break}if(!c)break;try{let e=c.fn(ne({rowData:t.rowData,rawValue:r,columnId:t.columnId,keys:i.config.dependencyIds}));if(e==null&&i.config.fallbackToRaw!==!1)break;r=e}catch{i.config.fallbackToRaw===!1&&(r=void 0)}break;case`resolveValueState`:if(!o)break;a=$e(o,r),s=i.config.icon?.enabled??!1,l=i.config.icon?.showValue??!0,u=i.config.icon?.position??`left`,d=s?ut(a):void 0;break;case`typedValueFormat`:r=H(r,e.column,i.config)}return{value:r,state:a,icon:d,showIcon:s,showValue:l,iconPosition:u,hasTypedValueFormat:i}}}}}function U(e,t){return{value:e,state:`none`,showIcon:!1,showValue:!0,iconPosition:`left`,overflowTooltip:t}}function W(e,t){return t?H(e,t):n(e)}function pt(e){if(!e.formulaId)return;let t=ge({formulaId:e.formulaId,keys:e.formulaDependencies});return t.ok?t.execute:Ct}function mt(e,t,n){if(!n.formulaId)return{value:e,shouldRenderEmpty:!1};if(!n.formulaExecutor)return{value:n.purelyDerived?void 0:e,shouldRenderEmpty:n.purelyDerived===!0};let r=n.formulaExecutor(t);return r.ok?{value:r.value,shouldRenderEmpty:!1}:{value:n.purelyDerived?void 0:e,shouldRenderEmpty:n.purelyDerived===!0}}function ht(e,t,n){let r=n.formattersPipelineExecutor;if(!r)return U(W(t,n),n.overflowTooltip===!0);let i=r.execute({value:t,rowData:e.rowData,rowKind:e.rowKind,isGroupRow:e.rowKind===`group`,isTotalsRow:e.rowKind===`totals`,rowLevel:e.rowLevel??0,groupingIds:e.groupingIds??[],columnId:n.id});return{value:i.hasTypedValueFormat?i.value:W(i.value,n),state:i.state,icon:i.icon,showIcon:i.showIcon,showValue:i.showValue,iconPosition:i.iconPosition,overflowTooltip:n.overflowTooltip===!0}}function gt(e,t,n){return t.shouldRenderEmpty||n.emptyWhenZero&&Ge(t.value)?{...e,value:``}:e}function _t(e){let t=pt(e);if(t?e.formulaExecutor=t:delete e.formulaExecutor,!e.formattersPipeline)return delete e.formattersPipelineExecutor,e;let n=ft({config:e.formattersPipeline,column:e});return n.ok?e.formattersPipelineExecutor=n.executor:delete e.formattersPipelineExecutor,e}function vt(e){let t={};for(let[n,r]of Object.entries(e))r&&(t[n]=_t(r));return t}function yt(e){if(!e.field)return U(n(e.rawValue),!1);let t=mt(e.rawValue,e.rowData,e.field);return gt(ht(e,t.value,e.field),t,e.field)}function bt(e,t){switch(e){case`success`:return`statusSuccess`;case`warning`:return`statusWarning`;case`error`:return`statusError`;case`information`:return`statusInfo`;default:return t}}var G,K,q,J,Y,xt,X,Z,Q,$,St,Ct,wt,Tt;function Et(){return(Et=e((()=>{t(),s(),fe(),i(),S(),w(),G=new Intl.PluralRules(`ru-RU`),K={friday:4,saturday:5,sunday:6},q=864e5,J=[{value:0xe8d4a51000,suffix:`трлн`},{value:1e9,suffix:`млрд`},{value:1e6,suffix:`млн`},{value:1e3,suffix:`тыс`}],Y={minCompactValue:1e3,roundingMode:`trunc`,suffixSeparator:` `},xt=`,`,X=new Map,Z=new Map,Q=new Map,$=Object.freeze({number:`decimal`,date:`date`}),St=Object.freeze([{id:`normalizeLeadingZeros`,name:`Нормализация ведущих нулей`,description:`Нормализует числовое значение по правилам fixed.`},{id:`rowBasedOverride`,name:`Контекстная формула`,description:`Подменяет значение из другого поля текущей строки или отдельной формулы.`},{id:`resolveValueState`,name:`Определение состояния значения`,description:`Вычисляет value state и опционально настраивает отображение статусной иконки.`},{id:`typedValueFormat`,name:`Типизированное форматирование`,description:`Формирует итоговый внешний вид значения по типу и роли столбца.`}]),new Map(St.map(e=>[e.id,e])),Ct=()=>({ok:!1,reason:`formula_not_found`}),wt=[`none`,`information`,`success`,`warning`,`error`],Tt={"":`transparent`,none:`var(--content-1)`,information:`var(--status-info-text)`,success:`var(--status-success-text)`,warning:`var(--status-warning-text)`,error:`var(--status-error-text)`}})))()}export{E as C,x as E,ye as S,S as T,Re as _,Ne as a,N as b,we as c,Tt as d,Pe as f,ve as g,A as h,yt as i,wt as l,T as m,De as n,Oe as o,Fe as p,bt as r,Ie as s,Le as t,vt as u,be as v,Ce as w,ke as x,Et as y};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./iframe-I7-gyNVJ.js";e();
|