@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,8 +1,10 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.js";function o(e){let t={code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,strong:`strong`,table:`table`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation Lib/Infrastructure/PWA`}),`
|
|
2
2
|
`,(0,c.jsx)(t.h1,{id:`pwa`,children:`PWA`}),`
|
|
3
3
|
`,(0,c.jsx)(t.p,{children:`Модуль PWA состоит из двух публичных входов с разной ответственностью:`}),`
|
|
4
4
|
`,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Import path`}),(0,c.jsx)(t.th,{children:`Что содержит`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/pwa`})}),(0,c.jsx)(t.td,{children:`React-hook обновления Service Worker и все функции cache policy`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/pwa/sw-cache-policy`})}),(0,c.jsxs)(t.td,{children:[`Только чистый parser/builder политики `,(0,c.jsx)(t.code,{children:`x-sw-cache`}),`, без React update-flow`]})]})]})]}),`
|
|
5
5
|
`,(0,c.jsxs)(t.p,{children:[`Используйте точный subpath. Внутренний файл `,(0,c.jsx)(t.code,{children:`serviceWorker`}),` не является самостоятельным публичным export, даже если отдельные функции используются самим hook.`]}),`
|
|
6
|
+
`,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`useBrowserOnlineStatus()`}),` возвращает browser hint `,(0,c.jsx)(t.code,{children:`navigator.onLine`}),` через `,(0,c.jsx)(t.code,{children:`useSyncExternalStore`}),` и подписывается на события
|
|
7
|
+
`,(0,c.jsx)(t.code,{children:`online`}),`/`,(0,c.jsx)(t.code,{children:`offline`}),`. Это сигнал для UX и запуска revalidation, а не доказательство доступности конкретного backend.`]}),`
|
|
6
8
|
`,(0,c.jsx)(t.h2,{id:`часть-1-обновление-service-worker`,children:`Часть 1. Обновление Service Worker`}),`
|
|
7
9
|
`,(0,c.jsx)(t.h3,{id:`задача-hook`,children:`Задача hook`}),`
|
|
8
10
|
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`import { useServiceWorkerUpdate } from "@ryuzaki13/react-foundation-lib/pwa";
|
|
@@ -257,4 +259,4 @@ buildSwCachePolicyValue(draft);
|
|
|
257
259
|
`,(0,c.jsxs)(t.h3,{id:`считать-forever-безопасным-default`,children:[`Считать `,(0,c.jsx)(t.code,{children:`forever`}),` безопасным default`]}),`
|
|
258
260
|
`,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`ttlMs: Infinity`}),` требует явной стратегии bust/invalidation. Без неё клиент может долго видеть устаревшие данные.`]}),`
|
|
259
261
|
`,(0,c.jsx)(t.h2,{id:`краткая-карта-api`,children:`Краткая карта API`}),`
|
|
260
|
-
`,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Экспорт`}),(0,c.jsx)(t.th,{children:`Публичный path`}),(0,c.jsx)(t.th,{children:`Назначение`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useServiceWorkerUpdate()`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`/pwa`})}),(0,c.jsx)(t.td,{children:`Регистрация, проверка и UI-состояние обновления SW`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`parseSwCachePolicy()`})}),(0,c.jsx)(t.td,{children:`оба`}),(0,c.jsx)(t.td,{children:`Разобрать текстовую политику`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`buildSwCachePolicyValue()`})}),(0,c.jsx)(t.td,{children:`оба`}),(0,c.jsx)(t.td,{children:`Собрать каноническую строку из draft`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`normalizeSwCacheName()`})}),(0,c.jsx)(t.td,{children:`оба`}),(0,c.jsx)(t.td,{children:`Подготовить безопасную часть cache name`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`resolveSwCacheCacheNameByPolicy()`})}),(0,c.jsx)(t.td,{children:`оба`}),(0,c.jsx)(t.td,{children:`Получить имя cache из валидной политики`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`ParsedSwCachePolicy`})}),(0,c.jsx)(t.td,{children:`оба`}),(0,c.jsx)(t.td,{children:`Тип разобранного результата`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`SwCachePolicyDraft`})}),(0,c.jsx)(t.td,{children:`оба`}),(0,c.jsx)(t.td,{children:`Тип данных формы/builder`})]})]})]})]})}function s(e={}){let{wrapper:t}={...n(),...e.components};return t?(0,c.jsx)(t,{...e,children:(0,c.jsx)(o,{...e})}):o(e)}var c;function l(){return(l=e((()=>{c=t(),r(),a()})))()}l();export{s as default};
|
|
262
|
+
`,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Экспорт`}),(0,c.jsx)(t.th,{children:`Публичный path`}),(0,c.jsx)(t.th,{children:`Назначение`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useServiceWorkerUpdate()`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`/pwa`})}),(0,c.jsx)(t.td,{children:`Регистрация, проверка и UI-состояние обновления SW`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useBrowserOnlineStatus()`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`/pwa`})}),(0,c.jsx)(t.td,{children:`Реактивный browser online/offline hint`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`parseSwCachePolicy()`})}),(0,c.jsx)(t.td,{children:`оба`}),(0,c.jsx)(t.td,{children:`Разобрать текстовую политику`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`buildSwCachePolicyValue()`})}),(0,c.jsx)(t.td,{children:`оба`}),(0,c.jsx)(t.td,{children:`Собрать каноническую строку из draft`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`normalizeSwCacheName()`})}),(0,c.jsx)(t.td,{children:`оба`}),(0,c.jsx)(t.td,{children:`Подготовить безопасную часть cache name`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`resolveSwCacheCacheNameByPolicy()`})}),(0,c.jsx)(t.td,{children:`оба`}),(0,c.jsx)(t.td,{children:`Получить имя cache из валидной политики`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`ParsedSwCachePolicy`})}),(0,c.jsx)(t.td,{children:`оба`}),(0,c.jsx)(t.td,{children:`Тип разобранного результата`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`SwCachePolicyDraft`})}),(0,c.jsx)(t.td,{children:`оба`}),(0,c.jsx)(t.td,{children:`Тип данных формы/builder`})]})]})]})]})}function s(e={}){let{wrapper:t}={...n(),...e.components};return t?(0,c.jsx)(t,{...e,children:(0,c.jsx)(o,{...e})}):o(e)}var c;function l(){return(l=e((()=>{c=t(),r(),a()})))()}l();export{s as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.js";function o(e){let t={a:`a`,blockquote:`blockquote`,code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,h4:`h4`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,table:`table`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation Lib/Infrastructure/Query Client`}),`
|
|
2
2
|
`,(0,c.jsx)(t.h1,{id:`query-client`,children:`Query Client`}),`
|
|
3
3
|
`,(0,c.jsxs)(t.p,{children:[`Модуль `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/query-client`}),` предоставляет общую инфраструктуру TanStack Query для browser-приложения:`]}),`
|
|
4
4
|
`,(0,c.jsxs)(t.ul,{children:[`
|
|
@@ -184,8 +184,9 @@ queryClient.cancelQueries({ queryKey });
|
|
|
184
184
|
`]}),`
|
|
185
185
|
`,(0,c.jsx)(t.h2,{id:`как-выбрать-cache-strategy`,children:`Как выбрать cache strategy`}),`
|
|
186
186
|
`,(0,c.jsx)(t.p,{children:`Перед созданием query ответьте на вопросы:`}),`
|
|
187
|
-
`,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Вопрос`}),(0,c.jsx)(t.th,{children:`Решение`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Нужны данные только пока открыта вкладка?`}),(0,c.jsxs)(t.td,{children:[`Обычная query без `,(0,c.jsx)(t.code,{children:`persistedQueryMeta`}),`.`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Данные публичные, тяжёлые и могут пережить reload?`}),(0,c.jsxs)(t.td,{children:[`Рассмотреть `,(0,c.jsx)(t.code,{children:`persistedQueryMeta`}),`.`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Данные зависят от пользователя, роли или server session?`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`sessionScopedQueryMeta`}),`.`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Нужно передать обновление другой открытой вкладке?`}),(0,c.jsx)(t.td,{children:`Broadcast installation и подходящее cache event.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`UI должен измениться до ответа mutation?`}),(0,c.jsx)(t.td,{children:`Optimistic update с обязательным rollback policy.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Server response авторитетен и уже содержит новое состояние?`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`setQueryData`}),`/`,(0,c.jsx)(t.code,{children:`onSuccessOptimistic`}),`.`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`После mutation нужен свежий server snapshot?`}),(0,c.jsxs)(t.td,{children:[`Scoped `,(0,c.jsx)(t.code,{children:`invalidateQueries`}),` с выбранным `,(0,c.jsx)(t.code,{children:`refetchType`}),`.`]})]})]})]}),`
|
|
188
|
-
`,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`persistedQueryMeta`}),` и `,(0,c.jsx)(t.code,{children:`sessionScopedQueryMeta`}),` взаимоисключающие.
|
|
187
|
+
`,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Вопрос`}),(0,c.jsx)(t.th,{children:`Решение`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Нужны данные только пока открыта вкладка?`}),(0,c.jsxs)(t.td,{children:[`Обычная query без `,(0,c.jsx)(t.code,{children:`persistedQueryMeta`}),`.`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Данные публичные, тяжёлые и могут пережить reload?`}),(0,c.jsxs)(t.td,{children:[`Рассмотреть `,(0,c.jsx)(t.code,{children:`persistedQueryMeta`}),`.`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Данные зависят от пользователя, роли или server session?`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`sessionScopedQueryMeta`}),`.`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Session snapshot явно разрешено читать offline?`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`createSessionQueryPersistenceMeta`}),` + active scope.`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Нужно передать обновление другой открытой вкладке?`}),(0,c.jsx)(t.td,{children:`Broadcast installation и подходящее cache event.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`UI должен измениться до ответа mutation?`}),(0,c.jsx)(t.td,{children:`Optimistic update с обязательным rollback policy.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Server response авторитетен и уже содержит новое состояние?`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`setQueryData`}),`/`,(0,c.jsx)(t.code,{children:`onSuccessOptimistic`}),`.`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`После mutation нужен свежий server snapshot?`}),(0,c.jsxs)(t.td,{children:[`Scoped `,(0,c.jsx)(t.code,{children:`invalidateQueries`}),` с выбранным `,(0,c.jsx)(t.code,{children:`refetchType`}),`.`]})]})]})]}),`
|
|
188
|
+
`,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`persistedQueryMeta`}),` и `,(0,c.jsx)(t.code,{children:`sessionScopedQueryMeta`}),` взаимоисключающие. Для узкого offline allowlist session data используется
|
|
189
|
+
отдельный `,(0,c.jsx)(t.code,{children:`sessionPersistence`}),` contract: он требует активную server-session identity и абсолютный `,(0,c.jsx)(t.code,{children:`expiresAt`}),`.`]}),`
|
|
189
190
|
`,(0,c.jsx)(t.h2,{id:`быстрый-старт`,children:`Быстрый старт`}),`
|
|
190
191
|
`,(0,c.jsx)(t.h3,{id:`bootstrap`,children:`Bootstrap`}),`
|
|
191
192
|
`,(0,c.jsx)(t.p,{children:`Инициализация выполняется один раз до обычного render приложения:`}),`
|
|
@@ -341,7 +342,8 @@ console.log(first === second); // false
|
|
|
341
342
|
}
|
|
342
343
|
});
|
|
343
344
|
`})}),`
|
|
344
|
-
`,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`Record<string, unknown>`}),` разрешает consumer-проекту добавлять собственную metadata. Infrastructure этого модуля читает
|
|
345
|
+
`,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`Record<string, unknown>`}),` разрешает consumer-проекту добавлять собственную metadata. Infrastructure этого модуля читает
|
|
346
|
+
`,(0,c.jsx)(t.code,{children:`persist`}),`, `,(0,c.jsx)(t.code,{children:`sessionScoped`}),` и явный `,(0,c.jsx)(t.code,{children:`sessionPersistence`}),` contract.`]}),`
|
|
345
347
|
`,(0,c.jsx)(t.h3,{id:`persistedquerymeta`,children:(0,c.jsx)(t.code,{children:`persistedQueryMeta`})}),`
|
|
346
348
|
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const persistedQueryMeta = { persist: true } as const;
|
|
347
349
|
`})}),`
|
|
@@ -370,6 +372,31 @@ export function dictionaryQueryOptions(dictionaryId: string) {
|
|
|
370
372
|
});
|
|
371
373
|
`})}),`
|
|
372
374
|
`,(0,c.jsxs)(t.p,{children:[`При смене сессии host обязан вызвать `,(0,c.jsx)(t.code,{children:`resetSessionScopedQueries`}),`.`]}),`
|
|
375
|
+
`,(0,c.jsx)(t.h3,{id:`session-scoped-offline-persistence`,children:`Session-scoped offline persistence`}),`
|
|
376
|
+
`,(0,c.jsx)(t.p,{children:`Только для явно согласованного offline allowlist создайте bounded metadata:`}),`
|
|
377
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`import {
|
|
378
|
+
createSessionQueryPersistenceMeta,
|
|
379
|
+
setSessionQueryPersistenceScope
|
|
380
|
+
} from "@ryuzaki13/react-foundation-lib/query-client";
|
|
381
|
+
|
|
382
|
+
await setSessionQueryPersistenceScope({
|
|
383
|
+
id: session.id,
|
|
384
|
+
expiresAt: session.expiresAt
|
|
385
|
+
});
|
|
386
|
+
|
|
387
|
+
queryOptions({
|
|
388
|
+
queryKey: ["opened-week", weekStart],
|
|
389
|
+
queryFn: fetchWeek,
|
|
390
|
+
meta: createSessionQueryPersistenceMeta({
|
|
391
|
+
cacheName: "opened-weeks",
|
|
392
|
+
maxEntries: 24
|
|
393
|
+
}),
|
|
394
|
+
networkMode: "offlineFirst"
|
|
395
|
+
});
|
|
396
|
+
`})}),`
|
|
397
|
+
`,(0,c.jsxs)(t.p,{children:[`Scope устанавливается отдельно от query contract, не содержит cookie secret/access token и меняет in-memory границу до очистки IndexedDB.
|
|
398
|
+
При `,(0,c.jsx)(t.code,{children:`null`}),`, истёкшем `,(0,c.jsx)(t.code,{children:`expiresAt`}),` или смене `,(0,c.jsx)(t.code,{children:`id`}),` старые session snapshots удаляются. `,(0,c.jsx)(t.code,{children:`networkMode: "offlineFirst"`}),` нужен, чтобы
|
|
399
|
+
TanStack вызвал persister до network pause. Cached data остаётся неавторитетным: write после reconnect обязан повторно получить серверный state.`]}),`
|
|
373
400
|
`,(0,c.jsx)(t.h3,{id:`meta-нельзя-совмещать`,children:`Meta нельзя совмещать`}),`
|
|
374
401
|
`,(0,c.jsx)(t.p,{children:`Неверно:`}),`
|
|
375
402
|
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`meta: {
|
|
@@ -382,11 +409,12 @@ export function dictionaryQueryOptions(dictionaryId: string) {
|
|
|
382
409
|
`,(0,c.jsxs)(t.ul,{children:[`
|
|
383
410
|
`,(0,c.jsxs)(t.li,{children:[`публичный/безопасный долгоживущий справочник → `,(0,c.jsx)(t.code,{children:`persistedQueryMeta`}),`;`]}),`
|
|
384
411
|
`,(0,c.jsxs)(t.li,{children:[`auth/session dependent data → `,(0,c.jsx)(t.code,{children:`sessionScopedQueryMeta`}),`;`]}),`
|
|
412
|
+
`,(0,c.jsxs)(t.li,{children:[`разрешённый bounded offline snapshot → `,(0,c.jsx)(t.code,{children:`createSessionQueryPersistenceMeta`}),`;`]}),`
|
|
385
413
|
`,(0,c.jsx)(t.li,{children:`обычные transient data → meta не нужна.`}),`
|
|
386
414
|
`]}),`
|
|
387
415
|
`,(0,c.jsx)(t.h2,{id:`настройка-project-adapter`,children:`Настройка project adapter`}),`
|
|
388
416
|
`,(0,c.jsx)(t.h3,{id:`зачем-нужен-adapter`,children:`Зачем нужен adapter`}),`
|
|
389
|
-
`,(0,c.jsxs)(t.p,{children:[`Foundation-пакет не знает имя SAP system, client, tenant или окружение конкретного приложения. `,(0,c.jsx)(t.code,{children:`QueryPersistenceProjectAdapter`}),` позволяет host передать устойчивый namespace и собственный buster:`]}),`
|
|
417
|
+
`,(0,c.jsxs)(t.p,{children:[`Foundation-пакет не знает имя SAP system, client, tenant или окружение конкретного приложения. `,(0,c.jsx)(t.code,{children:`QueryPersistenceProjectAdapter`}),` позволяет host передать устойчивый namespace и собственный buster. Текущая session identity задаётся отдельным runtime API и не входит в adapter:`]}),`
|
|
390
418
|
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`type QueryPersistenceProjectAdapter = {
|
|
391
419
|
persistenceBuster?: string;
|
|
392
420
|
resolveSystemIdentifier?: () => string | null | undefined;
|
|
@@ -531,7 +559,8 @@ if (storage) {
|
|
|
531
559
|
`,(0,c.jsx)(t.h3,{id:`createreactquerypersister`,children:(0,c.jsx)(t.code,{children:`createReactQueryPersister`})}),`
|
|
532
560
|
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const persister = createReactQueryPersister();
|
|
533
561
|
`})}),`
|
|
534
|
-
`,(0,c.jsxs)(t.p,{children:[`Возвращает
|
|
562
|
+
`,(0,c.jsxs)(t.p,{children:[`Возвращает routing-обёртку над `,(0,c.jsx)(t.code,{children:`experimental_createQueryPersister`}),` либо `,(0,c.jsx)(t.code,{children:`undefined`}),`, если IndexedDB недоступен. Обычные public query
|
|
563
|
+
идут в прежний persister, а query с `,(0,c.jsx)(t.code,{children:`sessionPersistence`}),` — в отдельный cache активной сессии с независимым `,(0,c.jsx)(t.code,{children:`maxEntries`}),`.`]}),`
|
|
535
564
|
`,(0,c.jsx)(t.p,{children:`Настройки foundation wrapper:`}),`
|
|
536
565
|
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`{
|
|
537
566
|
serialize: (query) => query,
|
|
@@ -1634,11 +1663,11 @@ npm run build
|
|
|
1634
1663
|
`,(0,c.jsx)(t.h3,{id:`queryclient-1`,children:`QueryClient`}),`
|
|
1635
1664
|
`,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Symbol`}),(0,c.jsx)(t.th,{children:`Вид`}),(0,c.jsx)(t.th,{children:`Назначение`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`QueryBroadcastOptions`})}),(0,c.jsx)(t.td,{children:`type`}),(0,c.jsx)(t.td,{children:`Global query/mutation error callbacks.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`createQueryClient`})}),(0,c.jsx)(t.td,{children:`function`}),(0,c.jsx)(t.td,{children:`Создаёт новый настроенный QueryClient.`})]})]})]}),`
|
|
1636
1665
|
`,(0,c.jsx)(t.h3,{id:`query-metadata-1`,children:`Query metadata`}),`
|
|
1637
|
-
`,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Symbol`}),(0,c.jsx)(t.th,{children:`Вид`}),(0,c.jsx)(t.th,{children:`Назначение`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`AppQueryMeta`})}),(0,c.jsx)(t.td,{children:`type`}),(0,c.
|
|
1666
|
+
`,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Symbol`}),(0,c.jsx)(t.th,{children:`Вид`}),(0,c.jsx)(t.th,{children:`Назначение`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`AppQueryMeta`})}),(0,c.jsx)(t.td,{children:`type`}),(0,c.jsx)(t.td,{children:`Public/session persistence и consumer metadata.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`SessionQueryPersistencePolicy`})}),(0,c.jsx)(t.td,{children:`type`}),(0,c.jsx)(t.td,{children:`Имя и bounded limit session cache.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`persistedQueryMeta`})}),(0,c.jsx)(t.td,{children:`const`}),(0,c.jsx)(t.td,{children:`Opt-in public persistence marker.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`sessionScopedQueryMeta`})}),(0,c.jsx)(t.td,{children:`const`}),(0,c.jsx)(t.td,{children:`Session reset marker без browser persistence.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`createSessionQueryPersistenceMeta`})}),(0,c.jsx)(t.td,{children:`function`}),(0,c.jsx)(t.td,{children:`Явный opt-in bounded persistence текущей server session.`})]})]})]}),`
|
|
1638
1667
|
`,(0,c.jsx)(t.h3,{id:`persistence-project-adapter`,children:`Persistence project adapter`}),`
|
|
1639
1668
|
`,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Symbol`}),(0,c.jsx)(t.th,{children:`Вид`}),(0,c.jsx)(t.th,{children:`Назначение`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`QueryPersistenceProjectAdapter`})}),(0,c.jsx)(t.td,{children:`type`}),(0,c.jsx)(t.td,{children:`Buster и system identifier resolver.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`configureQueryPersistenceProjectAdapter`})}),(0,c.jsx)(t.td,{children:`function`}),(0,c.jsx)(t.td,{children:`Заменяет global adapter.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`getQueryPersistenceProjectAdapter`})}),(0,c.jsx)(t.td,{children:`function`}),(0,c.jsx)(t.td,{children:`Возвращает текущий adapter.`})]})]})]}),`
|
|
1640
1669
|
`,(0,c.jsx)(t.h3,{id:`indexeddb-persistence-1`,children:`IndexedDB persistence`}),`
|
|
1641
|
-
`,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Symbol`}),(0,c.jsx)(t.th,{children:`Вид`}),(0,c.jsx)(t.th,{children:`Назначение`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`REACT_QUERY_PERSISTENCE_BUSTER`})}),(0,c.jsx)(t.td,{children:`const`}),(0,c.jsx)(t.td,{children:`Build-time default buster.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`REACT_QUERY_PERSISTENCE_MAX_AGE`})}),(0,c.jsx)(t.td,{children:`const`}),(0,c.jsx)(t.td,{children:`Persistent max age: 90 дней.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`shouldPersistQuery`})}),(0,c.jsx)(t.td,{children:`function`}),(0,c.jsx)(t.td,{children:`Opt-in predicate с session safety.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`createIndexedDbQueryStorage`})}),(0,c.jsx)(t.td,{children:`function`}),(0,c.jsx)(t.td,{children:`AsyncStorage поверх IndexedDB.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`createReactQueryPersister`})}),(0,c.jsx)(t.td,{children:`function`}),(0,c.jsx)(t.td,{children:`Настроенный per-query TanStack persister.`})]})]})]}),`
|
|
1670
|
+
`,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Symbol`}),(0,c.jsx)(t.th,{children:`Вид`}),(0,c.jsx)(t.th,{children:`Назначение`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`REACT_QUERY_PERSISTENCE_BUSTER`})}),(0,c.jsx)(t.td,{children:`const`}),(0,c.jsx)(t.td,{children:`Build-time default buster.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`REACT_QUERY_PERSISTENCE_MAX_AGE`})}),(0,c.jsx)(t.td,{children:`const`}),(0,c.jsx)(t.td,{children:`Persistent max age: 90 дней.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`shouldPersistQuery`})}),(0,c.jsx)(t.td,{children:`function`}),(0,c.jsx)(t.td,{children:`Opt-in predicate с session safety.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`createIndexedDbQueryStorage`})}),(0,c.jsx)(t.td,{children:`function`}),(0,c.jsx)(t.td,{children:`AsyncStorage поверх IndexedDB.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`createReactQueryPersister`})}),(0,c.jsx)(t.td,{children:`function`}),(0,c.jsx)(t.td,{children:`Настроенный per-query TanStack persister.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`SessionQueryPersistenceScope`})}),(0,c.jsx)(t.td,{children:`type`}),(0,c.jsx)(t.td,{children:`Public session id и абсолютный expiresAt.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`getSessionQueryPersistenceScope`})}),(0,c.jsx)(t.td,{children:`function`}),(0,c.jsx)(t.td,{children:`Читает валидный активный browser scope.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`setSessionQueryPersistenceScope`})}),(0,c.jsx)(t.td,{children:`function`}),(0,c.jsx)(t.td,{children:`Меняет scope и очищает чужие snapshots.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`clearSessionQueryPersistence`})}),(0,c.jsx)(t.td,{children:`function`}),(0,c.jsx)(t.td,{children:`Удаляет один или все session snapshots.`})]})]})]}),`
|
|
1642
1671
|
`,(0,c.jsxs)(t.p,{children:[`Options type `,(0,c.jsx)(t.code,{children:`createIndexedDbQueryStorage`}),` не экспортируется отдельным symbol; используйте структурный object или `,(0,c.jsx)(t.code,{children:`Parameters<typeof createIndexedDbQueryStorage>[0]`}),`.`]}),`
|
|
1643
1672
|
`,(0,c.jsx)(t.h3,{id:`broadcast`,children:`Broadcast`}),`
|
|
1644
1673
|
`,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Symbol`}),(0,c.jsx)(t.th,{children:`Вид`}),(0,c.jsx)(t.th,{children:`Назначение`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`installReactQueryBroadcast`})}),(0,c.jsx)(t.td,{children:`function`}),(0,c.jsx)(t.td,{children:`Устанавливает data + event channels.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`setBroadcastFn`})}),(0,c.jsx)(t.td,{children:`function`}),(0,c.jsx)(t.td,{children:`Устанавливает global imperative sender.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`broadcastCacheEvent`})}),(0,c.jsx)(t.td,{children:`function`}),(0,c.jsx)(t.td,{children:`Отправляет event через текущий sender.`})]})]})]}),`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.js";function o(e){let t={a:`a`,code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,table:`table`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation Lib/API/Formatters/Row-Based`}),`
|
|
2
2
|
`,(0,c.jsx)(t.h1,{id:`row-based-форматтеры`,children:`Row-based форматтеры`}),`
|
|
3
3
|
`,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`rowBased`}),` — небольшой runtime-слой для формул, которые вычисляют отображаемое значение одной ячейки на основании других полей той же строки.`]}),`
|
|
4
4
|
`,(0,c.jsxs)(t.p,{children:[`Он используется шагом `,(0,c.jsx)(t.code,{children:`rowBasedOverride`}),` в `,(0,c.jsx)(t.a,{href:`../pipeline/README.mdx`,children:`formatter pipeline`}),`. Сам модуль не содержит бизнес-формул: host-приложение создаёт их, собирает в реестр и один раз передаёт реестр библиотеке.`]}),`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.js";function o(e){let t={a:`a`,code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,table:`table`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation API/Transport/HTTP`}),`
|
|
2
2
|
`,(0,c.jsxs)(t.h1,{id:`обычный-http-через-ryuzaki13react-foundation-apihttp`,children:[`Обычный HTTP через `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-api/http`})]}),`
|
|
3
3
|
`,(0,c.jsxs)(t.p,{children:[`Модуль выполняет нейтральные HTTP/REST запросы и создаёт функции, совместимые с TanStack Query. Внешний payload остаётся `,(0,c.jsx)(t.code,{children:`unknown`}),`, пока consumer явно не проверит его через `,(0,c.jsx)(t.code,{children:`parse`}),`.`]}),`
|
|
4
4
|
`,(0,c.jsx)(t.h2,{id:`содержание`,children:`Содержание`}),`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.js";function o(e){let t={a:`a`,code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,li:`li`,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/Adapters/Server Function`}),`
|
|
2
2
|
`,(0,c.jsxs)(t.h1,{id:`server-function-adapters-через-ryuzaki13react-foundation-apiserver-fn`,children:[`Server-function adapters через `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-api/server-fn`})]}),`
|
|
3
3
|
`,(0,c.jsxs)(t.p,{children:[`Модуль адаптирует функцию с публичной формой `,(0,c.jsx)(t.code,{children:`serverFn({ data })`}),` к query/mutation operation из `,(0,c.jsx)(t.a,{href:`../resource/README.mdx`,children:(0,c.jsx)(t.code,{children:`/resource`})}),`. Сам пакет не импортирует TanStack Start и не запускает сервер.`]}),`
|
|
4
4
|
`,(0,c.jsx)(t.h2,{id:`модель`,children:`Модель`}),`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.js";function o(e){let t={a:`a`,code:`code`,h1:`h1`,h2:`h2`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,table:`table`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation Lib/Data/Range Output`}),`
|
|
2
2
|
`,(0,c.jsx)(t.h1,{id:`подстановка-открытых-границ`,children:`Подстановка открытых границ`}),`
|
|
3
3
|
`,(0,c.jsxs)(t.p,{children:[`Модуль хранит в UI открытые границы диапазона как `,(0,c.jsx)(t.code,{children:`null`}),`, но позволяет подставить конкретные значения при внешнем выводе или сохранении.`]}),`
|
|
4
4
|
`,(0,c.jsx)(t.h2,{id:`содержание`,children:`Содержание`}),`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.js";function o(e){let t={a:`a`,code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,table:`table`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation Lib/Data/Bounded Copy Stack`}),`
|
|
2
2
|
`,(0,c.jsx)(t.h1,{id:`ограниченный-стек-копий`,children:`Ограниченный стек копий`}),`
|
|
3
3
|
`,(0,c.jsxs)(t.p,{children:[`Модуль хранит небольшой список последних скопированных сущностей. Новый элемент помещается в начало, повтор по `,(0,c.jsx)(t.code,{children:`fingerprint`}),` обновляет существующую запись, а старые записи удаляются при превышении лимита.`]}),`
|
|
4
4
|
`,(0,c.jsx)(t.h2,{id:`содержание`,children:`Содержание`}),`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.js";function o(e){let t={a:`a`,code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,table:`table`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation Lib/API/Binary`}),`
|
|
2
2
|
`,(0,c.jsx)(t.h1,{id:`работа-с-бинарными-данными`,children:`Работа с бинарными данными`}),`
|
|
3
3
|
`,(0,c.jsxs)(t.p,{children:[`Модуль `,(0,c.jsx)(t.code,{children:`binary`}),` преобразует строковое бинарное содержимое в браузерный `,(0,c.jsx)(t.code,{children:`Blob`}),`, определяет предполагаемый MIME-тип документа и предоставляет React hook для типового сценария «base64 → `,(0,c.jsx)(t.code,{children:`{ blob, mime }`}),`».`]}),`
|
|
4
4
|
`,(0,c.jsx)(t.p,{children:`Основной сценарий:`}),`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.js";function o(e){let t={a:`a`,blockquote:`blockquote`,code:`code`,h1:`h1`,h2:`h2`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,table:`table`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation Lib/Validation/Runtime Guards`}),`
|
|
2
2
|
`,(0,c.jsx)(t.h1,{id:`runtime-guards-и-validators`,children:`Runtime guards и validators`}),`
|
|
3
3
|
`,(0,c.jsxs)(t.p,{children:[`Модуль содержит небольшие проверки для `,(0,c.jsx)(t.code,{children:`unknown`}),`, object-like значений, image extensions, positive integer, URL и Floating UI DOM reference.`]}),`
|
|
4
4
|
`,(0,c.jsxs)(t.blockquote,{children:[`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.js";function o(e){let t={code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,strong:`strong`,table:`table`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation Lib/Infrastructure/Notifications`}),`
|
|
2
2
|
`,(0,c.jsx)(t.h1,{id:`notifications`,children:`Notifications`}),`
|
|
3
3
|
`,(0,c.jsxs)(t.p,{children:[`Модуль `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/notifications`}),` хранит очередь коротких уведомлений и предоставляет два способа управления ею:`]}),`
|
|
4
4
|
`,(0,c.jsxs)(t.ul,{children:[`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.js";function o(e){let t={a:`a`,code:`code`,h1:`h1`,h2:`h2`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,table:`table`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation Lib/Data/XML`}),`
|
|
2
2
|
`,(0,c.jsx)(t.h1,{id:`простые-xml-helpers`,children:`Простые XML helpers`}),`
|
|
3
3
|
`,(0,c.jsxs)(t.p,{children:[`Модуль экранирует XML-текст, строит последовательность простых полей и читает текст первого тега через `,(0,c.jsx)(t.code,{children:`DOMParser`}),`.`]}),`
|
|
4
4
|
`,(0,c.jsx)(t.h2,{id:`содержание`,children:`Содержание`}),`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.js";function o(e){let t={code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,table:`table`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation Lib/Browser/Three Scene`}),`
|
|
2
2
|
`,(0,c.jsx)(t.h1,{id:`three-scene`,children:`Three Scene`}),`
|
|
3
3
|
`,(0,c.jsxs)(t.p,{children:[`Модуль `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/three-scene`}),` проверяет, можно ли безопасно показывать необязательную Three.js/WebGL-сцену, и помогает отключить её до конца браузерной сессии.`]}),`
|
|
4
4
|
`,(0,c.jsx)(t.p,{children:`Модуль не импортирует Three.js, не создаёт renderer и не управляет canvas. Его задача — принять раннее решение: загружать тяжёлую 3D-сцену или показать облегчённую альтернативу.`}),`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.js";function o(e){let t={code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,strong:`strong`,table:`table`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation Lib/Data/Excel`}),`
|
|
2
2
|
`,(0,c.jsx)(t.h1,{id:`excel`,children:`Excel`}),`
|
|
3
3
|
`,(0,c.jsxs)(t.p,{children:[`Модуль `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/excel`}),` формирует и скачивает `,(0,c.jsx)(t.code,{children:`.xlsx`}),`-файлы в браузере. Он поддерживает:`]}),`
|
|
4
4
|
`,(0,c.jsxs)(t.ul,{children:[`
|
|
@@ -159,6 +159,50 @@ buildExcelAutoFilterRef(0, 10); // undefined
|
|
|
159
159
|
`,(0,c.jsx)(t.p,{children:`Каждый лист имеет собственные колонки, ширины, строки, стили и filter. Порядок массива — порядок вкладок Excel.`}),`
|
|
160
160
|
`,(0,c.jsxs)(t.p,{children:[`Пустой массив `,(0,c.jsx)(t.code,{children:`sheets`}),` приводит к ошибке: «Для формирования Excel-книги нужен минимум один лист».`]}),`
|
|
161
161
|
`,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`fileName`}),` передаётся browser writer. Рекомендуется явно добавлять расширение `,(0,c.jsx)(t.code,{children:`.xlsx`}),` и заранее очищать пользовательский ввод от нежелательных символов имени файла.`]}),`
|
|
162
|
+
`,(0,c.jsx)(t.h2,{id:`произвольная-матрица-и-параметры-печати`,children:`Произвольная матрица и параметры печати`}),`
|
|
163
|
+
`,(0,c.jsxs)(t.p,{children:[`Для расписаний, печатных форм и других документов без обычной строки колонок
|
|
164
|
+
используйте `,(0,c.jsx)(t.code,{children:`createExcelMatrixWorkbookBlob`}),` или `,(0,c.jsx)(t.code,{children:`downloadExcelMatrixWorkbook`}),`.
|
|
165
|
+
Доменный consumer передаёт уже готовые строки и стили ячеек, а foundation API
|
|
166
|
+
отвечает за имена листов, объединения, OpenXML print area, повтор заголовков и
|
|
167
|
+
ручные разрывы страниц.`]}),`
|
|
168
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`import { downloadExcelMatrixWorkbook } from "@ryuzaki13/react-foundation-lib/excel";
|
|
169
|
+
|
|
170
|
+
await downloadExcelMatrixWorkbook("Расписание.xlsx", {
|
|
171
|
+
// Базовый шрифт Normal определяет, сколько пикселей занимает символьная
|
|
172
|
+
// ширина из \`columns[].width\`, даже если ячейки используют другой шрифт.
|
|
173
|
+
defaultFont: { fontFamily: "Verdana", fontSize: 12 },
|
|
174
|
+
sheets: [
|
|
175
|
+
{
|
|
176
|
+
name: "Неделя",
|
|
177
|
+
rows: [[{ value: "Расписание", type: String, columnSpan: 2 }, null]],
|
|
178
|
+
columns: [{ width: 8 }, { width: 24 }],
|
|
179
|
+
showGridLines: false,
|
|
180
|
+
print: {
|
|
181
|
+
orientation: "portrait",
|
|
182
|
+
paperSize: "a4",
|
|
183
|
+
fitToWidthPages: 0,
|
|
184
|
+
fitToHeightPages: 1,
|
|
185
|
+
repeatRows: [1, 1],
|
|
186
|
+
columnBreaksAfter: [12],
|
|
187
|
+
printArea: { firstRow: 1, lastRow: 20, firstColumn: 1, lastColumn: 24 },
|
|
188
|
+
footer: { left: "Отчёт 7c9134", includePageNumber: true }
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
]
|
|
192
|
+
});
|
|
193
|
+
`})}),`
|
|
194
|
+
`,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`columnBreaksAfter`}),` и `,(0,c.jsx)(t.code,{children:`rowBreaksAfter`}),` используют one-based номер последней
|
|
195
|
+
колонки или строки страницы. Например, `,(0,c.jsx)(t.code,{children:`columnBreaksAfter: [12]`}),` переносит
|
|
196
|
+
колонку `,(0,c.jsx)(t.code,{children:`M`}),` на следующую страницу. `,(0,c.jsx)(t.code,{children:`fitToHeightPages`}),` и `,(0,c.jsx)(t.code,{children:`fitToWidthPages`}),` должны
|
|
197
|
+
быть целыми неотрицательными: ноль означает автоматическое число страниц по
|
|
198
|
+
этой оси.`]}),`
|
|
199
|
+
`,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`defaultFont`}),` задаёт шрифт стиля Normal всей книги. Excel измеряет символьную
|
|
200
|
+
ширину столбца относительно этого шрифта, поэтому одинаковое значение
|
|
201
|
+
`,(0,c.jsx)(t.code,{children:`columns[].width`}),` при разных базовых шрифтах может давать разную ширину в
|
|
202
|
+
пикселях. Стили отдельных ячеек при этом остаются независимыми.`]}),`
|
|
203
|
+
`,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`createExcelMatrixWorkbookBlob`}),` не инициирует скачивание и подходит для preview
|
|
204
|
+
и проверки сформированного файла. `,(0,c.jsx)(t.code,{children:`downloadExcelMatrixWorkbook`}),` делегирует
|
|
205
|
+
browser download общему `,(0,c.jsx)(t.code,{children:`downloadFileFromBlob`}),`.`]}),`
|
|
162
206
|
`,(0,c.jsx)(t.h2,{id:`имена-листов`,children:`Имена листов`}),`
|
|
163
207
|
`,(0,c.jsx)(t.h3,{id:`resolveexcelsheetnamesnames`,children:(0,c.jsx)(t.code,{children:`resolveExcelSheetNames(names)`})}),`
|
|
164
208
|
`,(0,c.jsxs)(t.p,{children:[`Excel ограничивает имя листа 31 символом и запрещает управляющие символы, `,(0,c.jsx)(t.code,{children:`[ ] / \\ : * ?`}),`. Helper:`]}),`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.js";function o(e){let t={a:`a`,blockquote:`blockquote`,code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,table:`table`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation Lib/API/Hooks`}),`
|
|
2
2
|
`,(0,c.jsx)(t.h1,{id:`react-и-browser-hooks`,children:`React и browser hooks`}),`
|
|
3
3
|
`,(0,c.jsxs)(t.p,{children:[`Модуль `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/hooks`}),` содержит общие React hooks для задач, которые повторяются в разных приложениях:`]}),`
|
|
4
4
|
`,(0,c.jsxs)(t.ul,{children:[`
|
|
@@ -95,7 +95,7 @@ import { useDebounce } from "@ryuzaki13/react-foundation-lib/hooks";
|
|
|
95
95
|
`})}),`
|
|
96
96
|
`,(0,c.jsxs)(t.p,{children:[`В development Strict Mode может выполнить дополнительный setup/cleanup cycle. Timers и listeners очищаются, но callback с `,(0,c.jsx)(t.code,{children:`flushOnUnmount: true`}),` является side effect cleanup и должен быть идемпотентным.`]}),`
|
|
97
97
|
`,(0,c.jsx)(t.h2,{id:`быстрый-выбор`,children:`Быстрый выбор`}),`
|
|
98
|
-
`,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Сценарий`}),(0,c.jsx)(t.th,{children:`API`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Значение после паузы во вводе`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useDebounce`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Callback после паузы от последнего события`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useDebouncedCallback`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Ограничение частоты с leading и trailing вызовами`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useThrottledCallback`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Pointer и Keyboard sensors DnD Kit`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useDndSortableSensors`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Собственный доступный floating listbox`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useFloatingListbox`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Чтение и replace-navigation search state`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useSearchParams`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsxs)(t.td,{children:[`Построение `,(0,c.jsx)(t.code,{children:`href`}),` без navigation`]}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useSearchLink`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Lazy component внутри component/custom hook`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useLazyComponent`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Диагностика reference identity`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useReferenceTrace`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsxs)(t.td,{children:[`Блокировка `,(0,c.jsx)(t.code,{children:`Ctrl + wheel`})]}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useBlockBrowserZoom`})})]})]})]}),`
|
|
98
|
+
`,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Сценарий`}),(0,c.jsx)(t.th,{children:`API`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Значение после паузы во вводе`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useDebounce`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Callback после паузы от последнего события`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useDebouncedCallback`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Ограничение частоты с leading и trailing вызовами`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useThrottledCallback`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Pointer/Mouse, Touch и Keyboard sensors DnD Kit`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useDndSortableSensors`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Собственный доступный floating listbox`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useFloatingListbox`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Чтение и replace-navigation search state`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useSearchParams`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsxs)(t.td,{children:[`Построение `,(0,c.jsx)(t.code,{children:`href`}),` без navigation`]}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useSearchLink`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Lazy component внутри component/custom hook`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useLazyComponent`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Диагностика reference identity`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useReferenceTrace`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsxs)(t.td,{children:[`Блокировка `,(0,c.jsx)(t.code,{children:`Ctrl + wheel`})]}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useBlockBrowserZoom`})})]})]})]}),`
|
|
99
99
|
`,(0,c.jsx)(t.h2,{id:`debounce-и-throttle-простыми-словами`,children:`Debounce и throttle простыми словами`}),`
|
|
100
100
|
`,(0,c.jsx)(t.p,{children:`Debounce ждёт тишины:`}),`
|
|
101
101
|
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-text`,children:`события: A -- B -- C ----------------
|
|
@@ -276,8 +276,15 @@ function PointerTracker({ onChange }: { onChange: (point: Point) => void }) {
|
|
|
276
276
|
`,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`PointerSensor`}),` с activation distance;`]}),`
|
|
277
277
|
`,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`KeyboardSensor`}),` с `,(0,c.jsx)(t.code,{children:`sortableKeyboardCoordinates`}),`.`]}),`
|
|
278
278
|
`]}),`
|
|
279
|
+
`,(0,c.jsxs)(t.p,{children:[`Опциональная `,(0,c.jsx)(t.code,{children:`touchActivation`}),` заменяет общий pointer-путь на отдельные
|
|
280
|
+
`,(0,c.jsx)(t.code,{children:`MouseSensor`}),` и `,(0,c.jsx)(t.code,{children:`TouchSensor`}),`: mouse сохраняет distance, а touch ждёт long press
|
|
281
|
+
и отменяет DnD при движении больше tolerance, оставляя нативную прокрутку доступной.
|
|
282
|
+
Предметная матрица также может передать собственные keyboard coordinates/codes.`]}),`
|
|
279
283
|
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`interface UseDndSortableSensorsOptions {
|
|
280
284
|
activationDistance?: number;
|
|
285
|
+
touchActivation?: { delay: number; tolerance?: number };
|
|
286
|
+
keyboardCoordinateGetter?: KeyboardCoordinateGetter;
|
|
287
|
+
keyboardCodes?: KeyboardCodes;
|
|
281
288
|
}
|
|
282
289
|
|
|
283
290
|
function useDndSortableSensors(distanceOrOptions?: number | UseDndSortableSensorsOptions): SensorDescriptor<SensorOptions>[];
|
|
@@ -289,7 +296,8 @@ import { useDndSortableSensors } from "@ryuzaki13/react-foundation-lib/hooks";
|
|
|
289
296
|
|
|
290
297
|
function SortableArea({ children }: { children: React.ReactNode }) {
|
|
291
298
|
const sensors = useDndSortableSensors({
|
|
292
|
-
activationDistance:
|
|
299
|
+
activationDistance: 10,
|
|
300
|
+
touchActivation: { delay: 250, tolerance: 10 }
|
|
293
301
|
});
|
|
294
302
|
|
|
295
303
|
return <DndContext sensors={sensors}>{children}</DndContext>;
|
|
@@ -653,7 +661,7 @@ await act(async () => {
|
|
|
653
661
|
`,(0,c.jsx)(t.h2,{id:`частые-ошибки`,children:`Частые ошибки`}),`
|
|
654
662
|
`,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Симптом`}),(0,c.jsx)(t.th,{children:`Причина / решение`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Invalid hook call`}),(0,c.jsx)(t.td,{children:`Вызов вне component/custom hook или условно.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsxs)(t.td,{children:[`Callback не получил `,(0,c.jsx)(t.code,{children:`null`})]}),(0,c.jsxs)(t.td,{children:[`Передайте `,(0,c.jsx)(t.code,{children:`{ value: null }`}),`.`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Throttle ждёт после cancel`}),(0,c.jsx)(t.td,{children:`Cancel не сбрасывает timestamp.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Search allowedKeys не компилируется`}),(0,c.jsx)(t.td,{children:`Фильтруйте result явно до исправления generic.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Escape/outside click не работают`}),(0,c.jsxs)(t.td,{children:[`Не применён `,(0,c.jsx)(t.code,{children:`getFloatingProps`}),`.`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Active option не scroll-ится`}),(0,c.jsxs)(t.td,{children:[`Нет `,(0,c.jsx)(t.code,{children:`setOptionRef`}),`.`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Popup не фокусируется`}),(0,c.jsxs)(t.td,{children:[`Нет `,(0,c.jsx)(t.code,{children:`setFloating`}),` или `,(0,c.jsx)(t.code,{children:`tabIndex`}),`.`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Controlled popup не закрывается`}),(0,c.jsxs)(t.td,{children:[`Нужны и `,(0,c.jsx)(t.code,{children:`open`}),`, и `,(0,c.jsx)(t.code,{children:`onOpenChange`}),`.`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Lazy component remount-ится`}),(0,c.jsx)(t.td,{children:`Стабилизируйте loader/cacheKey.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`__DEV__ is not defined`})}),(0,c.jsx)(t.td,{children:`Настройте host bundler.`})]})]})]}),`
|
|
655
663
|
`,(0,c.jsx)(t.h2,{id:`api-справочник`,children:`API-справочник`}),`
|
|
656
|
-
`,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Экспорт`}),(0,c.jsx)(t.th,{children:`Contract`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useBlockBrowserZoom`})}),(0,c.jsxs)(t.td,{children:[`Global `,(0,c.jsx)(t.code,{children:`Ctrl + wheel`}),` prevention.`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useDebounce`})}),(0,c.jsx)(t.td,{children:`Debounced value.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useDebouncedCallback`})}),(0,c.jsx)(t.td,{children:`Trailing debounce.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useDndSortableSensors`})}),(0,c.jsx)(t.td,{children:`Pointer/Keyboard sensors.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useFloatingListbox`})}),(0,c.jsx)(t.td,{children:`Headless listbox.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useLazyComponent`})}),(0,c.jsx)(t.td,{children:`Memoized lazy factory.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useReferenceTrace`})}),(0,c.jsx)(t.td,{children:`Reference diagnostics.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useSearchLink`})}),(0,c.jsx)(t.td,{children:`Link builder.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useSearchParams`})}),(0,c.jsx)(t.td,{children:`Search read/replace navigation.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useThrottledCallback`})}),(0,c.jsx)(t.td,{children:`Leading/trailing throttle.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`FloatingListboxPlacementStrategy`})}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`"flip" | "auto"`}),`.`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`FloatingListboxSizeContext`})}),(0,c.jsx)(t.td,{children:`Геометрия popup/reference/viewport.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`FloatingListboxSizeResolver`})}),(0,c.jsx)(t.td,{children:`Context → style.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`FloatingListboxSizeStyle`})}),(0,c.jsx)(t.td,{children:`Size fields и CSS properties.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`ThrottledCallback`})}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`call/flush/cancel`}),`.`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`UseDndSortableSensorsOptions`})}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`activationDistance`}),`.`]})]})]})]}),`
|
|
664
|
+
`,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Экспорт`}),(0,c.jsx)(t.th,{children:`Contract`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useBlockBrowserZoom`})}),(0,c.jsxs)(t.td,{children:[`Global `,(0,c.jsx)(t.code,{children:`Ctrl + wheel`}),` prevention.`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useDebounce`})}),(0,c.jsx)(t.td,{children:`Debounced value.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useDebouncedCallback`})}),(0,c.jsx)(t.td,{children:`Trailing debounce.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useDndSortableSensors`})}),(0,c.jsx)(t.td,{children:`Pointer/Mouse/Touch/Keyboard sensors.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useFloatingListbox`})}),(0,c.jsx)(t.td,{children:`Headless listbox.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useLazyComponent`})}),(0,c.jsx)(t.td,{children:`Memoized lazy factory.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useReferenceTrace`})}),(0,c.jsx)(t.td,{children:`Reference diagnostics.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useSearchLink`})}),(0,c.jsx)(t.td,{children:`Link builder.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useSearchParams`})}),(0,c.jsx)(t.td,{children:`Search read/replace navigation.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`useThrottledCallback`})}),(0,c.jsx)(t.td,{children:`Leading/trailing throttle.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`FloatingListboxPlacementStrategy`})}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`"flip" | "auto"`}),`.`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`FloatingListboxSizeContext`})}),(0,c.jsx)(t.td,{children:`Геометрия popup/reference/viewport.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`FloatingListboxSizeResolver`})}),(0,c.jsx)(t.td,{children:`Context → style.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`FloatingListboxSizeStyle`})}),(0,c.jsx)(t.td,{children:`Size fields и CSS properties.`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`ThrottledCallback`})}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`call/flush/cancel`}),`.`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`UseDndSortableSensorsOptions`})}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`activationDistance`}),`.`]})]})]})]}),`
|
|
657
665
|
`,(0,c.jsx)(t.h2,{id:`что-модуль-не-делает`,children:`Что модуль не делает`}),`
|
|
658
666
|
`,(0,c.jsxs)(t.ul,{children:[`
|
|
659
667
|
`,(0,c.jsx)(t.li,{children:`не выполняет requests и не хранит backend state;`}),`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.js";function o(e){let t={a:`a`,code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,table:`table`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation Lib/API/File`}),`
|
|
2
2
|
`,(0,c.jsx)(t.h1,{id:`работа-с-пользовательскими-файлами`,children:`Работа с пользовательскими файлами`}),`
|
|
3
3
|
`,(0,c.jsxs)(t.p,{children:[`Модуль `,(0,c.jsx)(t.code,{children:`file`}),` содержит browser helpers для четырёх связанных задач:`]}),`
|
|
4
4
|
`,(0,c.jsxs)(t.ul,{children:[`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.js";function o(e){let t={code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,table:`table`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation Lib/HTTP/SEO`}),`
|
|
2
2
|
`,(0,c.jsx)(t.h1,{id:`seo`,children:`SEO`}),`
|
|
3
3
|
`,(0,c.jsxs)(t.p,{children:[`Модуль `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/seo`}),` собирает единый набор SEO-описаний страницы:`]}),`
|
|
4
4
|
`,(0,c.jsxs)(t.ul,{children:[`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-o5-z1BZu.js";function o(e){let t={a:`a`,code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,table:`table`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation Lib/API/Formatters/Value State`}),`
|
|
2
2
|
`,(0,c.jsx)(t.h1,{id:`value-state`,children:`Value state`}),`
|
|
3
3
|
`,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`valueState`}),` преобразует обычное значение в семантическое состояние интерфейса:`]}),`
|
|
4
4
|
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`type State = "" | "none" | "information" | "success" | "warning" | "error";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-o5-z1BZu.js";import{a as p,i as m,n as h,r as g,t as _}from"./RadioButton.stories-BSA2eNrW.js";function v(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(s,{of:m,parameters:{docs:{toc:!0}}}),`
|
|
2
2
|
`,(0,b.jsx)(u,{children:`RadioButton`}),`
|
|
3
3
|
`,(0,b.jsx)(o,{children:`Одиночная radio-кнопка для ручной сборки наборов выбора и специальных компоновок`}),`
|
|
4
4
|
`,(0,b.jsx)(t.p,{children:`RadioButton уже имеет живые stories, а эта страница собирает их в структурированную документацию с краткими рекомендациями, примерами подключения и API.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e,n as t}from"./rolldown-runtime-DkW27tQK.js";import{t as n}from"./react-BZJXY1be.js";import{i as r,n as i,r as a}from"./iframe-
|
|
1
|
+
import{a as e,n as t}from"./rolldown-runtime-DkW27tQK.js";import{t as n}from"./react-BZJXY1be.js";import{i as r,n as i,r as a}from"./iframe-Cb11iJVP.js";import{a as o,i as s}from"./utils-tg3ibbzi.js";import{n as c,t as l}from"./ui.module-31LPbZGK.js";import{i as u,r as d}from"./uiClasses-Bz6cvlDQ.js";import{n as f,t as p}from"./CheckBox.module-BOAVN-Ny.js";var m,h;function g(){return(g=t((()=>{r(),m=[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]],h=a(`circle`,m)})))()}var _,v;function y(){return(y=t((()=>{_=`gu8UMB`,v={radioInput:_}})))()}var b,x,S;function C(){return(C=t((()=>{b=e(n(),1),s(),g(),f(),l(),u(),y(),x=i(),S=({label:e,description:t,placeholder:n,disabled:r,size:i,className:a,onChange:s,value:l,id:u,tone:f=`neutral`,...m})=>{let g=(0,b.useId)(),_=u??g,y=t?`${_}-description`:void 0,S=e??n,C=l??!1;return(0,x.jsxs)(`div`,{className:o(c.uiElement,i&&c.uiSizable,i&&c[i],r&&c.disabled,a),children:[(0,x.jsxs)(`div`,{className:p.row,children:[(0,x.jsxs)(`div`,{className:o(p.wrapper,d(f)),children:[(0,x.jsx)(`input`,{...m,id:_,type:`radio`,checked:C,disabled:r,"aria-disabled":r,"aria-describedby":y,className:o(c.uiSelectionControl,p.input,v.radioInput),onChange:e=>s?.(e.currentTarget.checked)}),(0,x.jsx)(`div`,{className:o(c.uiSelectionIcon,p.icon),"aria-hidden":`true`,children:(0,x.jsx)(h,{fill:`currentColor`})})]}),S&&(0,x.jsx)(`label`,{htmlFor:_,className:c.uiLabel,children:S})]}),t&&(0,x.jsx)(`p`,{id:y,className:c.uiDescription,children:t})]})},S.__docgenInfo={description:'Компонент радиокнопки для выбора одного варианта.\nНативный `input[type="radio"]` обеспечивает взаимоисключение элементов с\nобщим `name`, а controlled API продолжает публиковать булево состояние.\nПоддерживает tone + appearance и использует общие selection utility-классы из ui.module.scss.',methods:[],displayName:`RadioButton`,props:{label:{required:!1,tsType:{name:`ReactNode`},description:``},description:{required:!1,tsType:{name:`string`},description:``},placeholder:{required:!1,tsType:{name:`string`},description:``},disabled:{required:!1,tsType:{name:`boolean`},description:``},size:{required:!1,tsType:{name:`union`,raw:`"xs" | "sm" | "md" | "lg" | "xl"`,elements:[{name:`literal`,value:`"xs"`},{name:`literal`,value:`"sm"`},{name:`literal`,value:`"md"`},{name:`literal`,value:`"lg"`},{name:`literal`,value:`"xl"`}]},description:``},value:{required:!0,tsType:{name:`V`},description:"Если начальное состояние может быть `null | undefined`\nзначит `onChange` тоже должен ументь сбрасывать.\nПоэтому такой контрол явно должен передавать `UiBaseProps<AnyType | undefined>`"},onChange:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(value: T) => void`,signature:{arguments:[{type:{name:`C`},name:`value`}],return:{name:`void`}}},description:``},tone:{required:!1,tsType:{name:`union`,raw:`"neutral" | "brand" | "error" | "warning" | "success" | "info"`,elements:[{name:`literal`,value:`"neutral"`},{name:`literal`,value:`"brand"`},{name:`literal`,value:`"error"`},{name:`literal`,value:`"warning"`},{name:`literal`,value:`"success"`},{name:`literal`,value:`"info"`}]},description:``,defaultValue:{value:`"neutral"`,computed:!1}}},composes:[`Omit`]}})))()}export{C as n,S as t};
|
package/storybook-static/assets/{RadioButton.stories-CWlAzbso.js → RadioButton.stories-BSA2eNrW.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e,r as t}from"./rolldown-runtime-DkW27tQK.js";import{t as n}from"./react-BZJXY1be.js";import{n as r,t as i}from"./RadioButton-
|
|
1
|
+
import{n as e,r as t}from"./rolldown-runtime-DkW27tQK.js";import{t as n}from"./react-BZJXY1be.js";import{n as r,t as i}from"./RadioButton-DvDDf9wn.js";import{n as a}from"./iframe-Cb11iJVP.js";import{n as o,t as s}from"./createControlledStoryRender-BouhvX-R.js";var c=t({Controlled:()=>p,Disabled:()=>h,Group:()=>m,__namedExportsOrder:()=>g,default:()=>f}),l,u,d,f,p,m,h,g;function _(){return(_=e((()=>{l=n(),o(),r(),u=a(),d=s((e,t)=>(0,u.jsx)(i,{...e,value:e.value??!1,onChange:n=>{e.onChange?.(n),t({value:n})}})),f={title:`UI/RadioButton`,component:i,args:{value:!1,onChange:()=>{}},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{label:{description:`Текст подписи радиокнопки.`,control:`text`},description:{description:`Дополнительное описание под элементом.`,control:`text`},placeholder:{description:"Резервная подпись, если `label` не задан.",control:`text`},value:{description:`Признак выбранного состояния.`,control:`boolean`},onChange:{description:`Вызывается при изменении выбранности.`,control:!1},disabled:{description:`Блокирует взаимодействие.`,control:`boolean`},size:{description:`Размер визуального контрола и подписи.`,control:`select`,options:[`xs`,`sm`,`md`,`lg`,`xl`]},tone:{description:`Цветовой тон радиокнопки.`,control:`inline-radio`,options:[`neutral`,`brand`,`error`,`warning`,`success`,`info`]}}},p={render:d,args:{label:`Выбрать опцию`,description:`Одиночная радиокнопка в controlled-режиме.`,value:!1,tone:`neutral`}},m={render:()=>{let[e,t]=(0,l.useState)(`email`);return(0,u.jsxs)(`div`,{role:`radiogroup`,"aria-label":`Канал уведомлений`,style:{display:`grid`,gap:12},children:[(0,u.jsx)(i,{name:`notification-channel`,label:`Email`,value:e===`email`,onChange:e=>e&&t(`email`),tone:`info`}),(0,u.jsx)(i,{name:`notification-channel`,label:`SMS`,value:e===`sms`,onChange:e=>e&&t(`sms`),tone:`info`})]})},args:{value:void 0}},h={render:d,args:{label:`Недоступная опция`,description:`Заблокировано политикой конфигурации.`,value:!0,disabled:!0,tone:`neutral`}},p.parameters={...p.parameters,docs:{...p.parameters?.docs,source:{originalSource:`{
|
|
2
2
|
render: renderRadioButtonStory,
|
|
3
3
|
args: {
|
|
4
4
|
label: "Выбрать опцию",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e,n as t}from"./rolldown-runtime-DkW27tQK.js";import{t as n}from"./react-BZJXY1be.js";import{i as r,n as i,r as a}from"./iframe-
|
|
1
|
+
import{a as e,n as t}from"./rolldown-runtime-DkW27tQK.js";import{t as n}from"./react-BZJXY1be.js";import{i as r,n as i,r as a}from"./iframe-Cb11iJVP.js";import{a as o,i as s,n as c,o as l}from"./utils-tg3ibbzi.js";import{n as u,t as d}from"./ui.module-31LPbZGK.js";var f,p;function m(){return(m=t((()=>{r(),f=[[`path`,{d:`M21.801 10A10 10 0 1 1 17 3.335`,key:`yps3ct`}],[`path`,{d:`m9 11 3 3L22 4`,key:`1pflzl`}]],p=a(`circle-check-big`,f)})))()}var h,g,_,v,y,b,x,S,C;function w(){return(w=t((()=>{h=`nINbA6`,g=`GL-UWx`,_=`_6PeF-i`,v=`_5wP4aR`,y=`S3MnZI`,b=`KHJ0ja`,x=`oGmcQH`,S=`k2z8AN`,C={radioGroup:h,noWrap:g,horizontal:_,vertical:v,radioItem:y,checked:b,radioItemContent:x,radioItemIcon:S}})))()}function T({value:e,onChange:t,label:n,description:r,disabled:i,className:a,noWrap:s,orientation:c=`horizontal`,"aria-label":l,children:d}){let f=(0,D.useId)(),p=n?`${f}-label`:void 0,m=r?`${f}-description`:void 0,[h,g]=(0,D.useState)([]),_=(0,D.useCallback)(e=>t?.(e),[t]),v=(0,D.useCallback)(e=>(g(t=>t.includes(e)?t:[...t,e]),()=>{g(t=>t.filter(t=>t!==e))}),[]),y=(0,D.useMemo)(()=>({value:e,onChange:_,disabled:i,orientation:c,groupId:f,labelId:p,descriptionId:m,firstOptionId:h[0],registerOption:v}),[m,i,f,_,p,c,v,h,e]);return(0,O.jsxs)(`div`,{className:o(u.uiElement,i&&u.disabled,a),children:[n&&(0,O.jsx)(`div`,{id:p,className:u.uiLabel,children:n}),r&&(0,O.jsx)(`div`,{id:m,className:u.uiDescription,children:r}),(0,O.jsx)(k.Provider,{value:y,children:(0,O.jsx)(`div`,{role:`radiogroup`,"aria-labelledby":p,"aria-label":p?void 0:l,"aria-describedby":m,"aria-disabled":i||void 0,"data-disabled":i||void 0,className:o(u.uiInputControl,C.radioGroup,s&&C.noWrap,C[c]),children:d})})]})}function E({value:e,label:t,description:n,className:r}){let i=(0,D.useContext)(k),a=(0,D.useId)(),s=i?.registerOption;if((0,D.useLayoutEffect)(()=>{if(s)return s(a)},[s,a]),!i)return(0,O.jsxs)(`div`,{className:o(C.radioItem,r),children:[(0,O.jsx)(`p`,{className:`textNoWrap`,children:t}),n&&(0,O.jsx)(`div`,{className:`fontSizeSm content2`,children:n})]});let u=Object.is(i.value,e),d=i.disabled===!0,f=i.value===void 0&&i.firstOptionId===a,m=()=>{d||u||i.onChange?.(e)};return(0,O.jsxs)(`button`,{id:`${i.groupId}-option-${a}`,type:`button`,role:`radio`,"aria-checked":u,disabled:d,tabIndex:u||f?0:-1,className:o(C.radioItem,u&&C.checked,r),"data-ui":`radio-option`,"data-action":`select-radio-option`,onClick:m,onKeyDown:e=>{if(d||c(e,m))return;let t=e.currentTarget,n=t.closest(`[role="radiogroup"]`),r=Array.from(n?.querySelectorAll(`[role="radio"]:not([disabled])`)??[]);if(!r.length)return;let a=r.indexOf(t);if(a===-1)return;let o=l({currentIndex:a,itemCount:r.length,key:e.key,orientation:i.orientation});o!==null&&(e.preventDefault(),r[o]?.focus(),r[o]?.click())},children:[(0,O.jsxs)(`span`,{className:C.radioItemContent,children:[(0,O.jsx)(`span`,{className:`textNoWrap`,children:t}),n&&(0,O.jsx)(`span`,{className:`fontSizeSm`,children:n})]}),(0,O.jsx)(`span`,{className:C.radioItemIcon,children:(0,O.jsx)(p,{style:{display:`block`,visibility:u?`visible`:`hidden`}})})]})}var D,O,k;function A(){return(A=t((()=>{D=e(n(),1),s(),m(),d(),w(),O=i(),k=(0,D.createContext)(null),T.Option=E,T.__docgenInfo={description:`Группа радиокнопок с общим состоянием выбранного значения. Обеспечивает единый API выбора и контекст для дочерних опций.`,methods:[{name:`Option`,docblock:null,modifiers:[`static`],params:[{name:`{ value, label, description, className }: OptionProps<T>`,optional:!1,type:{name:`OptionProps`,elements:[{name:`T`}],raw:`OptionProps<T>`,alias:`OptionProps`}}],returns:null}],displayName:`RadioGroup`,props:{value:{required:!1,tsType:{name:`T`},description:``},onChange:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(value: T) => void`,signature:{arguments:[{type:{name:`T`},name:`value`}],return:{name:`void`}}},description:``},label:{required:!1,tsType:{name:`string`},description:``},description:{required:!1,tsType:{name:`string`},description:``},disabled:{required:!1,tsType:{name:`boolean`},description:``},className:{required:!1,tsType:{name:`string`},description:``},noWrap:{required:!1,tsType:{name:`literal`,value:`true`},description:``},orientation:{required:!1,tsType:{name:`union`,raw:`"vertical" | "horizontal"`,elements:[{name:`literal`,value:`"vertical"`},{name:`literal`,value:`"horizontal"`}]},description:``,defaultValue:{value:`"horizontal"`,computed:!1}},"aria-label":{required:!1,tsType:{name:`string`},description:``},children:{required:!0,tsType:{name:`ReactReactNode`,raw:`React.ReactNode`},description:``}}},E.__docgenInfo={description:"Опция внутри `RadioGroup`, представляющая одно выбираемое значение. Отрисовывает подпись, описание и состояние выбора.",methods:[],displayName:`Option`,props:{value:{required:!0,tsType:{name:`T`},description:``},label:{required:!0,tsType:{name:`ReactNode`},description:``},description:{required:!1,tsType:{name:`ReactNode`},description:``},className:{required:!1,tsType:{name:`string`},description:``}}}})))()}export{A as n,T as t};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Cb11iJVP.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-o5-z1BZu.js";import{a as p,i as m,n as h,r as g,t as _}from"./RadioGroup.stories-B6HK1X-8.js";function v(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(s,{of:g,parameters:{docs:{toc:!0}}}),`
|
|
2
2
|
`,(0,b.jsx)(u,{children:`RadioGroup`}),`
|
|
3
3
|
`,(0,b.jsx)(o,{children:`Группа взаимоисключающих опций с поддержкой горизонтальной и вертикальной раскладки`}),`
|
|
4
4
|
`,(0,b.jsx)(t.p,{children:`RadioGroup уже имеет живые stories, а эта страница собирает их в структурированную документацию с краткими рекомендациями, примерами подключения и API.
|
package/storybook-static/assets/{RadioGroup.stories-B7g9iK7V.js → RadioGroup.stories-B6HK1X-8.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e,r as t}from"./rolldown-runtime-DkW27tQK.js";import{n,t as r}from"./RadioGroup-
|
|
1
|
+
import{n as e,r as t}from"./rolldown-runtime-DkW27tQK.js";import{n,t as r}from"./RadioGroup-C_ZapH6C.js";import{n as i}from"./iframe-Cb11iJVP.js";import{n as a,t as o}from"./createControlledStoryRender-BouhvX-R.js";var s=t({Controlled:()=>g,Disabled:()=>v,Vertical:()=>_,__namedExportsOrder:()=>y,default:()=>h});function c(e){return(0,d.jsx)(r,{...e})}function l({args:e,updateArgs:t,options:n,showValue:i=!1}){return(0,d.jsxs)(`div`,{style:{display:`grid`,gap:10},children:[(0,d.jsx)(c,{...e,onChange:n=>{e.onChange?.(n),t({value:n})},children:n.map(e=>(0,d.jsx)(r.Option,{value:e.value,label:e.label,description:e.description},e.value))}),i&&(0,d.jsxs)(`div`,{children:[`Выбрано: `,e.value??`не выбрано`]})]})}function u(e,t=!1){return o((n,r)=>(0,d.jsx)(l,{args:n,updateArgs:r,options:e,showValue:t}))}var d,f,p,m,h,g,_,v,y;function b(){return(b=e((()=>{a(),n(),d=i(),f=[{value:`email`,label:`Email`,description:`Письма на корпоративную почту`},{value:`sms`,label:`SMS`,description:`Сообщения на телефон`},{value:`push`,label:`Push`,description:`Уведомления в приложении`}],p=[{value:`draft`,label:`Черновик`},{value:`review`,label:`На согласовании`},{value:`approved`,label:`Утвержден`}],m=[{value:`yes`,label:`Да`},{value:`no`,label:`Нет`}],h={title:`UI/RadioGroup`,component:c,args:{value:`email`,onChange:()=>{},orientation:`horizontal`,label:`Канал уведомлений`,description:`Выберите основной канал доставки`,disabled:!1},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{value:{description:`Текущее выбранное значение.`,control:`text`},onChange:{description:`Вызывается при смене выбранной опции.`,control:!1},label:{description:`Заголовок группы опций.`,control:`text`},description:{description:`Описание под заголовком.`,control:`text`},disabled:{description:`Блокирует выбор опций.`,control:`boolean`},noWrap:{description:`Запрещает перенос опций на новую строку.`,control:`boolean`},orientation:{description:`Ориентация расположения опций.`,control:`inline-radio`,options:[`horizontal`,`vertical`]},children:{description:"Элементы `RadioGroup.Option` внутри группы.",control:!1}}},g={render:u(f,!0),args:{}},_={render:u(p),args:{orientation:`vertical`,label:`Статус документа`,value:`draft`}},v={render:u(m),args:{disabled:!0,value:`yes`}},g.parameters={...g.parameters,docs:{...g.parameters?.docs,source:{originalSource:`{
|
|
2
2
|
render: createRadioGroupStoryRender(notificationOptions, true),
|
|
3
3
|
args: {}
|
|
4
4
|
}`,...g.parameters?.docs?.source}}},_.parameters={..._.parameters,docs:{..._.parameters?.docs,source:{originalSource:`{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{t}from"./react-BZJXY1be.js";import{n}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{t}from"./react-BZJXY1be.js";import{n}from"./iframe-Cb11iJVP.js";import{a as r,i}from"./utils-tg3ibbzi.js";var a,o,s,c;function l(){return(l=e((()=>{a=t(),i(),o=n(),s=(0,a.forwardRef)(({children:e,height:t,stable:n,overscroll:i,className:a},s)=>(0,o.jsx)(`div`,{ref:s,className:r(`scrollable`,n&&`stable`,i&&`overscroll`,a),style:{height:t},children:e})),c=(0,a.forwardRef)(({blockClassName:e,...t},n)=>(0,o.jsx)(`div`,{className:r(e,`overflowHidden w100 h100`),children:(0,o.jsx)(s,{ref:n,...t})})),s.__docgenInfo={description:``,methods:[],displayName:`Scrollable`,props:{className:{required:!1,tsType:{name:`string`},description:``},height:{required:!1,tsType:{name:`union`,raw:`string | number`,elements:[{name:`string`},{name:`number`}]},description:``},stable:{required:!1,tsType:{name:`boolean`},description:``},overscroll:{required:!1,tsType:{name:`boolean`},description:``}},composes:[`PropsWithChildren`]},c.__docgenInfo={description:``,methods:[],displayName:`ScrollableBlock`,props:{className:{required:!1,tsType:{name:`string`},description:``},height:{required:!1,tsType:{name:`union`,raw:`string | number`,elements:[{name:`string`},{name:`number`}]},description:``},stable:{required:!1,tsType:{name:`boolean`},description:``},overscroll:{required:!1,tsType:{name:`boolean`},description:``},blockClassName:{required:!1,tsType:{name:`string`},description:``}},composes:[`PropsWithChildren`]}})))()}export{l as n,s as t};
|