@ryuzaki13/react-foundation-ui 1.2.13 → 1.2.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/dist/chunks/{TextEditorLexicalClient-D4hmfP5B.js → TextEditorLexicalClient-CVTrglWP.js} +2 -2
  2. package/dist/chunks/{TextEditorLexicalClient-D4hmfP5B.js.map → TextEditorLexicalClient-CVTrglWP.js.map} +1 -1
  3. package/dist/chunks/{date-input-BcVfIUJT.js → date-input-DBJisPRz.js} +2 -2
  4. package/dist/chunks/{date-input-BcVfIUJT.js.map → date-input-DBJisPRz.js.map} +1 -1
  5. package/dist/chunks/{radio-group-CEY_kdz8.js → radio-group-CM9Lg_nc.js} +3 -3
  6. package/dist/chunks/radio-group-CM9Lg_nc.js.map +1 -0
  7. package/dist/date-input/index.js +1 -1
  8. package/dist/preset-range-date-input/index.js +1 -1
  9. package/dist/radio-group/index.js +1 -1
  10. package/dist/styles.css +1 -1
  11. package/dist/text-editor/index.js +1 -1
  12. package/package.json +3 -3
  13. package/storybook-static/assets/{Badge--DWHr76D.js → Badge-DPudGUPM.js} +1 -1
  14. package/storybook-static/assets/{Badge.stories-B4cYG9l9.js → Badge.stories-CySszSFq.js} +1 -1
  15. package/storybook-static/assets/{Button-jmEmtzCG.js → Button-BCgOhtLd.js} +1 -1
  16. package/storybook-static/assets/{Button-Cx8ZZnYK.js → Button-Cioc8XN8.js} +1 -1
  17. package/storybook-static/assets/{Button.stories-SiBMniHM.js → Button.stories-Ca-X2wZk.js} +1 -1
  18. package/storybook-static/assets/{CheckBox-BHzxm5ud.js → CheckBox-C_1_y_qK.js} +1 -1
  19. package/storybook-static/assets/{CheckBox-CgMbsXwW.js → CheckBox-DKky4Sm8.js} +1 -1
  20. package/storybook-static/assets/{CheckBox.stories-CZ1wcKEl.js → CheckBox.stories-Bo3GYhXf.js} +1 -1
  21. package/storybook-static/assets/{Color-KMSTOMOX-DO0YdKFU.js → Color-KMSTOMOX-Byzq56AJ.js} +1 -1
  22. package/storybook-static/assets/{ContextMenu-DkGOpD2L.js → ContextMenu-CQkCWOmg.js} +1 -1
  23. package/storybook-static/assets/{ContextMenu.stories-ubSyKcEY.js → ContextMenu.stories-D5Pe5K7O.js} +1 -1
  24. package/storybook-static/assets/{DateInput-CaPaYBwV.js → DateInput-DBGCdSH5.js} +1 -1
  25. package/storybook-static/assets/{DateInput-CoMvPBgw.js → DateInput-Gjeob0uP.js} +1 -1
  26. package/storybook-static/assets/{DateInput.stories-BrmRRP3u.js → DateInput.stories-CUknz_9Y.js} +1 -1
  27. package/storybook-static/assets/{DateRangePresetSelect-Cqo8FN4l.js → DateRangePresetSelect-C9EXy002.js} +1 -1
  28. package/storybook-static/assets/{DateRangePresetSelect-DNbWJch4.js → DateRangePresetSelect-D7HFhBq0.js} +1 -1
  29. package/storybook-static/assets/{DateRangePresetSelect.stories-fSd0WyN7.js → DateRangePresetSelect.stories-BT1dvYZ6.js} +1 -1
  30. package/storybook-static/assets/{Detail-CUN5whdJ.js → Detail-Ch9XzeCR.js} +1 -1
  31. package/storybook-static/assets/{Detail.stories-X4YzNqXX.js → Detail.stories-DADltM7f.js} +1 -1
  32. package/storybook-static/assets/{Dialog-1KYB9IIO.js → Dialog-garYl1LG.js} +1 -1
  33. package/storybook-static/assets/{Dialog.stories-Bm-mh3pV.js → Dialog.stories-DrhVmPDV.js} +1 -1
  34. package/storybook-static/assets/{Disclosure-Cl7Usm1K.js → Disclosure-CZkieq8d.js} +1 -1
  35. package/storybook-static/assets/{Disclosure.stories-Dv0ZFbAG.js → Disclosure.stories-C5Zwfyws.js} +1 -1
  36. package/storybook-static/assets/{DocsRenderer-JROSPFPF-DpEJB6Iu.js → DocsRenderer-JROSPFPF-CQrgMypq.js} +2 -2
  37. package/storybook-static/assets/{DropZone-Dr4Z-pE1.js → DropZone-D2adV-iu.js} +1 -1
  38. package/storybook-static/assets/{DropZone.stories-BZvwPSUW.js → DropZone.stories-BoapusnJ.js} +1 -1
  39. package/storybook-static/assets/{DropdownMenu-DBpOoYuB.js → DropdownMenu-LFAjhade.js} +1 -1
  40. package/storybook-static/assets/{ExpandableActionPanel.stories-HS05XvKj.js → ExpandableActionPanel.stories-CJNWaY9S.js} +1 -1
  41. package/storybook-static/assets/{Flex-BLPSitUR.js → Flex-Cse0VN8u.js} +1 -1
  42. package/storybook-static/assets/{Flex-BLkaMY8A.js → Flex-DYOC7sAL.js} +1 -1
  43. package/storybook-static/assets/{Flex.stories-DHkOsjKa.js → Flex.stories-BiwoSTPH.js} +1 -1
  44. package/storybook-static/assets/{Grid-9nPVBakE.js → Grid-BNqNouvQ.js} +1 -1
  45. package/storybook-static/assets/{Grid-WyYCZl75.js → Grid-DyOMixwp.js} +1 -1
  46. package/storybook-static/assets/{Grid.stories-D1Aq5mKr.js → Grid.stories-CaN_BXma.js} +1 -1
  47. package/storybook-static/assets/{ImageCropper.stories-Bwl9JdxT.js → ImageCropper.stories-DVYZBRFp.js} +1 -1
  48. package/storybook-static/assets/{ImageRenderer-Bkf4dO-v.js → ImageRenderer-DDQvFB-L.js} +1 -1
  49. package/storybook-static/assets/{ImageRenderer.stories-BvhAt_-E.js → ImageRenderer.stories-DCaueisy.js} +1 -1
  50. package/storybook-static/assets/{ImageView.stories-DdWSfdOI.js → ImageView.stories-CUwMmYMX.js} +1 -1
  51. package/storybook-static/assets/{ImageViewer.stories-C8J6Buc-.js → ImageViewer.stories-K8ssHQwr.js} +2 -2
  52. package/storybook-static/assets/{ImageViewerRuntime-BMG0f_9d.js → ImageViewerRuntime-C-86ifkD.js} +1 -1
  53. package/storybook-static/assets/{Input-DQV1VhD-.js → Input-B0WWnS8-.js} +1 -1
  54. package/storybook-static/assets/{Input-DbaCFiCC.js → Input-DLp1Xuxw.js} +1 -1
  55. package/storybook-static/assets/{Input.stories-BtYgjKBn.js → Input.stories-_T7lqWLB.js} +1 -1
  56. package/storybook-static/assets/{InputDateTime-CY3ajtZ5.js → InputDateTime-B56pUSY7.js} +1 -1
  57. package/storybook-static/assets/{InputDateTime.stories-DnkeVay0.js → InputDateTime.stories-CmoN5agb.js} +1 -1
  58. package/storybook-static/assets/{InputFile-Dws7a0vW.js → InputFile-CjQC4Uiz.js} +1 -1
  59. package/storybook-static/assets/{InputFile.stories-BX2ZuwvI.js → InputFile.stories-CiZaLKkz.js} +1 -1
  60. package/storybook-static/assets/{InputFiles-CfDCHQCt.js → InputFiles-B_JpXc7C.js} +1 -1
  61. package/storybook-static/assets/{InputFiles-DZ8nXKan.js → InputFiles-CCBWXGHR.js} +1 -1
  62. package/storybook-static/assets/{InputFiles.stories-BrjhEuBb.js → InputFiles.stories-3f1nEfnt.js} +1 -1
  63. package/storybook-static/assets/{InputImage-BQrV_wZ5.js → InputImage-CAL9aF33.js} +1 -1
  64. package/storybook-static/assets/{InputImage.stories-DvPfY0EM.js → InputImage.stories-qAgfOzAM.js} +1 -1
  65. package/storybook-static/assets/{LayoutPicker-BmZiWK2i.js → LayoutPicker-Be6oYJGS.js} +1 -1
  66. package/storybook-static/assets/{LayoutPicker.stories-BR48XqPQ.js → LayoutPicker.stories--kaHXujk.js} +1 -1
  67. package/storybook-static/assets/{Listbox-DFx4qsG9.js → Listbox-BkMRJ6oY.js} +1 -1
  68. package/storybook-static/assets/{Listbox.stories-mYx37peV.js → Listbox.stories-CWugqDby.js} +1 -1
  69. package/storybook-static/assets/{Modal-B7_ZT1rl.js → Modal-VTHP1-uJ.js} +1 -1
  70. package/storybook-static/assets/{Modal.stories-eFt2-JCE.js → Modal.stories-B3Fl_4cE.js} +1 -1
  71. package/storybook-static/assets/{MultiSelect-Cc_sEash.js → MultiSelect-CksiHS1Y.js} +1 -1
  72. package/storybook-static/assets/{MultiSelect-6VhijuY2.js → MultiSelect-DceNb4aL.js} +1 -1
  73. package/storybook-static/assets/{MultiSelect.stories-DaxMx_BY.js → MultiSelect.stories-CBs3n6gv.js} +1 -1
  74. package/storybook-static/assets/{NotificationsHost-BjXsC4gT.js → NotificationsHost-CWEMg8I6.js} +1 -1
  75. package/storybook-static/assets/{NotificationsHost.stories-DEptWGP2.js → NotificationsHost.stories-BVstyHIE.js} +1 -1
  76. package/storybook-static/assets/{ODataMultiSelect-CLOq8OX8.js → ODataMultiSelect-BlzjynBY.js} +1 -1
  77. package/storybook-static/assets/{ODataMultiSelect-BMPMk3d7.js → ODataMultiSelect-CiHvaVGJ.js} +1 -1
  78. package/storybook-static/assets/{ODataMultiSelect.stories-BFPGEQ_E.js → ODataMultiSelect.stories-BT7GaQLE.js} +1 -1
  79. package/storybook-static/assets/{ODataSelect-CCLfT40q.js → ODataSelect-BLoDn2Ub.js} +1 -1
  80. package/storybook-static/assets/{ODataSelect-Civ1XLjx.js → ODataSelect-Cr4pQYI1.js} +1 -1
  81. package/storybook-static/assets/{ODataSelect.stories-D4RUITpS.js → ODataSelect.stories-Dbl26XTe.js} +1 -1
  82. package/storybook-static/assets/{ODataTreeMultiSelect-C2doZqfr.js → ODataTreeMultiSelect-Cby4c-Gk.js} +1 -1
  83. package/storybook-static/assets/{ODataTreeMultiSelect.stories-C4xMNCvZ.js → ODataTreeMultiSelect.stories-CfgGInk1.js} +1 -1
  84. package/storybook-static/assets/{ODataTreeSelect-BQmfQn0r.js → ODataTreeSelect-CG8bNnL0.js} +1 -1
  85. package/storybook-static/assets/{ODataTreeSelect.stories-BRY9vCtH.js → ODataTreeSelect.stories-CpFCv3b9.js} +1 -1
  86. package/storybook-static/assets/{PeriodSelect-BJ53Ykfv.js → PeriodSelect-LNejclnW.js} +1 -1
  87. package/storybook-static/assets/{PeriodSelect.stories--Hl4uIWl.js → PeriodSelect.stories-7MgS4zdv.js} +2 -2
  88. package/storybook-static/assets/{Popover-B4nkvxoX.js → Popover-zQXQnFFL.js} +1 -1
  89. package/storybook-static/assets/{Popover.stories-C43SSnlF.js → Popover.stories-W7lIz2B6.js} +1 -1
  90. package/storybook-static/assets/{PresetRangeDateInput-3iN63kX-.js → PresetRangeDateInput-DK2_y4cN.js} +1 -1
  91. package/storybook-static/assets/{PresetRangeDateInput.stories-CwBVhPU5.js → PresetRangeDateInput.stories-BViLBb14.js} +1 -1
  92. package/storybook-static/assets/{RadioButton-DZ8Nl-n6.js → RadioButton-Yt0oZf4E.js} +1 -1
  93. package/storybook-static/assets/{RadioButton.stories-C41d4mz9.js → RadioButton.stories-D8P25EBk.js} +1 -1
  94. package/storybook-static/assets/{RadioGroup-DlSrHkDR.js → RadioGroup-CKf9WzZb.js} +1 -1
  95. package/storybook-static/assets/RadioGroup-DSogQ0Gh.css +1 -0
  96. package/storybook-static/assets/RadioGroup-YP2iYAd2.js +1 -0
  97. package/storybook-static/assets/{RadioGroup.stories--96Mw_u5.js → RadioGroup.stories-teL45YTN.js} +1 -1
  98. package/storybook-static/assets/{Select-D3lBHJR0.js → Select-CPhI2DEf.js} +1 -1
  99. package/storybook-static/assets/{Select-BLiUsVjX.js → Select-m_NZjQxo.js} +1 -1
  100. package/storybook-static/assets/{Select.stories-CZX39tWX.js → Select.stories-DW2ASeOv.js} +1 -1
  101. package/storybook-static/assets/{SelectOptionContent-g6ApRTfm.js → SelectOptionContent-Cz6dUsCB.js} +1 -1
  102. package/storybook-static/assets/{SerializableSelect-lGqY5rI5.js → SerializableSelect-BcQRwjYS.js} +1 -1
  103. package/storybook-static/assets/{SerializableSelect-DYHTxerP.js → SerializableSelect-Nbt0c5ng.js} +1 -1
  104. package/storybook-static/assets/{SerializableSelect.stories-BtU5K_Lb.js → SerializableSelect.stories-5b1p6hng.js} +1 -1
  105. package/storybook-static/assets/{SingleDateTimeInput-DDkU8stn.js → SingleDateTimeInput-D6ZC9JpP.js} +1 -1
  106. package/storybook-static/assets/{SingleDateTimeInput.stories-B6uM5uBj.js → SingleDateTimeInput.stories-BgzkQbkx.js} +1 -1
  107. package/storybook-static/assets/{Slider-aV7w62Rn.js → Slider-C9Z6txLW.js} +1 -1
  108. package/storybook-static/assets/{Slider.stories-jIBFIiup.js → Slider.stories-Bdo3_1nw.js} +1 -1
  109. package/storybook-static/assets/{SliderInput-D0yRSdH6.js → SliderInput-DmbajIqV.js} +1 -1
  110. package/storybook-static/assets/{SliderInput.stories-5L9nhmYE.js → SliderInput.stories-rYLzdKpu.js} +1 -1
  111. package/storybook-static/assets/{Sortable-Bj-ITRmD.js → Sortable-CCch31vS.js} +1 -1
  112. package/storybook-static/assets/{Sortable.stories-BccPy88q.js → Sortable.stories-Cu3zI5h9.js} +1 -1
  113. package/storybook-static/assets/{Splitter-0MFVK6eX.js → Splitter-BR8joAqy.js} +1 -1
  114. package/storybook-static/assets/{Splitter.stories-Cnmcpah6.js → Splitter.stories-Bb99GQy0.js} +1 -1
  115. package/storybook-static/assets/{StateSelect-EXJTsIib.js → StateSelect-C5teWzIJ.js} +1 -1
  116. package/storybook-static/assets/{StateSelect.stories-DpeIOomk.js → StateSelect.stories-C2IUonaW.js} +1 -1
  117. package/storybook-static/assets/{Switch-Bouzf5T9.js → Switch-Cs48CpN6.js} +1 -1
  118. package/storybook-static/assets/{Switch.stories-DufwfHRc.js → Switch.stories-Dmv2GoIE.js} +1 -1
  119. package/storybook-static/assets/{Table-nRBkJNjN.js → Table-D55A8YRw.js} +1 -1
  120. package/storybook-static/assets/{Table.stories-T4Bh15-x.js → Table.stories-BpXSCglO.js} +1 -1
  121. package/storybook-static/assets/{Tabs-BbF0G8pl.js → Tabs-D3e7tAEn.js} +1 -1
  122. package/storybook-static/assets/{Tabs.stories-BPTit-WQ.js → Tabs.stories-C4EvmBpl.js} +1 -1
  123. package/storybook-static/assets/{TagInput.stories-DUx50IDO.js → TagInput.stories-BMj7neM4.js} +1 -1
  124. package/storybook-static/assets/{Textarea-DdP0_9Ku.js → Textarea-BVs8Ri47.js} +1 -1
  125. package/storybook-static/assets/{Textarea.stories-BIIl1zXa.js → Textarea.stories-EwmwDVzx.js} +1 -1
  126. package/storybook-static/assets/{TimePanel-P5OLY82H.js → TimePanel-CctgF-Ba.js} +1 -1
  127. package/storybook-static/assets/{TimePanel.stories-DYIjVXe-.js → TimePanel.stories-1Dtp0mYJ.js} +1 -1
  128. package/storybook-static/assets/{Toggle-BQ9vj1yQ.js → Toggle-rD-lp1O7.js} +1 -1
  129. package/storybook-static/assets/{Toggle.stories-DEirDiOG.js → Toggle.stories-C10m-ZA8.js} +1 -1
  130. package/storybook-static/assets/{TreeMultiSelect-BjQyOyQM.js → TreeMultiSelect-C27k2fak.js} +1 -1
  131. package/storybook-static/assets/{TreeMultiSelect-DbR73SDr.js → TreeMultiSelect-CgHeDrIO.js} +1 -1
  132. package/storybook-static/assets/{TreeMultiSelect.stories-CI8OYQ28.js → TreeMultiSelect.stories-ciaCVIUg.js} +1 -1
  133. package/storybook-static/assets/{TreePickerBase-BaaAg1C0.js → TreePickerBase-DqF5FvNY.js} +1 -1
  134. package/storybook-static/assets/{TreeSelect-Zx9nX92Z.js → TreeSelect-Bv_3N7qS.js} +1 -1
  135. package/storybook-static/assets/{TreeSelect-XN67-Ugz.js → TreeSelect-D-FubCvR.js} +1 -1
  136. package/storybook-static/assets/{TreeSelect.stories-4R0G5LPS.js → TreeSelect.stories-Cnyjx3Cr.js} +1 -1
  137. package/storybook-static/assets/{TreeTable-Z6jR0E4u.js → TreeTable-Dakv6rya.js} +1 -1
  138. package/storybook-static/assets/{TreeTable.stories-D_A4GmP1.js → TreeTable.stories-DqdpfiaO.js} +1 -1
  139. package/storybook-static/assets/{WithTooltip-7X4HQR7L-CxbHW8vk.js → WithTooltip-7X4HQR7L-Cpew3aNg.js} +1 -1
  140. package/storybook-static/assets/async-CBST-rZJ.js +625 -0
  141. package/storybook-static/assets/{base-table-BAybCumM.js → base-table-DiV3aUkm.js} +1 -1
  142. package/storybook-static/assets/{blocks-6H7dheWg.js → blocks-DxtpVRwM.js} +6 -6
  143. package/storybook-static/assets/{button-BW8g57jt.js → button-BPrqDvuC.js} +1 -1
  144. package/storybook-static/assets/{check-box-dDflWCAW.js → check-box-DwrLBs8K.js} +1 -1
  145. package/storybook-static/assets/{chunk-3LY4VQVK-CvprVBEE.js → chunk-3LY4VQVK-CLQHTufZ.js} +1 -1
  146. package/storybook-static/assets/{chunk-LITCR56V-ColyGaTs.js → chunk-LITCR56V-DMdBikCE.js} +1 -1
  147. package/storybook-static/assets/{contextMenu-BM_w29N2.js → contextMenu-_I6pGXYT.js} +1 -1
  148. package/storybook-static/assets/date-CQ9wheTT.js +461 -0
  149. package/storybook-static/assets/{error-Dd72Ltdx.js → error-CNPNEAVP.js} +1 -1
  150. package/storybook-static/assets/file-DjJWNuBz.js +291 -0
  151. package/storybook-static/assets/{flex-BQUmlc5s.js → flex-CQVMFWMW.js} +1 -1
  152. package/storybook-static/assets/{floating-ui.react-Cgv_gdpO.js → floating-ui.react-C3rg5XLp.js} +1 -1
  153. package/storybook-static/assets/formatter-L2YTDE3Q-BQMDlvN_.js +1 -0
  154. package/storybook-static/assets/formatters-BsP6CA0a.js +3 -0
  155. package/storybook-static/assets/formulas-DK4vpKA_.js +2 -0
  156. package/storybook-static/assets/grid-nZIniTeh.js +1 -0
  157. package/storybook-static/assets/{hooks-CksDwali.js → hooks-CVLEDvfo.js} +1 -1
  158. package/storybook-static/assets/{iframe-8yiaZsxV.js → iframe-BTDZjw05.js} +4 -4
  159. package/storybook-static/assets/{input-BDfX2ZJN.js → input-DD29rPF2.js} +1 -1
  160. package/storybook-static/assets/{mdx-react-shim-CR1Sqe7O.js → mdx-react-shim-CMkpiwEc.js} +1 -1
  161. package/storybook-static/assets/{media-Hxn--irs.js → media-DNbfoulg.js} +1 -1
  162. package/storybook-static/assets/{misc-C4JomW3A.js → misc-C0wxz-AU.js} +1 -1
  163. package/storybook-static/assets/{notifications-DHYp1_8F.js → notifications-B3BSUy0j.js} +1 -1
  164. package/storybook-static/assets/number-RnQqsbNa.js +2 -0
  165. package/storybook-static/assets/{odata-Beh7LPwF.js → odata-DtsLX2ND.js} +1 -1
  166. package/storybook-static/assets/odata-service-B63qvxEy.js +1 -0
  167. package/storybook-static/assets/odataFetchFn-DKHdlA48.js +763 -0
  168. package/storybook-static/assets/{odataStoryFixtures-C_NsAWws.js → odataStoryFixtures-DRl-0jvY.js} +1 -1
  169. package/storybook-static/assets/persisted-DBno8ICw.js +600 -0
  170. package/storybook-static/assets/{picker-BF69i-Xf.js → picker-BekQHdO_.js} +1 -1
  171. package/storybook-static/assets/{popover-BDRQLBEp.js → popover-nKXcgOys.js} +1 -1
  172. package/storybook-static/assets/{preset-select-C-Xm2xmD.js → preset-select-CPLTHazi.js} +1 -1
  173. package/storybook-static/assets/pwa-BP4Qxdcf.js +640 -0
  174. package/storybook-static/assets/queryClient-D8_xdGZ2.js +567 -0
  175. package/storybook-static/assets/{react-18-CqASmMhK.js → react-18-BY7O2bU-.js} +1 -1
  176. package/storybook-static/assets/{react-v2wz2Yxr.js → react-_DDQf-KJ.js} +1 -1
  177. package/storybook-static/assets/{react-dom-CXms0ASb.js → react-dom-BBNjM9Mb.js} +1 -1
  178. package/storybook-static/assets/select-BDiqR6E9.js +1 -0
  179. package/storybook-static/assets/{slider-DqH5Q0D9.js → slider-C94P2mzP.js} +1 -1
  180. package/storybook-static/assets/{sortable-CgPvrRfY.js → sortable-Bciuck7B.js} +1 -1
  181. package/storybook-static/assets/{syntaxhighlighter-RTCFPKCB-CrLT_Ki1.js → syntaxhighlighter-RTCFPKCB-D4jCnS_i.js} +1 -1
  182. package/storybook-static/assets/{text-DrpMrZBZ.js → text-DR70nwXc.js} +1 -1
  183. package/storybook-static/assets/{theming-DZ-M3lNH.js → theming-CzVm4PtY.js} +1 -1
  184. package/storybook-static/assets/ui-CbXWeydL.js +1 -0
  185. package/storybook-static/assets/{useODataSelectBase-C8eWb6CT.js → useODataSelectBase-D8bA7nx-.js} +1 -1
  186. package/storybook-static/assets/{useODataTreeData-CU1I_UJd.js → useODataTreeData-CtDrXYzn.js} +1 -1
  187. package/storybook-static/assets/{utils-CecGsBKu.js → utils-C8AvFbMG.js} +1 -1
  188. package/storybook-static/assets/valueState-n2Sm8Yt_.js +277 -0
  189. package/storybook-static/iframe.html +1 -1
  190. package/storybook-static/index.json +1 -1
  191. package/storybook-static/project.json +1 -1
  192. package/dist/chunks/radio-group-CEY_kdz8.js.map +0 -1
  193. package/storybook-static/assets/RadioGroup-BU1UODYa.js +0 -1
  194. package/storybook-static/assets/RadioGroup-hi7uePOA.css +0 -1
  195. package/storybook-static/assets/formatter-L2YTDE3Q-BkbAyQS_.js +0 -1
  196. package/storybook-static/assets/formatters-DR4SipYU.js +0 -3
  197. package/storybook-static/assets/grid-Clv9wted.js +0 -1
  198. package/storybook-static/assets/odata-service-DJJFflxw.js +0 -1
  199. package/storybook-static/assets/select-D0PdaVj6.js +0 -1
  200. package/storybook-static/assets/ui-CEAYwuc3.js +0 -1
