@ryuzaki13/react-foundation-ui 1.8.11 → 1.8.13

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 (281) hide show
  1. package/dist/chunks/defaultRenderers-u_Vep6Pj.js.map +1 -1
  2. package/dist/chunks/multi-select-DtmRtX6v.js.map +1 -1
  3. package/dist/chunks/select-MN6zDPKM.js.map +1 -1
  4. package/dist/chunks/useODataSelectBase-DR4PrY1j.js.map +1 -1
  5. package/dist/multi-select/model/useODataMultiSelect.d.ts +1 -1
  6. package/dist/multi-select/model/useODataMultiSelect.d.ts.map +1 -1
  7. package/dist/multi-select/ui/MultiSelect.d.ts +1 -1
  8. package/dist/multi-select/ui/MultiSelect.d.ts.map +1 -1
  9. package/dist/multi-select/ui/SerializableMultiSelect.d.ts.map +1 -1
  10. package/dist/multi-select/ui/defaultRenderers.d.ts +1 -1
  11. package/dist/multi-select/ui/defaultRenderers.d.ts.map +1 -1
  12. package/dist/select/model/useODataSelect.d.ts +1 -1
  13. package/dist/select/model/useODataSelect.d.ts.map +1 -1
  14. package/dist/select/model/useODataSelectBase.d.ts +1 -1
  15. package/dist/select/model/useODataSelectBase.d.ts.map +1 -1
  16. package/dist/tree-select/index.js.map +1 -1
  17. package/dist/tree-select/model/buildODataTreeNodes.d.ts +1 -1
  18. package/dist/tree-select/model/buildODataTreeNodes.d.ts.map +1 -1
  19. package/package.json +3 -3
  20. package/storybook-static/assets/{Badge-BojMuOws.js → Badge-BFhBl7yM.js} +1 -1
  21. package/storybook-static/assets/{Badge.stories-C9gJRuIO.js → Badge.stories-BEu55X4s.js} +1 -1
  22. package/storybook-static/assets/{BadgeList-dNEWI7-O.js → BadgeList-mqmnGtRR.js} +1 -1
  23. package/storybook-static/assets/{Button-Bbt3JzIY.js → Button-CESdnWrO.js} +1 -1
  24. package/storybook-static/assets/{Button-CrTHXWYk.js → Button-_YPAu9sd.js} +1 -1
  25. package/storybook-static/assets/{Button.stories-BaYXOBeF.js → Button.stories-B0Y_T17B.js} +1 -1
  26. package/storybook-static/assets/{CalendarView-Dp0zus1o.js → CalendarView-DLuO2Ywz.js} +1 -1
  27. package/storybook-static/assets/{CheckBox-BiK9yWNt.js → CheckBox-CGiNmAPT.js} +1 -1
  28. package/storybook-static/assets/{CheckBox-UzYHaD6S.js → CheckBox-l0pbBm9z.js} +1 -1
  29. package/storybook-static/assets/{CheckBox.stories-C2BOiWZj.js → CheckBox.stories-ROPAnqh8.js} +1 -1
  30. package/storybook-static/assets/{Color-6AOWCN3U-C5S4wUlD.js → Color-6AOWCN3U-kPaRN0HS.js} +1 -1
  31. package/storybook-static/assets/{ContextMenu-D9EZxb7d.js → ContextMenu-Bob4DtRn.js} +1 -1
  32. package/storybook-static/assets/{ContextMenu-BWQln_tb.js → ContextMenu-DxfUAeJS.js} +1 -1
  33. package/storybook-static/assets/{ContextMenu.stories-U38zPh9_.js → ContextMenu.stories-DCJmWy5n.js} +1 -1
  34. package/storybook-static/assets/{CustomOptionButton-COIOrxQn.js → CustomOptionButton-DuEz9CXt.js} +1 -1
  35. package/storybook-static/assets/DateInput-BQ8SoeLE.js +1 -0
  36. package/storybook-static/assets/{DateInput-C-entb-r.js → DateInput-DmNLD4Dz.js} +1 -1
  37. package/storybook-static/assets/{DateInput.stories-NmUXQLDU.js → DateInput.stories-sTpYf7Ob.js} +1 -1
  38. package/storybook-static/assets/{DateRangePresetSelect-BM1L1KOo.js → DateRangePresetSelect-DRq4eJ2n.js} +1 -1
  39. package/storybook-static/assets/{DateRangePresetSelect-CAJzxaq0.js → DateRangePresetSelect-fgJfLaLO.js} +1 -1
  40. package/storybook-static/assets/{DateRangePresetSelect.stories-CC47XLnD.js → DateRangePresetSelect.stories-ib7Qh_BB.js} +1 -1
  41. package/storybook-static/assets/{Detail-CDluXtts.js → Detail-CJniLn1R.js} +1 -1
  42. package/storybook-static/assets/{Detail.stories-DjniLC4n.js → Detail.stories-BXjdNaL-.js} +1 -1
  43. package/storybook-static/assets/{Dialog-bzRSgGU7.js → Dialog-D6a_qzr3.js} +1 -1
  44. package/storybook-static/assets/{Dialog-bw6cHUsz.js → Dialog-DOYnnXlU.js} +1 -1
  45. package/storybook-static/assets/{Dialog.stories-C6Rs6s_p.js → Dialog.stories-B1cZLRK3.js} +1 -1
  46. package/storybook-static/assets/{Disclosure-DelA6FsQ.js → Disclosure-Chh5o_0s.js} +1 -1
  47. package/storybook-static/assets/{Disclosure.stories-D7yUinyb.js → Disclosure.stories-Cvdvf7V8.js} +1 -1
  48. package/storybook-static/assets/{DisclosureGroup-DbK7mU_Q.js → DisclosureGroup-CRnQOgVj.js} +1 -1
  49. package/storybook-static/assets/{DocsRenderer-JROSPFPF-v3z0zVN1.js → DocsRenderer-JROSPFPF-BBiErkeC.js} +1 -1
  50. package/storybook-static/assets/{DropZone-CI3NW4AC.js → DropZone-Bm5gqdi9.js} +1 -1
  51. package/storybook-static/assets/{DropZone-Cyy-ttEO.js → DropZone-C4L7JAlq.js} +1 -1
  52. package/storybook-static/assets/{DropZone.stories-S0HSpGTB.js → DropZone.stories-BhA9q8Qv.js} +1 -1
  53. package/storybook-static/assets/{DropdownMenu-Ct1bSZsE.js → DropdownMenu-DtZNSUHF.js} +1 -1
  54. package/storybook-static/assets/{ExpandableActionPanel-Oj3xlasj.js → ExpandableActionPanel-0ugXlJy_.js} +1 -1
  55. package/storybook-static/assets/{ExpandableActionPanel.stories-Ch7CLkpR.js → ExpandableActionPanel.stories-CLgMlA9k.js} +1 -1
  56. package/storybook-static/assets/{Flex-UiFm8Tkc.js → Flex-CJlia-8f.js} +1 -1
  57. package/storybook-static/assets/{Flex.stories-CaDiVlBD.js → Flex.stories-DCvfi1EY.js} +1 -1
  58. package/storybook-static/assets/{FloatingPopover-CTYV9W7T.js → FloatingPopover-CsnfPiwV.js} +1 -1
  59. package/storybook-static/assets/{FormattedTableCell-D-ysSR3p.js → FormattedTableCell-Dz5xWVYO.js} +1 -1
  60. package/storybook-static/assets/{Grid-CigBXPe2.js → Grid-C-KwTRAM.js} +1 -1
  61. package/storybook-static/assets/{Grid.stories-ay3z9DQZ.js → Grid.stories-CzbqknNR.js} +1 -1
  62. package/storybook-static/assets/{ImageCropper.stories-Dkce_ugb.js → ImageCropper.stories-DaE-gm-b.js} +1 -1
  63. package/storybook-static/assets/{ImageRenderer-C9_EmGBW.js → ImageRenderer-IsNCXCrZ.js} +1 -1
  64. package/storybook-static/assets/{ImageRenderer.stories-C7bXaNBI.js → ImageRenderer.stories-BbsjUEfJ.js} +1 -1
  65. package/storybook-static/assets/{ImageView.stories-D-ZzGlk8.js → ImageView.stories-DY0UITYz.js} +1 -1
  66. package/storybook-static/assets/{ImageViewer.stories-ItcRfxyy.js → ImageViewer.stories--9q9b9nv.js} +2 -2
  67. package/storybook-static/assets/{ImageViewerRuntime-eaupID36.js → ImageViewerRuntime-CNEH3XGN.js} +1 -1
  68. package/storybook-static/assets/{Input-op4j7Beh.js → Input-DLubbE7P.js} +1 -1
  69. package/storybook-static/assets/{Input-BUDNR96c.js → Input-Dw2JblYt.js} +1 -1
  70. package/storybook-static/assets/{Input.stories-DwulvJIg.js → Input.stories-DQeyDULG.js} +1 -1
  71. package/storybook-static/assets/{InputDateTime-B_cxOp6k.js → InputDateTime-BRzl8Vrt.js} +1 -1
  72. package/storybook-static/assets/{InputDateTime.stories-BueLF4HC.js → InputDateTime.stories-BJTj5v8J.js} +1 -1
  73. package/storybook-static/assets/{InputFile-DSg7sugm.js → InputFile-B8UroZji.js} +1 -1
  74. package/storybook-static/assets/{InputFile-C8z6TPc1.js → InputFile-DPftxjGw.js} +1 -1
  75. package/storybook-static/assets/{InputFile.stories-C6XSbIua.js → InputFile.stories-C7yyqHqc.js} +1 -1
  76. package/storybook-static/assets/{InputFiles-DoatLq3q.js → InputFiles-BQVXHVLy.js} +1 -1
  77. package/storybook-static/assets/{InputFiles-DeZ84Uu_.js → InputFiles-UD_9S7-N.js} +1 -1
  78. package/storybook-static/assets/{InputFiles.stories-BMbE8SJU.js → InputFiles.stories-DjjJS5pZ.js} +1 -1
  79. package/storybook-static/assets/{InputFilesList-CsfDDqaJ.js → InputFilesList-BNjijD3Y.js} +1 -1
  80. package/storybook-static/assets/{InputImage-yJSq98EH.js → InputImage-C-pHr-Sx.js} +1 -1
  81. package/storybook-static/assets/{InputImage-D_YnB2Tw.js → InputImage-DbcbqIhY.js} +1 -1
  82. package/storybook-static/assets/{InputImage.stories-nivUG307.js → InputImage.stories-D-TC9r9t.js} +1 -1
  83. package/storybook-static/assets/{InteractiveComponents-IPkC_Rkg.js → InteractiveComponents-DbhWgM9y.js} +1 -1
  84. package/storybook-static/assets/{InteractiveComponents.stories-D4VzVKZJ.js → InteractiveComponents.stories-B4mkVSea.js} +1 -1
  85. package/storybook-static/assets/{LayoutPicker-ZHkMi-LM.js → LayoutPicker-BoV_E3qt.js} +1 -1
  86. package/storybook-static/assets/{LayoutPicker-aMzPN5Do.js → LayoutPicker-w1EsRpYP.js} +1 -1
  87. package/storybook-static/assets/{LayoutPicker.stories-DAzpzxn5.js → LayoutPicker.stories--ChGnGxf.js} +1 -1
  88. package/storybook-static/assets/{Listbox-CR5nXC9J.js → Listbox-CzZRsr6a.js} +1 -1
  89. package/storybook-static/assets/{Listbox-BmfQOnrb.js → Listbox-qZdTi11b.js} +1 -1
  90. package/storybook-static/assets/{Listbox.stories-CeOpsKxB.js → Listbox.stories-C9k_1850.js} +1 -1
  91. package/storybook-static/assets/{Modal-BStp52Zo.js → Modal-DCpul8QM.js} +1 -1
  92. package/storybook-static/assets/{Modal.stories-CwGm5GYE.js → Modal.stories-Cy0Xd4LF.js} +1 -1
  93. package/storybook-static/assets/{ModalManagerProvider-B5uUXWF9.js → ModalManagerProvider-BrPVMcHV.js} +1 -1
  94. package/storybook-static/assets/{MultiSelect-308npb27.js → MultiSelect-BEQdl-F4.js} +1 -1
  95. package/storybook-static/assets/{MultiSelect-BDs02MZh.js → MultiSelect-Dy4X94E2.js} +1 -1
  96. package/storybook-static/assets/{MultiSelect.stories-DRi_iTp4.js → MultiSelect.stories-FuzejJmz.js} +1 -1
  97. package/storybook-static/assets/{NoData-ovaQEE9W.js → NoData-BsQ9EfkA.js} +1 -1
  98. package/storybook-static/assets/{NotificationsHost-BpeMWhLY.js → NotificationsHost-BSrODvw7.js} +1 -1
  99. package/storybook-static/assets/NotificationsHost.stories-DeiWspcY.js +29 -0
  100. package/storybook-static/assets/{ODataMultiSelect-qlft9L9L.js → ODataMultiSelect-BEz9gcd2.js} +1 -1
  101. package/storybook-static/assets/{ODataMultiSelect.stories-CMPIoPiy.js → ODataMultiSelect.stories-BwMgAkbE.js} +2 -2
  102. package/storybook-static/assets/{ODataSelect-DKBQArAK.js → ODataSelect-BgC7GHOv.js} +1 -1
  103. package/storybook-static/assets/{ODataSelect.stories-DxYIhtwe.js → ODataSelect.stories-DEIRAB-s.js} +2 -2
  104. package/storybook-static/assets/{ODataTreeMultiSelect-DAt6THP3.js → ODataTreeMultiSelect-WyZZuX0_.js} +1 -1
  105. package/storybook-static/assets/{ODataTreeMultiSelect.stories-CBNJP0mP.js → ODataTreeMultiSelect.stories-B6cxuagy.js} +1 -1
  106. package/storybook-static/assets/{ODataTreeSelect-Bzzt4CQC.js → ODataTreeSelect-OJGi3-S7.js} +1 -1
  107. package/storybook-static/assets/{ODataTreeSelect.stories-CWVvuqOt.js → ODataTreeSelect.stories-wGRGErCH.js} +1 -1
  108. package/storybook-static/assets/{OneStepScroller-BY5lz8qi.js → OneStepScroller-DycQ3RuL.js} +1 -1
  109. package/storybook-static/assets/{Option-Rw8xwrPg.js → Option-taxbFfjo.js} +1 -1
  110. package/storybook-static/assets/{OptionButton-Br48w_Zg.js → OptionButton-Q0QaPCII.js} +1 -1
  111. package/storybook-static/assets/{PeriodSelect-8-wpXz6w.js → PeriodSelect-DUJ2nF3F.js} +1 -1
  112. package/storybook-static/assets/{PeriodSelect-DxSRwKw-.js → PeriodSelect-DnM7x-uC.js} +1 -1
  113. package/storybook-static/assets/{PeriodSelect.stories-B-qgUzlS.js → PeriodSelect.stories-Db0bqe3J.js} +1 -1
  114. package/storybook-static/assets/{PickerTriggerActions-C5xmysFh.js → PickerTriggerActions-CGJd7xmR.js} +1 -1
  115. package/storybook-static/assets/{Popover-NJwt_vZZ.js → Popover-B6oidz5p.js} +1 -1
  116. package/storybook-static/assets/{Popover-Ds8PUigp.js → Popover-Tbhf8T81.js} +1 -1
  117. package/storybook-static/assets/{Popover.stories-CUOFA_Xf.js → Popover.stories-DE1LxZvv.js} +1 -1
  118. package/storybook-static/assets/{PresetRangeDateInput-DyOpbkON.js → PresetRangeDateInput-CQ5FfmrL.js} +1 -1
  119. package/storybook-static/assets/{PresetRangeDateInput-Xk0bOy3S.js → PresetRangeDateInput-DfgoR0My.js} +1 -1
  120. package/storybook-static/assets/{PresetRangeDateInput.stories-CwjUlXj0.js → PresetRangeDateInput.stories-CgoYAYBG.js} +1 -1
  121. package/storybook-static/assets/{PresetSelect-Ddmr0niY.js → PresetSelect-BPtAknAr.js} +1 -1
  122. package/storybook-static/assets/README--TpGcM95.js +110 -0
  123. package/storybook-static/assets/{README-MzcO5Z_P.js → README-4iBHWAP5.js} +1 -1
  124. package/storybook-static/assets/README-98KIgy5G.js +75 -0
  125. package/storybook-static/assets/README-B6II8p0W.js +154 -0
  126. package/storybook-static/assets/{README-CkWglKbS.js → README-B6vU5_7I.js} +1 -1
  127. package/storybook-static/assets/README-BFJVjjZR.js +325 -0
  128. package/storybook-static/assets/README-BIT4HlFP.js +441 -0
  129. package/storybook-static/assets/{README-DqQDgJN-.js → README-BK6Epio1.js} +1 -1
  130. package/storybook-static/assets/{README-DRnlD7y8.js → README-BRlPB5_k.js} +1 -1
  131. package/storybook-static/assets/README-BTFpEaXG.js +64 -0
  132. package/storybook-static/assets/README-BWhXgC_o.js +226 -0
  133. package/storybook-static/assets/README-BbNHvOoR.js +101 -0
  134. package/storybook-static/assets/README-BbunUo8b.js +118 -0
  135. package/storybook-static/assets/README-BmYpfZKr.js +1844 -0
  136. package/storybook-static/assets/README-Bu5uvhAT.js +230 -0
  137. package/storybook-static/assets/README-Bx6fvSBE.js +1282 -0
  138. package/storybook-static/assets/README-Bx6gIGiA.js +69 -0
  139. package/storybook-static/assets/README-ByhxsX44.js +324 -0
  140. package/storybook-static/assets/README-Byi1FFpw.js +98 -0
  141. package/storybook-static/assets/README-C3Is3a3B.js +208 -0
  142. package/storybook-static/assets/{README-C0BwTe5N.js → README-C6prwAXw.js} +1 -1
  143. package/storybook-static/assets/{README-BzVni2ve.js → README-C9S83J_G.js} +1 -1
  144. package/storybook-static/assets/{README-BHw6MVjD.js → README-CGgxP5Zo.js} +1 -1
  145. package/storybook-static/assets/README-CJ2ZVG2U.js +2124 -0
  146. package/storybook-static/assets/README-CNGCAm5d.js +95 -0
  147. package/storybook-static/assets/README-Cb_q420B.js +90 -0
  148. package/storybook-static/assets/README-CtIDPNJ3.js +186 -0
  149. package/storybook-static/assets/README-CzO3Dchr.js +64 -0
  150. package/storybook-static/assets/README-D0rzQthv.js +264 -0
  151. package/storybook-static/assets/README-DEQu7djz.js +1704 -0
  152. package/storybook-static/assets/README-DFihT_sm.js +296 -0
  153. package/storybook-static/assets/{README-CTIBG4zH.js → README-DMiWsyv_.js} +1 -1
  154. package/storybook-static/assets/README-DOx8lXXk.js +82 -0
  155. package/storybook-static/assets/{README-DzTc6XmY.js → README-DPhDjr43.js} +1 -1
  156. package/storybook-static/assets/{README-Dki94Nf2.js → README-D_NqWPa9.js} +1 -1
  157. package/storybook-static/assets/README-DhJ5Rb1w.js +355 -0
  158. package/storybook-static/assets/README-DlwhWCvQ.js +1146 -0
  159. package/storybook-static/assets/README-Dxi73a2Q.js +740 -0
  160. package/storybook-static/assets/README-Dycov6NP.js +583 -0
  161. package/storybook-static/assets/README-GTBkSG4_.js +3591 -0
  162. package/storybook-static/assets/README-Gfd9tLTw.js +672 -0
  163. package/storybook-static/assets/{README-B4zYJg6u.js → README-Kfawetke.js} +1 -1
  164. package/storybook-static/assets/{README-BzVHwvgo.js → README-UDBM7ZMT.js} +1 -1
  165. package/storybook-static/assets/{README-D-XjRtAE.js → README-VTWQxLm_.js} +1 -1
  166. package/storybook-static/assets/README-YHNWrTZv.js +400 -0
  167. package/storybook-static/assets/README-_0Otw0eD.js +448 -0
  168. package/storybook-static/assets/README-aw2Xu9xu.js +158 -0
  169. package/storybook-static/assets/README-eg1emlll.js +192 -0
  170. package/storybook-static/assets/README-iqQHdhZ4.js +416 -0
  171. package/storybook-static/assets/{README-BdPlV5nA.js → README-llxZAtCj.js} +1 -1
  172. package/storybook-static/assets/README-wFnEIGl4.js +95 -0
  173. package/storybook-static/assets/{README-Dx3cpFMr.js → README-webB1yH0.js} +1 -1
  174. package/storybook-static/assets/README-wtreGRCe.js +208 -0
  175. package/storybook-static/assets/{RadioButton-DWbkCY8u.js → RadioButton-CNOLDk_o.js} +1 -1
  176. package/storybook-static/assets/{RadioButton-oSvQ-gQh.js → RadioButton-Ce05_q7s.js} +1 -1
  177. package/storybook-static/assets/{RadioButton.stories-GNQ9XJZT.js → RadioButton.stories-CPd4lTl0.js} +1 -1
  178. package/storybook-static/assets/{RadioGroup-CvXjGXcV.js → RadioGroup-BtfD5Szd.js} +1 -1
  179. package/storybook-static/assets/{RadioGroup-eBYggurL.js → RadioGroup-Ccm7G-dv.js} +1 -1
  180. package/storybook-static/assets/{RadioGroup.stories-C77j_cPv.js → RadioGroup.stories-D-RRPHwi.js} +1 -1
  181. package/storybook-static/assets/{Scrollable-De6SdhI3.js → Scrollable-DvdBIeig.js} +1 -1
  182. package/storybook-static/assets/{Select-DQMoVjn4.js → Select-8PV9PBKF.js} +1 -1
  183. package/storybook-static/assets/{Select-Bwc0bEpt.js → Select-G04B41FM.js} +1 -1
  184. package/storybook-static/assets/{Select.stories-BSIJKJnM.js → Select.stories-Cf6CBhV8.js} +1 -1
  185. package/storybook-static/assets/{SerializableSelect-B73irNFR.js → SerializableSelect-CdQdHIVp.js} +1 -1
  186. package/storybook-static/assets/{SerializableSelect.stories-Z9q6g5v2.js → SerializableSelect.stories-0AKUGpbS.js} +1 -1
  187. package/storybook-static/assets/{SingleDateTimeInput-Dq9LcjnS.js → SingleDateTimeInput-DWT1ORhL.js} +1 -1
  188. package/storybook-static/assets/{SingleDateTimeInput-BHl6srqA.js → SingleDateTimeInput-DattLt6w.js} +1 -1
  189. package/storybook-static/assets/SingleDateTimeInput.stories-BLJV3jzV.js +48 -0
  190. package/storybook-static/assets/{Slider-CvM0N_kc.js → Slider-DKEI4cDd.js} +1 -1
  191. package/storybook-static/assets/{Slider-BiyKexKa.js → Slider-Dci-mJt_.js} +1 -1
  192. package/storybook-static/assets/{Slider.stories-CdHAMDmY.js → Slider.stories-Dp7oQueF.js} +1 -1
  193. package/storybook-static/assets/{SliderInput-DqHotbhB.js → SliderInput-BGPQmlgY.js} +1 -1
  194. package/storybook-static/assets/{SliderInput-Bx_oHUCV.js → SliderInput-BhjqGOKt.js} +1 -1
  195. package/storybook-static/assets/{SliderInput.stories-R5yDhghM.js → SliderInput.stories-DXNhRU3X.js} +1 -1
  196. package/storybook-static/assets/{Sortable-D7pjTHO0.js → Sortable-CMd9l1Gd.js} +1 -1
  197. package/storybook-static/assets/{Sortable.stories-CVLG6pSH.js → Sortable.stories-BN1cFEFJ.js} +1 -1
  198. package/storybook-static/assets/{Splitter-B1Du6XI2.js → Splitter-GL65TlI9.js} +1 -1
  199. package/storybook-static/assets/{Splitter.stories-D-FRLMCc.js → Splitter.stories-q5PlI6rB.js} +1 -1
  200. package/storybook-static/assets/{StateSelect-zl-yZibY.js → StateSelect-Byik5-iZ.js} +1 -1
  201. package/storybook-static/assets/{StateSelect-BJdUEUBc.js → StateSelect-CT0JF2V6.js} +1 -1
  202. package/storybook-static/assets/{StateSelect.stories-DgidR5zR.js → StateSelect.stories-pPEPmgnN.js} +1 -1
  203. package/storybook-static/assets/{StringToggle.stories-IucGrtIi.js → StringToggle.stories-BQlFmCE7.js} +1 -1
  204. package/storybook-static/assets/{Switch-BJrn2lIN.js → Switch--xGPiYk-.js} +1 -1
  205. package/storybook-static/assets/{Switch-5dCshvVo.js → Switch-DhaLI9CG.js} +1 -1
  206. package/storybook-static/assets/{Switch.stories-Dp_l3_JL.js → Switch.stories-5DisgIyj.js} +1 -1
  207. package/storybook-static/assets/{Table-BFAEcUde.js → Table-Bf6MicdG.js} +1 -1
  208. package/storybook-static/assets/{Table.stories-CohejRQv.js → Table.stories-CS7rQgj9.js} +2 -2
  209. package/storybook-static/assets/{Tabs-CI32QiHf.js → Tabs-B4y4y8Ap.js} +1 -1
  210. package/storybook-static/assets/{Tabs.stories-Cr9d9ipA.js → Tabs.stories-C0SpdGkh.js} +1 -1
  211. package/storybook-static/assets/{TabsBox-BlDOUDMF.js → TabsBox-C5LLLhnj.js} +1 -1
  212. package/storybook-static/assets/{TagInput-YZ7eSv8W.js → TagInput-D4BpuCoH.js} +1 -1
  213. package/storybook-static/assets/{TagInput.stories-DrOvsiI5.js → TagInput.stories-rn2wtZP_.js} +1 -1
  214. package/storybook-static/assets/{Text-DK4jN26J.js → Text-BhBt9e7C.js} +1 -1
  215. package/storybook-static/assets/{Textarea-CFh5f_lC.js → Textarea-B-Hz7ujq.js} +1 -1
  216. package/storybook-static/assets/{Textarea-DxPuWBZj.js → Textarea-BHHxY5sd.js} +1 -1
  217. package/storybook-static/assets/{Textarea.stories-CUeOGKYc.js → Textarea.stories-CZ2kWz20.js} +1 -1
  218. package/storybook-static/assets/{TimePanel-BUhFtwlb.js → TimePanel-Cg8fgFsn.js} +1 -1
  219. package/storybook-static/assets/{TimePanel.stories-CpXpMBDN.js → TimePanel.stories-BxdwtK2e.js} +1 -1
  220. package/storybook-static/assets/{Toggle-l2AvDbRn.js → Toggle-BWwfk9fi.js} +1 -1
  221. package/storybook-static/assets/{Toggle-BtApzBNH.js → Toggle-Ce9rbjBc.js} +1 -1
  222. package/storybook-static/assets/{Toggle.stories-Ca8otmAa.js → Toggle.stories-0fzcmzKy.js} +1 -1
  223. package/storybook-static/assets/{TreeMultiSelect-C9QDV63L.js → TreeMultiSelect-B06Y0lIc.js} +1 -1
  224. package/storybook-static/assets/{TreeMultiSelect-nXC4ZB5b.js → TreeMultiSelect-CrAdR_jM.js} +1 -1
  225. package/storybook-static/assets/{TreeMultiSelect.stories-6STRGJbF.js → TreeMultiSelect.stories-CAVoj56E.js} +1 -1
  226. package/storybook-static/assets/{TreePickerBase-Cq7fSw3x.js → TreePickerBase-qU2xPlar.js} +1 -1
  227. package/storybook-static/assets/{TreeSelect-CITef9rp.js → TreeSelect-BIHydJFy.js} +1 -1
  228. package/storybook-static/assets/{TreeSelect-rMNyu_KT.js → TreeSelect-BKnWu0C7.js} +1 -1
  229. package/storybook-static/assets/{TreeSelect.stories-B-Emz9yW.js → TreeSelect.stories-Dp_8ybAf.js} +1 -1
  230. package/storybook-static/assets/{TreeTable-CLiP0td3.js → TreeTable-pVXjU9dG.js} +1 -1
  231. package/storybook-static/assets/{TreeTable.stories-DJb9qt8k.js → TreeTable.stories-CV_8Ui6R.js} +2 -2
  232. package/storybook-static/assets/{blocks-DndFRxxW.js → blocks-BY40djCc.js} +3 -3
  233. package/storybook-static/assets/{check-CLkTJVXe.js → check-CVkPTDzp.js} +1 -1
  234. package/storybook-static/assets/{chevron-down-miCejSEn.js → chevron-down-BtNO4Vhe.js} +1 -1
  235. package/storybook-static/assets/{chevron-left-DhQIPej2.js → chevron-left-kceSK3sZ.js} +1 -1
  236. package/storybook-static/assets/{chevron-right-DfBBx-fr.js → chevron-right-BA_LO2El.js} +1 -1
  237. package/storybook-static/assets/{chunk-W22LQPXL-IdwKKJUw.js → chunk-W22LQPXL-yJiFPv6e.js} +1 -1
  238. package/storybook-static/assets/{circle-alert-DOmVf8am.js → circle-alert-B2m4a1zz.js} +1 -1
  239. package/storybook-static/assets/{circle-check-e7eSQ2VD.js → circle-check-Cfjhotlm.js} +1 -1
  240. package/storybook-static/assets/{components-Bm4Cw8Ap.js → components-D6yV8PLX.js} +3 -3
  241. package/storybook-static/assets/{contextMenu-DpIKeJju.js → contextMenu-B0pQBIW0.js} +1 -1
  242. package/storybook-static/assets/{defaultRenderers-m21aWJXz.js → defaultRenderers-DfmnIuod.js} +1 -1
  243. package/storybook-static/assets/{download-eAKjms6q.js → download-Lba8elK9.js} +1 -1
  244. package/storybook-static/assets/{floating-ui.react-DmilONq6.js → floating-ui.react-BFNvfMpU.js} +1 -1
  245. package/storybook-static/assets/formatters-D33Uh3si-CxrG0jsB.js +1 -0
  246. package/storybook-static/assets/foundationApi-DZhnQ2cC.js +59 -0
  247. package/storybook-static/assets/foundationLib-CoVTo22U.js +30 -0
  248. package/storybook-static/assets/{hooks-RI5_2AXI.js → hooks-Cc6eXN6U.js} +1 -1
  249. package/storybook-static/assets/iframe-BXM-JBuH.js +1 -0
  250. package/storybook-static/assets/{iframe-Sr0umHM6.js → iframe-o7sH2IXC.js} +4 -4
  251. package/storybook-static/assets/{info-DhJTzwcL.js → info-BpsVP_dM.js} +1 -1
  252. package/storybook-static/assets/odata-CXsbxsRY.js +1 -0
  253. package/storybook-static/assets/odata-service-CWkHASdw-DlmSiioz.js +3 -0
  254. package/storybook-static/assets/{odataStoryFixtures-lgnWIUp7.js → odataStoryFixtures-Dj_bzRqh.js} +1 -1
  255. package/storybook-static/assets/{react-YFbUKK0m.js → react-DeJ0JTHb.js} +1 -1
  256. package/storybook-static/assets/{refresh-cw-C7WnxX9M.js → refresh-cw-BvGyjEXe.js} +1 -1
  257. package/storybook-static/assets/{settings-2-0NVvyKQl.js → settings-2-BdXxnHos.js} +1 -1
  258. package/storybook-static/assets/{sortable-DDGG-Zfs.js → sortable-XkyN-9r5.js} +1 -1
  259. package/storybook-static/assets/{syntaxhighlighter-QEQV7K2Y-CxWm8nc8.js → syntaxhighlighter-QEQV7K2Y-Cafn3LV1.js} +1 -1
  260. package/storybook-static/assets/{trash-2-BnceCuhg.js → trash-2-uPH9-fND.js} +1 -1
  261. package/storybook-static/assets/{triangle-alert-MPi3GVgt.js → triangle-alert-tT01vSMw.js} +1 -1
  262. package/storybook-static/assets/{useODataSelectBase-hmjK6chS.js → useODataSelectBase-B2LlOwPZ.js} +1 -1
  263. package/storybook-static/assets/useODataTreeData-CU7Rqcb9.js +1 -0
  264. package/storybook-static/assets/{usePickerQuery-CtsGhieD.js → usePickerQuery-D8GHQ6KR.js} +1 -1
  265. package/storybook-static/assets/{usePickerTriggerController-EaI8W2G0.js → usePickerTriggerController-CcK1jmDy.js} +1 -1
  266. package/storybook-static/assets/{x-CqPSvWfo.js → x-BlAURbAH.js} +1 -1
  267. package/storybook-static/iframe.html +2 -2
  268. package/storybook-static/index.json +1 -1
  269. package/storybook-static/project.json +1 -1
  270. package/storybook-static/assets/DateInput-05Iy69_a.js +0 -1
  271. package/storybook-static/assets/NotificationsHost.stories-CgbFboVD.js +0 -29
  272. package/storybook-static/assets/SingleDateTimeInput.stories-C2RuBRAF.js +0 -48
  273. package/storybook-static/assets/async-SjiCjIjO.js +0 -625
  274. package/storybook-static/assets/formatters-CBgrBeSA-CqB1pZxS.js +0 -1
  275. package/storybook-static/assets/foundationLib-DRrox3tN.js +0 -25
  276. package/storybook-static/assets/iframe-DQo-3eW2.js +0 -1
  277. package/storybook-static/assets/odata-DhISMZkE.js +0 -1
  278. package/storybook-static/assets/odata-service-B6TxBSLm-Bq8Ya67E.js +0 -3
  279. package/storybook-static/assets/odataFetchFn-Dv6Xi5CI.js +0 -763
  280. package/storybook-static/assets/persisted-CUFiw53N.js +0 -600
  281. package/storybook-static/assets/useODataTreeData-CKuavbWc.js +0 -1
