@ryuzaki13/react-foundation-ui 1.1.4 → 1.1.6

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 (182) hide show
  1. package/dist/period-select/PeriodSelect.d.ts +8 -2
  2. package/dist/period-select/PeriodSelect.d.ts.map +1 -1
  3. package/dist/period-select/index.js +66 -51
  4. package/dist/period-select/index.js.map +1 -1
  5. package/dist/period-select/lib/periodSelect.d.ts +12 -2
  6. package/dist/period-select/lib/periodSelect.d.ts.map +1 -1
  7. package/package.json +3 -3
  8. package/storybook-static/assets/{Badge-BTAE-Cu0.js → Badge-DTbZvGvY.js} +1 -1
  9. package/storybook-static/assets/{Badge.stories-BfCBagHU.js → Badge.stories-C0FRO6mR.js} +1 -1
  10. package/storybook-static/assets/{Button-COr8ZnBZ.js → Button-CwOxcrRy.js} +1 -1
  11. package/storybook-static/assets/{Button-D0l3oLtE.js → Button-DBvM6sOi.js} +1 -1
  12. package/storybook-static/assets/{Button.stories-DilF6LrK.js → Button.stories-wRxT1tys.js} +1 -1
  13. package/storybook-static/assets/{CheckBox-C8vS8vJo.js → CheckBox-6vNLr5mN.js} +1 -1
  14. package/storybook-static/assets/{CheckBox-d9nyYsIy.js → CheckBox-B2PYacPl.js} +1 -1
  15. package/storybook-static/assets/{CheckBox.stories-B07ze4Wr.js → CheckBox.stories-BsgDlKB1.js} +1 -1
  16. package/storybook-static/assets/{Color-KMSTOMOX-Bzsd_5QQ.js → Color-KMSTOMOX-CSNKZs5h.js} +1 -1
  17. package/storybook-static/assets/{ContextMenu-D7IPfGtH.js → ContextMenu-BrkKv7rm.js} +1 -1
  18. package/storybook-static/assets/{ContextMenu.stories-EmxBfTnl.js → ContextMenu.stories-Bu0PKs77.js} +1 -1
  19. package/storybook-static/assets/{DateInput-Crs5GWnG.js → DateInput-CpD5ET6Z.js} +1 -1
  20. package/storybook-static/assets/{DateInput-CP4Pxdvs.js → DateInput-Dk6Oy1Y5.js} +1 -1
  21. package/storybook-static/assets/{DateInput.stories-BLCS9iRX.js → DateInput.stories-PxSyhXdr.js} +1 -1
  22. package/storybook-static/assets/{DateRangePresetSelect-Csbfuey7.js → DateRangePresetSelect-DngfCkUZ.js} +1 -1
  23. package/storybook-static/assets/{DateRangePresetSelect-J-WzYVkt.js → DateRangePresetSelect-Y_jVJn8B.js} +1 -1
  24. package/storybook-static/assets/{DateRangePresetSelect.stories-BhFL1OaP.js → DateRangePresetSelect.stories-C8lPJh_i.js} +1 -1
  25. package/storybook-static/assets/{Detail-DglfYNE2.js → Detail-VfH3Ddln.js} +1 -1
  26. package/storybook-static/assets/{Detail.stories-0IivH1cQ.js → Detail.stories-HC_fB5JL.js} +1 -1
  27. package/storybook-static/assets/{Dialog-D0joa64s.js → Dialog-BqF8Stct.js} +1 -1
  28. package/storybook-static/assets/{Dialog.stories-CTfN45UP.js → Dialog.stories-CZREWQ1k.js} +1 -1
  29. package/storybook-static/assets/{Disclosure-rdSQS8P7.js → Disclosure-DdQCtfOv.js} +1 -1
  30. package/storybook-static/assets/{Disclosure.stories-5BgYi8uF.js → Disclosure.stories-BipF9KGl.js} +1 -1
  31. package/storybook-static/assets/{DocsRenderer-JROSPFPF-BJkHjLCZ.js → DocsRenderer-JROSPFPF-C_tirLBz.js} +2 -2
  32. package/storybook-static/assets/{DropZone-BM1NLuA0.js → DropZone-GYL3kQCI.js} +1 -1
  33. package/storybook-static/assets/{DropZone.stories-DrPDxIBC.js → DropZone.stories-CruH4C9l.js} +1 -1
  34. package/storybook-static/assets/{DropdownMenu-shJr746W.js → DropdownMenu-E1ylGqL9.js} +1 -1
  35. package/storybook-static/assets/{ExpandableActionPanel.stories-TtfzEN4C.js → ExpandableActionPanel.stories-BBsU-gui.js} +1 -1
  36. package/storybook-static/assets/{Flex-5o7k9tUR.js → Flex-C6fgzqXv.js} +1 -1
  37. package/storybook-static/assets/{Flex-BkWF7h5z.js → Flex-DMLdHG7d.js} +1 -1
  38. package/storybook-static/assets/{Flex.stories-C1XJ44EO.js → Flex.stories-CP5WdLD3.js} +1 -1
  39. package/storybook-static/assets/{Grid-BXz1CwFq.js → Grid-DzBMbNYT.js} +1 -1
  40. package/storybook-static/assets/{Grid-CdI_y4yl.js → Grid-p6sY7en9.js} +1 -1
  41. package/storybook-static/assets/{Grid.stories-EsSWnusY.js → Grid.stories-rHEEhmA4.js} +1 -1
  42. package/storybook-static/assets/{ImageCropper.stories-BYg2ptRF.js → ImageCropper.stories-DXzbQ5FJ.js} +1 -1
  43. package/storybook-static/assets/{ImageRenderer-DAdVVRDG.js → ImageRenderer-CPYOOx0n.js} +1 -1
  44. package/storybook-static/assets/{ImageRenderer.stories-nYsBLQRc.js → ImageRenderer.stories-B5a4BoWt.js} +1 -1
  45. package/storybook-static/assets/{ImageView.stories-BuexvCt7.js → ImageView.stories-sTO611LR.js} +1 -1
  46. package/storybook-static/assets/{ImageViewer.stories-C2rTyKj7.js → ImageViewer.stories-CwIqVtTH.js} +2 -2
  47. package/storybook-static/assets/{ImageViewerRuntime-F7Qkt8r6.js → ImageViewerRuntime-CkiRw9AS.js} +1 -1
  48. package/storybook-static/assets/{Input-B2CGKwD9.js → Input-Cgz-Bx_e.js} +1 -1
  49. package/storybook-static/assets/{Input-Ny_qDcq6.js → Input-JhUvY-Jm.js} +1 -1
  50. package/storybook-static/assets/{Input.stories-I9DUZ8AK.js → Input.stories-CZjEUeuS.js} +1 -1
  51. package/storybook-static/assets/{InputDateTime-WZ2-rOQX.js → InputDateTime-BkN07v28.js} +1 -1
  52. package/storybook-static/assets/{InputDateTime.stories-CQTdSUz9.js → InputDateTime.stories-DYM7WEl_.js} +1 -1
  53. package/storybook-static/assets/{InputFile-Dai1MtLc.js → InputFile-C7jAf-Im.js} +1 -1
  54. package/storybook-static/assets/{InputFile.stories-C5xJSqnv.js → InputFile.stories-D_etMzJL.js} +1 -1
  55. package/storybook-static/assets/{InputFiles-DjdQ7Z-d.js → InputFiles-CQ30jms7.js} +1 -1
  56. package/storybook-static/assets/{InputFiles-dasytOC9.js → InputFiles-DzpHx6LX.js} +1 -1
  57. package/storybook-static/assets/{InputFiles.stories-D10tTtI-.js → InputFiles.stories-CAvuu19z.js} +1 -1
  58. package/storybook-static/assets/{InputImage-RkEq2Brn.js → InputImage-CZQnxU3r.js} +1 -1
  59. package/storybook-static/assets/{InputImage.stories-B1YNcZ6A.js → InputImage.stories-CC5rWT7x.js} +1 -1
  60. package/storybook-static/assets/{LayoutPicker-CnVEWDPg.js → LayoutPicker-Csk591Gq.js} +1 -1
  61. package/storybook-static/assets/{LayoutPicker.stories-C_Imtvkh.js → LayoutPicker.stories-HSzDTfbl.js} +1 -1
  62. package/storybook-static/assets/{Listbox-thRqniZv.js → Listbox-Cs3PEOu7.js} +1 -1
  63. package/storybook-static/assets/{Listbox.stories-DoZDFQfn.js → Listbox.stories-DKxQyANQ.js} +1 -1
  64. package/storybook-static/assets/{Modal-Dj0-wAgD.js → Modal-D56cSUlx.js} +1 -1
  65. package/storybook-static/assets/{Modal.stories-D4X-fefE.js → Modal.stories-DBhh8Oex.js} +1 -1
  66. package/storybook-static/assets/{MultiSelect-s-wvj6n5.js → MultiSelect-DfN6F5Zf.js} +1 -1
  67. package/storybook-static/assets/{MultiSelect-BvVNwbrA.js → MultiSelect-hFHpaUjE.js} +1 -1
  68. package/storybook-static/assets/{MultiSelect.stories-0yA0f5-c.js → MultiSelect.stories-DdiJtud4.js} +1 -1
  69. package/storybook-static/assets/{NotificationsHost-Bi0Tp6sW.js → NotificationsHost-VRe_IYdJ.js} +1 -1
  70. package/storybook-static/assets/{NotificationsHost.stories-B3QdYoD0.js → NotificationsHost.stories-CgomuZqK.js} +1 -1
  71. package/storybook-static/assets/{ODataMultiSelect-hks0ZQrT.js → ODataMultiSelect-CaKU5cyu.js} +1 -1
  72. package/storybook-static/assets/{ODataMultiSelect.stories-D5N-uBqS.js → ODataMultiSelect.stories-BHHcSft9.js} +1 -1
  73. package/storybook-static/assets/{ODataSelect-CQ8bUpd5.js → ODataSelect-B5Lo66gN.js} +1 -1
  74. package/storybook-static/assets/{ODataSelect-BhCR9HGn.js → ODataSelect-BT-YqgRv.js} +1 -1
  75. package/storybook-static/assets/{ODataSelect.stories-BBAdmYae.js → ODataSelect.stories-DhfSQYto.js} +1 -1
  76. package/storybook-static/assets/{ODataTreeMultiSelect-DNBatq4h.js → ODataTreeMultiSelect-mPwmusDm.js} +1 -1
  77. package/storybook-static/assets/{ODataTreeMultiSelect.stories-BtKl_ASP.js → ODataTreeMultiSelect.stories-zU72m_nT.js} +1 -1
  78. package/storybook-static/assets/{ODataTreeSelect-DyHbGnJH.js → ODataTreeSelect-HRpdPLA2.js} +1 -1
  79. package/storybook-static/assets/{ODataTreeSelect.stories-CG4AfZLd.js → ODataTreeSelect.stories-BtSzrEr2.js} +1 -1
  80. package/storybook-static/assets/PeriodSelect-ZBGWb2Xt.js +51 -0
  81. package/storybook-static/assets/PeriodSelect.stories-B0nOV7yZ.js +47 -0
  82. package/storybook-static/assets/{Popover-CMZ3UnB3.js → Popover-CuZWq4ir.js} +1 -1
  83. package/storybook-static/assets/{Popover.stories-BypMyp_9.js → Popover.stories-UomYS0vU.js} +1 -1
  84. package/storybook-static/assets/{PresetRangeDateInput-CPodYJSD.js → PresetRangeDateInput-D3rjN3XZ.js} +1 -1
  85. package/storybook-static/assets/{PresetRangeDateInput.stories-qdPO2Oz-.js → PresetRangeDateInput.stories-wy7GVVdF.js} +1 -1
  86. package/storybook-static/assets/{RadioButton-Ch1qnDnT.js → RadioButton-DPL0ufmD.js} +1 -1
  87. package/storybook-static/assets/{RadioButton.stories-Bxs1aUdB.js → RadioButton.stories-DLzOE3FX.js} +1 -1
  88. package/storybook-static/assets/{RadioGroup-Do88BbGS.js → RadioGroup-BRuTj9Ey.js} +1 -1
  89. package/storybook-static/assets/{RadioGroup-DVDuj2J-.js → RadioGroup-jjU7Wc3l.js} +1 -1
  90. package/storybook-static/assets/{RadioGroup.stories-Vt66-Caq.js → RadioGroup.stories-Bbs7gPeI.js} +1 -1
  91. package/storybook-static/assets/{Select-q_XrayeK.js → Select-CSQfHGXO.js} +1 -1
  92. package/storybook-static/assets/{Select-COpg8sSQ.js → Select-DrdEDezx.js} +1 -1
  93. package/storybook-static/assets/{Select.stories-7BhfKWNg.js → Select.stories-B482Sdsv.js} +1 -1
  94. package/storybook-static/assets/{SelectOptionContent-BbWkG0Cj.js → SelectOptionContent-KmIjKWiS.js} +1 -1
  95. package/storybook-static/assets/{SerializableSelect-4ijwdqn7.js → SerializableSelect-Bt1FrgBB.js} +1 -1
  96. package/storybook-static/assets/{SerializableSelect-BVqRKICZ.js → SerializableSelect-RadwUlKf.js} +1 -1
  97. package/storybook-static/assets/{SerializableSelect.stories-CNCW7ySW.js → SerializableSelect.stories-B_0no7si.js} +1 -1
  98. package/storybook-static/assets/{SingleDateTimeInput-ktOvdlgM.js → SingleDateTimeInput-DhyidxjF.js} +1 -1
  99. package/storybook-static/assets/{SingleDateTimeInput.stories-B1sVehuC.js → SingleDateTimeInput.stories-B61QM3vF.js} +1 -1
  100. package/storybook-static/assets/{Slider-BwzMyRGn.js → Slider-DIH0-2GV.js} +1 -1
  101. package/storybook-static/assets/{Slider.stories-BA5faG4z.js → Slider.stories-DECV07rR.js} +1 -1
  102. package/storybook-static/assets/{SliderInput-BMMXEBJZ.js → SliderInput-B59f8oMg.js} +1 -1
  103. package/storybook-static/assets/{SliderInput.stories-DSEiXNpJ.js → SliderInput.stories-DLnxLEkD.js} +1 -1
  104. package/storybook-static/assets/{Sortable-BojJGp_6.js → Sortable-B8WbzmlP.js} +1 -1
  105. package/storybook-static/assets/{Sortable.stories-DPzKTc1m.js → Sortable.stories-DqUlCVvw.js} +1 -1
  106. package/storybook-static/assets/{Splitter-4L-UBcBS.js → Splitter-C4yDAl_u.js} +1 -1
  107. package/storybook-static/assets/{Splitter.stories-DS-CWey5.js → Splitter.stories-CcgiUjmr.js} +1 -1
  108. package/storybook-static/assets/{StateSelect-h7zV-q7S.js → StateSelect-CV-8pxhw.js} +1 -1
  109. package/storybook-static/assets/{StateSelect.stories-DlCmcleb.js → StateSelect.stories-BK9ivlmG.js} +1 -1
  110. package/storybook-static/assets/{Switch-D7cJWIpv.js → Switch-DE7nHbwh.js} +1 -1
  111. package/storybook-static/assets/{Switch.stories-BUNj3c7I.js → Switch.stories-CMfzzp_X.js} +1 -1
  112. package/storybook-static/assets/{Table-Djwn-kmo.js → Table-C6MOZ4T6.js} +1 -1
  113. package/storybook-static/assets/{Table.stories-6o57WDBN.js → Table.stories-STJ__NxI.js} +1 -1
  114. package/storybook-static/assets/{Tabs-BEDGo6Dt.js → Tabs-CD1hcYPu.js} +1 -1
  115. package/storybook-static/assets/{Tabs.stories-D6jsxqio.js → Tabs.stories-BvqssX2z.js} +1 -1
  116. package/storybook-static/assets/{TagInput.stories-Detqw-BO.js → TagInput.stories-ma0idG2o.js} +1 -1
  117. package/storybook-static/assets/{Textarea-e1rqwdS0.js → Textarea-Bg8GLfKh.js} +1 -1
  118. package/storybook-static/assets/{Textarea.stories-CYNlkru_.js → Textarea.stories-DFvplu2w.js} +1 -1
  119. package/storybook-static/assets/{TimePanel-BzwAMpxA.js → TimePanel-CZ-zOdHh.js} +1 -1
  120. package/storybook-static/assets/{TimePanel.stories-BKtxxbV9.js → TimePanel.stories-DFH-UUBq.js} +1 -1
  121. package/storybook-static/assets/{Toggle-CFY-QWG0.js → Toggle-CDPkOx6F.js} +1 -1
  122. package/storybook-static/assets/{Toggle.stories-CN4EtvMk.js → Toggle.stories-Ccw3JBaV.js} +1 -1
  123. package/storybook-static/assets/{TreeMultiSelect-XcdSsZbx.js → TreeMultiSelect-D-tS9rvA.js} +1 -1
  124. package/storybook-static/assets/{TreeMultiSelect-C6LC0B_t.js → TreeMultiSelect-cz0brPQw.js} +1 -1
  125. package/storybook-static/assets/{TreeMultiSelect.stories-BPSHj5Oz.js → TreeMultiSelect.stories-C92b10QI.js} +1 -1
  126. package/storybook-static/assets/{TreePickerBase-DLRPlLkL.js → TreePickerBase-B39PMNf_.js} +1 -1
  127. package/storybook-static/assets/{TreeSelect-Cgscw1vO.js → TreeSelect-CyHcbvrN.js} +1 -1
  128. package/storybook-static/assets/{TreeSelect-BHQFUR9I.js → TreeSelect-tdrV0FoI.js} +1 -1
  129. package/storybook-static/assets/{TreeSelect.stories-BxaBjBhQ.js → TreeSelect.stories-C-7CmDg1.js} +1 -1
  130. package/storybook-static/assets/{TreeTable-CrO1q-bb.js → TreeTable-C_WN8FQo.js} +1 -1
  131. package/storybook-static/assets/{TreeTable.stories-Cbw3al7a.js → TreeTable.stories-DSkbQoFG.js} +1 -1
  132. package/storybook-static/assets/{WithTooltip-7X4HQR7L-DX5OwBGJ.js → WithTooltip-7X4HQR7L-Ccl2HZl-.js} +1 -1
  133. package/storybook-static/assets/{base-table-BOoR-jrw.js → base-table-CB4WoiOm.js} +1 -1
  134. package/storybook-static/assets/{blocks-CWdkXPAf.js → blocks-xFhW5LuA.js} +6 -6
  135. package/storybook-static/assets/{button-y1pwsTgq.js → button-LL06NtwK.js} +1 -1
  136. package/storybook-static/assets/{check-box-KzIumHeK.js → check-box-B2R83vBX.js} +1 -1
  137. package/storybook-static/assets/{chunk-3LY4VQVK-DgGt6GC4.js → chunk-3LY4VQVK-CrLkroEp.js} +1 -1
  138. package/storybook-static/assets/{chunk-LITCR56V-DaMBGWjn.js → chunk-LITCR56V-CwP5uBgf.js} +1 -1
  139. package/storybook-static/assets/{contextMenu-TVGY1zYp.js → contextMenu-C412_f6X.js} +1 -1
  140. package/storybook-static/assets/{error-BPBoLmDN.js → error-CVV9NONe.js} +1 -1
  141. package/storybook-static/assets/{flex-D9b-dBgG.js → flex-BsIB-Bk2.js} +1 -1
  142. package/storybook-static/assets/{floating-ui.react-D3mIqn3s.js → floating-ui.react-BUVR6RTk.js} +1 -1
  143. package/storybook-static/assets/formatter-L2YTDE3Q-B_BDMouG.js +1 -0
  144. package/storybook-static/assets/{formatters-D0zSsBW1.js → formatters-C2NH5oG9.js} +1 -1
  145. package/storybook-static/assets/grid-g_iBhVr4.js +1 -0
  146. package/storybook-static/assets/{hooks-DhYf_owN.js → hooks-B3VxCLy3.js} +1 -1
  147. package/storybook-static/assets/{iframe-m0QwbmMJ.js → iframe-DflW120b.js} +3 -3
  148. package/storybook-static/assets/{input-BZBDl16m.js → input-BaHg50eA.js} +1 -1
  149. package/storybook-static/assets/{lucide-react-CLUPuimx.js → lucide-react-VWiBigaj.js} +1 -1
  150. package/storybook-static/assets/{mdx-react-shim-CmEvmtFH.js → mdx-react-shim-C4qR84IJ.js} +1 -1
  151. package/storybook-static/assets/{media-CjQdA2Mv.js → media-D0ZLoHC-.js} +1 -1
  152. package/storybook-static/assets/{misc-BPMpbj-u.js → misc-C9Lkw27O.js} +1 -1
  153. package/storybook-static/assets/{notifications-DcYI6zTi.js → notifications-vHR6fNDB.js} +1 -1
  154. package/storybook-static/assets/{odata-ypqfpogF.js → odata-Fxs_Fy9_.js} +1 -1
  155. package/storybook-static/assets/odata-service-R4sN6H36.js +1 -0
  156. package/storybook-static/assets/{odataStoryFixtures-Dz9x9V3d.js → odataStoryFixtures-B9hZmWqf.js} +1 -1
  157. package/storybook-static/assets/{picker-DDeo_PCY.js → picker-Cv_Ql1NL.js} +1 -1
  158. package/storybook-static/assets/{popover-CbcUGKOy.js → popover-DrE0FDTT.js} +1 -1
  159. package/storybook-static/assets/{preset-select-BBA7ffCG.js → preset-select-B31k-k9Y.js} +1 -1
  160. package/storybook-static/assets/{react-18-CEpEuDLi.js → react-18-DHZovjkP.js} +1 -1
  161. package/storybook-static/assets/{react-Dlj91pfF.js → react-DzyGsyH7.js} +1 -1
  162. package/storybook-static/assets/{react-dom-6vmLvsDt.js → react-dom-CchAcezr.js} +1 -1
  163. package/storybook-static/assets/select-DYPSEJF1.js +1 -0
  164. package/storybook-static/assets/{slider-C92y_ac7.js → slider-CjYK3ZGn.js} +1 -1
  165. package/storybook-static/assets/{sortable-CVw4tyjV.js → sortable-BdcqlSP1.js} +1 -1
  166. package/storybook-static/assets/{syntaxhighlighter-RTCFPKCB-Dq_L5d9h.js → syntaxhighlighter-RTCFPKCB-7I_ZEDBS.js} +1 -1
  167. package/storybook-static/assets/{text-Cg4cjrW7.js → text-C1j_wRlP.js} +1 -1
  168. package/storybook-static/assets/{theming-CQoZ5-v_.js → theming-BBiKrPJV.js} +1 -1
  169. package/storybook-static/assets/ui-BdaKEyAd.js +1 -0
  170. package/storybook-static/assets/{useODataSelectBase-K7wnoQzR.js → useODataSelectBase-CXv-4xSN.js} +1 -1
  171. package/storybook-static/assets/{useODataTreeData-DFvQ7a3D.js → useODataTreeData-DsCRTvwe.js} +1 -1
  172. package/storybook-static/assets/{utils-CV_FgKe9.js → utils-G8NqhJFu.js} +1 -1
  173. package/storybook-static/iframe.html +1 -1
  174. package/storybook-static/index.json +1 -1
  175. package/storybook-static/project.json +1 -1
  176. package/storybook-static/assets/PeriodSelect-BfQge37Z.js +0 -35
  177. package/storybook-static/assets/PeriodSelect.stories-CPzb6u_X.js +0 -23
  178. package/storybook-static/assets/formatter-L2YTDE3Q-Dx2lRR9t.js +0 -1
  179. package/storybook-static/assets/grid-CiXWA2Qm.js +0 -1
  180. package/storybook-static/assets/odata-service-CwyYgqal.js +0 -1
  181. package/storybook-static/assets/select-BOHTwP2D.js +0 -1
  182. package/storybook-static/assets/ui-Dj5Iqdsg.js +0 -1