@@ -1,4 +1,4 @@
1
- import{c as e,i as t}from"./preload-helper-B45gAKPr.js";import{pn as n,t as r}from"./iframe-8yiaZsxV.js";import{D as i,E as a,T as o,w as s}from"./odata-Beh7LPwF.js";var c,l,u=t((()=>{c=[{code:`R01`,text:`Северный регион`,branches:[{code:`B0101`,text:`Подразделение Альфа`,teams:[{code:`T0101`,text:`Команда поддержки`,owners:[{code:`P0001`,text:`Ответственный 1`},{code:`P0002`,text:`Ответственный 2`},{code:`P0003`,text:`Ответственный 3`}]},{code:`T0102`,text:`Команда внедрения`,owners:[{code:`P0004`,text:`Ответственный 4`},{code:`P0005`,text:`Ответственный 5`}]}]},{code:`B0102`,text:`Подразделение Бета`,teams:[{code:`T0201`,text:`Команда аналитики`,owners:[{code:`P0006`,text:`Ответственный 6`},{code:`P0007`,text:`Ответственный 7`}]}]}]},{code:`R02`,text:`Южный регион`,branches:[{code:`B0201`,text:`Подразделение Гамма`,teams:[{code:`T0301`,text:`Команда сопровождения`,owners:[{code:`P0008`,text:`Ответственный 8`},{code:`P0009`,text:`Ответственный 9`}]}]}]},{code:`R03`,text:`Восточный регион`,branches:[{code:`B0301`,text:`Подразделение Дельта`,teams:[{code:`T0401`,text:`Команда развития`,owners:[{code:`P0010`,text:`Ответственный 10`},{code:`P0011`,text:`Ответственный 11`}]}]},{code:`B0302`,text:`Подразделение Омега`,teams:[{code:`T0501`,text:`Команда качества`,owners:[{code:`P0012`,text:`Ответственный 12`},{code:`P0013`,text:`Ответственный 13`}]}]}]}],l=c.flatMap(e=>e.branches.flatMap(t=>t.teams.flatMap(n=>n.owners.map(r=>({REGION:e.code,REGION_Text:e.text,BRANCH:t.code,BRANCH_Text:t.text,TEAM:n.code,TEAM_Text:n.text,OWNER:r.code,OWNER_Text:r.text})))))}));function d(e,t,n=200){return new Response(e,{status:n,headers:{"Content-Type":t}})}function f(e){return new Promise(t=>{setTimeout(t,e)})}var p,m,h,g,_,v,y,b,x,S,C,w=t((()=>{p=e(n(),1),o(),a(),u(),m=r(),h=`DEMO_REFERENCE_SRV`,g=`DemoReferenceItems`,_=`<?xml version="1.0" encoding="utf-8"?>
1
+ import{c as e,i as t}from"./preload-helper-B45gAKPr.js";import{pn as n,t as r}from"./iframe-BTDZjw05.js";import{D as i,E as a,T as o,w as s}from"./odata-DtsLX2ND.js";var c,l,u=t((()=>{c=[{code:`R01`,text:`Северный регион`,branches:[{code:`B0101`,text:`Подразделение Альфа`,teams:[{code:`T0101`,text:`Команда поддержки`,owners:[{code:`P0001`,text:`Ответственный 1`},{code:`P0002`,text:`Ответственный 2`},{code:`P0003`,text:`Ответственный 3`}]},{code:`T0102`,text:`Команда внедрения`,owners:[{code:`P0004`,text:`Ответственный 4`},{code:`P0005`,text:`Ответственный 5`}]}]},{code:`B0102`,text:`Подразделение Бета`,teams:[{code:`T0201`,text:`Команда аналитики`,owners:[{code:`P0006`,text:`Ответственный 6`},{code:`P0007`,text:`Ответственный 7`}]}]}]},{code:`R02`,text:`Южный регион`,branches:[{code:`B0201`,text:`Подразделение Гамма`,teams:[{code:`T0301`,text:`Команда сопровождения`,owners:[{code:`P0008`,text:`Ответственный 8`},{code:`P0009`,text:`Ответственный 9`}]}]}]},{code:`R03`,text:`Восточный регион`,branches:[{code:`B0301`,text:`Подразделение Дельта`,teams:[{code:`T0401`,text:`Команда развития`,owners:[{code:`P0010`,text:`Ответственный 10`},{code:`P0011`,text:`Ответственный 11`}]}]},{code:`B0302`,text:`Подразделение Омега`,teams:[{code:`T0501`,text:`Команда качества`,owners:[{code:`P0012`,text:`Ответственный 12`},{code:`P0013`,text:`Ответственный 13`}]}]}]}],l=c.flatMap(e=>e.branches.flatMap(t=>t.teams.flatMap(n=>n.owners.map(r=>({REGION:e.code,REGION_Text:e.text,BRANCH:t.code,BRANCH_Text:t.text,TEAM:n.code,TEAM_Text:n.text,OWNER:r.code,OWNER_Text:r.text})))))}));function d(e,t,n=200){return new Response(e,{status:n,headers:{"Content-Type":t}})}function f(e){return new Promise(t=>{setTimeout(t,e)})}var p,m,h,g,_,v,y,b,x,S,C,w=t((()=>{p=e(n(),1),o(),a(),u(),m=r(),h=`DEMO_REFERENCE_SRV`,g=`DemoReferenceItems`,_=`<?xml version="1.0" encoding="utf-8"?>
2
2
  <edmx:Edmx xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx">
3
3
  <edmx:DataServices xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" m:DataServiceVersion="2.0">
4
4
  <Schema Namespace="DEMO_REFERENCE_SRV" xmlns="http://schemas.microsoft.com/ado/2008/09/edm" xmlns:sap="http://www.sap.com/Protocols/SAPData">
@@ -0,0 +1,600 @@
1
+ import{i as e}from"./preload-helper-B45gAKPr.js";import{t}from"./iframe-BTDZjw05.js";import{E as n,c as r,l as i,m as a}from"./blocks-DxtpVRwM.js";import{t as o}from"./mdx-react-shim-CMkpiwEc.js";var s,c=e((()=>{s=`# persisted
2
+
3
+ Внутренний infrastructural-модуль для переиспользуемой работы с сохранёнными записями: \`variant\`, \`view-config\`, \`preset\` и похожими сущностями.
4
+
5
+ ## Зачем нужен модуль
6
+
7
+ До выноса общей логики разные доменные API независимо решали один и тот же набор задач:
8
+
9
+ - строили \`queryKey\`;
10
+ - нормализовали \`scope\`;
11
+ - разбирали JSON payload;
12
+ - подключали \`useQuery\` и \`useMutation\`;
13
+ - инвалидировали кэш после сохранения;
14
+ - оборачивали транспортные детали OData, REST или TanStack Start serverFn.
15
+
16
+ \`persisted\` собирает этот повтор в один слой, но не пытается унифицировать доменную бизнес-логику.
17
+
18
+ Модуль специально не знает, что такое variant, view-config или preset. Он знает только:
19
+
20
+ - у ресурса есть \`scope\`;
21
+ - ресурс может поддерживать часть стандартных операций;
22
+ - операции могут быть реализованы через разный transport;
23
+ - после мутаций нужно применить переиспользуемую cache policy.
24
+
25
+ ## Главная идея
26
+
27
+ Архитектура строится вокруг descriptor ресурса.
28
+
29
+ Descriptor описывает:
30
+
31
+ - идентичность ресурса в кэше;
32
+ - политику нормализации \`scope\`;
33
+ - проверку, что \`scope\` вообще пригоден для выполнения операции;
34
+ - набор capability: \`list\`, \`latest\`, \`history\`, \`save\`, \`create\`, \`delete\`;
35
+ - transport-specific реализацию каждой capability.
36
+
37
+ Из descriptor затем строятся:
38
+
39
+ - \`usePersistedListQuery\`
40
+ - \`usePersistedLatestQuery\`
41
+ - \`usePersistedHistoryQuery\`
42
+ - \`usePersistedSaveMutation\`
43
+ - \`usePersistedCreateMutation\`
44
+ - \`usePersistedDeleteMutation\`
45
+ - \`getPersistedListData\`
46
+ - \`getPersistedLatestData\`
47
+ - \`getPersistedHistoryData\`
48
+
49
+ ## Слои модуля
50
+
51
+ ### \`payload.ts\`
52
+
53
+ Содержит безопасный JSON codec:
54
+
55
+ - \`parsePersistedJson<T>\`
56
+ - \`stringifyPersistedJson<T>\`
57
+ - \`createPersistedJsonCodec<T>\`
58
+
59
+ Это deliberate-ограничение: parser принимает только строку или \`null/undefined\`, чтобы нельзя было случайно передать туда весь record.
60
+
61
+ ### \`keys.ts\`
62
+
63
+ Содержит фабрику \`createPersistedRecordKeys\`.
64
+
65
+ Она строит ключи по схеме:
66
+
67
+ \`namespace -> resource -> normalizedScope -> operation -> optionalArgs\`
68
+
69
+ Нормализация нужна, чтобы:
70
+
71
+ - trim-ить строки;
72
+ - стабилизировать объекты через сортировку ключей;
73
+ - не плодить разные ключи для эквивалентных scope.
74
+
75
+ ### \`cache.ts\`
76
+
77
+ Содержит стандартные cache strategy:
78
+
79
+ - \`createInvalidatePersistedScopeCacheStrategy\`
80
+ - \`createSetPersistedQueryDataCacheStrategy\`
81
+ - \`composePersistedCacheStrategies\`
82
+
83
+ ### \`odata.ts\`
84
+
85
+ Содержит адаптеры для OData:
86
+
87
+ - \`createPersistedODataQueryOperation\`
88
+ - \`createPersistedODataMutationOperation\`
89
+
90
+ ### \`rest.ts\`
91
+
92
+ Содержит адаптеры для обычного REST:
93
+
94
+ - \`createPersistedRestQueryOperation\`
95
+ - \`createPersistedRestMutationOperation\`
96
+
97
+ ### \`resource.ts\`
98
+
99
+ Главный orchestration-слой.
100
+
101
+ Тут живут:
102
+
103
+ - \`createPersistedResourceDescriptor\`
104
+ - query hooks
105
+ - mutation hooks
106
+ - imperative preload helpers
107
+
108
+ Именно этот слой связывает:
109
+
110
+ - descriptor;
111
+ - transport capability;
112
+ - react-query;
113
+ - проверку scope;
114
+ - cache strategy.
115
+
116
+ ### \`../server-fn\`
117
+
118
+ Соседний слой \`shared/api/server-fn\` содержит переносимые адаптеры для
119
+ TanStack Start server functions:
120
+
121
+ - \`createServerFnQueryOperation\`
122
+ - \`createServerFnMutationOperation\`
123
+
124
+ Адаптер не импортирует \`@tanstack/react-start\`. Он знает только публичную
125
+ форму вызова serverFn: \`{ data } -> Promise<response>\`. Благодаря этому общий
126
+ shared-слой можно синхронизировать между SAP/OData SPA и SSR-проектом, а
127
+ конкретный проект выбирает transport на уровне descriptor-а ресурса.
128
+
129
+ ## Capability model
130
+
131
+ Модуль принципиально не требует полный CRUD.
132
+
133
+ Ресурс может поддерживать только нужные операции.
134
+
135
+ Примеры:
136
+
137
+ - \`viewConfig\` использует \`latest\`, \`history\`, \`save\`
138
+ - \`targetNodePreset\` использует \`list\`, \`save\`
139
+ - \`variantApi\` использует \`list\`, \`save\`, \`create\`, \`delete\`
140
+
141
+ Если попытаться вызвать хук для capability, которой у descriptor нет, общий слой даст раннюю ошибку.
142
+
143
+ ## Что оставляем вне общего слоя
144
+
145
+ В \`persisted\` нельзя складывать доменную бизнес-логику.
146
+
147
+ Снаружи должны оставаться:
148
+
149
+ - выбор default variant;
150
+ - нормализация конкретного snapshot;
151
+ - пользовательские уведомления;
152
+ - специфичные мутации, например \`setDefault\`;
153
+ - валидация бизнес-правил;
154
+ - подготовка payload, зависящая от доменной модели.
155
+
156
+ Хорошее правило:
157
+
158
+ Если код можно описать как «это одинаково для любого ресурса, который хранит записи», его место здесь.
159
+
160
+ Если код можно описать как «это знание именно про variant/view-config/preset», его место в доменном модуле.
161
+
162
+ ## Быстрый рецепт подключения нового ресурса
163
+
164
+ 1. Определить \`scope\`.
165
+ 2. Определить, какие capability реально нужны.
166
+ 3. Подобрать transport adapter: OData/REST из \`shared/api/persisted\` или serverFn из \`shared/api/server-fn\`.
167
+ 4. Создать descriptor через \`createPersistedResourceDescriptor\`.
168
+ 5. Экспортировать доменные хуки-обёртки поверх generic-хуков.
169
+ 6. Оставить domain-specific transform, notify и validation вне shared-слоя.
170
+
171
+ ## Пример 1. OData ресурс с \`latest\` и \`save\`
172
+
173
+ Ниже упрощённый пример в стиле \`viewConfig\`.
174
+
175
+ \`\`\`ts
176
+ import type { QueryClient } from "@tanstack/react-query";
177
+
178
+ import { BaseURLType } from "@/shared/api";
179
+ import {
180
+ createInvalidatePersistedScopeCacheStrategy,
181
+ createPersistedODataMutationOperation,
182
+ createPersistedODataQueryOperation,
183
+ createPersistedResourceDescriptor,
184
+ getPersistedLatestData,
185
+ parsePersistedJson,
186
+ stringifyPersistedJson,
187
+ usePersistedLatestQuery,
188
+ usePersistedSaveMutation
189
+ } from "@/shared/api/persisted";
190
+ import { createFilterEqual } from "@ryuzaki13/react-foundation-lib/odata-service";
191
+
192
+ type ViewConfigScope = {
193
+ appId: string;
194
+ viewId: string;
195
+ };
196
+
197
+ type ViewConfigPayload = {
198
+ title: string;
199
+ columns: string[];
200
+ };
201
+
202
+ type ViewConfigRaw = {
203
+ id: string;
204
+ appId: string;
205
+ viewId: string;
206
+ payload: string;
207
+ };
208
+
209
+ type SaveViewConfigInput = {
210
+ payload: ViewConfigPayload;
211
+ transportRequest: string;
212
+ };
213
+
214
+ const SERVICE = "TEXT_CONFIG_SRV";
215
+ const ENTITY = "CONFIG";
216
+ const ENTITY_LATEST = "TEXT_CONFIG_LATEST";
217
+ const SERVICE_BASE_URL: BaseURLType | undefined = __DEV__ ? "odataDp0" : undefined;
218
+
219
+ const viewConfigResource = createPersistedResourceDescriptor({
220
+ namespace: "viewConfig",
221
+ resource: "view",
222
+ normalizeScope: (scope: ViewConfigScope | null | undefined) => ({
223
+ appId: scope?.appId?.trim() ?? "",
224
+ viewId: scope?.viewId?.trim() ?? ""
225
+ }),
226
+ isEnabled: (scope) => Boolean(scope?.appId && scope?.viewId),
227
+ getScopeError: () => "Не удалось выполнить операцию с конфигурацией: scope appId/viewId не задан.",
228
+ transport: {
229
+ latest: createPersistedODataQueryOperation<ViewConfigScope, void, ViewConfigRaw[], ViewConfigPayload | null>({
230
+ odata: { service: SERVICE, target: ENTITY_LATEST },
231
+ baseUrl: SERVICE_BASE_URL,
232
+ staleTime: Infinity,
233
+ gcTime: 1000 * 60 * 60 * 24,
234
+ buildOptions: (scope) => ({
235
+ expression: {
236
+ and: true,
237
+ filters: [
238
+ createFilterEqual("appId", scope.appId),
239
+ createFilterEqual("viewId", scope.viewId)
240
+ ]
241
+ }
242
+ }),
243
+ transform: (rows) => parsePersistedJson<ViewConfigPayload>(rows[0]?.payload)
244
+ }),
245
+ save: createPersistedODataMutationOperation<ViewConfigScope, SaveViewConfigInput, unknown, unknown>({
246
+ odata: { service: SERVICE, target: ENTITY },
247
+ baseUrl: SERVICE_BASE_URL,
248
+ method: "POST",
249
+ bodyMapper: (scope, input) => ({
250
+ id: "",
251
+ appId: scope.appId,
252
+ viewId: scope.viewId,
253
+ payload: stringifyPersistedJson(input.payload),
254
+ transportRequest: input.transportRequest
255
+ }),
256
+ cacheStrategy: createInvalidatePersistedScopeCacheStrategy()
257
+ })
258
+ }
259
+ });
260
+
261
+ export function useViewConfigLatestQuery(scope: ViewConfigScope) {
262
+ return usePersistedLatestQuery<ViewConfigScope, ViewConfigPayload | null>(viewConfigResource, scope);
263
+ }
264
+
265
+ export function useSaveViewConfigMutation(scope: ViewConfigScope) {
266
+ return usePersistedSaveMutation<ViewConfigScope, SaveViewConfigInput, unknown>(viewConfigResource, scope);
267
+ }
268
+
269
+ export async function getViewConfigLatestData(scope: ViewConfigScope, queryClient: QueryClient) {
270
+ return await getPersistedLatestData<ViewConfigScope, ViewConfigPayload | null>(viewConfigResource, scope, queryClient);
271
+ }
272
+ \`\`\`
273
+
274
+ ### Что здесь важно
275
+
276
+ - descriptor ничего не знает про UI;
277
+ - payload-parsing остаётся доменным;
278
+ - \`latest\` возвращает уже доменную модель, а не transport envelope;
279
+ - cache strategy задаётся один раз на уровне ресурса.
280
+
281
+ ## Пример 2. SSR ресурс поверх TanStack Start serverFn
282
+
283
+ Ниже упрощённый вариант для проекта с TanStack Start: descriptor остаётся тем же
284
+ generic-слоем, но transport подключается через serverFn вместо OData.
285
+
286
+ \`\`\`ts
287
+ import type { QueryClient } from "@tanstack/react-query";
288
+
289
+ import {
290
+ createInvalidatePersistedScopeCacheStrategy,
291
+ createPersistedResourceDescriptor,
292
+ getPersistedLatestData,
293
+ usePersistedLatestQuery,
294
+ usePersistedSaveMutation
295
+ } from "@/shared/api/persisted";
296
+ import {
297
+ createServerFnMutationOperation,
298
+ createServerFnQueryOperation
299
+ } from "@/shared/api/server-fn";
300
+ import { getViewConfigServerFn, saveViewConfigServerFn } from "@/server/serverFns";
301
+
302
+ type ViewConfigScope = {
303
+ appId: string;
304
+ viewId: string;
305
+ };
306
+
307
+ type ViewConfigPayload = {
308
+ title: string;
309
+ columns: string[];
310
+ };
311
+
312
+ type SaveViewConfigInput = {
313
+ payload: ViewConfigPayload;
314
+ };
315
+
316
+ const viewConfigResource = createPersistedResourceDescriptor({
317
+ namespace: "viewConfig",
318
+ resource: "view",
319
+ normalizeScope: (scope: ViewConfigScope | null | undefined) => ({
320
+ appId: scope?.appId?.trim() ?? "",
321
+ viewId: scope?.viewId?.trim() ?? ""
322
+ }),
323
+ isEnabled: (scope) => Boolean(scope?.appId && scope?.viewId),
324
+ getScopeError: () => "Не удалось выполнить операцию с конфигурацией: scope appId/viewId не задан.",
325
+ transport: {
326
+ latest: createServerFnQueryOperation({
327
+ serverFn: getViewConfigServerFn,
328
+ buildData: (scope) => scope
329
+ }),
330
+ save: createServerFnMutationOperation({
331
+ serverFn: saveViewConfigServerFn,
332
+ buildData: (scope, input) => ({
333
+ ...scope,
334
+ payload: input.payload
335
+ }),
336
+ cacheStrategy: createInvalidatePersistedScopeCacheStrategy()
337
+ })
338
+ }
339
+ });
340
+
341
+ export function useViewConfigLatestQuery(scope: ViewConfigScope) {
342
+ return usePersistedLatestQuery<ViewConfigScope, ViewConfigPayload | null>(viewConfigResource, scope);
343
+ }
344
+
345
+ export function useSaveViewConfigMutation(scope: ViewConfigScope) {
346
+ return usePersistedSaveMutation<ViewConfigScope, SaveViewConfigInput, void>(viewConfigResource, scope);
347
+ }
348
+
349
+ export async function getViewConfigLatestData(scope: ViewConfigScope, queryClient: QueryClient) {
350
+ return await getPersistedLatestData<ViewConfigScope, ViewConfigPayload | null>(viewConfigResource, scope, queryClient);
351
+ }
352
+ \`\`\`
353
+
354
+ ### Что здесь важно
355
+
356
+ - shared API не импортирует \`@tanstack/react-start\`;
357
+ - \`{ data }\` собирается в \`buildData\`, а не размазывается по UI/hooks;
358
+ - cache strategy остаётся общей для OData и SSR transport.
359
+
360
+ ## Пример 3. REST ресурс с \`list\` и \`save\`
361
+
362
+ Ниже упрощённый пример в стиле \`targetNodePreset\`.
363
+
364
+ \`\`\`ts
365
+ import {
366
+ createInvalidatePersistedScopeCacheStrategy,
367
+ createPersistedResourceDescriptor,
368
+ createPersistedRestMutationOperation,
369
+ createPersistedRestQueryOperation,
370
+ parsePersistedJson,
371
+ usePersistedListQuery,
372
+ usePersistedSaveMutation
373
+ } from "@/shared/api/persisted";
374
+
375
+ type ConfigPresetScope = {
376
+ userId: string;
377
+ };
378
+
379
+ type TargetNodePayload = {
380
+ name: string;
381
+ description: string;
382
+ type: string;
383
+ config: unknown;
384
+ };
385
+
386
+ type ConfigPresetRecord = {
387
+ recId: string;
388
+ cfgType: string;
389
+ userId: string;
390
+ payload: string;
391
+ crtUtc: string;
392
+ };
393
+
394
+ type ConfigPresetsResponse = {
395
+ data: ConfigPresetRecord[] | null;
396
+ meta: {
397
+ limit: number;
398
+ offset: number;
399
+ };
400
+ };
401
+
402
+ type TargetNodePreset = {
403
+ recId: string;
404
+ cfgType: "target_node_preset";
405
+ userId: string;
406
+ payload: TargetNodePayload;
407
+ crtUtc: string;
408
+ };
409
+
410
+ type TargetNodePresetInput = {
411
+ payload: TargetNodePayload;
412
+ };
413
+
414
+ const BASE = "/api/config-presets";
415
+ const CFG_TYPE = "target_node_preset" as const;
416
+
417
+ const targetNodePresetResource = createPersistedResourceDescriptor({
418
+ namespace: "view-config",
419
+ resource: CFG_TYPE,
420
+ normalizeScope: (scope: ConfigPresetScope | null | undefined) => ({
421
+ userId: scope?.userId?.trim() ?? ""
422
+ }),
423
+ isEnabled: (scope) => Boolean(scope?.userId?.trim()),
424
+ getScopeError: () => "Не удалось выполнить операцию с пресетом узла: userId не задан.",
425
+ transport: {
426
+ list: createPersistedRestQueryOperation<
427
+ ConfigPresetScope,
428
+ void,
429
+ ConfigPresetsResponse,
430
+ TargetNodePreset[]
431
+ >({
432
+ buildUrl: (scope) => \`\${BASE}/list?cfgType=\${CFG_TYPE}&userId=\${scope.userId}\`,
433
+ transform: (response) =>
434
+ (response.data ?? []).flatMap((record) => {
435
+ const payload = parsePersistedJson<TargetNodePayload>(record.payload);
436
+ return payload
437
+ ? [{
438
+ ...record,
439
+ cfgType: CFG_TYPE,
440
+ payload
441
+ }]
442
+ : [];
443
+ })
444
+ }),
445
+ save: createPersistedRestMutationOperation<
446
+ ConfigPresetScope,
447
+ TargetNodePresetInput,
448
+ { data: ConfigPresetRecord | null },
449
+ ConfigPresetRecord | null
450
+ >({
451
+ buildUrl: () => BASE,
452
+ method: "PUT",
453
+ bodyMapper: (scope, input) => ({
454
+ cfgType: CFG_TYPE,
455
+ userId: scope.userId,
456
+ payload: input.payload
457
+ }),
458
+ transform: (response) => response.data,
459
+ cacheStrategy: createInvalidatePersistedScopeCacheStrategy()
460
+ })
461
+ }
462
+ });
463
+
464
+ export function useTargetNodePresetsQuery(scope: ConfigPresetScope | null | undefined) {
465
+ return usePersistedListQuery<ConfigPresetScope, TargetNodePreset[]>(targetNodePresetResource, scope);
466
+ }
467
+
468
+ export function useTargetNodePresetMutation(scope: ConfigPresetScope | null | undefined) {
469
+ return usePersistedSaveMutation<ConfigPresetScope, TargetNodePresetInput, ConfigPresetRecord | null>(
470
+ targetNodePresetResource,
471
+ scope
472
+ );
473
+ }
474
+ \`\`\`
475
+
476
+ ### Что здесь важно
477
+
478
+ - один и тот же orchestration-слой работает и для REST, и для OData;
479
+ - \`scope.userId\` участвует и в query key, и в \`enabled\`, и в request body;
480
+ - invalidation остаётся общей политикой, а не копипастой по модулям.
481
+
482
+ ## Когда использовать \`invalidate\`, а когда \`setQueryData\`
483
+
484
+ ### Выбирать \`createInvalidatePersistedScopeCacheStrategy\`, если:
485
+
486
+ - мутация влияет на несколько query одного scope;
487
+ - backend не возвращает достаточно данных для точного обновления;
488
+ - важнее надёжность, чем микрооптимизация.
489
+
490
+ ### Выбирать \`createSetPersistedQueryDataCacheStrategy\`, если:
491
+
492
+ - нужно быстро обновить один конкретный query;
493
+ - мутация возвращает уже готовую доменную модель;
494
+ - есть уверенность, что не появится рассинхронизация с другими query.
495
+
496
+ ### Выбирать \`composePersistedCacheStrategies\`, если:
497
+
498
+ - нужно совместить адресное обновление и более широкую инвалидацию;
499
+ - ресурс одновременно обновляет \`latest\` и \`history\`.
500
+
501
+ ## Scope policy
502
+
503
+ Для каждого ресурса важно отдельно определить:
504
+
505
+ - как нормализуется scope;
506
+ - когда scope считается валидным;
507
+ - какое сообщение вернуть при невалидном scope.
508
+
509
+ Рекомендуемый подход:
510
+
511
+ \`\`\`ts
512
+ normalizeScope: (scope) => ({
513
+ appId: scope?.appId?.trim() ?? "",
514
+ viewId: scope?.viewId?.trim() ?? ""
515
+ }),
516
+ isEnabled: (scope) => Boolean(scope?.appId && scope?.viewId),
517
+ getScopeError: () => "Не удалось выполнить операцию: scope appId/viewId не задан."
518
+ \`\`\`
519
+
520
+ Это даёт сразу три выигрыша:
521
+
522
+ - одинаковые query key для эквивалентных scope;
523
+ - отсутствие сетевых запросов при неполном scope;
524
+ - понятную ошибку, если мутация всё же была вызвана.
525
+
526
+ ## Рекомендации по проектированию
527
+
528
+ ### Делайте \`transform\` доменным
529
+
530
+ Хорошо:
531
+
532
+ - \`transform: (rows) => parsePersistedJson<ViewConfigPayload>(rows[0]?.payload)\`
533
+ - \`transform: (rows) => rows.map(mapVariantRecord)\`
534
+
535
+ Плохо:
536
+
537
+ - переносить в shared-слой знание о \`variantId\`, \`isDefault\`, \`cfgType\`, \`transportRequest\`
538
+
539
+ ### Не выносите отдельные бизнес-операции в общий CRUD
540
+
541
+ Например:
542
+
543
+ - \`setDefaultVariant\`
544
+ - \`publishVariant\`
545
+ - \`duplicatePreset\`
546
+
547
+ Если операция не является обычным \`save/create/delete\`, лучше оставить её доменной мутацией, но при желании переиспользовать \`descriptor.keys.scope(...)\` и общие cache strategy.
548
+
549
+ ### Не заставляйте ресурс поддерживать лишние capability
550
+
551
+ Если backend умеет только \`latest\` и \`save\`, так и описывайте.
552
+
553
+ Capability-based модель нужна именно для того, чтобы не строить фальшивый универсальный CRUD.
554
+
555
+ ## Тестирование
556
+
557
+ Модуль рассчитан на два уровня тестов:
558
+
559
+ ### 1. Тесты shared-слоя
560
+
561
+ Проверяют:
562
+
563
+ - codec;
564
+ - key generation;
565
+ - transport adapters;
566
+ - cache strategies.
567
+
568
+ ### 2. Тесты доменного подключения
569
+
570
+ Проверяют:
571
+
572
+ - корректный raw -> domain mapping;
573
+ - защиту от битого payload;
574
+ - специфичные scope policy;
575
+ - контракт возвращаемых данных доменного API.
576
+
577
+ Именно такое разделение сейчас используется в репозитории.
578
+
579
+ ## Ограничения модуля
580
+
581
+ - модуль не заменяет domain layer;
582
+ - модуль не решает transport-specific business rules backend;
583
+ - модуль не хранит схемы payload и не валидирует их содержимое;
584
+ - модуль не синтезирует сложные optimistic update сам по себе.
585
+
586
+ Если ресурсу нужна сложная бизнес-валидация или нестандартная синхронизация, это должно остаться в доменном коде поверх shared-слоя.
587
+
588
+ ## Чек-лист для нового ресурса
589
+
590
+ - Есть ли у ресурса стабильный \`scope\`?
591
+ - Нужно ли нормализовать строки и идентификаторы?
592
+ - Какие capability действительно нужны?
593
+ - Подходит OData adapter или пока нужен REST adapter?
594
+ - Можно ли после мутации ограничиться \`invalidate(scope)\`?
595
+ - Возвращает ли query уже доменную модель без transport envelope?
596
+ - Вынесена ли доменная бизнес-логика за пределы \`persisted\`?
597
+
598
+ Если на все вопросы есть понятный ответ, ресурс почти наверняка хорошо ложится на этот модуль.
599
+ `}));function l(e){return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(i,{title:`Документация/shared/api/persisted`}),`
600
+ `,(0,d.jsx)(r,{children:s})]})}function u(e={}){let{wrapper:t}={...n(),...e.components};return t?(0,d.jsx)(t,{...e,children:(0,d.jsx)(l,{...e})}):l(e)}var d;e((()=>{d=t(),o(),a(),c()}))();export{u as default};
@@ -1,2 +1,2 @@
1
- import{c as e,i as t}from"./preload-helper-B45gAKPr.js";import{Ct as n,n as r,pn as i,t as a}from"./iframe-8yiaZsxV.js";import{a as o,i as s}from"./utils-CecGsBKu.js";import{et as c,t as l}from"./formatters-DR4SipYU.js";import{n as u,r as d,t as f}from"./floating-ui.react-Cgv_gdpO.js";import{n as p,t as m}from"./ui.module-wFHXkJzp.js";import{a as ee,n as te,t as ne}from"./react-v2wz2Yxr.js";import{l as re,o as h,r as g,u as _}from"./Input-DQV1VhD-.js";import{t as v}from"./input-BDfX2ZJN.js";import{t as y}from"./Grid-9nPVBakE.js";import{t as ie}from"./grid-Clv9wted.js";import{r as b,t as x}from"./hooks-CksDwali.js";function S({id:e,label:t,description:n,disabled:r,size:i,className:a,error:o,children:s}){let{controlId:c,labelId:l,descriptionId:u,errorId:d,describedBy:f}=_({id:e,hasLabel:t!=null,hasDescription:!!n,hasError:!!o});return(0,ae.jsx)(h,{label:t,description:n,disabled:r,size:i,className:a,error:o,controlId:c,labelId:l,descriptionId:u,errorId:d,children:s({controlId:c,labelId:l,descriptionId:u,errorId:d,describedBy:f})})}var ae,oe=t((()=>{v(),re(),ae=a(),S.__docgenInfo={description:``,methods:[],displayName:`PickerField`,props:{id:{required:!1,tsType:{name:`string`},description:``},className:{required:!1,tsType:{name:`string`},description:``},error:{required:!1,tsType:{name:`string`},description:``},children:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(context: PickerFieldContext) => ReactNode`,signature:{arguments:[{type:{name:`PickerFieldContext`},name:`context`}],return:{name:`ReactNode`}}},description:``}},composes:[`Omit`]}})),se,C,ce=t((()=>{se=e(i(),1),C=({as:e,children:t,...n})=>(0,se.createElement)(e||`div`,{...n},t),C.__docgenInfo={description:``,methods:[],displayName:`PolymorphicComponent`,props:{as:{required:!1,tsType:{name:`E`},description:``}}}})),le=t((()=>{ce()})),w,T,E=t((()=>{i(),s(),le(),w=a(),T=({as:e,orientation:t=`horizontal`,className:n,...r})=>(0,w.jsx)(C,{as:e,"aria-orientation":t,className:o(n,t===`horizontal`?`separator`:`separatorVertical`),...r}),T.__docgenInfo={description:``,methods:[],displayName:`Separator`,props:{as:{required:!1,tsType:{name:`E`},description:``},orientation:{required:!1,tsType:{name:`union`,raw:`"horizontal" | "vertical"`,elements:[{name:`literal`,value:`"horizontal"`},{name:`literal`,value:`"vertical"`}]},description:``,defaultValue:{value:`"horizontal"`,computed:!1}},className:{required:!1,tsType:{name:`string`},description:``}}}})),D=t((()=>{E()})),O,k,A,j,M,N,P,F=t((()=>{O=`DRJ4hy`,k=`U4CULi`,A=`bupTWA`,j=`GkeyGF`,M=`_8F667e`,N=`OGMk6I`,P={popupLayout:O,popupBody:k,status:A,statusError:j,triggerContainer:M,selectionActionButton:N}}));function ue(e){e.stopPropagation()}function I({open:e,context:t,floatingStyles:n,listId:r,labelId:i,popupAriaLabel:a,descriptionId:s,activeOptionId:c,ariaMultiselectable:l,popupRole:d=`listbox`,setFloating:p,getFloatingProps:m,onKeyDown:ne,initialFocus:re=-1,returnFocus:h=!1,tabIndex:g=0,className:_,maxWidth:v,layoutClassName:y,headerClassName:ie,bodyClassName:b,header:x,children:S}){return(0,L.jsx)(ee,{children:e&&(0,L.jsx)(u,{children:(0,L.jsx)(f,{context:t,modal:!1,initialFocus:re,returnFocus:h,children:(0,L.jsx)(te.div,{ref:p,style:{...n,maxWidth:v},initial:{opacity:0,scale:.95},animate:{opacity:1,scale:1},exit:{opacity:0,scale:.95},...m({id:r,role:d,tabIndex:g,"aria-labelledby":i,"aria-label":i?void 0:a,"aria-describedby":s,"aria-activedescendant":c,"aria-multiselectable":l||void 0,onMouseDown:ue,onKeyDown:ne,className:_}),children:(0,L.jsxs)(`div`,{className:o(P.popupLayout,y),children:[x?(0,L.jsxs)(`div`,{className:ie,children:[x,(0,L.jsx)(T,{className:`marginBlockSm`})]}):(0,L.jsx)(`div`,{}),(0,L.jsx)(`div`,{className:o(P.popupBody,b),children:S})]})})})})})}var L,R=t((()=>{d(),s(),ne(),D(),F(),L=a(),I.__docgenInfo={description:``,methods:[],displayName:`PickerPopup`,props:{open:{required:!0,tsType:{name:`boolean`},description:``},context:{required:!0,tsType:{name:`FloatingContext`},description:``},floatingStyles:{required:!0,tsType:{name:`CSSProperties`},description:``},listId:{required:!0,tsType:{name:`string`},description:``},labelId:{required:!1,tsType:{name:`string`},description:``},popupAriaLabel:{required:!1,tsType:{name:`string`},description:``},descriptionId:{required:!1,tsType:{name:`string`},description:``},activeOptionId:{required:!1,tsType:{name:`string`},description:``},ariaMultiselectable:{required:!1,tsType:{name:`boolean`},description:``},popupRole:{required:!1,tsType:{name:`union`,raw:`"listbox" | "dialog"`,elements:[{name:`literal`,value:`"listbox"`},{name:`literal`,value:`"dialog"`}]},description:``,defaultValue:{value:`"listbox"`,computed:!1}},setFloating:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(node: HTMLElement | null) => void`,signature:{arguments:[{type:{name:`union`,raw:`HTMLElement | null`,elements:[{name:`HTMLElement`},{name:`null`}]},name:`node`}],return:{name:`void`}}},description:``},getFloatingProps:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(userProps?: Record<string, unknown>) => Record<string, unknown>`,signature:{arguments:[{type:{name:`Record`,elements:[{name:`string`},{name:`unknown`}],raw:`Record<string, unknown>`},name:`userProps`}],return:{name:`Record`,elements:[{name:`string`},{name:`unknown`}],raw:`Record<string, unknown>`}}},description:``},onKeyDown:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(event: KeyboardEvent<HTMLElement>) => void`,signature:{arguments:[{type:{name:`KeyboardEvent`,elements:[{name:`HTMLElement`}],raw:`KeyboardEvent<HTMLElement>`},name:`event`}],return:{name:`void`}}},description:``},initialFocus:{required:!1,tsType:{name:`number`},description:``,defaultValue:{value:`-1`,computed:!1}},returnFocus:{required:!1,tsType:{name:`boolean`},description:``,defaultValue:{value:`false`,computed:!1}},tabIndex:{required:!1,tsType:{name:`number`},description:``,defaultValue:{value:`0`,computed:!1}},className:{required:!1,tsType:{name:`string`},description:``},maxWidth:{required:!1,tsType:{name:`CSSProperties["maxWidth"]`,raw:`CSSProperties["maxWidth"]`},description:``},layoutClassName:{required:!1,tsType:{name:`string`},description:``},headerClassName:{required:!1,tsType:{name:`string`},description:``},bodyClassName:{required:!1,tsType:{name:`string`},description:``},header:{required:!1,tsType:{name:`ReactNode`},description:``},children:{required:!0,tsType:{name:`ReactNode`},description:``}}}}));function z({onSelectAll:e,onDeselectAll:t,selectAllButtonRef:n}){return(0,B.jsxs)(y.Container,{gap:`xs`,templateColumns:`1fr 1fr`,children:[(0,B.jsx)(`button`,{ref:n,type:`button`,className:P.selectionActionButton,onClick:e,"data-ui":`picker-select-all`,"data-action":`select-all`,children:`Выбрать все`}),(0,B.jsx)(`button`,{type:`button`,className:P.selectionActionButton,onClick:t,"data-ui":`picker-deselect-all`,"data-action":`deselect-all`,children:`Снять выбор`})]})}var B,V=t((()=>{ie(),F(),B=a(),z.__docgenInfo={description:`Общая панель массовых действий для picker-компонентов с множественным выбором.
1
+ import{c as e,i as t}from"./preload-helper-B45gAKPr.js";import{Ct as n,n as r,pn as i,t as a}from"./iframe-BTDZjw05.js";import{a as o,i as s}from"./utils-C8AvFbMG.js";import{et as c,t as l}from"./formatters-BsP6CA0a.js";import{n as u,r as d,t as f}from"./floating-ui.react-C3rg5XLp.js";import{n as p,t as m}from"./ui.module-wFHXkJzp.js";import{a as ee,n as te,t as ne}from"./react-_DDQf-KJ.js";import{l as re,o as h,r as g,u as _}from"./Input-B0WWnS8-.js";import{t as v}from"./input-DD29rPF2.js";import{t as y}from"./Grid-BNqNouvQ.js";import{t as ie}from"./grid-nZIniTeh.js";import{r as b,t as x}from"./hooks-CVLEDvfo.js";function S({id:e,label:t,description:n,disabled:r,size:i,className:a,error:o,children:s}){let{controlId:c,labelId:l,descriptionId:u,errorId:d,describedBy:f}=_({id:e,hasLabel:t!=null,hasDescription:!!n,hasError:!!o});return(0,ae.jsx)(h,{label:t,description:n,disabled:r,size:i,className:a,error:o,controlId:c,labelId:l,descriptionId:u,errorId:d,children:s({controlId:c,labelId:l,descriptionId:u,errorId:d,describedBy:f})})}var ae,oe=t((()=>{v(),re(),ae=a(),S.__docgenInfo={description:``,methods:[],displayName:`PickerField`,props:{id:{required:!1,tsType:{name:`string`},description:``},className:{required:!1,tsType:{name:`string`},description:``},error:{required:!1,tsType:{name:`string`},description:``},children:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(context: PickerFieldContext) => ReactNode`,signature:{arguments:[{type:{name:`PickerFieldContext`},name:`context`}],return:{name:`ReactNode`}}},description:``}},composes:[`Omit`]}})),se,C,ce=t((()=>{se=e(i(),1),C=({as:e,children:t,...n})=>(0,se.createElement)(e||`div`,{...n},t),C.__docgenInfo={description:``,methods:[],displayName:`PolymorphicComponent`,props:{as:{required:!1,tsType:{name:`E`},description:``}}}})),le=t((()=>{ce()})),w,T,E=t((()=>{i(),s(),le(),w=a(),T=({as:e,orientation:t=`horizontal`,className:n,...r})=>(0,w.jsx)(C,{as:e,"aria-orientation":t,className:o(n,t===`horizontal`?`separator`:`separatorVertical`),...r}),T.__docgenInfo={description:``,methods:[],displayName:`Separator`,props:{as:{required:!1,tsType:{name:`E`},description:``},orientation:{required:!1,tsType:{name:`union`,raw:`"horizontal" | "vertical"`,elements:[{name:`literal`,value:`"horizontal"`},{name:`literal`,value:`"vertical"`}]},description:``,defaultValue:{value:`"horizontal"`,computed:!1}},className:{required:!1,tsType:{name:`string`},description:``}}}})),D=t((()=>{E()})),O,k,A,j,M,N,P,F=t((()=>{O=`DRJ4hy`,k=`U4CULi`,A=`bupTWA`,j=`GkeyGF`,M=`_8F667e`,N=`OGMk6I`,P={popupLayout:O,popupBody:k,status:A,statusError:j,triggerContainer:M,selectionActionButton:N}}));function ue(e){e.stopPropagation()}function I({open:e,context:t,floatingStyles:n,listId:r,labelId:i,popupAriaLabel:a,descriptionId:s,activeOptionId:c,ariaMultiselectable:l,popupRole:d=`listbox`,setFloating:p,getFloatingProps:m,onKeyDown:ne,initialFocus:re=-1,returnFocus:h=!1,tabIndex:g=0,className:_,maxWidth:v,layoutClassName:y,headerClassName:ie,bodyClassName:b,header:x,children:S}){return(0,L.jsx)(ee,{children:e&&(0,L.jsx)(u,{children:(0,L.jsx)(f,{context:t,modal:!1,initialFocus:re,returnFocus:h,children:(0,L.jsx)(te.div,{ref:p,style:{...n,maxWidth:v},initial:{opacity:0,scale:.95},animate:{opacity:1,scale:1},exit:{opacity:0,scale:.95},...m({id:r,role:d,tabIndex:g,"aria-labelledby":i,"aria-label":i?void 0:a,"aria-describedby":s,"aria-activedescendant":c,"aria-multiselectable":l||void 0,onMouseDown:ue,onKeyDown:ne,className:_}),children:(0,L.jsxs)(`div`,{className:o(P.popupLayout,y),children:[x?(0,L.jsxs)(`div`,{className:ie,children:[x,(0,L.jsx)(T,{className:`marginBlockSm`})]}):(0,L.jsx)(`div`,{}),(0,L.jsx)(`div`,{className:o(P.popupBody,b),children:S})]})})})})})}var L,R=t((()=>{d(),s(),ne(),D(),F(),L=a(),I.__docgenInfo={description:``,methods:[],displayName:`PickerPopup`,props:{open:{required:!0,tsType:{name:`boolean`},description:``},context:{required:!0,tsType:{name:`FloatingContext`},description:``},floatingStyles:{required:!0,tsType:{name:`CSSProperties`},description:``},listId:{required:!0,tsType:{name:`string`},description:``},labelId:{required:!1,tsType:{name:`string`},description:``},popupAriaLabel:{required:!1,tsType:{name:`string`},description:``},descriptionId:{required:!1,tsType:{name:`string`},description:``},activeOptionId:{required:!1,tsType:{name:`string`},description:``},ariaMultiselectable:{required:!1,tsType:{name:`boolean`},description:``},popupRole:{required:!1,tsType:{name:`union`,raw:`"listbox" | "dialog"`,elements:[{name:`literal`,value:`"listbox"`},{name:`literal`,value:`"dialog"`}]},description:``,defaultValue:{value:`"listbox"`,computed:!1}},setFloating:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(node: HTMLElement | null) => void`,signature:{arguments:[{type:{name:`union`,raw:`HTMLElement | null`,elements:[{name:`HTMLElement`},{name:`null`}]},name:`node`}],return:{name:`void`}}},description:``},getFloatingProps:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(userProps?: Record<string, unknown>) => Record<string, unknown>`,signature:{arguments:[{type:{name:`Record`,elements:[{name:`string`},{name:`unknown`}],raw:`Record<string, unknown>`},name:`userProps`}],return:{name:`Record`,elements:[{name:`string`},{name:`unknown`}],raw:`Record<string, unknown>`}}},description:``},onKeyDown:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(event: KeyboardEvent<HTMLElement>) => void`,signature:{arguments:[{type:{name:`KeyboardEvent`,elements:[{name:`HTMLElement`}],raw:`KeyboardEvent<HTMLElement>`},name:`event`}],return:{name:`void`}}},description:``},initialFocus:{required:!1,tsType:{name:`number`},description:``,defaultValue:{value:`-1`,computed:!1}},returnFocus:{required:!1,tsType:{name:`boolean`},description:``,defaultValue:{value:`false`,computed:!1}},tabIndex:{required:!1,tsType:{name:`number`},description:``,defaultValue:{value:`0`,computed:!1}},className:{required:!1,tsType:{name:`string`},description:``},maxWidth:{required:!1,tsType:{name:`CSSProperties["maxWidth"]`,raw:`CSSProperties["maxWidth"]`},description:``},layoutClassName:{required:!1,tsType:{name:`string`},description:``},headerClassName:{required:!1,tsType:{name:`string`},description:``},bodyClassName:{required:!1,tsType:{name:`string`},description:``},header:{required:!1,tsType:{name:`ReactNode`},description:``},children:{required:!0,tsType:{name:`ReactNode`},description:``}}}}));function z({onSelectAll:e,onDeselectAll:t,selectAllButtonRef:n}){return(0,B.jsxs)(y.Container,{gap:`xs`,templateColumns:`1fr 1fr`,children:[(0,B.jsx)(`button`,{ref:n,type:`button`,className:P.selectionActionButton,onClick:e,"data-ui":`picker-select-all`,"data-action":`select-all`,children:`Выбрать все`}),(0,B.jsx)(`button`,{type:`button`,className:P.selectionActionButton,onClick:t,"data-ui":`picker-deselect-all`,"data-action":`deselect-all`,children:`Снять выбор`})]})}var B,V=t((()=>{ie(),F(),B=a(),z.__docgenInfo={description:`Общая панель массовых действий для picker-компонентов с множественным выбором.
2
2
  Компонент не знает формат значения и делегирует изменение владельцу selection-модели.`,methods:[],displayName:`PickerSelectionToolbar`,props:{onSelectAll:{required:!0,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},onDeselectAll:{required:!0,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},selectAllButtonRef:{required:!1,tsType:{name:`Ref`,elements:[{name:`HTMLButtonElement`}],raw:`Ref<HTMLButtonElement>`},description:``}}}}));function H({emptyState:e,loadingState:t,errorState:n}){let r=n??t??e;return r==null?null:(0,U.jsx)(`div`,{className:o(p.uiPopupOption,P.status,n!==void 0&&P.statusError),"aria-disabled":!0,children:r})}var U,W=t((()=>{s(),m(),F(),U=a(),H.__docgenInfo={description:``,methods:[],displayName:`PickerStatus`,props:{emptyState:{required:!1,tsType:{name:`ReactNode`},description:``},loadingState:{required:!1,tsType:{name:`ReactNode`},description:``},errorState:{required:!1,tsType:{name:`ReactNode`},description:``}}}}));function G({open:e,disabled:t,children:r,onToggleMouseDown:i,onToggleClick:a,openAriaLabel:s=`Открыть список`,closeAriaLabel:c=`Закрыть список`}){return(0,K.jsxs)(`div`,{className:p.uiToggleButtonContainer,"data-disabled":t||void 0,children:[r,(0,K.jsx)(`div`,{className:p.uiButtonSeparator}),(0,K.jsx)(`button`,{type:`button`,"aria-label":e?c:s,className:p.uiToggleButton,onMouseDown:i,onClick:a,children:(0,K.jsx)(n,{className:o(p.uiToggleIcon,e&&p.uiToggleIconOpen)})})]})}var K,de=t((()=>{s(),r(),m(),K=a(),G.__docgenInfo={description:``,methods:[],displayName:`PickerTriggerActions`,props:{open:{required:!0,tsType:{name:`boolean`},description:``},disabled:{required:!1,tsType:{name:`boolean`},description:``},children:{required:!1,tsType:{name:`ReactNode`},description:``},onToggleMouseDown:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(event: MouseEvent<HTMLButtonElement>) => void`,signature:{arguments:[{type:{name:`MouseEvent`,elements:[{name:`HTMLButtonElement`}],raw:`MouseEvent<HTMLButtonElement>`},name:`event`}],return:{name:`void`}}},description:``},onToggleClick:{required:!0,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``},openAriaLabel:{required:!1,tsType:{name:`string`},description:``,defaultValue:{value:`"Открыть список"`,computed:!1}},closeAriaLabel:{required:!1,tsType:{name:`string`},description:``,defaultValue:{value:`"Закрыть список"`,computed:!1}}}}})),fe,q,J,pe=t((()=>{fe=e(i(),1),s(),v(),m(),F(),q=a(),J=(0,fe.forwardRef)(({rootRef:e,endAdornment:t,overlay:n,rootClassName:r,inputClassName:i,...a},s)=>(0,q.jsxs)(`div`,{ref:e,className:o(p.uiInputContainer,P.triggerContainer,r),children:[(0,q.jsx)(g,{endAdornment:t,children:({controlClassName:e})=>(0,q.jsx)(`input`,{...a,ref:s,className:o(p.uiInputWithToggle,e,i)})}),n]})),J.displayName=`PickerTriggerInput`,J.__docgenInfo={description:``,methods:[],displayName:`PickerTriggerInput`,props:{rootRef:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(node: HTMLDivElement | null) => void`,signature:{arguments:[{type:{name:`union`,raw:`HTMLDivElement | null`,elements:[{name:`HTMLDivElement`},{name:`null`}]},name:`node`}],return:{name:`void`}}},description:``},endAdornment:{required:!1,tsType:{name:`ReactNode`},description:``},overlay:{required:!1,tsType:{name:`ReactNode`},description:``},rootClassName:{required:!1,tsType:{name:`string`},description:``},inputClassName:{required:!1,tsType:{name:`string`},description:``}},composes:[`Omit`]}})),me=t((()=>{}));function Y(e){switch(e){case`search-single`:return{focusFloatingOnOpen:!1,restoreFocusOnClose:!1,resetQueryOnClose:!0,shouldOpenOnTriggerClick:()=>!1,shouldOpenOnInputChange:e=>!e,shouldFocusReferenceOnToggle:e=>!e,shouldSelectTriggerTextOnFocus:({open:e,currentQuery:t,hasDisplayValue:n})=>!e&&t.length===0&&n};case`search-multi`:return{focusFloatingOnOpen:!1,restoreFocusOnClose:!1,resetQueryOnClose:!0,shouldOpenOnTriggerClick:()=>!1,shouldOpenOnInputChange:e=>!e,shouldFocusReferenceOnToggle:e=>!e,shouldSelectTriggerTextOnFocus:()=>!1};default:return{focusFloatingOnOpen:!0,restoreFocusOnClose:!0,resetQueryOnClose:!1,shouldOpenOnTriggerClick:e=>!e,shouldOpenOnInputChange:()=>!1,shouldFocusReferenceOnToggle:()=>!1,shouldSelectTriggerTextOnFocus:()=>!1}}}var X=t((()=>{}));function he(e){if(typeof e==`string`||typeof e==`number`)return String(e);if(Array.isArray(e)){let t=e.map(he).filter(e=>!!e);return t.length?t.join(` `):void 0}}var ge=t((()=>{}));function _e(e){return c((Array.isArray(e)?e:[e]).filter(Boolean).join(` `))}function ve({options:e,query:t,enabled:n=!0,getSearchText:r}){let i=c(t);return(0,ye.useMemo)(()=>!n||!i?[...e]:e.filter(e=>_e(r(e)).includes(i)),[n,r,i,e])}var ye,be=t((()=>{ye=e(i(),1),l()}));function xe(e){let t=e.triggerMode?Y(e.triggerMode):void 0;return x({...e,focusFloatingOnOpen:e.focusFloatingOnOpen??t?.focusFloatingOnOpen,restoreFocusOnClose:e.restoreFocusOnClose??t?.restoreFocusOnClose})}var Se=t((()=>{b(),X()}));function Ce({open:e,query:t,defaultQuery:n,onQuery:r,resetOnClose:i,triggerMode:a}){let o=(0,Z.useRef)(!1),s=t!==void 0,[c,l]=(0,Z.useState)(n??``),u=s?t??``:c,d=(0,Z.useEffectEvent)(()=>l(``)),f=i??(a?Y(a).resetQueryOnClose:!0);(0,Z.useEffect)(()=>{o.current&&!e&&f&&(s||d(),r?.(``)),o.current=e},[s,r,e,f]);let p=e=>{s||l(e),r?.(e)};return{query:u,setQuery:p,clearQuery:()=>p(``)}}var Z,we=t((()=>{Z=e(i(),1),X()}));function Te({value:e,open:t,onCommit:n,onOpen:r,onClose:i,isEqual:a}){let o=(0,Q.useRef)(!1),[s,c]=(0,Q.useState)(e),l=(0,Q.useEffectEvent)(e=>c(e));return(0,Q.useEffect)(()=>{t||l(e)},[t,e]),(0,Q.useEffect)(()=>{o.current&&!t&&(a(s,e)||n(s),i?.(s)),o.current=t},[s,a,i,n,t,e]),{draftValue:s,setDraftValue:c,prepareOpen:()=>{c(e),r?.()}}}var Q,Ee=t((()=>{Q=e(i(),1)}));function De(e){requestAnimationFrame(()=>{e.current?.focus()})}function Oe({mode:e,open:t,currentQuery:n,hasDisplayValue:r,inputRef:i,setQuery:a,openList:o,close:s,toggleOpen:c,onBeforeOpen:l}){let u=Y(e),d=()=>{if(l?.(),o){o();return}c?.()},f=()=>{if(s){s();return}c?.()},p=()=>{t?f():d(),u.shouldFocusReferenceOnToggle(t)&&De(i)};return{policy:u,handleTriggerInputChange:e=>{a?.(e),u.shouldOpenOnInputChange(t)&&d()},handleTriggerClick:()=>{u.shouldOpenOnTriggerClick(t)&&d()},handleTriggerFocus:e=>{u.shouldSelectTriggerTextOnFocus({open:t,currentQuery:n,hasDisplayValue:r})&&requestAnimationFrame(()=>{e.select()})},handleToggleMouseDown:e=>{e.preventDefault()},handleToggleClick:()=>{p()},handleTriggerKeyDown:({event:e,onActivateWhenOpen:n,enableSpaceActivation:r=!1,enableClosedArrowDownOpen:i=!1,suppressClosedArrowUp:a=!1})=>{if(!t&&a&&e.key===`ArrowUp`){e.preventDefault();return}if(!t&&i&&e.key===`ArrowDown`){e.preventDefault(),p();return}if(e.key===`Enter`){e.preventDefault(),t?n?.():p();return}r&&e.key===` `&&(e.preventDefault(),t?n?.():p())},toggleTrigger:p}}var $=t((()=>{X()})),ke=t((()=>{X(),ge(),be(),Se(),we(),Ee(),$()})),Ae=t((()=>{oe(),R(),V(),W(),de(),pe(),me(),ke()}));export{R as C,S as D,E,oe as O,I as S,T,de as _,Te as a,z as b,Se as c,ve as d,he as f,G as g,pe as h,Ee as i,xe as l,J as m,$ as n,we as o,ge as p,Oe as r,Ce as s,Ae as t,be as u,H as v,D as w,V as x,W as y};