@@ -0,0 +1,226 @@
1
+ import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-o7sH2IXC.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-BY40djCc.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
+ `,(0,c.jsx)(t.h1,{id:`notifications`,children:`Notifications`}),`
3
+ `,(0,c.jsxs)(t.p,{children:[`Модуль `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/notifications`}),` хранит очередь коротких уведомлений и предоставляет два способа управления ею:`]}),`
4
+ `,(0,c.jsxs)(t.ul,{children:[`
5
+ `,(0,c.jsx)(t.li,{children:`Zustand-store — для React-интерфейса, который отображает уведомления;`}),`
6
+ `,(0,c.jsxs)(t.li,{children:[`объект `,(0,c.jsx)(t.code,{children:`notify`}),` — для императивных вызовов из обработчиков, сервисов и `,(0,c.jsx)(t.code,{children:`try/catch`}),`.`]}),`
7
+ `]}),`
8
+ `,(0,c.jsxs)(t.p,{children:[`Модуль `,(0,c.jsx)(t.strong,{children:`не рисует интерфейс`}),`. Компонент toast/snackbar создаёт приложение: он подписывается на `,(0,c.jsx)(t.code,{children:`store`}),`, отображает `,(0,c.jsx)(t.code,{children:`items`}),` и вызывает действия уведомления.`]}),`
9
+ `,(0,c.jsx)(t.h2,{id:`когда-использовать`,children:`Когда использовать`}),`
10
+ `,(0,c.jsx)(t.p,{children:`Подходит для сообщений вроде:`}),`
11
+ `,(0,c.jsxs)(t.ul,{children:[`
12
+ `,(0,c.jsx)(t.li,{children:`«Изменения сохранены»;`}),`
13
+ `,(0,c.jsx)(t.li,{children:`«Не удалось загрузить данные»;`}),`
14
+ `,(0,c.jsx)(t.li,{children:`«Файл формируется…» с последующей заменой на результат;`}),`
15
+ `,(0,c.jsx)(t.li,{children:`предупреждения с одной или несколькими кнопками-действиями.`}),`
16
+ `]}),`
17
+ `,(0,c.jsx)(t.p,{children:`Для ошибок внутри формы лучше показывать сообщение рядом с полем. Уведомление — дополнительный, а не единственный канал обратной связи.`}),`
18
+ `,(0,c.jsx)(t.h2,{id:`установка-и-импорт`,children:`Установка и импорт`}),`
19
+ `,(0,c.jsxs)(t.p,{children:[`Модулю нужен peer dependency `,(0,c.jsx)(t.code,{children:`zustand`}),`.`]}),`
20
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-bash`,children:`npm install @ryuzaki13/react-foundation-lib zustand
21
+ `})}),`
22
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`import { bindNotifications, createNotificationsStore, notify, type Notification } from "@ryuzaki13/react-foundation-lib/notifications";
23
+ `})}),`
24
+ `,(0,c.jsxs)(t.p,{children:[`Используйте только публичный subpath `,(0,c.jsx)(t.code,{children:`/notifications`}),`. Импорт внутренних файлов пакета не является публичным контрактом.`]}),`
25
+ `,(0,c.jsx)(t.h2,{id:`быстрый-старт`,children:`Быстрый старт`}),`
26
+ `,(0,c.jsx)(t.h3,{id:`1-создайте-один-store-приложения`,children:`1. Создайте один store приложения`}),`
27
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`// notificationsStore.ts
28
+ import { bindNotifications, createNotificationsStore } from "@ryuzaki13/react-foundation-lib/notifications";
29
+
30
+ export const notificationsStore = createNotificationsStore();
31
+ export const unbindNotifications = bindNotifications(notificationsStore);
32
+ `})}),`
33
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`createNotificationsStore()`}),` возвращает vanilla Zustand-store. Его следует создать вне React-компонента, иначе каждый рендер может создать новую независимую очередь.`]}),`
34
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`bindNotifications(store)`}),` связывает глобальный фасад `,(0,c.jsx)(t.code,{children:`notify`}),` с этим store. Без привязки вызов `,(0,c.jsx)(t.code,{children:`notify.success(...)`}),` выбросит ошибку.`]}),`
35
+ `,(0,c.jsx)(t.h3,{id:`2-подпишите-ui-на-store`,children:`2. Подпишите UI на store`}),`
36
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-tsx`,children:`import { useStore } from "zustand";
37
+
38
+ import { notificationsStore } from "./notificationsStore";
39
+
40
+ export function NotificationsViewport() {
41
+ const items = useStore(notificationsStore, (state) => state.items);
42
+ const dismiss = useStore(notificationsStore, (state) => state.actions.dismiss);
43
+
44
+ return (
45
+ <section aria-label="Уведомления" aria-live="polite">
46
+ {items.map((item) => (
47
+ <article key={item.id} role={item.type === "error" ? "alert" : "status"}>
48
+ {item.title && <strong>{item.title}</strong>}
49
+ <p>{item.message}</p>
50
+
51
+ {item.actions?.map((action) => (
52
+ <button key={action.label} type="button" onClick={action.onClick}>
53
+ {action.label}
54
+ </button>
55
+ ))}
56
+
57
+ {item.dismissible !== false && (
58
+ <button type="button" onClick={() => dismiss(item.id)}>
59
+ Закрыть
60
+ </button>
61
+ )}
62
+ </article>
63
+ ))}
64
+ </section>
65
+ );
66
+ }
67
+ `})}),`
68
+ `,(0,c.jsx)(t.h3,{id:`3-показывайте-уведомления`,children:`3. Показывайте уведомления`}),`
69
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`notify.success("Данные сохранены");
70
+ notify.info("Началась синхронизация", { title: "Синхронизация" });
71
+ notify.warning("Соединение нестабильно", { ttlMs: 0 });
72
+ notify.error("Не удалось сохранить запись", { ttlMs: 15_000 });
73
+ `})}),`
74
+ `,(0,c.jsxs)(t.p,{children:[`Значение `,(0,c.jsx)(t.code,{children:`ttlMs: 0`}),` или отрицательное число отключает автоматическое закрытие.`]}),`
75
+ `,(0,c.jsx)(t.h2,{id:`модель-уведомления`,children:`Модель уведомления`}),`
76
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`type NotificationType = "error" | "warning" | "info" | "success";
77
+ type NotificationTone = "neutral" | NotificationType;
78
+ type NotificationId = string;
79
+
80
+ type NotificationAction = {
81
+ label: string;
82
+ onClick: () => void | Promise<void>;
83
+ tone?: NotificationTone;
84
+ };
85
+
86
+ type Notification = {
87
+ id: NotificationId;
88
+ type: NotificationType;
89
+ title?: string;
90
+ message: string;
91
+ createdAt: number;
92
+ ttlMs?: number;
93
+ dismissible?: boolean;
94
+ actions?: NotificationAction[];
95
+ };
96
+ `})}),`
97
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`createdAt`}),` — Unix-время в миллисекундах. `,(0,c.jsx)(t.code,{children:`dismissible: false`}),` означает, что UI не должен показывать обычную кнопку закрытия. Это только договор с UI: store не запрещает программный `,(0,c.jsx)(t.code,{children:`dismiss(id)`}),`.`]}),`
98
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`actions`}),` содержат функции и потому не сериализуются. Не сохраняйте очередь уведомлений в JSON, localStorage или серверной базе.`]}),`
99
+ `,(0,c.jsx)(t.h2,{id:`api-store`,children:`API store`}),`
100
+ `,(0,c.jsx)(t.h3,{id:`createnotificationsstore`,children:(0,c.jsx)(t.code,{children:`createNotificationsStore()`})}),`
101
+ `,(0,c.jsx)(t.p,{children:`Создаёт независимый store со структурой:`}),`
102
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`type NotificationsStore = {
103
+ items: Notification[];
104
+ actions: {
105
+ push(input): NotificationId;
106
+ update(id, patch): boolean;
107
+ upsert(inputWithId): NotificationId;
108
+ dismiss(id): void;
109
+ clear(): void;
110
+ };
111
+ };
112
+ `})}),`
113
+ `,(0,c.jsxs)(t.p,{children:[`Очередь ограничена шестью элементами. Новое уведомление помещается в начало. При добавлении с уже существующим `,(0,c.jsx)(t.code,{children:`id`}),` старый элемент удаляется, а новый получает новое `,(0,c.jsx)(t.code,{children:`createdAt`}),`.`]}),`
114
+ `,(0,c.jsx)(t.h3,{id:`pushinput`,children:(0,c.jsx)(t.code,{children:`push(input)`})}),`
115
+ `,(0,c.jsxs)(t.p,{children:[`Добавляет уведомление и возвращает его `,(0,c.jsx)(t.code,{children:`id`}),`.`]}),`
116
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const id = notificationsStore.getState().actions.push({
117
+ type: "warning",
118
+ title: "Проверка",
119
+ message: "Некоторые поля не заполнены",
120
+ ttlMs: 8_000,
121
+ dismissible: true
122
+ });
123
+ `})}),`
124
+ `,(0,c.jsxs)(t.p,{children:[`Если `,(0,c.jsx)(t.code,{children:`id`}),` не передан, он генерируется из текущего времени и случайной части. Это идентификатор UI, а не криптографический или бизнес-идентификатор.`]}),`
125
+ `,(0,c.jsxs)(t.p,{children:[`Если `,(0,c.jsx)(t.code,{children:`ttlMs`}),` отсутствует, внутренний таймер всё равно запускается на 10 секунд. При этом в объекте уведомления поле остаётся `,(0,c.jsx)(t.code,{children:`undefined`}),`.`]}),`
126
+ `,(0,c.jsx)(t.h3,{id:`updateid-patch`,children:(0,c.jsx)(t.code,{children:`update(id, patch)`})}),`
127
+ `,(0,c.jsxs)(t.p,{children:[`Частично меняет существующий элемент. Возвращает `,(0,c.jsx)(t.code,{children:`true`}),`, если элемент найден, иначе `,(0,c.jsx)(t.code,{children:`false`}),`.`]}),`
128
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const updated = notificationsStore.getState().actions.update(id, {
129
+ type: "success",
130
+ message: "Проверка завершена",
131
+ ttlMs: 2_500
132
+ });
133
+ `})}),`
134
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`id`}),` и `,(0,c.jsx)(t.code,{children:`createdAt`}),` изменить нельзя. Таймер перестраивается только тогда, когда в patch явно присутствует ключ `,(0,c.jsx)(t.code,{children:`ttlMs`}),`. Изменение одного `,(0,c.jsx)(t.code,{children:`message`}),` не продлевает исходный срок жизни.`]}),`
135
+ `,(0,c.jsx)(t.h3,{id:`upsertinput`,children:(0,c.jsx)(t.code,{children:`upsert(input)`})}),`
136
+ `,(0,c.jsxs)(t.p,{children:[`Обновляет элемент с заданным `,(0,c.jsx)(t.code,{children:`id`}),`, а если его нет — добавляет новый.`]}),`
137
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`notificationsStore.getState().actions.upsert({
138
+ id: "import-users",
139
+ type: "info",
140
+ message: "Импортировано 40 из 100 строк",
141
+ dismissible: false
142
+ });
143
+ `})}),`
144
+ `,(0,c.jsxs)(t.p,{children:[`Важная деталь: при обновлении существующего элемента `,(0,c.jsx)(t.code,{children:`upsert`}),` меняет `,(0,c.jsx)(t.code,{children:`type`}),`, `,(0,c.jsx)(t.code,{children:`title`}),`, `,(0,c.jsx)(t.code,{children:`message`}),`, `,(0,c.jsx)(t.code,{children:`ttlMs`}),` и `,(0,c.jsx)(t.code,{children:`dismissible`}),`, но не заменяет `,(0,c.jsx)(t.code,{children:`actions`}),`. Для явной смены действий используйте `,(0,c.jsx)(t.code,{children:`update(id, { actions })`}),`.`]}),`
145
+ `,(0,c.jsxs)(t.h3,{id:`dismissid-и-clear`,children:[(0,c.jsx)(t.code,{children:`dismiss(id)`}),` и `,(0,c.jsx)(t.code,{children:`clear()`})]}),`
146
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`dismiss(id)`}),` удаляет один элемент и очищает его таймер. `,(0,c.jsx)(t.code,{children:`clear()`}),` удаляет всю очередь и все таймеры.`]}),`
147
+ `,(0,c.jsxs)(t.h2,{id:`императивный-api-notify`,children:[`Императивный API `,(0,c.jsx)(t.code,{children:`notify`})]}),`
148
+ `,(0,c.jsx)(t.h3,{id:`привязка-и-жизненный-цикл`,children:`Привязка и жизненный цикл`}),`
149
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const unbind = bindNotifications(notificationsStore);
150
+
151
+ // При полном демонтаже приложения:
152
+ unbind();
153
+ `})}),`
154
+ `,(0,c.jsxs)(t.p,{children:[`Одновременно фасад хранит только одну привязку. Повторный `,(0,c.jsx)(t.code,{children:`bindNotifications(otherStore)`}),` переключит вызовы на другой store. Старый cleanup не отвяжет новый store.`]}),`
155
+ `,(0,c.jsxs)(t.p,{children:[`Пакет не экспортирует `,(0,c.jsx)(t.code,{children:`NotificationsProvider`}),`, несмотря на текст ошибки при отсутствии привязки. Provider или другой lifecycle-компонент является ответственностью приложения.`]}),`
156
+ `,(0,c.jsx)(t.h3,{id:`основные-методы`,children:`Основные методы`}),`
157
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`notify.push(input);
158
+ notify.upsert(inputWithId);
159
+ notify.update(id, patch);
160
+ notify.dismiss(id);
161
+ notify.clear();
162
+
163
+ notify.success(message, options);
164
+ notify.info(message, options);
165
+ notify.warning(message, options);
166
+ notify.error(message, options);
167
+ `})}),`
168
+ `,(0,c.jsxs)(t.p,{children:[`Сокращённые методы автоматически подставляют `,(0,c.jsx)(t.code,{children:`type`}),`, но принимают остальные параметры `,(0,c.jsx)(t.code,{children:`push`}),`, включая `,(0,c.jsx)(t.code,{children:`id`}),`, `,(0,c.jsx)(t.code,{children:`title`}),`, `,(0,c.jsx)(t.code,{children:`ttlMs`}),`, `,(0,c.jsx)(t.code,{children:`dismissible`}),` и `,(0,c.jsx)(t.code,{children:`actions`}),`.`]}),`
169
+ `,(0,c.jsxs)(t.h3,{id:`долгая-операция-notifyprogress`,children:[`Долгая операция: `,(0,c.jsx)(t.code,{children:`notify.progress()`})]}),`
170
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`async function importFile(file: File) {
171
+ const progress = notify.progress("Читаем файл…", {
172
+ id: "users-import",
173
+ title: "Импорт пользователей"
174
+ });
175
+
176
+ try {
177
+ progress.update("Отправляем данные…");
178
+ await upload(file);
179
+ progress.success("Импорт завершён");
180
+ } catch (error) {
181
+ progress.error("Импорт завершился с ошибкой");
182
+ throw error;
183
+ }
184
+ }
185
+ `})}),`
186
+ `,(0,c.jsxs)(t.p,{children:[`Начальное уведомление имеет `,(0,c.jsx)(t.code,{children:`type: "info"`}),` и `,(0,c.jsx)(t.code,{children:`dismissible: false`}),`. Возвращаемый объект содержит:`]}),`
187
+ `,(0,c.jsxs)(t.ul,{children:[`
188
+ `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`id`}),` — идентификатор уведомления;`]}),`
189
+ `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`update(message)`}),` — меняет текст, не перезапуская таймер;`]}),`
190
+ `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`success(message, ttlMs = 2500)`}),` — делает уведомление успешным и закрываемым;`]}),`
191
+ `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`error(message, ttlMs = 5000)`}),` — делает уведомление ошибкой и закрываемым;`]}),`
192
+ `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`dismiss()`}),` — удаляет уведомление.`]}),`
193
+ `]}),`
194
+ `,(0,c.jsxs)(t.p,{children:[`При переданном стабильном `,(0,c.jsx)(t.code,{children:`id`}),` повторный `,(0,c.jsx)(t.code,{children:`progress`}),` продолжит существующий элемент. Это удобно для операции, которая может стартовать из нескольких мест.`]}),`
195
+ `,(0,c.jsx)(t.h2,{id:`browser-и-ssr`,children:`Browser и SSR`}),`
196
+ `,(0,c.jsxs)(t.p,{children:[`Store использует `,(0,c.jsx)(t.code,{children:`window.setTimeout`}),` и `,(0,c.jsx)(t.code,{children:`window.clearTimeout`}),`. Создать store можно заранее, но методы, которые запускают или очищают таймеры, предназначены для браузера. Не вызывайте `,(0,c.jsx)(t.code,{children:`push`}),`, `,(0,c.jsx)(t.code,{children:`update`}),` с `,(0,c.jsx)(t.code,{children:`ttlMs`}),`, `,(0,c.jsx)(t.code,{children:`dismiss`}),` или `,(0,c.jsx)(t.code,{children:`clear`}),` во время серверного рендера.`]}),`
197
+ `,(0,c.jsx)(t.p,{children:`Практически безопасная схема: создавать и привязывать store в client entrypoint либо в модуле, который импортируется только браузерным приложением.`}),`
198
+ `,(0,c.jsx)(t.h2,{id:`доступность-интерфейса`,children:`Доступность интерфейса`}),`
199
+ `,(0,c.jsx)(t.p,{children:`Store не задаёт ARIA-разметку. В UI рекомендуется:`}),`
200
+ `,(0,c.jsxs)(t.ul,{children:[`
201
+ `,(0,c.jsxs)(t.li,{children:[`использовать `,(0,c.jsx)(t.code,{children:`aria-live="polite"`}),` для обычных сообщений;`]}),`
202
+ `,(0,c.jsxs)(t.li,{children:[`использовать `,(0,c.jsx)(t.code,{children:`role="alert"`}),` только для действительно срочных ошибок;`]}),`
203
+ `,(0,c.jsx)(t.li,{children:`давать кнопке закрытия понятное доступное имя;`}),`
204
+ `,(0,c.jsx)(t.li,{children:`не делать TTL слишком коротким, если уведомление содержит много текста или действия;`}),`
205
+ `,(0,c.jsx)(t.li,{children:`обеспечить управление действиями с клавиатуры.`}),`
206
+ `]}),`
207
+ `,(0,c.jsx)(t.h2,{id:`частые-ошибки`,children:`Частые ошибки`}),`
208
+ `,(0,c.jsxs)(t.h3,{id:`вызов-notify-до-bindnotifications`,children:[`Вызов `,(0,c.jsx)(t.code,{children:`notify`}),` до `,(0,c.jsx)(t.code,{children:`bindNotifications`})]}),`
209
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`// Ошибка времени выполнения: store ещё не привязан.
210
+ notify.success("Готово");
211
+ `})}),`
212
+ `,(0,c.jsxs)(t.p,{children:[`Сначала создайте store и выполните `,(0,c.jsx)(t.code,{children:`bindNotifications`}),` в точке запуска приложения.`]}),`
213
+ `,(0,c.jsx)(t.h3,{id:`создание-store-внутри-тела-компонента`,children:`Создание store внутри тела компонента`}),`
214
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-tsx`,children:`function App() {
215
+ // Плохо: при повторном рендере можно потерять очередь и таймеры.
216
+ const store = createNotificationsStore();
217
+ return null;
218
+ }
219
+ `})}),`
220
+ `,(0,c.jsx)(t.p,{children:`Создайте singleton на уровне модуля или один раз через подходящий lifecycle-контейнер.`}),`
221
+ `,(0,c.jsxs)(t.h3,{id:`ожидание-что-dismissible-false-блокирует-удаление`,children:[`Ожидание, что `,(0,c.jsx)(t.code,{children:`dismissible: false`}),` блокирует удаление`]}),`
222
+ `,(0,c.jsxs)(t.p,{children:[`Это только поле модели для UI. `,(0,c.jsx)(t.code,{children:`notify.dismiss(id)`}),` всё равно удалит элемент.`]}),`
223
+ `,(0,c.jsx)(t.h3,{id:`использование-уведомления-вместо-состояния-операции`,children:`Использование уведомления вместо состояния операции`}),`
224
+ `,(0,c.jsx)(t.p,{children:`Очередь ограничена шестью элементами и живёт в памяти страницы. Не используйте её как журнал аудита, источник истины о фоновой задаче или долговременное хранилище ошибок.`}),`
225
+ `,(0,c.jsx)(t.h2,{id:`краткая-карта-api`,children:`Краткая карта API`}),`
226
+ `,(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.jsx)(t.code,{children:`createNotificationsStore()`})}),(0,c.jsx)(t.td,{children:`Создать независимый Zustand-store уведомлений`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`bindNotifications(store)`})}),(0,c.jsxs)(t.td,{children:[`Привязать store к глобальному фасаду `,(0,c.jsx)(t.code,{children:`notify`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`notify`})}),(0,c.jsx)(t.td,{children:`Императивно добавлять, обновлять и закрывать уведомления`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`Notification`})}),(0,c.jsx)(t.td,{children:`Полная модель сохранённого элемента`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`NotificationPushInput`})}),(0,c.jsx)(t.td,{children:`Параметры добавления элемента`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`NotificationUpdatePatch`})}),(0,c.jsx)(t.td,{children:`Допустимые поля частичного обновления`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`NotificationsStoreApi`})}),(0,c.jsx)(t.td,{children:`Тип vanilla Zustand-store`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`NotificationAction`})}),(0,c.jsx)(t.td,{children:`Кнопка-действие уведомления`})]})]})]})]})}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};
@@ -0,0 +1,101 @@
1
+ import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-o7sH2IXC.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-BY40djCc.js";function o(e){let t={a:`a`,code:`code`,h1:`h1`,h2:`h2`,li:`li`,p:`p`,pre:`pre`,table:`table`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation Lib/Data/Currency`}),`
2
+ `,(0,c.jsxs)(t.h1,{id:`валютные-подписи-через-ryuzaki13react-foundation-libcurrency`,children:[`Валютные подписи через `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/currency`})]}),`
3
+ `,(0,c.jsxs)(t.p,{children:[`Модуль связывает общий OData-параметр `,(0,c.jsx)(t.code,{children:`p_curr`}),` с отображаемой подписью показателя. Он определяет один из двух режимов валюты и добавляет соответствующий суффикс к label.`]}),`
4
+ `,(0,c.jsx)(t.h2,{id:`содержание`,children:`Содержание`}),`
5
+ `,(0,c.jsxs)(t.ul,{children:[`
6
+ `,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#%D0%BD%D0%B0%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5`,children:`Назначение`})}),`
7
+ `,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-%D0%B8-%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82`,children:`Установка и импорт`})}),`
8
+ `,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#currencymode`,children:(0,c.jsx)(t.code,{children:`CurrencyMode`})})}),`
9
+ `,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#resolvecurrencymodefromodataparameters`,children:(0,c.jsx)(t.code,{children:`resolveCurrencyModeFromODataParameters`})})}),`
10
+ `,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#resolvecurrencyawarelabel`,children:(0,c.jsx)(t.code,{children:`resolveCurrencyAwareLabel`})})}),`
11
+ `,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D1%8B%D0%B9-pipeline`,children:`Готовый pipeline`})}),`
12
+ `,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#%D0%BE%D0%B3%D1%80%D0%B0%D0%BD%D0%B8%D1%87%D0%B5%D0%BD%D0%B8%D1%8F-%D0%B8-%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B8`,children:`Ограничения и ошибки`})}),`
13
+ `,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#api-%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA`,children:`API-справочник`})}),`
14
+ `]}),`
15
+ `,(0,c.jsx)(t.h2,{id:`назначение`,children:`Назначение`}),`
16
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-text`,children:`wrapped OData params
17
+ { p_curr: { value: true } }
18
+
19
+
20
+ CurrencyMode "rub"
21
+
22
+
23
+ "Выручка" + ["за тн", "руб/тн"]
24
+
25
+
26
+ "Выручка руб/тн"
27
+ `})}),`
28
+ `,(0,c.jsxs)(t.p,{children:[`Модуль не форматирует денежное число, не конвертирует валюту и не строит OData query. Для чисел используйте `,(0,c.jsx)(t.code,{children:`/formatters`}),`, для OData params — `,(0,c.jsx)(t.code,{children:`/odata-service`}),`.`]}),`
29
+ `,(0,c.jsx)(t.h2,{id:`установка-и-импорт`,children:`Установка и импорт`}),`
30
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`import { resolveCurrencyAwareLabel, resolveCurrencyModeFromODataParameters } from "@ryuzaki13/react-foundation-lib/currency";
31
+
32
+ import type { CurrencyMode } from "@ryuzaki13/react-foundation-lib/currency";
33
+ `})}),`
34
+ `,(0,c.jsxs)(t.p,{children:[`Модуль ESM, не требует React или browser API. Параметры должны иметь публичную wrapped-форму из `,(0,c.jsx)(t.code,{children:`/odata-service`}),`.`]}),`
35
+ `,(0,c.jsx)(t.h2,{id:`currencymode`,children:(0,c.jsx)(t.code,{children:`CurrencyMode`})}),`
36
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`type CurrencyMode = "internal" | "rub";
37
+ `})}),`
38
+ `,(0,c.jsxs)(t.ul,{children:[`
39
+ `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`internal`}),` — внутренний режим;`]}),`
40
+ `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`rub`}),` — рублёвый режим.`]}),`
41
+ `]}),`
42
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`null`}),` используется resolver-функцией, когда режим определить нельзя.`]}),`
43
+ `,(0,c.jsx)(t.h2,{id:`resolvecurrencymodefromodataparameters`,children:(0,c.jsx)(t.code,{children:`resolveCurrencyModeFromODataParameters`})}),`
44
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const mode = resolveCurrencyModeFromODataParameters(params);
45
+ `})}),`
46
+ `,(0,c.jsxs)(t.p,{children:[`Функция читает только собственное поле `,(0,c.jsx)(t.code,{children:`p_curr.value`}),`:`]}),`
47
+ `,(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.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`null`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsxs)(t.td,{children:[`поля `,(0,c.jsx)(t.code,{children:`p_curr`}),` нет`]}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`null`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`{ p_curr: { value: false } }`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`"internal"`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`{ p_curr: { value: true } }`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`"rub"`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`{ p_curr: { value: "true" } }`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`null`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`{ p_curr: { value: 1 } }`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`null`})})]})]})]}),`
48
+ `,(0,c.jsxs)(t.p,{children:[`Строка `,(0,c.jsx)(t.code,{children:`"true"`}),` намеренно не приводится к boolean. Нормализуйте внешний payload на OData boundary, а не внутри UI label.`]}),`
49
+ `,(0,c.jsxs)(t.p,{children:[`Пример с helper `,(0,c.jsx)(t.code,{children:`/odata-service`}),`:`]}),`
50
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`import { wrapODataParams } from "@ryuzaki13/react-foundation-lib/odata-service";
51
+
52
+ const params = wrapODataParams({ p_curr: true });
53
+ const mode = resolveCurrencyModeFromODataParameters(params);
54
+ // "rub".
55
+ `})}),`
56
+ `,(0,c.jsx)(t.h2,{id:`resolvecurrencyawarelabel`,children:(0,c.jsx)(t.code,{children:`resolveCurrencyAwareLabel`})}),`
57
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const label = resolveCurrencyAwareLabel("Выручка", ["за тн", "руб/тн"], "rub");
58
+ // "Выручка руб/тн".
59
+ `})}),`
60
+ `,(0,c.jsxs)(t.p,{children:[`Пара `,(0,c.jsx)(t.code,{children:`currencyLabels`}),` имеет фиксированный смысл:`]}),`
61
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`readonly[(internalLabel, rubLabel)];
62
+ `})}),`
63
+ `,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Mode`}),(0,c.jsx)(t.th,{style:{textAlign:`right`},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:`internal`})}),(0,c.jsx)(t.td,{style:{textAlign:`right`},children:`0`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`rub`})}),(0,c.jsx)(t.td,{style:{textAlign:`right`},children:`1`})]})]})]}),`
64
+ `,(0,c.jsx)(t.p,{children:`Точные правила:`}),`
65
+ `,(0,c.jsxs)(t.ul,{children:[`
66
+ `,(0,c.jsxs)(t.li,{children:[`без `,(0,c.jsx)(t.code,{children:`currencyLabels`}),` возвращается исходный `,(0,c.jsx)(t.code,{children:`label`}),`;`]}),`
67
+ `,(0,c.jsxs)(t.li,{children:[`при `,(0,c.jsx)(t.code,{children:`null`}),`/`,(0,c.jsx)(t.code,{children:`undefined`}),` mode возвращается исходный `,(0,c.jsx)(t.code,{children:`label`}),`;`]}),`
68
+ `,(0,c.jsxs)(t.li,{children:[`суффикс обрезается через `,(0,c.jsx)(t.code,{children:`trim()`}),`;`]}),`
69
+ `,(0,c.jsx)(t.li,{children:`пустой суффикс не добавляется;`}),`
70
+ `,(0,c.jsx)(t.li,{children:`обычно между label и суффиксом добавляется один пробел;`}),`
71
+ `,(0,c.jsx)(t.li,{children:`если обрезанный суффикс начинается с запятой, дополнительный пробел не добавляется.`}),`
72
+ `]}),`
73
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`resolveCurrencyAwareLabel("Выручка", [", за тн", ", руб/тн"], "rub");
74
+ // "Выручка, руб/тн".
75
+
76
+ resolveCurrencyAwareLabel("Выручка", ["", " "], "rub");
77
+ // "Выручка".
78
+ `})}),`
79
+ `,(0,c.jsxs)(t.p,{children:[`Исходный `,(0,c.jsx)(t.code,{children:`label`}),` не обрезается и не нормализуется.`]}),`
80
+ `,(0,c.jsx)(t.h2,{id:`готовый-pipeline`,children:`Готовый pipeline`}),`
81
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`function buildMetricLabel(
82
+ baseLabel: string,
83
+ currencyLabels: readonly [string, string] | undefined,
84
+ params: WrappedODataParameters | undefined
85
+ ) {
86
+ const mode = resolveCurrencyModeFromODataParameters(params);
87
+ return resolveCurrencyAwareLabel(baseLabel, currencyLabels, mode);
88
+ }
89
+ `})}),`
90
+ `,(0,c.jsx)(t.p,{children:`Resolver чистый: одинаковый вход даёт одинаковую строку и не меняет params/labels.`}),`
91
+ `,(0,c.jsx)(t.h2,{id:`ограничения-и-ошибки`,children:`Ограничения и ошибки`}),`
92
+ `,(0,c.jsxs)(t.ul,{children:[`
93
+ `,(0,c.jsxs)(t.li,{children:[`Поддерживается только параметр с точным id `,(0,c.jsx)(t.code,{children:`p_curr`}),`.`]}),`
94
+ `,(0,c.jsxs)(t.li,{children:[`Поддерживаются только два режима; код валюты `,(0,c.jsx)(t.code,{children:`USD`}),`, `,(0,c.jsx)(t.code,{children:`EUR`}),` и exchange rate не обрабатываются.`]}),`
95
+ `,(0,c.jsx)(t.li,{children:`Функция не проверяет грамматику и единицы измерения.`}),`
96
+ `,(0,c.jsxs)(t.li,{children:[`Запятая должна входить в сам суффикс, если нужна форма `,(0,c.jsx)(t.code,{children:`"Выручка, руб"`}),`.`]}),`
97
+ `,(0,c.jsxs)(t.li,{children:[`Не передавайте плоский `,(0,c.jsx)(t.code,{children:`{ p_curr: true }`}),`: ожидается `,(0,c.jsx)(t.code,{children:`{ p_curr: { value: true } }`}),`.`]}),`
98
+ `,(0,c.jsx)(t.li,{children:`Не используйте label helper для финансовых вычислений.`}),`
99
+ `]}),`
100
+ `,(0,c.jsx)(t.h2,{id:`api-справочник`,children:`API-справочник`}),`
101
+ `,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Export`}),(0,c.jsx)(t.th,{children:`Результат`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`CurrencyMode`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`"internal" | "rub"`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`resolveCurrencyModeFromODataParameters`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`CurrencyMode | null`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`resolveCurrencyAwareLabel`})}),(0,c.jsx)(t.td,{children:`Итоговая display-строка`})]})]})]})]})}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};
@@ -0,0 +1,118 @@
1
+ import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-o7sH2IXC.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-BY40djCc.js";function o(e){let t={a:`a`,code:`code`,h1:`h1`,h2:`h2`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation Lib/Contracts/Common Types`}),`
2
+ `,(0,c.jsxs)(t.h1,{id:`общие-технические-типы-ryuzaki13react-foundation-libtypes`,children:[`Общие технические типы `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/types`})]}),`
3
+ `,(0,c.jsxs)(t.p,{children:[`Модуль содержит небольшие общие TypeScript-контракты для value state, ABAP boolean, базовых значений, диапазонов и строк таблицы. Единственная runtime-функция — `,(0,c.jsx)(t.code,{children:`isBaseType`}),`.`]}),`
4
+ `,(0,c.jsx)(t.h2,{id:`содержание`,children:`Содержание`}),`
5
+ `,(0,c.jsxs)(t.ul,{children:[`
6
+ `,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-%D0%B8-%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82`,children:`Установка и импорт`})}),`
7
+ `,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#state`,children:(0,c.jsx)(t.code,{children:`State`})})}),`
8
+ `,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#abapboolean`,children:(0,c.jsx)(t.code,{children:`AbapBoolean`})})}),`
9
+ `,(0,c.jsx)(t.li,{children:(0,c.jsxs)(t.a,{href:`#primitive-%D0%B8-basetype`,children:[(0,c.jsx)(t.code,{children:`Primitive`}),` и `,(0,c.jsx)(t.code,{children:`BaseType`})]})}),`
10
+ `,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#isbasetype`,children:(0,c.jsx)(t.code,{children:`isBaseType`})})}),`
11
+ `,(0,c.jsx)(t.li,{children:(0,c.jsxs)(t.a,{href:`#arraytype-objecttype-inputtype`,children:[(0,c.jsx)(t.code,{children:`ArrayType`}),`, `,(0,c.jsx)(t.code,{children:`ObjectType`}),`, `,(0,c.jsx)(t.code,{children:`InputType`})]})}),`
12
+ `,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#rangetype`,children:(0,c.jsx)(t.code,{children:`RangeType`})})}),`
13
+ `,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#rowrecord`,children:(0,c.jsx)(t.code,{children:`RowRecord`})})}),`
14
+ `,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B8-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F`,children:`Ошибки проектирования`})}),`
15
+ `]}),`
16
+ `,(0,c.jsx)(t.h2,{id:`установка-и-импорт`,children:`Установка и импорт`}),`
17
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`import { isBaseType } from "@ryuzaki13/react-foundation-lib/types";
18
+
19
+ import type {
20
+ AbapBoolean,
21
+ ArrayType,
22
+ BaseType,
23
+ InputType,
24
+ ObjectType,
25
+ Primitive,
26
+ RangeType,
27
+ RowRecord,
28
+ State
29
+ } from "@ryuzaki13/react-foundation-lib/types";
30
+ `})}),`
31
+ `,(0,c.jsxs)(t.p,{children:[`Типы исчезают после компиляции TypeScript. Не пытайтесь использовать `,(0,c.jsx)(t.code,{children:`State`}),` или `,(0,c.jsx)(t.code,{children:`RowRecord`}),` как runtime validator.`]}),`
32
+ `,(0,c.jsx)(t.h2,{id:`state`,children:(0,c.jsx)(t.code,{children:`State`})}),`
33
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`type State = "" | "none" | "information" | "success" | "warning" | "error";
34
+ `})}),`
35
+ `,(0,c.jsx)(t.p,{children:`Это общий display/value state, а не HTTP status и не состояние async request.`}),`
36
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const state: State = "warning";
37
+ `})}),`
38
+ `,(0,c.jsxs)(t.p,{children:[`Пустая строка и `,(0,c.jsx)(t.code,{children:`"none"`}),` являются разными допустимыми значениями. Не сжимайте их автоматически в `,(0,c.jsx)(t.code,{children:`undefined`}),`, если contract этого не требует.`]}),`
39
+ `,(0,c.jsx)(t.h2,{id:`abapboolean`,children:(0,c.jsx)(t.code,{children:`AbapBoolean`})}),`
40
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`type AbapBoolean = "X" | " ";
41
+ `})}),`
42
+ `,(0,c.jsxs)(t.p,{children:[`ABAP-style boolean использует `,(0,c.jsx)(t.code,{children:`"X"`}),` для истины и строку из одного пробела для лжи. Это не JavaScript boolean:`]}),`
43
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`Boolean(" "); // true, потому что непустая строка.
44
+ `})}),`
45
+ `,(0,c.jsxs)(t.p,{children:[`Для преобразования используйте boolean formatters, а не `,(0,c.jsx)(t.code,{children:`Boolean(value)`}),`.`]}),`
46
+ `,(0,c.jsxs)(t.h2,{id:`primitive-и-basetype`,children:[(0,c.jsx)(t.code,{children:`Primitive`}),` и `,(0,c.jsx)(t.code,{children:`BaseType`})]}),`
47
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`type Primitive = string | number | boolean | null | undefined;
48
+ type BaseType = Date | Primitive;
49
+ `})}),`
50
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`BaseType`}),` добавляет `,(0,c.jsx)(t.code,{children:`Date`}),` к primitive values. Тип `,(0,c.jsx)(t.code,{children:`number`}),` статически включает `,(0,c.jsx)(t.code,{children:`NaN`}),`/`,(0,c.jsx)(t.code,{children:`Infinity`}),`, но runtime guard их отклоняет.`]}),`
51
+ `,(0,c.jsx)(t.h2,{id:`isbasetype`,children:(0,c.jsx)(t.code,{children:`isBaseType`})}),`
52
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`isBaseType("text"); // true.
53
+ isBaseType(10); // true.
54
+ isBaseType(false); // true.
55
+ isBaseType(null); // true.
56
+ isBaseType(undefined); // true.
57
+ isBaseType(new Date()); // true.
58
+
59
+ isBaseType(Number.NaN); // false.
60
+ isBaseType(Infinity); // false.
61
+ isBaseType(new Date("bad")); // false.
62
+ isBaseType([]); // false.
63
+ isBaseType({}); // false.
64
+ `})}),`
65
+ `,(0,c.jsx)(t.p,{children:`Сигнатура является type guard:`}),`
66
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`function acceptUnknown(value: unknown) {
67
+ if (!isBaseType(value)) return;
68
+
69
+ // Здесь value имеет тип BaseType.
70
+ }
71
+ `})}),`
72
+ `,(0,c.jsx)(t.p,{children:`Guard проверяет только форму базового значения, а не бизнес-ограничения строки/числа/даты.`}),`
73
+ `,(0,c.jsxs)(t.h2,{id:`arraytype-objecttype-inputtype`,children:[(0,c.jsx)(t.code,{children:`ArrayType`}),`, `,(0,c.jsx)(t.code,{children:`ObjectType`}),`, `,(0,c.jsx)(t.code,{children:`InputType`})]}),`
74
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`type ArrayType = BaseType[];
75
+ type ObjectType = Readonly<Record<string, BaseType>> | object;
76
+ type InputType = BaseType | ArrayType | ObjectType;
77
+ `})}),`
78
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`ArrayType`}),` — изменяемый массив базовых значений.`]}),`
79
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`ObjectType`}),` намеренно широкий: union с `,(0,c.jsx)(t.code,{children:`object`}),` допускает практически любой non-primitive object. Он не означает JSON-compatible record и не является runtime-проверкой.`]}),`
80
+ `,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`InputType`}),` объединяет базовые значения, массивы и objects для generic formatter/input contracts. Не используйте его вместо точного domain DTO.`]}),`
81
+ `,(0,c.jsx)(t.h2,{id:`rangetype`,children:(0,c.jsx)(t.code,{children:`RangeType`})}),`
82
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`type RangeType = readonly [BaseType | null, BaseType | null];
83
+ `})}),`
84
+ `,(0,c.jsx)(t.p,{children:`Tuple всегда имеет две позиции:`}),`
85
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const range: RangeType = [new Date(2026, 0, 1), null];
86
+ `})}),`
87
+ `,(0,c.jsxs)(t.ul,{children:[`
88
+ `,(0,c.jsxs)(t.li,{children:[`индекс `,(0,c.jsx)(t.code,{children:`0`}),` — начало;`]}),`
89
+ `,(0,c.jsxs)(t.li,{children:[`индекс `,(0,c.jsx)(t.code,{children:`1`}),` — конец;`]}),`
90
+ `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`null`}),` обычно означает открытую/незаполненную границу;`]}),`
91
+ `,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`readonly`}),` запрещает присваивание через TypeScript, но не вызывает `,(0,c.jsx)(t.code,{children:`Object.freeze`}),`.`]}),`
92
+ `]}),`
93
+ `,(0,c.jsxs)(t.p,{children:[`Поскольку `,(0,c.jsx)(t.code,{children:`BaseType`}),` уже включает `,(0,c.jsx)(t.code,{children:`null`}),` и `,(0,c.jsx)(t.code,{children:`undefined`}),`, тип исторически широкий. Конкретный UI/domain contract должен задавать более точный `,(0,c.jsx)(t.code,{children:`readonly [T | null, T | null]`}),`.`]}),`
94
+ `,(0,c.jsx)(t.h2,{id:`rowrecord`,children:(0,c.jsx)(t.code,{children:`RowRecord`})}),`
95
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`type RowRecord = Record<string, unknown>;
96
+ `})}),`
97
+ `,(0,c.jsx)(t.p,{children:`Это строка таблицы с неизвестными полями. Перед использованием значения его нужно сузить:`}),`
98
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`function readName(row: RowRecord): string | undefined {
99
+ return typeof row.name === "string" ? row.name : undefined;
100
+ }
101
+ `})}),`
102
+ `,(0,c.jsx)(t.p,{children:`Если структура известна, объявляйте точный тип:`}),`
103
+ `,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`type EmployeeRow = {
104
+ id: string;
105
+ name: string;
106
+ salary: number;
107
+ };
108
+ `})}),`
109
+ `,(0,c.jsx)(t.h2,{id:`ошибки-проектирования`,children:`Ошибки проектирования`}),`
110
+ `,(0,c.jsxs)(t.ul,{children:[`
111
+ `,(0,c.jsxs)(t.li,{children:[`Использовать `,(0,c.jsx)(t.code,{children:`InputType`}),` как замену schema внешнего JSON.`]}),`
112
+ `,(0,c.jsxs)(t.li,{children:[`Считать `,(0,c.jsx)(t.code,{children:`ObjectType`}),` plain object.`]}),`
113
+ `,(0,c.jsxs)(t.li,{children:[`Приводить `,(0,c.jsx)(t.code,{children:`AbapBoolean`}),` через `,(0,c.jsx)(t.code,{children:`Boolean()`}),`.`]}),`
114
+ `,(0,c.jsxs)(t.li,{children:[`Считать `,(0,c.jsx)(t.code,{children:`readonly`}),` runtime-заморозкой.`]}),`
115
+ `,(0,c.jsxs)(t.li,{children:[`Использовать `,(0,c.jsx)(t.code,{children:`RowRecord`}),` там, где известны поля сущности.`]}),`
116
+ `,(0,c.jsxs)(t.li,{children:[`Считать `,(0,c.jsx)(t.code,{children:`isBaseType`}),` проверкой диапазона, длины или разрешённых business values.`]}),`
117
+ `,(0,c.jsxs)(t.li,{children:[`Нормализовать `,(0,c.jsx)(t.code,{children:`""`}),`, `,(0,c.jsx)(t.code,{children:`false`}),`, `,(0,c.jsx)(t.code,{children:`[]`}),` и `,(0,c.jsx)(t.code,{children:`null`}),` только из-за широкого общего типа.`]}),`
118
+ `]})]})}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};