@@ -1,8 +1,14 @@
1
- import { type PeriodSelectOption } from "./lib";
1
+ import { type PeriodSelectOption, type PeriodSelectPresetId } from "./lib";
2
2
  import type { UiBaseProps } from "../types";
3
3
  import type { DateRangeInput } from "@ryuzaki13/react-foundation-lib/formatters";
4
4
  export interface PeriodSelectProps extends UiBaseProps<PeriodSelectOption["id"] | undefined> {
5
5
  options?: readonly PeriodSelectOption[];
6
+ /**
7
+ * Разрешенные встроенные варианты периода. Значение нормализуется в канонический
8
+ * порядок, а пустой либо невалидный список безопасно заменяется полным набором.
9
+ * Не применяется, когда передан собственный `options`.
10
+ */
11
+ presetIds?: readonly PeriodSelectPresetId[];
6
12
  dateRange?: DateRangeInput;
7
13
  maxDayRangeDays?: number;
8
14
  maxWeekRangeWeeks?: number;
@@ -10,5 +16,5 @@ export interface PeriodSelectProps extends UiBaseProps<PeriodSelectOption["id"]
10
16
  /**
11
17
  * Select периода детализации, который может ограничивать доступные варианты по диапазону дат.
12
18
  */
13
- export declare function PeriodSelect({ value, onChange, options, dateRange, maxDayRangeDays, maxWeekRangeWeeks, ...props }: PeriodSelectProps): import("react").JSX.Element;
19
+ export declare function PeriodSelect({ value, onChange, options, presetIds, dateRange, maxDayRangeDays, maxWeekRangeWeeks, ...props }: PeriodSelectProps): import("react").JSX.Element;
14
20
  //# sourceMappingURL=PeriodSelect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PeriodSelect.d.ts","sourceRoot":"","sources":["../../src/period-select/PeriodSelect.tsx"],"names":[],"mappings":"AAIA,OAAO,EAA8F,KAAK,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAE5I,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAEjF,MAAM,WAAW,iBAAkB,SAAQ,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;IAC3F,OAAO,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACxC,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,iBAAiB,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,+BA+BpI"}
1
+ {"version":3,"file":"PeriodSelect.d.ts","sourceRoot":"","sources":["../../src/period-select/PeriodSelect.tsx"],"names":[],"mappings":"AAIA,OAAO,EAMN,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAEjF,MAAM,WAAW,iBAAkB,SAAQ,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;IAC3F,OAAO,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACxC;;;;OAIG;IACH,SAAS,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAC5C,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAC5B,KAAK,EACL,QAAQ,EACR,OAAO,EACP,SAAS,EACT,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,GAAG,KAAK,EACR,EAAE,iBAAiB,+BAqDnB"}
@@ -1,11 +1,11 @@
1
1
  import { PresetSelect as e } from "../preset-select/index.js";
2
- import { useEffect as t, useEffectEvent as n, useMemo as r } from "react";
3
- import { isRecord as i } from "@ryuzaki13/react-foundation-lib/validators";
4
- import { countCalendarDaysInDateRange as a, normalizeText as o, toPositiveInteger as s } from "@ryuzaki13/react-foundation-lib/formatters";
5
- import { jsx as c } from "react/jsx-runtime";
6
- import { getPresetOption as l, normalizePresetIds as u, resolvePresetOptionsByIds as d } from "@ryuzaki13/react-foundation-lib/presets";
2
+ import { useEffect as t, useEffectEvent as n, useMemo as r, useRef as i } from "react";
3
+ import { isRecord as a } from "@ryuzaki13/react-foundation-lib/validators";
4
+ import { countCalendarDaysInDateRange as o, normalizeText as s, toPositiveInteger as c } from "@ryuzaki13/react-foundation-lib/formatters";
5
+ import { jsx as l } from "react/jsx-runtime";
6
+ import { getPresetOption as u, normalizePresetIds as d, resolvePresetOptionsByIds as f } from "@ryuzaki13/react-foundation-lib/presets";
7
7
  //#region src/period-select/lib/constants.ts
8
- var f = "period-select", p = "day", m = 31, h = 26, g = Object.freeze([
8
+ var p = "period-select", m = "day", h = 31, g = 26, _ = Object.freeze([
9
9
  {
10
10
  id: "day",
11
11
  label: "по дням"
@@ -17,30 +17,36 @@ var f = "period-select", p = "day", m = 31, h = 26, g = Object.freeze([
17
17
  {
18
18
  id: "month",
19
19
  label: "по месяцам"
20
+ },
21
+ {
22
+ id: "year",
23
+ label: "по годам"
20
24
  }
21
- ]), _ = Object.freeze([
25
+ ]), v = Object.freeze([
22
26
  "day",
23
27
  "week",
24
- "month"
25
- ]), v = new Set(g.map((e) => e.id));
26
- function y(e) {
27
- return typeof e == "string" && v.has(e);
28
+ "month",
29
+ "year"
30
+ ]), y = new Set(_.map((e) => e.id));
31
+ function b(e) {
32
+ return typeof e == "string" && y.has(e);
28
33
  }
29
- function b(e, t = _) {
30
- return u(e, y, t);
34
+ function x(e, t = v) {
35
+ let n = d(e, b, t), r = n.length > 0 ? n : v, i = new Set(r);
36
+ return v.filter((e) => i.has(e));
31
37
  }
32
- function x(e, t = g) {
33
- return d(e, t);
38
+ function S(e, t = _) {
39
+ return f(e, t);
34
40
  }
35
- function S(e, t = g) {
36
- return l(e, t);
41
+ function C(e, t = _) {
42
+ return u(e, t);
37
43
  }
38
- function C(e) {
39
- return y(e) ? e : "day";
44
+ function w(e) {
45
+ return b(e) ? e : "day";
40
46
  }
41
- function w({ maxDayRangeDays: e, maxWeekRangeWeeks: t } = {}) {
42
- let n = s(e), r = s(t);
43
- return g.map((e) => e.id === "day" && n !== void 0 ? {
47
+ function T({ maxDayRangeDays: e, maxWeekRangeWeeks: t } = {}) {
48
+ let n = c(e), r = c(t);
49
+ return _.map((e) => e.id === "day" && n !== void 0 ? {
44
50
  ...e,
45
51
  maxRangeDays: n
46
52
  } : e.id === "week" && r !== void 0 ? {
@@ -48,20 +54,20 @@ function w({ maxDayRangeDays: e, maxWeekRangeWeeks: t } = {}) {
48
54
  maxRangeDays: r * 7
49
55
  } : { ...e });
50
56
  }
51
- function T(e, t) {
52
- let n = s(e.maxRangeDays);
57
+ function E(e, t) {
58
+ let n = c(e.maxRangeDays);
53
59
  if (n === void 0 || t === void 0) return !1;
54
- let r = a(t);
60
+ let r = o(t);
55
61
  return r !== null && r > n;
56
62
  }
57
- function E(e, t, n) {
63
+ function D(e, t, n) {
58
64
  if (t.length === 0) return;
59
65
  let r = e === void 0 ? -1 : t.findIndex((t) => t.id === e), i = r >= 0 ? t[r] : void 0;
60
- return i && !T(i, n) ? i.id : (r >= 0 ? t.slice(r + 1) : t).find((e) => !T(e, n))?.id ?? t.find((e) => !T(e, n))?.id;
66
+ return i && !E(i, n) ? i.id : (r >= 0 ? t.slice(r + 1) : t).find((e) => !E(e, n))?.id ?? t.find((e) => !E(e, n))?.id;
61
67
  }
62
- function D(e) {
63
- if (!i(e)) return;
64
- let t = o(e.start), n = o(e.end);
68
+ function O(e) {
69
+ if (!a(e)) return;
70
+ let t = s(e.start), n = s(e.end);
65
71
  return t && n ? {
66
72
  start: t,
67
73
  end: n
@@ -69,32 +75,41 @@ function D(e) {
69
75
  }
70
76
  //#endregion
71
77
  //#region src/period-select/PeriodSelect.tsx
72
- function O({ value: i, onChange: a, options: o, dateRange: s, maxDayRangeDays: l, maxWeekRangeWeeks: u, ...d }) {
73
- let f = r(() => o ?? w({
74
- maxDayRangeDays: l,
75
- maxWeekRangeWeeks: u
76
- }), [
77
- l,
78
- u,
79
- o
80
- ]), p = r(() => E(i, f, s), [
81
- s,
78
+ function k({ value: a, onChange: o, options: s, presetIds: c, dateRange: u, maxDayRangeDays: d, maxWeekRangeWeeks: f, ...p }) {
79
+ let m = r(() => s ?? S(x(c), T({
80
+ maxDayRangeDays: d,
81
+ maxWeekRangeWeeks: f
82
+ })), [
83
+ d,
82
84
  f,
83
- i
84
- ]), m = n(() => {
85
- p === void 0 || p === i || a(p);
85
+ s,
86
+ c
87
+ ]), h = r(() => D(a, m, u), [
88
+ u,
89
+ m,
90
+ a
91
+ ]), g = i(null), _ = n(() => {
92
+ if (h === void 0 || h === a) {
93
+ g.current = null;
94
+ return;
95
+ }
96
+ let e = g.current;
97
+ e && e.value === a && e.availableValue === h || (g.current = {
98
+ value: a,
99
+ availableValue: h
100
+ }, o(h));
86
101
  });
87
102
  return t(() => {
88
- m();
89
- }, [p, i]), /* @__PURE__ */ c(e, {
90
- ...d,
91
- options: f,
92
- value: p,
93
- onChange: a,
94
- getOptionDisabled: (e) => T(e, s)
103
+ _();
104
+ }, [h, a]), /* @__PURE__ */ l(e, {
105
+ ...p,
106
+ options: m,
107
+ value: h,
108
+ onChange: o,
109
+ getOptionDisabled: (e) => E(e, u)
95
110
  });
96
111
  }
97
112
  //#endregion
98
- export { m as DEFAULT_PERIOD_SELECT_MAX_DAY_RANGE_DAYS, h as DEFAULT_PERIOD_SELECT_MAX_WEEK_RANGE_WEEKS, p as DEFAULT_PERIOD_SELECT_PRESET_ID, _ as DEFAULT_PERIOD_SELECT_PRESET_IDS, f as PERIOD_SELECT_COMPONENT_ID, g as PERIOD_SELECT_OPTIONS, O as PeriodSelect, w as createPeriodSelectOptions, S as getPeriodSelectOption, T as isPeriodSelectOptionDisabled, y as isPeriodSelectPresetId, D as normalizePeriodSelectDateRangeConnectors, b as normalizePeriodSelectPresetIds, E as resolvePeriodSelectAvailableValue, C as resolvePeriodSelectDefaultValue, x as resolvePeriodSelectOptionsByIds };
113
+ export { h as DEFAULT_PERIOD_SELECT_MAX_DAY_RANGE_DAYS, g as DEFAULT_PERIOD_SELECT_MAX_WEEK_RANGE_WEEKS, m as DEFAULT_PERIOD_SELECT_PRESET_ID, v as DEFAULT_PERIOD_SELECT_PRESET_IDS, p as PERIOD_SELECT_COMPONENT_ID, _ as PERIOD_SELECT_OPTIONS, k as PeriodSelect, T as createPeriodSelectOptions, C as getPeriodSelectOption, E as isPeriodSelectOptionDisabled, b as isPeriodSelectPresetId, O as normalizePeriodSelectDateRangeConnectors, x as normalizePeriodSelectPresetIds, D as resolvePeriodSelectAvailableValue, w as resolvePeriodSelectDefaultValue, S as resolvePeriodSelectOptionsByIds };
99
114
 
100
115
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/period-select/lib/constants.ts","../../src/period-select/lib/periodSelect.ts","../../src/period-select/PeriodSelect.tsx"],"sourcesContent":["export const PERIOD_SELECT_COMPONENT_ID = \"period-select\";\n","import {\n\tcountCalendarDaysInDateRange,\n\ttype DateRangeInput,\n\tnormalizeText,\n\ttoPositiveInteger\n} from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport { getPresetOption, normalizePresetIds, type PresetOption, resolvePresetOptionsByIds } from \"@ryuzaki13/react-foundation-lib/presets\";\nimport { isRecord } from \"@ryuzaki13/react-foundation-lib/validators\";\n\nexport type PeriodSelectPresetId = \"day\" | \"week\" | \"month\";\nexport type PeriodSelectId = PeriodSelectPresetId | (string & {});\n\nexport interface PeriodSelectOption extends PresetOption<PeriodSelectId> {\n\tmaxRangeDays?: number;\n}\n\ntype BuiltInPeriodSelectOption = PeriodSelectOption & {\n\tid: PeriodSelectPresetId;\n};\n\nexport type PeriodSelectDateRangeConnectors = Readonly<{\n\tstart: string;\n\tend: string;\n}>;\n\nexport type PeriodSelectThresholds = {\n\tmaxDayRangeDays?: number;\n\tmaxWeekRangeWeeks?: number;\n};\n\nexport const DEFAULT_PERIOD_SELECT_PRESET_ID = \"day\" satisfies PeriodSelectPresetId;\nexport const DEFAULT_PERIOD_SELECT_MAX_DAY_RANGE_DAYS = 31;\nexport const DEFAULT_PERIOD_SELECT_MAX_WEEK_RANGE_WEEKS = 26;\n\nexport const PERIOD_SELECT_OPTIONS: readonly BuiltInPeriodSelectOption[] = Object.freeze([\n\t{\n\t\tid: \"day\",\n\t\tlabel: \"по дням\"\n\t},\n\t{\n\t\tid: \"week\",\n\t\tlabel: \"по неделям\"\n\t},\n\t{\n\t\tid: \"month\",\n\t\tlabel: \"по месяцам\"\n\t}\n]);\n\nexport const DEFAULT_PERIOD_SELECT_PRESET_IDS = Object.freeze([\"day\", \"week\", \"month\"] as const satisfies readonly PeriodSelectPresetId[]);\n\nconst PERIOD_SELECT_PRESET_ID_SET: ReadonlySet<string> = new Set(PERIOD_SELECT_OPTIONS.map((option) => option.id));\n\nexport function isPeriodSelectPresetId(value: unknown): value is PeriodSelectPresetId {\n\treturn typeof value === \"string\" && PERIOD_SELECT_PRESET_ID_SET.has(value);\n}\n\nexport function normalizePeriodSelectPresetIds(\n\tvalue: unknown,\n\tfallbackIds: readonly PeriodSelectPresetId[] = DEFAULT_PERIOD_SELECT_PRESET_IDS\n): PeriodSelectPresetId[] {\n\treturn normalizePresetIds(value, isPeriodSelectPresetId, fallbackIds);\n}\n\nexport function resolvePeriodSelectOptionsByIds(\n\tpresetIds: readonly PeriodSelectOption[\"id\"][],\n\toptions: readonly PeriodSelectOption[] = PERIOD_SELECT_OPTIONS\n): PeriodSelectOption[] {\n\treturn resolvePresetOptionsByIds(presetIds, options);\n}\n\nexport function getPeriodSelectOption(\n\tid: PeriodSelectOption[\"id\"] | undefined,\n\toptions: readonly PeriodSelectOption[] = PERIOD_SELECT_OPTIONS\n): PeriodSelectOption | null {\n\treturn getPresetOption(id, options);\n}\n\nexport function resolvePeriodSelectDefaultValue(value: unknown): PeriodSelectPresetId {\n\treturn isPeriodSelectPresetId(value) ? value : DEFAULT_PERIOD_SELECT_PRESET_ID;\n}\n\nexport function createPeriodSelectOptions({ maxDayRangeDays, maxWeekRangeWeeks }: PeriodSelectThresholds = {}): PeriodSelectOption[] {\n\tconst dayLimit = toPositiveInteger(maxDayRangeDays);\n\tconst weekLimit = toPositiveInteger(maxWeekRangeWeeks);\n\n\treturn PERIOD_SELECT_OPTIONS.map((option) => {\n\t\tif (option.id === \"day\" && dayLimit !== undefined) {\n\t\t\treturn {\n\t\t\t\t...option,\n\t\t\t\tmaxRangeDays: dayLimit\n\t\t\t};\n\t\t}\n\n\t\tif (option.id === \"week\" && weekLimit !== undefined) {\n\t\t\treturn {\n\t\t\t\t...option,\n\t\t\t\tmaxRangeDays: weekLimit * 7\n\t\t\t};\n\t\t}\n\n\t\treturn { ...option };\n\t});\n}\n\nexport function isPeriodSelectOptionDisabled(option: PeriodSelectOption, dateRange: DateRangeInput | undefined): boolean {\n\tconst maxRangeDays = toPositiveInteger(option.maxRangeDays);\n\tif (maxRangeDays === undefined || dateRange === undefined) {\n\t\treturn false;\n\t}\n\n\tconst rangeDays = countCalendarDaysInDateRange(dateRange);\n\treturn rangeDays !== null && rangeDays > maxRangeDays;\n}\n\nexport function resolvePeriodSelectAvailableValue(\n\tvalue: PeriodSelectOption[\"id\"] | undefined,\n\toptions: readonly PeriodSelectOption[],\n\tdateRange: DateRangeInput | undefined\n): PeriodSelectOption[\"id\"] | undefined {\n\tif (options.length === 0) {\n\t\treturn undefined;\n\t}\n\n\tconst selectedIndex = value === undefined ? -1 : options.findIndex((option) => option.id === value);\n\tconst selectedOption = selectedIndex >= 0 ? options[selectedIndex] : undefined;\n\n\tif (selectedOption && !isPeriodSelectOptionDisabled(selectedOption, dateRange)) {\n\t\treturn selectedOption.id;\n\t}\n\n\tconst nextOptions = selectedIndex >= 0 ? options.slice(selectedIndex + 1) : options;\n\tconst nextAvailableOption = nextOptions.find((option) => !isPeriodSelectOptionDisabled(option, dateRange));\n\n\treturn nextAvailableOption?.id ?? options.find((option) => !isPeriodSelectOptionDisabled(option, dateRange))?.id;\n}\n\nexport function normalizePeriodSelectDateRangeConnectors(value: unknown): PeriodSelectDateRangeConnectors | undefined {\n\tif (!isRecord(value)) {\n\t\treturn undefined;\n\t}\n\n\tconst startConnector = normalizeText(value.start);\n\tconst endConnector = normalizeText(value.end);\n\n\treturn startConnector && endConnector ? { start: startConnector, end: endConnector } : undefined;\n}\n","import { useEffect, useEffectEvent, useMemo } from \"react\";\n\nimport { PresetSelect } from \"../preset-select\";\n\nimport { createPeriodSelectOptions, isPeriodSelectOptionDisabled, resolvePeriodSelectAvailableValue, type PeriodSelectOption } from \"./lib\";\n\nimport type { UiBaseProps } from \"../types\";\nimport type { DateRangeInput } from \"@ryuzaki13/react-foundation-lib/formatters\";\n\nexport interface PeriodSelectProps extends UiBaseProps<PeriodSelectOption[\"id\"] | undefined> {\n\toptions?: readonly PeriodSelectOption[];\n\tdateRange?: DateRangeInput;\n\tmaxDayRangeDays?: number;\n\tmaxWeekRangeWeeks?: number;\n}\n\n/**\n * Select периода детализации, который может ограничивать доступные варианты по диапазону дат.\n */\nexport function PeriodSelect({ value, onChange, options, dateRange, maxDayRangeDays, maxWeekRangeWeeks, ...props }: PeriodSelectProps) {\n\tconst resolvedOptions = useMemo(\n\t\t() => options ?? createPeriodSelectOptions({ maxDayRangeDays, maxWeekRangeWeeks }),\n\t\t[maxDayRangeDays, maxWeekRangeWeeks, options]\n\t);\n\tconst availableValue = useMemo(\n\t\t() => resolvePeriodSelectAvailableValue(value, resolvedOptions, dateRange),\n\t\t[dateRange, resolvedOptions, value]\n\t);\n\n\tconst emitAvailableValue = useEffectEvent(() => {\n\t\tif (availableValue === undefined || availableValue === value) {\n\t\t\treturn;\n\t\t}\n\n\t\tonChange(availableValue);\n\t});\n\n\tuseEffect(() => {\n\t\temitAvailableValue();\n\t}, [availableValue, value]);\n\n\treturn (\n\t\t<PresetSelect\n\t\t\t{...props}\n\t\t\toptions={resolvedOptions}\n\t\t\tvalue={availableValue}\n\t\t\tonChange={onChange}\n\t\t\tgetOptionDisabled={(option) => isPeriodSelectOptionDisabled(option, dateRange)}\n\t\t/>\n\t);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/period-select/lib/constants.ts","../../src/period-select/lib/periodSelect.ts","../../src/period-select/PeriodSelect.tsx"],"sourcesContent":["export const PERIOD_SELECT_COMPONENT_ID = \"period-select\";\n","import {\n\tcountCalendarDaysInDateRange,\n\ttype DateRangeInput,\n\tnormalizeText,\n\ttoPositiveInteger\n} from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport { getPresetOption, normalizePresetIds, type PresetOption, resolvePresetOptionsByIds } from \"@ryuzaki13/react-foundation-lib/presets\";\nimport { isRecord } from \"@ryuzaki13/react-foundation-lib/validators\";\n\n/**\n * Идентификаторы встроенных уровней детализации периода.\n */\nexport type PeriodSelectPresetId = \"day\" | \"week\" | \"month\" | \"year\";\nexport type PeriodSelectId = PeriodSelectPresetId | (string & {});\n\nexport interface PeriodSelectOption extends PresetOption<PeriodSelectId> {\n\tmaxRangeDays?: number;\n}\n\ntype BuiltInPeriodSelectOption = PeriodSelectOption & {\n\tid: PeriodSelectPresetId;\n};\n\nexport type PeriodSelectDateRangeConnectors = Readonly<{\n\tstart: string;\n\tend: string;\n}>;\n\nexport type PeriodSelectThresholds = {\n\tmaxDayRangeDays?: number;\n\tmaxWeekRangeWeeks?: number;\n};\n\nexport const DEFAULT_PERIOD_SELECT_PRESET_ID = \"day\" satisfies PeriodSelectPresetId;\nexport const DEFAULT_PERIOD_SELECT_MAX_DAY_RANGE_DAYS = 31;\nexport const DEFAULT_PERIOD_SELECT_MAX_WEEK_RANGE_WEEKS = 26;\n\n/**\n * Канонический каталог встроенных вариантов. Порядок элементов задает порядок\n * отображения и автоматического перехода к следующему доступному уровню.\n */\nexport const PERIOD_SELECT_OPTIONS: readonly BuiltInPeriodSelectOption[] = Object.freeze([\n\t{\n\t\tid: \"day\",\n\t\tlabel: \"по дням\"\n\t},\n\t{\n\t\tid: \"week\",\n\t\tlabel: \"по неделям\"\n\t},\n\t{\n\t\tid: \"month\",\n\t\tlabel: \"по месяцам\"\n\t},\n\t{\n\t\tid: \"year\",\n\t\tlabel: \"по годам\"\n\t}\n]);\n\n/**\n * Полный набор встроенных вариантов, доступный при отсутствии явного allow-list.\n */\nexport const DEFAULT_PERIOD_SELECT_PRESET_IDS = Object.freeze([\n\t\"day\",\n\t\"week\",\n\t\"month\",\n\t\"year\"\n] as const satisfies readonly PeriodSelectPresetId[]);\n\nconst PERIOD_SELECT_PRESET_ID_SET: ReadonlySet<string> = new Set(PERIOD_SELECT_OPTIONS.map((option) => option.id));\n\nexport function isPeriodSelectPresetId(value: unknown): value is PeriodSelectPresetId {\n\treturn typeof value === \"string\" && PERIOD_SELECT_PRESET_ID_SET.has(value);\n}\n\nexport function normalizePeriodSelectPresetIds(\n\tvalue: unknown,\n\tfallbackIds: readonly PeriodSelectPresetId[] = DEFAULT_PERIOD_SELECT_PRESET_IDS\n): PeriodSelectPresetId[] {\n\tconst normalizedIds = normalizePresetIds(value, isPeriodSelectPresetId, fallbackIds);\n\tconst resolvedIds = normalizedIds.length > 0 ? normalizedIds : DEFAULT_PERIOD_SELECT_PRESET_IDS;\n\tconst resolvedIdSet = new Set<PeriodSelectPresetId>(resolvedIds);\n\n\t// Порядок runtime-опций является частью контракта: конфигурация только ограничивает\n\t// каталог и не может переставить уровни либо оставить контрол без вариантов.\n\treturn DEFAULT_PERIOD_SELECT_PRESET_IDS.filter((presetId) => resolvedIdSet.has(presetId));\n}\n\nexport function resolvePeriodSelectOptionsByIds(\n\tpresetIds: readonly PeriodSelectOption[\"id\"][],\n\toptions: readonly PeriodSelectOption[] = PERIOD_SELECT_OPTIONS\n): PeriodSelectOption[] {\n\treturn resolvePresetOptionsByIds(presetIds, options);\n}\n\nexport function getPeriodSelectOption(\n\tid: PeriodSelectOption[\"id\"] | undefined,\n\toptions: readonly PeriodSelectOption[] = PERIOD_SELECT_OPTIONS\n): PeriodSelectOption | null {\n\treturn getPresetOption(id, options);\n}\n\nexport function resolvePeriodSelectDefaultValue(value: unknown): PeriodSelectPresetId {\n\treturn isPeriodSelectPresetId(value) ? value : DEFAULT_PERIOD_SELECT_PRESET_ID;\n}\n\nexport function createPeriodSelectOptions({ maxDayRangeDays, maxWeekRangeWeeks }: PeriodSelectThresholds = {}): PeriodSelectOption[] {\n\tconst dayLimit = toPositiveInteger(maxDayRangeDays);\n\tconst weekLimit = toPositiveInteger(maxWeekRangeWeeks);\n\n\treturn PERIOD_SELECT_OPTIONS.map((option) => {\n\t\tif (option.id === \"day\" && dayLimit !== undefined) {\n\t\t\treturn {\n\t\t\t\t...option,\n\t\t\t\tmaxRangeDays: dayLimit\n\t\t\t};\n\t\t}\n\n\t\tif (option.id === \"week\" && weekLimit !== undefined) {\n\t\t\treturn {\n\t\t\t\t...option,\n\t\t\t\tmaxRangeDays: weekLimit * 7\n\t\t\t};\n\t\t}\n\n\t\treturn { ...option };\n\t});\n}\n\nexport function isPeriodSelectOptionDisabled(option: PeriodSelectOption, dateRange: DateRangeInput | undefined): boolean {\n\tconst maxRangeDays = toPositiveInteger(option.maxRangeDays);\n\tif (maxRangeDays === undefined || dateRange === undefined) {\n\t\treturn false;\n\t}\n\n\tconst rangeDays = countCalendarDaysInDateRange(dateRange);\n\treturn rangeDays !== null && rangeDays > maxRangeDays;\n}\n\nexport function resolvePeriodSelectAvailableValue(\n\tvalue: PeriodSelectOption[\"id\"] | undefined,\n\toptions: readonly PeriodSelectOption[],\n\tdateRange: DateRangeInput | undefined\n): PeriodSelectOption[\"id\"] | undefined {\n\tif (options.length === 0) {\n\t\treturn undefined;\n\t}\n\n\tconst selectedIndex = value === undefined ? -1 : options.findIndex((option) => option.id === value);\n\tconst selectedOption = selectedIndex >= 0 ? options[selectedIndex] : undefined;\n\n\tif (selectedOption && !isPeriodSelectOptionDisabled(selectedOption, dateRange)) {\n\t\treturn selectedOption.id;\n\t}\n\n\tconst nextOptions = selectedIndex >= 0 ? options.slice(selectedIndex + 1) : options;\n\tconst nextAvailableOption = nextOptions.find((option) => !isPeriodSelectOptionDisabled(option, dateRange));\n\n\treturn nextAvailableOption?.id ?? options.find((option) => !isPeriodSelectOptionDisabled(option, dateRange))?.id;\n}\n\nexport function normalizePeriodSelectDateRangeConnectors(value: unknown): PeriodSelectDateRangeConnectors | undefined {\n\tif (!isRecord(value)) {\n\t\treturn undefined;\n\t}\n\n\tconst startConnector = normalizeText(value.start);\n\tconst endConnector = normalizeText(value.end);\n\n\treturn startConnector && endConnector ? { start: startConnector, end: endConnector } : undefined;\n}\n","import { useEffect, useEffectEvent, useMemo, useRef } from \"react\";\n\nimport { PresetSelect } from \"../preset-select\";\n\nimport {\n\tcreatePeriodSelectOptions,\n\tisPeriodSelectOptionDisabled,\n\tnormalizePeriodSelectPresetIds,\n\tresolvePeriodSelectAvailableValue,\n\tresolvePeriodSelectOptionsByIds,\n\ttype PeriodSelectOption,\n\ttype PeriodSelectPresetId\n} from \"./lib\";\n\nimport type { UiBaseProps } from \"../types\";\nimport type { DateRangeInput } from \"@ryuzaki13/react-foundation-lib/formatters\";\n\nexport interface PeriodSelectProps extends UiBaseProps<PeriodSelectOption[\"id\"] | undefined> {\n\toptions?: readonly PeriodSelectOption[];\n\t/**\n\t * Разрешенные встроенные варианты периода. Значение нормализуется в канонический\n\t * порядок, а пустой либо невалидный список безопасно заменяется полным набором.\n\t * Не применяется, когда передан собственный `options`.\n\t */\n\tpresetIds?: readonly PeriodSelectPresetId[];\n\tdateRange?: DateRangeInput;\n\tmaxDayRangeDays?: number;\n\tmaxWeekRangeWeeks?: number;\n}\n\n/**\n * Select периода детализации, который может ограничивать доступные варианты по диапазону дат.\n */\nexport function PeriodSelect({\n\tvalue,\n\tonChange,\n\toptions,\n\tpresetIds,\n\tdateRange,\n\tmaxDayRangeDays,\n\tmaxWeekRangeWeeks,\n\t...props\n}: PeriodSelectProps) {\n\tconst resolvedOptions = useMemo(\n\t\t() =>\n\t\t\toptions ??\n\t\t\tresolvePeriodSelectOptionsByIds(\n\t\t\t\tnormalizePeriodSelectPresetIds(presetIds),\n\t\t\t\tcreatePeriodSelectOptions({ maxDayRangeDays, maxWeekRangeWeeks })\n\t\t\t),\n\t\t[maxDayRangeDays, maxWeekRangeWeeks, options, presetIds]\n\t);\n\tconst availableValue = useMemo(\n\t\t() => resolvePeriodSelectAvailableValue(value, resolvedOptions, dateRange),\n\t\t[dateRange, resolvedOptions, value]\n\t);\n\tconst lastEmittedTransitionRef = useRef<{\n\t\tvalue: PeriodSelectOption[\"id\"] | undefined;\n\t\tavailableValue: PeriodSelectOption[\"id\"] | undefined;\n\t} | null>(null);\n\n\tconst emitAvailableValue = useEffectEvent(() => {\n\t\tif (availableValue === undefined || availableValue === value) {\n\t\t\t// После принятия controlled-значения либо временной блокировки всех опций\n\t\t\t// такой же переход должен снова стать допустимым при следующем изменении условий.\n\t\t\tlastEmittedTransitionRef.current = null;\n\t\t\treturn;\n\t\t}\n\n\t\tconst lastTransition = lastEmittedTransitionRef.current;\n\t\tif (lastTransition && lastTransition.value === value && lastTransition.availableValue === availableValue) {\n\t\t\treturn;\n\t\t}\n\n\t\tlastEmittedTransitionRef.current = { value, availableValue };\n\n\t\t// Сигнатура перехода защищает reconciliation от повтора в React StrictMode.\n\t\t// При временной блокировке всех опций внешний controlled-id сохраняется,\n\t\t// поэтому выбор восстановится без потери runtime-параметра после смены диапазона.\n\t\tonChange(availableValue);\n\t});\n\n\tuseEffect(() => {\n\t\temitAvailableValue();\n\t}, [availableValue, value]);\n\n\treturn (\n\t\t<PresetSelect\n\t\t\t{...props}\n\t\t\toptions={resolvedOptions}\n\t\t\tvalue={availableValue}\n\t\t\tonChange={onChange}\n\t\t\tgetOptionDisabled={(option) => isPeriodSelectOptionDisabled(option, dateRange)}\n\t\t/>\n\t);\n}\n"],"mappings":"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"}
@@ -1,6 +1,9 @@
1
1
  import { type DateRangeInput } from "@ryuzaki13/react-foundation-lib/formatters";
2
2
  import { type PresetOption } from "@ryuzaki13/react-foundation-lib/presets";
3
- export type PeriodSelectPresetId = "day" | "week" | "month";
3
+ /**
4
+ * Идентификаторы встроенных уровней детализации периода.
5
+ */
6
+ export type PeriodSelectPresetId = "day" | "week" | "month" | "year";
4
7
  export type PeriodSelectId = PeriodSelectPresetId | (string & {});
5
8
  export interface PeriodSelectOption extends PresetOption<PeriodSelectId> {
6
9
  maxRangeDays?: number;
@@ -19,8 +22,15 @@ export type PeriodSelectThresholds = {
19
22
  export declare const DEFAULT_PERIOD_SELECT_PRESET_ID = "day";
20
23
  export declare const DEFAULT_PERIOD_SELECT_MAX_DAY_RANGE_DAYS = 31;
21
24
  export declare const DEFAULT_PERIOD_SELECT_MAX_WEEK_RANGE_WEEKS = 26;
25
+ /**
26
+ * Канонический каталог встроенных вариантов. Порядок элементов задает порядок
27
+ * отображения и автоматического перехода к следующему доступному уровню.
28
+ */
22
29
  export declare const PERIOD_SELECT_OPTIONS: readonly BuiltInPeriodSelectOption[];
23
- export declare const DEFAULT_PERIOD_SELECT_PRESET_IDS: readonly ["day", "week", "month"];
30
+ /**
31
+ * Полный набор встроенных вариантов, доступный при отсутствии явного allow-list.
32
+ */
33
+ export declare const DEFAULT_PERIOD_SELECT_PRESET_IDS: readonly ["day", "week", "month", "year"];
24
34
  export declare function isPeriodSelectPresetId(value: unknown): value is PeriodSelectPresetId;
25
35
  export declare function normalizePeriodSelectPresetIds(value: unknown, fallbackIds?: readonly PeriodSelectPresetId[]): PeriodSelectPresetId[];
26
36
  export declare function resolvePeriodSelectOptionsByIds(presetIds: readonly PeriodSelectOption["id"][], options?: readonly PeriodSelectOption[]): PeriodSelectOption[];
@@ -1 +1 @@
1
- {"version":3,"file":"periodSelect.d.ts","sourceRoot":"","sources":["../../../src/period-select/lib/periodSelect.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,cAAc,EAGnB,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAuC,KAAK,YAAY,EAA6B,MAAM,yCAAyC,CAAC;AAG5I,MAAM,MAAM,oBAAoB,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;AAC5D,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElE,MAAM,WAAW,kBAAmB,SAAQ,YAAY,CAAC,cAAc,CAAC;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,KAAK,yBAAyB,GAAG,kBAAkB,GAAG;IACrD,EAAE,EAAE,oBAAoB,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG,QAAQ,CAAC;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACZ,CAAC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,eAAO,MAAM,+BAA+B,QAAuC,CAAC;AACpF,eAAO,MAAM,wCAAwC,KAAK,CAAC;AAC3D,eAAO,MAAM,0CAA0C,KAAK,CAAC;AAE7D,eAAO,MAAM,qBAAqB,EAAE,SAAS,yBAAyB,EAapE,CAAC;AAEH,eAAO,MAAM,gCAAgC,mCAA6F,CAAC;AAI3I,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,oBAAoB,CAEpF;AAED,wBAAgB,8BAA8B,CAC7C,KAAK,EAAE,OAAO,EACd,WAAW,GAAE,SAAS,oBAAoB,EAAqC,GAC7E,oBAAoB,EAAE,CAExB;AAED,wBAAgB,+BAA+B,CAC9C,SAAS,EAAE,SAAS,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAC9C,OAAO,GAAE,SAAS,kBAAkB,EAA0B,GAC5D,kBAAkB,EAAE,CAEtB;AAED,wBAAgB,qBAAqB,CACpC,EAAE,EAAE,kBAAkB,CAAC,IAAI,CAAC,GAAG,SAAS,EACxC,OAAO,GAAE,SAAS,kBAAkB,EAA0B,GAC5D,kBAAkB,GAAG,IAAI,CAE3B;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,CAEpF;AAED,wBAAgB,yBAAyB,CAAC,EAAE,eAAe,EAAE,iBAAiB,EAAE,GAAE,sBAA2B,GAAG,kBAAkB,EAAE,CAqBnI;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,kBAAkB,EAAE,SAAS,EAAE,cAAc,GAAG,SAAS,GAAG,OAAO,CAQvH;AAED,wBAAgB,iCAAiC,CAChD,KAAK,EAAE,kBAAkB,CAAC,IAAI,CAAC,GAAG,SAAS,EAC3C,OAAO,EAAE,SAAS,kBAAkB,EAAE,EACtC,SAAS,EAAE,cAAc,GAAG,SAAS,GACnC,kBAAkB,CAAC,IAAI,CAAC,GAAG,SAAS,CAgBtC;AAED,wBAAgB,wCAAwC,CAAC,KAAK,EAAE,OAAO,GAAG,+BAA+B,GAAG,SAAS,CASpH"}
1
+ {"version":3,"file":"periodSelect.d.ts","sourceRoot":"","sources":["../../../src/period-select/lib/periodSelect.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,cAAc,EAGnB,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAuC,KAAK,YAAY,EAA6B,MAAM,yCAAyC,CAAC;AAG5I;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AACrE,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElE,MAAM,WAAW,kBAAmB,SAAQ,YAAY,CAAC,cAAc,CAAC;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,KAAK,yBAAyB,GAAG,kBAAkB,GAAG;IACrD,EAAE,EAAE,oBAAoB,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG,QAAQ,CAAC;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACZ,CAAC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,eAAO,MAAM,+BAA+B,QAAuC,CAAC;AACpF,eAAO,MAAM,wCAAwC,KAAK,CAAC;AAC3D,eAAO,MAAM,0CAA0C,KAAK,CAAC;AAE7D;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,yBAAyB,EAiBpE,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,gCAAgC,2CAKQ,CAAC;AAItD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,oBAAoB,CAEpF;AAED,wBAAgB,8BAA8B,CAC7C,KAAK,EAAE,OAAO,EACd,WAAW,GAAE,SAAS,oBAAoB,EAAqC,GAC7E,oBAAoB,EAAE,CAQxB;AAED,wBAAgB,+BAA+B,CAC9C,SAAS,EAAE,SAAS,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAC9C,OAAO,GAAE,SAAS,kBAAkB,EAA0B,GAC5D,kBAAkB,EAAE,CAEtB;AAED,wBAAgB,qBAAqB,CACpC,EAAE,EAAE,kBAAkB,CAAC,IAAI,CAAC,GAAG,SAAS,EACxC,OAAO,GAAE,SAAS,kBAAkB,EAA0B,GAC5D,kBAAkB,GAAG,IAAI,CAE3B;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,CAEpF;AAED,wBAAgB,yBAAyB,CAAC,EAAE,eAAe,EAAE,iBAAiB,EAAE,GAAE,sBAA2B,GAAG,kBAAkB,EAAE,CAqBnI;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,kBAAkB,EAAE,SAAS,EAAE,cAAc,GAAG,SAAS,GAAG,OAAO,CAQvH;AAED,wBAAgB,iCAAiC,CAChD,KAAK,EAAE,kBAAkB,CAAC,IAAI,CAAC,GAAG,SAAS,EAC3C,OAAO,EAAE,SAAS,kBAAkB,EAAE,EACtC,SAAS,EAAE,cAAc,GAAG,SAAS,GACnC,kBAAkB,CAAC,IAAI,CAAC,GAAG,SAAS,CAgBtC;AAED,wBAAgB,wCAAwC,CAAC,KAAK,EAAE,OAAO,GAAG,+BAA+B,GAAG,SAAS,CASpH"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ryuzaki13/react-foundation-ui",
3
- "version": "1.1.4",
3
+ "version": "1.1.6",
4
4
  "description": "Reusable React foundation UI primitives and Storybook stories.",
5
5
  "license": "MIT",
6
6
  "author": "Ryuzaki13",
@@ -483,7 +483,7 @@
483
483
  "@testing-library/dom": "^10.4.1",
484
484
  "@testing-library/react": "^16.3.2",
485
485
  "@testing-library/user-event": "^14.6.1",
486
- "@types/node": "^26.1.1",
486
+ "@types/node": "^22.0.0",
487
487
  "@types/react": "^19.2.17",
488
488
  "@types/react-dom": "^19.2.3",
489
489
  "@vitejs/plugin-react": "^6.0.3",
@@ -513,7 +513,7 @@
513
513
  "zustand": "^5.0.14"
514
514
  },
515
515
  "engines": {
516
- "node": ">=24.0.0"
516
+ "node": ">=22.0.0"
517
517
  },
518
518
  "release": {
519
519
  "branches": [
@@ -1,4 +1,4 @@
1
- import{i as e}from"./preload-helper-B45gAKPr.js";import{E as t,a as n,d as r,f as i,l as a,m as o,n as s,p as c,r as l,u}from"./blocks-CWdkXPAf.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-CmEvmtFH.js";import{Appearances as p,Basic as m,RemovableList as h,Sizes as g,Tones as _,n as v,t as y}from"./Badge.stories-BfCBagHU.js";function b(e){let o={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...t(),...e.components};return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(a,{of:y,parameters:{atomicCanvas:!0,layout:`padded`,docs:{toc:!0}}}),`
1
+ import{i as e}from"./preload-helper-B45gAKPr.js";import{E as t,a as n,d as r,f as i,l as a,m as o,n as s,p as c,r as l,u}from"./blocks-xFhW5LuA.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-C4qR84IJ.js";import{Appearances as p,Basic as m,RemovableList as h,Sizes as g,Tones as _,n as v,t as y}from"./Badge.stories-C0FRO6mR.js";function b(e){let o={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...t(),...e.components};return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(a,{of:y,parameters:{atomicCanvas:!0,layout:`padded`,docs:{toc:!0}}}),`
2
2
  `,(0,S.jsx)(c,{children:`Badge`}),`
3
3
  `,(0,S.jsx)(i,{children:`Компактная текстовая метка для статусов, категорий, фильтров и коротких служебных пометок`}),`
4
4
  `,(0,S.jsx)(o.p,{children:`Badge подходит для коротких подписей, которые должны быстро читаться и не перегружать интерфейс:`}),`
@@ -1,4 +1,4 @@
1
- import{a as e,c as t,i as n}from"./preload-helper-B45gAKPr.js";import{C as r}from"./iframe-m0QwbmMJ.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{a,i as o}from"./utils-CV_FgKe9.js";import{o as s,t as c}from"./lucide-react-CLUPuimx.js";import{n as l,t as u}from"./text-Cg4cjrW7.js";import{i as d,n as f,r as p,t as m}from"./uiClasses-CaHp0EWd.js";import{o as h}from"./Flex-BkWF7h5z.js";import{t as g}from"./flex-D9b-dBgG.js";var _,v,y,b,x,S,C,w,T,E,D=n((()=>{_=`qBtmnH`,v=`p-HsHY`,y=`u9tQAE`,b=`FRScRz`,x=`W13uQO`,S=`_3IRcM9`,C=`R3ybI7`,w=`DdWAaC`,T=`_5cXBQF`,E={badge:_,passive:v,sizeXs:y,sizeSm:b,sizeMd:x,sizeLg:S,sizeXl:C,content:w,removeButton:T}}));function O({children:e,size:t=`sm`,tone:n,appearance:r,className:i,onRemove:o}){let c=n??`neutral`,u=d({tone:n,appearance:r,fallbackTone:c,fallbackAppearance:c===`neutral`?`outline`:`solid`});return(0,k.jsxs)(`div`,{className:a(E.badge,A[t],f(u.tone),m(u.appearance),!o&&E.passive,i),children:[(0,k.jsx)(l,{maxChar:25,placement:`top`,block:!0,textWrapProps:{className:E.content},children:String(e)}),o&&(0,k.jsx)(`button`,{type:`button`,onClick:o,className:E.removeButton,"aria-label":`Удалить бейдж`,"data-ui":`badge-remove-button`,"data-action":`remove-badge`,children:(0,k.jsx)(s,{})})]})}var k,A,j=n((()=>{o(),c(),u(),p(),D(),k=i(),A={xs:E.sizeXs,sm:E.sizeSm,md:E.sizeMd,lg:E.sizeLg,xl:E.sizeXl},O.__docgenInfo={description:`Компактный индикатор для статусов, категорий и коротких служебных меток.`,methods:[],displayName:`Badge`,props:{children:{required:!0,tsType:{name:`union`,raw:`string | number`,elements:[{name:`string`},{name:`number`}]},description:``},size:{required:!1,tsType:{name:`union`,raw:`"xs" | "sm" | "md" | "lg" | "xl"`,elements:[{name:`literal`,value:`"xs"`},{name:`literal`,value:`"sm"`},{name:`literal`,value:`"md"`},{name:`literal`,value:`"lg"`},{name:`literal`,value:`"xl"`}]},description:``,defaultValue:{value:`"sm"`,computed:!1}},tone:{required:!1,tsType:{name:`union`,raw:`"neutral" | "error" | "warning" | "success" | "info"`,elements:[{name:`literal`,value:`"neutral"`},{name:`literal`,value:`"error"`},{name:`literal`,value:`"warning"`},{name:`literal`,value:`"success"`},{name:`literal`,value:`"info"`}]},description:``},appearance:{required:!1,tsType:{name:`union`,raw:`"solid" | "outline" | "ghost" | "transparent"`,elements:[{name:`literal`,value:`"solid"`},{name:`literal`,value:`"outline"`},{name:`literal`,value:`"ghost"`},{name:`literal`,value:`"transparent"`}]},description:``},className:{required:!1,tsType:{name:`string`},description:``},onRemove:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``}}}}));function M({children:e}){return(0,P.jsx)(h,{inline:!0,wrap:!0,gap:`sm`,align:`baseline`,children:N.Children.map(e,(e,t)=>(0,P.jsx)(N.Fragment,{children:e},t))})}var N,P,F=n((()=>{N=t(r(),1),g(),P=i(),M.__docgenInfo={description:"Контейнер для группы `Badge`, который выстраивает элементы в единый список с предсказуемыми отступами. Используется для компактного вывода набора меток или фильтров.",methods:[],displayName:`BadgeList`,props:{children:{required:!0,tsType:{name:`Array`,elements:[{name:`ReactElement`,elements:[{name:`union`,raw:`typeof Badge | null | undefined | false`,elements:[{name:`Badge`},{name:`null`},{name:`undefined`},{name:`literal`,value:`false`}]}],raw:`ReactElement<typeof Badge | null | undefined | false>`}],raw:`ReactElement<typeof Badge | null | undefined | false>[]`},description:``}}}})),I=e({Appearances:()=>H,Basic:()=>B,RemovableList:()=>W,Sizes:()=>U,Tones:()=>V,__namedExportsOrder:()=>G,default:()=>z}),L,R,z,B,V,H,U,W,G,K=n((()=>{L=t(r(),1),j(),F(),R=i(),z={title:`Shared/UI/Badge`,component:O,args:{children:`Новый`,size:`md`,tone:`info`,appearance:`solid`},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{children:{description:`Текст внутри бейджа.`,control:`text`},size:{description:`Размер бейджа.`,control:`inline-radio`,options:[`sm`,`md`,`lg`]},tone:{description:`Семантический тон бейджа.`,control:`inline-radio`,options:[`neutral`,`success`,`warning`,`error`,`info`]},appearance:{description:`Форма бейджа.`,control:`inline-radio`,options:[`solid`,`outline`,`ghost`,`transparent`]},onRemove:{description:`Показывает кнопку удаления и вызывает обработчик по клику.`,control:!1},className:{description:`Дополнительный CSS-класс контейнера.`,control:`text`}}},B={},V={render:()=>(0,R.jsxs)(M,{children:[(0,R.jsx)(O,{tone:`neutral`,appearance:`outline`,children:`Neutral`}),(0,R.jsx)(O,{tone:`success`,appearance:`solid`,children:`Успешно`}),(0,R.jsx)(O,{tone:`warning`,appearance:`solid`,children:`Внимание`}),(0,R.jsx)(O,{tone:`error`,appearance:`solid`,children:`Ошибка`}),(0,R.jsx)(O,{tone:`info`,appearance:`solid`,children:`Информация`})]})},H={render:()=>(0,R.jsxs)(M,{children:[(0,R.jsx)(O,{tone:`neutral`,appearance:`solid`,children:`Solid`}),(0,R.jsx)(O,{tone:`neutral`,appearance:`outline`,children:`Outline`}),(0,R.jsx)(O,{tone:`info`,appearance:`ghost`,children:`Ghost`}),(0,R.jsx)(O,{tone:`warning`,appearance:`transparent`,children:`Transparent`})]})},U={render:()=>(0,R.jsxs)(M,{children:[(0,R.jsx)(O,{size:`xs`,children:`Extra Small`}),(0,R.jsx)(O,{size:`sm`,children:`Small`}),(0,R.jsx)(O,{size:`md`,children:`Medium`}),(0,R.jsx)(O,{size:`lg`,children:`Large`}),(0,R.jsx)(O,{size:`xl`,children:`Extra Large`})]})},W={render:()=>{let[e,t]=(0,L.useState)([`Фильтр A`,`Фильтр B`,`Фильтр C`]);return(0,R.jsx)(M,{children:e.map(e=>(0,R.jsx)(O,{tone:`info`,appearance:`outline`,onRemove:()=>t(t=>t.filter(t=>t!==e)),children:e},e))})}},B.parameters={...B.parameters,docs:{...B.parameters?.docs,source:{originalSource:`{}`,...B.parameters?.docs?.source}}},V.parameters={...V.parameters,docs:{...V.parameters?.docs,source:{originalSource:`{
1
+ import{a as e,c as t,i as n}from"./preload-helper-B45gAKPr.js";import{C as r}from"./iframe-DflW120b.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{a,i as o}from"./utils-G8NqhJFu.js";import{o as s,t as c}from"./lucide-react-VWiBigaj.js";import{n as l,t as u}from"./text-C1j_wRlP.js";import{i as d,n as f,r as p,t as m}from"./uiClasses-CaHp0EWd.js";import{o as h}from"./Flex-DMLdHG7d.js";import{t as g}from"./flex-BsIB-Bk2.js";var _,v,y,b,x,S,C,w,T,E,D=n((()=>{_=`qBtmnH`,v=`p-HsHY`,y=`u9tQAE`,b=`FRScRz`,x=`W13uQO`,S=`_3IRcM9`,C=`R3ybI7`,w=`DdWAaC`,T=`_5cXBQF`,E={badge:_,passive:v,sizeXs:y,sizeSm:b,sizeMd:x,sizeLg:S,sizeXl:C,content:w,removeButton:T}}));function O({children:e,size:t=`sm`,tone:n,appearance:r,className:i,onRemove:o}){let c=n??`neutral`,u=d({tone:n,appearance:r,fallbackTone:c,fallbackAppearance:c===`neutral`?`outline`:`solid`});return(0,k.jsxs)(`div`,{className:a(E.badge,A[t],f(u.tone),m(u.appearance),!o&&E.passive,i),children:[(0,k.jsx)(l,{maxChar:25,placement:`top`,block:!0,textWrapProps:{className:E.content},children:String(e)}),o&&(0,k.jsx)(`button`,{type:`button`,onClick:o,className:E.removeButton,"aria-label":`Удалить бейдж`,"data-ui":`badge-remove-button`,"data-action":`remove-badge`,children:(0,k.jsx)(s,{})})]})}var k,A,j=n((()=>{o(),c(),u(),p(),D(),k=i(),A={xs:E.sizeXs,sm:E.sizeSm,md:E.sizeMd,lg:E.sizeLg,xl:E.sizeXl},O.__docgenInfo={description:`Компактный индикатор для статусов, категорий и коротких служебных меток.`,methods:[],displayName:`Badge`,props:{children:{required:!0,tsType:{name:`union`,raw:`string | number`,elements:[{name:`string`},{name:`number`}]},description:``},size:{required:!1,tsType:{name:`union`,raw:`"xs" | "sm" | "md" | "lg" | "xl"`,elements:[{name:`literal`,value:`"xs"`},{name:`literal`,value:`"sm"`},{name:`literal`,value:`"md"`},{name:`literal`,value:`"lg"`},{name:`literal`,value:`"xl"`}]},description:``,defaultValue:{value:`"sm"`,computed:!1}},tone:{required:!1,tsType:{name:`union`,raw:`"neutral" | "error" | "warning" | "success" | "info"`,elements:[{name:`literal`,value:`"neutral"`},{name:`literal`,value:`"error"`},{name:`literal`,value:`"warning"`},{name:`literal`,value:`"success"`},{name:`literal`,value:`"info"`}]},description:``},appearance:{required:!1,tsType:{name:`union`,raw:`"solid" | "outline" | "ghost" | "transparent"`,elements:[{name:`literal`,value:`"solid"`},{name:`literal`,value:`"outline"`},{name:`literal`,value:`"ghost"`},{name:`literal`,value:`"transparent"`}]},description:``},className:{required:!1,tsType:{name:`string`},description:``},onRemove:{required:!1,tsType:{name:`signature`,type:`function`,raw:`() => void`,signature:{arguments:[],return:{name:`void`}}},description:``}}}}));function M({children:e}){return(0,P.jsx)(h,{inline:!0,wrap:!0,gap:`sm`,align:`baseline`,children:N.Children.map(e,(e,t)=>(0,P.jsx)(N.Fragment,{children:e},t))})}var N,P,F=n((()=>{N=t(r(),1),g(),P=i(),M.__docgenInfo={description:"Контейнер для группы `Badge`, который выстраивает элементы в единый список с предсказуемыми отступами. Используется для компактного вывода набора меток или фильтров.",methods:[],displayName:`BadgeList`,props:{children:{required:!0,tsType:{name:`Array`,elements:[{name:`ReactElement`,elements:[{name:`union`,raw:`typeof Badge | null | undefined | false`,elements:[{name:`Badge`},{name:`null`},{name:`undefined`},{name:`literal`,value:`false`}]}],raw:`ReactElement<typeof Badge | null | undefined | false>`}],raw:`ReactElement<typeof Badge | null | undefined | false>[]`},description:``}}}})),I=e({Appearances:()=>H,Basic:()=>B,RemovableList:()=>W,Sizes:()=>U,Tones:()=>V,__namedExportsOrder:()=>G,default:()=>z}),L,R,z,B,V,H,U,W,G,K=n((()=>{L=t(r(),1),j(),F(),R=i(),z={title:`Shared/UI/Badge`,component:O,args:{children:`Новый`,size:`md`,tone:`info`,appearance:`solid`},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{children:{description:`Текст внутри бейджа.`,control:`text`},size:{description:`Размер бейджа.`,control:`inline-radio`,options:[`sm`,`md`,`lg`]},tone:{description:`Семантический тон бейджа.`,control:`inline-radio`,options:[`neutral`,`success`,`warning`,`error`,`info`]},appearance:{description:`Форма бейджа.`,control:`inline-radio`,options:[`solid`,`outline`,`ghost`,`transparent`]},onRemove:{description:`Показывает кнопку удаления и вызывает обработчик по клику.`,control:!1},className:{description:`Дополнительный CSS-класс контейнера.`,control:`text`}}},B={},V={render:()=>(0,R.jsxs)(M,{children:[(0,R.jsx)(O,{tone:`neutral`,appearance:`outline`,children:`Neutral`}),(0,R.jsx)(O,{tone:`success`,appearance:`solid`,children:`Успешно`}),(0,R.jsx)(O,{tone:`warning`,appearance:`solid`,children:`Внимание`}),(0,R.jsx)(O,{tone:`error`,appearance:`solid`,children:`Ошибка`}),(0,R.jsx)(O,{tone:`info`,appearance:`solid`,children:`Информация`})]})},H={render:()=>(0,R.jsxs)(M,{children:[(0,R.jsx)(O,{tone:`neutral`,appearance:`solid`,children:`Solid`}),(0,R.jsx)(O,{tone:`neutral`,appearance:`outline`,children:`Outline`}),(0,R.jsx)(O,{tone:`info`,appearance:`ghost`,children:`Ghost`}),(0,R.jsx)(O,{tone:`warning`,appearance:`transparent`,children:`Transparent`})]})},U={render:()=>(0,R.jsxs)(M,{children:[(0,R.jsx)(O,{size:`xs`,children:`Extra Small`}),(0,R.jsx)(O,{size:`sm`,children:`Small`}),(0,R.jsx)(O,{size:`md`,children:`Medium`}),(0,R.jsx)(O,{size:`lg`,children:`Large`}),(0,R.jsx)(O,{size:`xl`,children:`Extra Large`})]})},W={render:()=>{let[e,t]=(0,L.useState)([`Фильтр A`,`Фильтр B`,`Фильтр C`]);return(0,R.jsx)(M,{children:e.map(e=>(0,R.jsx)(O,{tone:`info`,appearance:`outline`,onRemove:()=>t(t=>t.filter(t=>t!==e)),children:e},e))})}},B.parameters={...B.parameters,docs:{...B.parameters?.docs,source:{originalSource:`{}`,...B.parameters?.docs?.source}}},V.parameters={...V.parameters,docs:{...V.parameters?.docs,source:{originalSource:`{
2
2
  render: () => <BadgeList>
3
3
  <Badge tone="neutral" appearance="outline">
4
4
  Neutral
@@ -1,4 +1,4 @@
1
- import{i as e}from"./preload-helper-B45gAKPr.js";import{E as t,a as n,d as r,f as i,l as a,m as o,n as s,p as c,r as l,u}from"./blocks-CWdkXPAf.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-CmEvmtFH.js";import{Basic as p,ComposableScheme as m,Variants as h,WithIcons as g,n as _,t as v}from"./Button.stories-DilF6LrK.js";function y(e){let o={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...t(),...e.components};return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(a,{of:v,parameters:{atomicCanvas:!0,layout:`padded`,docs:{toc:!0}}}),`
1
+ import{i as e}from"./preload-helper-B45gAKPr.js";import{E as t,a as n,d as r,f as i,l as a,m as o,n as s,p as c,r as l,u}from"./blocks-xFhW5LuA.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-C4qR84IJ.js";import{Basic as p,ComposableScheme as m,Variants as h,WithIcons as g,n as _,t as v}from"./Button.stories-wRxT1tys.js";function y(e){let o={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...t(),...e.components};return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(a,{of:v,parameters:{atomicCanvas:!0,layout:`padded`,docs:{toc:!0}}}),`
2
2
  `,(0,x.jsx)(c,{children:`Button`}),`
3
3
  `,(0,x.jsx)(i,{children:`Базовая action-кнопка дизайн-системы для пользовательских действий, подтверждений и быстрых операций`}),`
4
4
  `,(0,x.jsxs)(o.p,{children:[(0,x.jsx)(o.code,{children:`Button`}),` используется как универсальная кнопка интерфейса: в формах, тулбарах, модальных окнах, карточках, таблицах и компактных icon-only сценариях.`]}),`
@@ -1,4 +1,4 @@
1
- import{c as e,i as t}from"./preload-helper-B45gAKPr.js";import{C as n}from"./iframe-m0QwbmMJ.js";import{t as r}from"./jsx-runtime-BBQGix-2.js";import{a as i,i as a}from"./utils-CV_FgKe9.js";import{n as o,t as s}from"./popover-CbcUGKOy.js";import{n as c,t as l}from"./ui.module-wFHXkJzp.js";import{i as u,n as d,r as f,t as p}from"./uiClasses-CaHp0EWd.js";var m,h,g,_,v,y=t((()=>{m=`wLOHwj`,h=`lFsM-Y`,g=`LPob63`,_=`tsaGtv`,v={button:m,iconOnly:h,buttonInner:g,buttonIcon:_}})),b,x,S,C=t((()=>{b=e(n(),1),a(),s(),l(),f(),y(),x=r(),S=(0,b.forwardRef)(function({children:e,disabled:t,className:n,icon:r,iconEnd:a,title:s,variant:l,tone:f,appearance:m,type:h=`button`,"aria-label":g,..._},y){let S=b.Children.count(e)>0,C=!!r&&!S,w=u({variant:l,tone:f,appearance:m,fallbackAppearance:f&&f!==`neutral`?`solid`:`outline`}),T=C?g??s:g,E=(0,x.jsx)(`button`,{..._,ref:y,type:h,disabled:t,"aria-label":T,className:i(c.uiElement,c.uiInputControl,v.button,d(w.tone),p(w.appearance),C?v.iconOnly:``,`textNoWrap`,n??``),children:(0,x.jsxs)(`span`,{className:v.buttonInner,children:[r&&!a&&(0,x.jsx)(`span`,{"aria-hidden":`true`,className:v.buttonIcon,children:r}),S&&(0,x.jsx)(`span`,{className:`flexEllipsis`,children:e}),r&&a&&(0,x.jsx)(`span`,{"aria-hidden":`true`,className:v.buttonIcon,children:r})]})});return s?(0,x.jsx)(o,{placement:`bottom`,tooltip:!0,content:(0,x.jsx)(x.Fragment,{children:s}),children:E}):E}),S.__docgenInfo={description:'Базовая кнопка дизайн-системы для пользовательских действий.\nПоддерживает состояния, tone + appearance, иконки и безопасный `type="button"` по умолчанию.',methods:[],displayName:`Button`,props:{variant:{required:!1,tsType:{name:`union`,raw:`| "transparent"
1
+ import{c as e,i as t}from"./preload-helper-B45gAKPr.js";import{C as n}from"./iframe-DflW120b.js";import{t as r}from"./jsx-runtime-BBQGix-2.js";import{a as i,i as a}from"./utils-G8NqhJFu.js";import{n as o,t as s}from"./popover-DrE0FDTT.js";import{n as c,t as l}from"./ui.module-wFHXkJzp.js";import{i as u,n as d,r as f,t as p}from"./uiClasses-CaHp0EWd.js";var m,h,g,_,v,y=t((()=>{m=`wLOHwj`,h=`lFsM-Y`,g=`LPob63`,_=`tsaGtv`,v={button:m,iconOnly:h,buttonInner:g,buttonIcon:_}})),b,x,S,C=t((()=>{b=e(n(),1),a(),s(),l(),f(),y(),x=r(),S=(0,b.forwardRef)(function({children:e,disabled:t,className:n,icon:r,iconEnd:a,title:s,variant:l,tone:f,appearance:m,type:h=`button`,"aria-label":g,..._},y){let S=b.Children.count(e)>0,C=!!r&&!S,w=u({variant:l,tone:f,appearance:m,fallbackAppearance:f&&f!==`neutral`?`solid`:`outline`}),T=C?g??s:g,E=(0,x.jsx)(`button`,{..._,ref:y,type:h,disabled:t,"aria-label":T,className:i(c.uiElement,c.uiInputControl,v.button,d(w.tone),p(w.appearance),C?v.iconOnly:``,`textNoWrap`,n??``),children:(0,x.jsxs)(`span`,{className:v.buttonInner,children:[r&&!a&&(0,x.jsx)(`span`,{"aria-hidden":`true`,className:v.buttonIcon,children:r}),S&&(0,x.jsx)(`span`,{className:`flexEllipsis`,children:e}),r&&a&&(0,x.jsx)(`span`,{"aria-hidden":`true`,className:v.buttonIcon,children:r})]})});return s?(0,x.jsx)(o,{placement:`bottom`,tooltip:!0,content:(0,x.jsx)(x.Fragment,{children:s}),children:E}):E}),S.__docgenInfo={description:'Базовая кнопка дизайн-системы для пользовательских действий.\nПоддерживает состояния, tone + appearance, иконки и безопасный `type="button"` по умолчанию.',methods:[],displayName:`Button`,props:{variant:{required:!1,tsType:{name:`union`,raw:`| "transparent"
2
2
  | "ghost"
3
3
  | "neutral"
4
4
  | "error"
@@ -1,4 +1,4 @@
1
- import{a as e,i as t}from"./preload-helper-B45gAKPr.js";import{t as n}from"./jsx-runtime-BBQGix-2.js";import{J as r,Mt as i,t as a,w as o,wt as s}from"./lucide-react-CLUPuimx.js";import{n as c,t as l}from"./Button-D0l3oLtE.js";var u=e({Basic:()=>m,ComposableScheme:()=>g,Variants:()=>h,WithIcons:()=>_,__namedExportsOrder:()=>v,default:()=>p}),d,f,p,m,h,g,_,v,y=t((()=>{a(),c(),d=n(),{fn:f}=__STORYBOOK_MODULE_TEST__,p={title:`Shared/UI/Button`,component:l,args:{children:`Действие`,variant:`neutralOutline`,disabled:!1,iconEnd:!1,onClick:f()},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{children:{description:`Текстовое содержимое кнопки.`,control:`text`},variant:{description:"Готовая схема для обратной совместимости. Если заданы `tone` или `appearance`, они имеют приоритет.",control:`select`,options:[`neutral`,`neutralOutline`,`ghost`,`error`,`warning`,`success`,`info`,`errorOutline`,`warningOutline`,`successOutline`,`infoOutline`,`transparent`]},tone:{description:`Семантический тон кнопки.`,control:`inline-radio`,options:[`neutral`,`error`,`warning`,`success`,`info`]},appearance:{description:`Визуальная форма кнопки.`,control:`inline-radio`,options:[`solid`,`outline`,`ghost`,`transparent`]},icon:{description:`Иконка слева или справа от текста.`,control:!1},iconEnd:{description:`Перемещает иконку в конец кнопки.`,control:`boolean`},title:{description:"Текст тултипа и `aria-label` для кнопки.",control:`text`},disabled:{description:`Блокирует нажатие.`,control:`boolean`},onClick:{description:`Вызывается при нажатии на кнопку.`,control:!1},className:{description:`Дополнительный CSS-класс.`,control:`text`}}},m={},h={render:()=>(0,d.jsxs)(`div`,{style:{display:`grid`,gap:12,gridTemplateColumns:`repeat(auto-fit, minmax(180px, 1fr))`},children:[(0,d.jsx)(l,{variant:`neutral`,children:`Neutral Solid`}),(0,d.jsx)(l,{variant:`neutralOutline`,children:`Neutral Outline`}),(0,d.jsx)(l,{variant:`ghost`,children:`Ghost`}),(0,d.jsx)(l,{variant:`info`,children:`Info Solid`}),(0,d.jsx)(l,{variant:`success`,children:`Success Solid`}),(0,d.jsx)(l,{variant:`warning`,children:`Warning Solid`}),(0,d.jsx)(l,{variant:`error`,children:`Error Solid`}),(0,d.jsx)(l,{variant:`infoOutline`,children:`Info Outline`}),(0,d.jsx)(l,{variant:`successOutline`,children:`Success Outline`}),(0,d.jsx)(l,{variant:`warningOutline`,children:`Warning Outline`}),(0,d.jsx)(l,{variant:`errorOutline`,children:`Error Outline`}),(0,d.jsx)(l,{variant:`transparent`,children:`Transparent`})]}),args:{children:`Действие`}},g={render:()=>(0,d.jsxs)(`div`,{style:{display:`grid`,gap:12,gridTemplateColumns:`repeat(auto-fit, minmax(180px, 1fr))`},children:[(0,d.jsx)(l,{tone:`neutral`,appearance:`solid`,children:`Neutral Solid`}),(0,d.jsx)(l,{tone:`neutral`,appearance:`outline`,children:`Neutral Outline`}),(0,d.jsx)(l,{tone:`neutral`,appearance:`ghost`,children:`Neutral Ghost`}),(0,d.jsx)(l,{tone:`info`,appearance:`outline`,children:`Info Outline`}),(0,d.jsx)(l,{tone:`success`,appearance:`solid`,children:`Success Solid`}),(0,d.jsx)(l,{tone:`error`,appearance:`transparent`,children:`Error Transparent`})]})},_={render:()=>(0,d.jsxs)(`div`,{style:{display:`flex`,gap:12,flexWrap:`wrap`},children:[(0,d.jsx)(l,{icon:(0,d.jsx)(r,{}),children:`Скачать`}),(0,d.jsx)(l,{icon:(0,d.jsx)(o,{}),tone:`info`,appearance:`solid`,children:`Создать`}),(0,d.jsx)(l,{icon:(0,d.jsx)(s,{}),iconEnd:!0,tone:`success`,appearance:`solid`,children:`Подтвердить`}),(0,d.jsx)(l,{icon:(0,d.jsx)(i,{}),title:`Уведомления`})]}),args:{children:`Действие`}},m.parameters={...m.parameters,docs:{...m.parameters?.docs,source:{originalSource:`{
1
+ import{a as e,i as t}from"./preload-helper-B45gAKPr.js";import{t as n}from"./jsx-runtime-BBQGix-2.js";import{J as r,Mt as i,t as a,w as o,wt as s}from"./lucide-react-VWiBigaj.js";import{n as c,t as l}from"./Button-DBvM6sOi.js";var u=e({Basic:()=>m,ComposableScheme:()=>g,Variants:()=>h,WithIcons:()=>_,__namedExportsOrder:()=>v,default:()=>p}),d,f,p,m,h,g,_,v,y=t((()=>{a(),c(),d=n(),{fn:f}=__STORYBOOK_MODULE_TEST__,p={title:`Shared/UI/Button`,component:l,args:{children:`Действие`,variant:`neutralOutline`,disabled:!1,iconEnd:!1,onClick:f()},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{children:{description:`Текстовое содержимое кнопки.`,control:`text`},variant:{description:"Готовая схема для обратной совместимости. Если заданы `tone` или `appearance`, они имеют приоритет.",control:`select`,options:[`neutral`,`neutralOutline`,`ghost`,`error`,`warning`,`success`,`info`,`errorOutline`,`warningOutline`,`successOutline`,`infoOutline`,`transparent`]},tone:{description:`Семантический тон кнопки.`,control:`inline-radio`,options:[`neutral`,`error`,`warning`,`success`,`info`]},appearance:{description:`Визуальная форма кнопки.`,control:`inline-radio`,options:[`solid`,`outline`,`ghost`,`transparent`]},icon:{description:`Иконка слева или справа от текста.`,control:!1},iconEnd:{description:`Перемещает иконку в конец кнопки.`,control:`boolean`},title:{description:"Текст тултипа и `aria-label` для кнопки.",control:`text`},disabled:{description:`Блокирует нажатие.`,control:`boolean`},onClick:{description:`Вызывается при нажатии на кнопку.`,control:!1},className:{description:`Дополнительный CSS-класс.`,control:`text`}}},m={},h={render:()=>(0,d.jsxs)(`div`,{style:{display:`grid`,gap:12,gridTemplateColumns:`repeat(auto-fit, minmax(180px, 1fr))`},children:[(0,d.jsx)(l,{variant:`neutral`,children:`Neutral Solid`}),(0,d.jsx)(l,{variant:`neutralOutline`,children:`Neutral Outline`}),(0,d.jsx)(l,{variant:`ghost`,children:`Ghost`}),(0,d.jsx)(l,{variant:`info`,children:`Info Solid`}),(0,d.jsx)(l,{variant:`success`,children:`Success Solid`}),(0,d.jsx)(l,{variant:`warning`,children:`Warning Solid`}),(0,d.jsx)(l,{variant:`error`,children:`Error Solid`}),(0,d.jsx)(l,{variant:`infoOutline`,children:`Info Outline`}),(0,d.jsx)(l,{variant:`successOutline`,children:`Success Outline`}),(0,d.jsx)(l,{variant:`warningOutline`,children:`Warning Outline`}),(0,d.jsx)(l,{variant:`errorOutline`,children:`Error Outline`}),(0,d.jsx)(l,{variant:`transparent`,children:`Transparent`})]}),args:{children:`Действие`}},g={render:()=>(0,d.jsxs)(`div`,{style:{display:`grid`,gap:12,gridTemplateColumns:`repeat(auto-fit, minmax(180px, 1fr))`},children:[(0,d.jsx)(l,{tone:`neutral`,appearance:`solid`,children:`Neutral Solid`}),(0,d.jsx)(l,{tone:`neutral`,appearance:`outline`,children:`Neutral Outline`}),(0,d.jsx)(l,{tone:`neutral`,appearance:`ghost`,children:`Neutral Ghost`}),(0,d.jsx)(l,{tone:`info`,appearance:`outline`,children:`Info Outline`}),(0,d.jsx)(l,{tone:`success`,appearance:`solid`,children:`Success Solid`}),(0,d.jsx)(l,{tone:`error`,appearance:`transparent`,children:`Error Transparent`})]})},_={render:()=>(0,d.jsxs)(`div`,{style:{display:`flex`,gap:12,flexWrap:`wrap`},children:[(0,d.jsx)(l,{icon:(0,d.jsx)(r,{}),children:`Скачать`}),(0,d.jsx)(l,{icon:(0,d.jsx)(o,{}),tone:`info`,appearance:`solid`,children:`Создать`}),(0,d.jsx)(l,{icon:(0,d.jsx)(s,{}),iconEnd:!0,tone:`success`,appearance:`solid`,children:`Подтвердить`}),(0,d.jsx)(l,{icon:(0,d.jsx)(i,{}),title:`Уведомления`})]}),args:{children:`Действие`}},m.parameters={...m.parameters,docs:{...m.parameters?.docs,source:{originalSource:`{
2
2
  // play: async function ({ args, canvas, userEvent }) {
3
3
  // const button = canvas.getByRole("button", { name: /button/i });
4
4
  // // 👇 Simulate behavior
@@ -1,4 +1,4 @@
1
- import{i as e}from"./preload-helper-B45gAKPr.js";import{E as t,a as n,d as r,f as i,l as a,m as o,n as s,p as c,r as l,u}from"./blocks-CWdkXPAf.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-CmEvmtFH.js";import{Controlled as p,Disabled as m,Sizes as h,Tones as g,n as _,t as v}from"./CheckBox.stories-B07ze4Wr.js";function y(e){let o={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...t(),...e.components};return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(a,{of:v,parameters:{docs:{toc:!0}}}),`
1
+ import{i as e}from"./preload-helper-B45gAKPr.js";import{E as t,a as n,d as r,f as i,l as a,m as o,n as s,p as c,r as l,u}from"./blocks-xFhW5LuA.js";import{t as d}from"./jsx-runtime-BBQGix-2.js";import{t as f}from"./mdx-react-shim-C4qR84IJ.js";import{Controlled as p,Disabled as m,Sizes as h,Tones as g,n as _,t as v}from"./CheckBox.stories-BsgDlKB1.js";function y(e){let o={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...t(),...e.components};return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(a,{of:v,parameters:{docs:{toc:!0}}}),`
2
2
  `,(0,x.jsx)(c,{children:`CheckBox`}),`
3
3
  `,(0,x.jsx)(i,{children:`Флажок для булевых полей с общими UI-схемами tone и appearance`}),`
4
4
  `,(0,x.jsx)(o.p,{children:`CheckBox уже имеет живые stories, а эта страница собирает их в структурированную документацию с краткими рекомендациями, примерами подключения и API.
@@ -1,2 +1,2 @@
1
- import{c as e,i as t}from"./preload-helper-B45gAKPr.js";import{C as n}from"./iframe-m0QwbmMJ.js";import{t as r}from"./jsx-runtime-BBQGix-2.js";import{a as i,i as a}from"./utils-CV_FgKe9.js";import{g as o,t as s}from"./lucide-react-CLUPuimx.js";import{n as c,t as l}from"./ui.module-wFHXkJzp.js";import{n as u,r as d}from"./uiClasses-CaHp0EWd.js";import{n as f,t as p}from"./CheckBox.module-Hr3mvdAC.js";function m({label:e,description:t,placeholder:n,disabled:r,size:a,className:s,onChange:l,value:d,noWrap:f,id:m,tone:_=`neutral`,...v}){let y=(0,h.useId)(),b=m??y,x=t?`${b}-description`:void 0,S=e??n,C=d??!1;return(0,g.jsxs)(`div`,{className:i(c.uiElement,a&&c.uiSizable,a&&c[a],r&&c.disabled,s),"aria-disabled":r||void 0,children:[(0,g.jsxs)(`div`,{className:p.row,children:[(0,g.jsxs)(`div`,{className:i(p.wrapper,u(_)),children:[(0,g.jsx)(`input`,{...v,id:b,type:`checkbox`,checked:C,disabled:r,"aria-checked":C,"aria-describedby":x,className:i(c.uiSelectionControl,p.input),onChange:()=>l?.(!C)}),(0,g.jsx)(`div`,{className:i(c.uiSelectionIcon,p.icon),"aria-hidden":`true`,children:(0,g.jsx)(o,{})})]}),S&&(0,g.jsx)(`label`,{htmlFor:b,className:i(c.uiLabelBase,f&&`textNoWrap`),children:S})]}),t&&(0,g.jsx)(`p`,{id:x,className:c.uiDescription,children:t})]})}var h,g,_=t((()=>{h=e(n(),1),a(),s(),l(),d(),f(),g=r(),m.__docgenInfo={description:`Компонент флажка для выбора булевого значения в формах и списках.
1
+ import{c as e,i as t}from"./preload-helper-B45gAKPr.js";import{C as n}from"./iframe-DflW120b.js";import{t as r}from"./jsx-runtime-BBQGix-2.js";import{a as i,i as a}from"./utils-G8NqhJFu.js";import{g as o,t as s}from"./lucide-react-VWiBigaj.js";import{n as c,t as l}from"./ui.module-wFHXkJzp.js";import{n as u,r as d}from"./uiClasses-CaHp0EWd.js";import{n as f,t as p}from"./CheckBox.module-Hr3mvdAC.js";function m({label:e,description:t,placeholder:n,disabled:r,size:a,className:s,onChange:l,value:d,noWrap:f,id:m,tone:_=`neutral`,...v}){let y=(0,h.useId)(),b=m??y,x=t?`${b}-description`:void 0,S=e??n,C=d??!1;return(0,g.jsxs)(`div`,{className:i(c.uiElement,a&&c.uiSizable,a&&c[a],r&&c.disabled,s),"aria-disabled":r||void 0,children:[(0,g.jsxs)(`div`,{className:p.row,children:[(0,g.jsxs)(`div`,{className:i(p.wrapper,u(_)),children:[(0,g.jsx)(`input`,{...v,id:b,type:`checkbox`,checked:C,disabled:r,"aria-checked":C,"aria-describedby":x,className:i(c.uiSelectionControl,p.input),onChange:()=>l?.(!C)}),(0,g.jsx)(`div`,{className:i(c.uiSelectionIcon,p.icon),"aria-hidden":`true`,children:(0,g.jsx)(o,{})})]}),S&&(0,g.jsx)(`label`,{htmlFor:b,className:i(c.uiLabelBase,f&&`textNoWrap`),children:S})]}),t&&(0,g.jsx)(`p`,{id:x,className:c.uiDescription,children:t})]})}var h,g,_=t((()=>{h=e(n(),1),a(),s(),l(),d(),f(),g=r(),m.__docgenInfo={description:`Компонент флажка для выбора булевого значения в формах и списках.
2
2
  Поддерживает tone + appearance и использует общие selection utility-классы из ui.module.scss.`,methods:[],displayName:`CheckBox`,props:{label:{required:!1,tsType:{name:`ReactNode`},description:``},description:{required:!1,tsType:{name:`string`},description:``},placeholder:{required:!1,tsType:{name:`string`},description:``},disabled:{required:!1,tsType:{name:`boolean`},description:``},size:{required:!1,tsType:{name:`union`,raw:`"xs" | "sm" | "md" | "lg" | "xl"`,elements:[{name:`literal`,value:`"xs"`},{name:`literal`,value:`"sm"`},{name:`literal`,value:`"md"`},{name:`literal`,value:`"lg"`},{name:`literal`,value:`"xl"`}]},description:``},value:{required:!0,tsType:{name:`V`},description:"Если начальное состояние может быть `null | undefined`\nзначит `onChange` тоже должен ументь сбрасывать.\nПоэтому такой контрол явно должен передавать `UiBaseProps<AnyType | undefined>`"},onChange:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(value: T) => void`,signature:{arguments:[{type:{name:`C`},name:`value`}],return:{name:`void`}}},description:``},tone:{required:!1,tsType:{name:`union`,raw:`"neutral" | "error" | "warning" | "success" | "info"`,elements:[{name:`literal`,value:`"neutral"`},{name:`literal`,value:`"error"`},{name:`literal`,value:`"warning"`},{name:`literal`,value:`"success"`},{name:`literal`,value:`"info"`}]},description:``,defaultValue:{value:`"neutral"`,computed:!1}},noWrap:{required:!1,tsType:{name:`boolean`},description:``}},composes:[`Omit`]}}));export{_ as n,m as t};
@@ -1,4 +1,4 @@
1
- import{a as e,c as t,i as n}from"./preload-helper-B45gAKPr.js";import{C as r}from"./iframe-m0QwbmMJ.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{n as a,t as o}from"./CheckBox-d9nyYsIy.js";var s=e({Controlled:()=>d,Disabled:()=>m,Sizes:()=>p,Tones:()=>f,__namedExportsOrder:()=>h,default:()=>u}),c,l,u,d,f,p,m,h,g=n((()=>{c=t(r(),1),a(),l=i(),u={title:`Shared/UI/CheckBox`,component:o,args:{value:!1,onChange:()=>{}},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{label:{description:`Текст основной подписи чекбокса.`,control:`text`},description:{description:`Дополнительное описание под элементом.`,control:`text`},placeholder:{description:"Текст подписи, если `label` не задан.",control:`text`},value:{description:`Текущее состояние чекбокса.`,control:`boolean`},onChange:{description:`Вызывается при изменении состояния.`,control:!1},disabled:{description:`Блокирует взаимодействие с элементом.`,control:`boolean`},size:{description:`Размер визуального контрола и текста.`,control:`select`,options:[`xs`,`sm`,`md`,`lg`,`xl`]},tone:{description:`Семантический тон чекбокса.`,control:`inline-radio`,options:[`neutral`,`error`,`warning`,`success`,`info`]}}},d={render:e=>{let[t,n]=(0,c.useState)(e.value??!1);return(0,l.jsx)(o,{...e,value:t,onChange:n})},args:{label:`Принимать условия`,description:`Подтверждение условий использования сервиса.`,value:!1,size:`md`,disabled:!1,tone:`neutral`}},f={render:()=>{let[e,t]=(0,c.useState)({neutral:!0,info:!0,success:!0,warning:!0,error:!0});return(0,l.jsx)(`div`,{style:{display:`grid`,gap:12},children:[`neutral`,`info`,`success`,`warning`,`error`].map(n=>(0,l.jsx)(o,{tone:n,label:`Тон ${n}`,value:e[n],onChange:e=>t(t=>({...t,[n]:e}))},n))})}},p={render:()=>{let[e,t]=(0,c.useState)({xs:!1,sm:!0,md:!1,lg:!0,xl:!1});return(0,l.jsx)(`div`,{style:{display:`grid`,gap:12},children:[`xs`,`sm`,`md`,`lg`,`xl`].map(n=>(0,l.jsx)(o,{size:n,label:`Размер ${n}`,value:e[n],onChange:e=>t(t=>({...t,[n]:e}))},n))})}},m={args:{label:`Недоступный чекбокс`,description:`Изменение недоступно из-за прав доступа.`,value:!0,disabled:!0,tone:`neutral`}},d.parameters={...d.parameters,docs:{...d.parameters?.docs,source:{originalSource:`{
1
+ import{a as e,c as t,i as n}from"./preload-helper-B45gAKPr.js";import{C as r}from"./iframe-DflW120b.js";import{t as i}from"./jsx-runtime-BBQGix-2.js";import{n as a,t as o}from"./CheckBox-B2PYacPl.js";var s=e({Controlled:()=>d,Disabled:()=>m,Sizes:()=>p,Tones:()=>f,__namedExportsOrder:()=>h,default:()=>u}),c,l,u,d,f,p,m,h,g=n((()=>{c=t(r(),1),a(),l=i(),u={title:`Shared/UI/CheckBox`,component:o,args:{value:!1,onChange:()=>{}},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{label:{description:`Текст основной подписи чекбокса.`,control:`text`},description:{description:`Дополнительное описание под элементом.`,control:`text`},placeholder:{description:"Текст подписи, если `label` не задан.",control:`text`},value:{description:`Текущее состояние чекбокса.`,control:`boolean`},onChange:{description:`Вызывается при изменении состояния.`,control:!1},disabled:{description:`Блокирует взаимодействие с элементом.`,control:`boolean`},size:{description:`Размер визуального контрола и текста.`,control:`select`,options:[`xs`,`sm`,`md`,`lg`,`xl`]},tone:{description:`Семантический тон чекбокса.`,control:`inline-radio`,options:[`neutral`,`error`,`warning`,`success`,`info`]}}},d={render:e=>{let[t,n]=(0,c.useState)(e.value??!1);return(0,l.jsx)(o,{...e,value:t,onChange:n})},args:{label:`Принимать условия`,description:`Подтверждение условий использования сервиса.`,value:!1,size:`md`,disabled:!1,tone:`neutral`}},f={render:()=>{let[e,t]=(0,c.useState)({neutral:!0,info:!0,success:!0,warning:!0,error:!0});return(0,l.jsx)(`div`,{style:{display:`grid`,gap:12},children:[`neutral`,`info`,`success`,`warning`,`error`].map(n=>(0,l.jsx)(o,{tone:n,label:`Тон ${n}`,value:e[n],onChange:e=>t(t=>({...t,[n]:e}))},n))})}},p={render:()=>{let[e,t]=(0,c.useState)({xs:!1,sm:!0,md:!1,lg:!0,xl:!1});return(0,l.jsx)(`div`,{style:{display:`grid`,gap:12},children:[`xs`,`sm`,`md`,`lg`,`xl`].map(n=>(0,l.jsx)(o,{size:n,label:`Размер ${n}`,value:e[n],onChange:e=>t(t=>({...t,[n]:e}))},n))})}},m={args:{label:`Недоступный чекбокс`,description:`Изменение недоступно из-за прав доступа.`,value:!0,disabled:!0,tone:`neutral`}},d.parameters={...d.parameters,docs:{...d.parameters?.docs,source:{originalSource:`{
2
2
  render: args => {
3
3
  const [value, setValue] = useState(args.value ?? false);
4
4
  return <CheckBox {...args} value={value} onChange={setValue} />;