@ryuzaki13/react-foundation-ui 1.10.1 → 1.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (268) hide show
  1. package/dist/advanced-search/index.js +1 -1
  2. package/dist/base-table/index.js +1 -1
  3. package/dist/chunks/{base-table-BNtd1xSl.js → base-table-CClQop2i.js} +2 -2
  4. package/dist/chunks/{base-table-BNtd1xSl.js.map → base-table-CClQop2i.js.map} +1 -1
  5. package/dist/chunks/{context-menu-CCAr_R-t.js → context-menu-HC7Vteb5.js} +66 -59
  6. package/dist/chunks/context-menu-HC7Vteb5.js.map +1 -0
  7. package/dist/chunks/{table-C3sKpYHL.js → table-ZPWbKoR-.js} +2 -2
  8. package/dist/chunks/{table-C3sKpYHL.js.map → table-ZPWbKoR-.js.map} +1 -1
  9. package/dist/context-menu/components/ContextMenuTrigger.d.ts +2 -0
  10. package/dist/context-menu/components/ContextMenuTrigger.d.ts.map +1 -1
  11. package/dist/context-menu/components/MenuContext.d.ts +2 -2
  12. package/dist/context-menu/components/MenuContext.d.ts.map +1 -1
  13. package/dist/context-menu/components/MenuRoot.d.ts.map +1 -1
  14. package/dist/context-menu/index.js +1 -1
  15. package/dist/simple-table/index.js +1 -1
  16. package/dist/table/index.js +1 -1
  17. package/dist/table-sorting/index.js +1 -1
  18. package/dist/tree-table/index.js +1 -1
  19. package/package.json +1 -1
  20. package/storybook-static/assets/{Badge-jMoGaWlH.js → Badge-Bmocdlmq.js} +1 -1
  21. package/storybook-static/assets/{Badge.stories-DCRYgiFn.js → Badge.stories-Dq22iAGc.js} +1 -1
  22. package/storybook-static/assets/{BadgeList-hUxkrQKk.js → BadgeList-Cf2yUv1u.js} +1 -1
  23. package/storybook-static/assets/{Button-BLZxiBx_.js → Button-BUk07f_S.js} +1 -1
  24. package/storybook-static/assets/{Button-CN90zPTE.js → Button-DQHgQZCq.js} +1 -1
  25. package/storybook-static/assets/{Button.stories-C3IDTh6L.js → Button.stories-4tFPDHfK.js} +1 -1
  26. package/storybook-static/assets/{CalendarView-Da3lEn5n.js → CalendarView-DQYsbm4g.js} +1 -1
  27. package/storybook-static/assets/{CheckBox-C88r1nU9.js → CheckBox-CLhfwAlH.js} +1 -1
  28. package/storybook-static/assets/{CheckBox-BDPsgkY9.js → CheckBox-CwRh9b03.js} +1 -1
  29. package/storybook-static/assets/{CheckBox.stories-CLL1W22k.js → CheckBox.stories-m5AGRWTh.js} +1 -1
  30. package/storybook-static/assets/{Color-6AOWCN3U-BeYazCuF.js → Color-6AOWCN3U-BT97ThGN.js} +1 -1
  31. package/storybook-static/assets/{ContextMenu-CEmrtmjw.js → ContextMenu-1Qwp2Dk8.js} +1 -1
  32. package/storybook-static/assets/ContextMenu-BgDahw7W.js +1 -0
  33. package/storybook-static/assets/{ContextMenu.stories-CJdQ3DxK.js → ContextMenu.stories-DTDQ8JRw.js} +1 -1
  34. package/storybook-static/assets/{CustomOptionButton-BlBnyItt.js → CustomOptionButton-DRSpQRg_.js} +1 -1
  35. package/storybook-static/assets/{DateInput-BOeTDc10.js → DateInput-BggMfSmA.js} +1 -1
  36. package/storybook-static/assets/{DateInput-BplJWRap.js → DateInput-Cp6xhtI3.js} +1 -1
  37. package/storybook-static/assets/{DateInput.stories-Dvsg67Q7.js → DateInput.stories-B-N5Y0hy.js} +1 -1
  38. package/storybook-static/assets/{DateRangePresetSelect-CQlubR_0.js → DateRangePresetSelect-BIXgqhm3.js} +1 -1
  39. package/storybook-static/assets/{DateRangePresetSelect-BNAtaJ9P.js → DateRangePresetSelect-DWPqA3yb.js} +1 -1
  40. package/storybook-static/assets/{DateRangePresetSelect.stories-iaVAJzrk.js → DateRangePresetSelect.stories-BWLmoEKH.js} +1 -1
  41. package/storybook-static/assets/{Detail-DDYBXrvC.js → Detail-BjruCzcN.js} +1 -1
  42. package/storybook-static/assets/{Detail.stories-DNRTPZcT.js → Detail.stories-DwJ3aW8_.js} +1 -1
  43. package/storybook-static/assets/{Dialog-_8-5uCF4.js → Dialog-0MGsluCV.js} +1 -1
  44. package/storybook-static/assets/{Dialog-D60NKiU7.js → Dialog-BvAqe0gX.js} +1 -1
  45. package/storybook-static/assets/{Dialog.stories-LMG0RjuL.js → Dialog.stories-B5Lx37As.js} +1 -1
  46. package/storybook-static/assets/{Disclosure-DTCWb38a.js → Disclosure-D4q6GuUV.js} +1 -1
  47. package/storybook-static/assets/{Disclosure.stories-D98Sqa6B.js → Disclosure.stories-DlzUmJUQ.js} +1 -1
  48. package/storybook-static/assets/{DisclosureGroup-rjsQrwwz.js → DisclosureGroup-DKik623a.js} +1 -1
  49. package/storybook-static/assets/{DocsRenderer-JROSPFPF-C8rtPh64.js → DocsRenderer-JROSPFPF-CWcb1DRR.js} +1 -1
  50. package/storybook-static/assets/{DropZone-Cc-Nr7qt.js → DropZone-XGiHG9SW.js} +1 -1
  51. package/storybook-static/assets/{DropZone-xZSakToS.js → DropZone-anfzi8dm.js} +1 -1
  52. package/storybook-static/assets/{DropZone.stories-BrNYMWdp.js → DropZone.stories-DJJ60MOp.js} +1 -1
  53. package/storybook-static/assets/{DropdownMenu-CKHgBr1G.js → DropdownMenu-JcsvtCfI.js} +1 -1
  54. package/storybook-static/assets/{ExpandableActionPanel-CaRPw6Wm.js → ExpandableActionPanel-Bs10HN-A.js} +1 -1
  55. package/storybook-static/assets/{ExpandableActionPanel.stories-D84EsMIi.js → ExpandableActionPanel.stories-jdXKbV2C.js} +1 -1
  56. package/storybook-static/assets/{Flex-ksn1ULug.js → Flex-VTK7hPbc.js} +1 -1
  57. package/storybook-static/assets/{Flex.stories-CImsjHxn.js → Flex.stories-Dk-dArHA.js} +1 -1
  58. package/storybook-static/assets/{FloatingPopover-Cmz412EM.js → FloatingPopover-Bdkmabj9.js} +1 -1
  59. package/storybook-static/assets/{FormattedTableCell-DIPPfMCP.js → FormattedTableCell-Do9NiavS.js} +1 -1
  60. package/storybook-static/assets/{Grid-COjPAy0V.js → Grid-Dd2vYRwB.js} +1 -1
  61. package/storybook-static/assets/{Grid.stories-DInra2zZ.js → Grid.stories-C46OA4mX.js} +1 -1
  62. package/storybook-static/assets/{ImageCropper.stories-BaN5T0Sj.js → ImageCropper.stories-CMi9hgfG.js} +1 -1
  63. package/storybook-static/assets/{ImageRenderer-BiX7KYHn.js → ImageRenderer-CTSioI7M.js} +1 -1
  64. package/storybook-static/assets/{ImageRenderer.stories-DRA0tvY5.js → ImageRenderer.stories-DBBOQIIJ.js} +1 -1
  65. package/storybook-static/assets/{ImageView.stories-DmgrraU8.js → ImageView.stories-CIevFKkS.js} +1 -1
  66. package/storybook-static/assets/{ImageViewer.stories-B1lcBTZL.js → ImageViewer.stories-YNYWn4Bm.js} +2 -2
  67. package/storybook-static/assets/{ImageViewerRuntime-Ba0P6JkW.js → ImageViewerRuntime-BOhXjUiB.js} +1 -1
  68. package/storybook-static/assets/{Input-DWaSzRT6.js → Input-DMnIZD0A.js} +1 -1
  69. package/storybook-static/assets/{Input-BE3ev4c3.js → Input-NQpoWTtN.js} +1 -1
  70. package/storybook-static/assets/{Input.stories-BwSh-rG5.js → Input.stories-DL4OuLQq.js} +1 -1
  71. package/storybook-static/assets/{InputDateTime-Bzcathpr.js → InputDateTime-BkrwE0eN.js} +1 -1
  72. package/storybook-static/assets/{InputDateTime.stories-BKSNyeGW.js → InputDateTime.stories-cfzBkOug.js} +1 -1
  73. package/storybook-static/assets/{InputFile-B1xshCl7.js → InputFile-BH8z42gA.js} +1 -1
  74. package/storybook-static/assets/{InputFile-BkcqAe9e.js → InputFile-C0GfBgah.js} +1 -1
  75. package/storybook-static/assets/{InputFile.stories-DNzDLdnM.js → InputFile.stories-DnIX3AC1.js} +1 -1
  76. package/storybook-static/assets/{InputFiles-Beh9VGnI.js → InputFiles-BYkZJb9A.js} +1 -1
  77. package/storybook-static/assets/{InputFiles-DoIpCwD8.js → InputFiles-Bf5645s-.js} +1 -1
  78. package/storybook-static/assets/{InputFiles.stories-D463o_2j.js → InputFiles.stories-DVIHMGIP.js} +1 -1
  79. package/storybook-static/assets/{InputFilesList-XBhxIwzm.js → InputFilesList-qpPFSFtG.js} +1 -1
  80. package/storybook-static/assets/{InputImage-DFOKaSvG.js → InputImage-CC3lb8gi.js} +1 -1
  81. package/storybook-static/assets/{InputImage-BxplZPLz.js → InputImage-_gvKkzWD.js} +1 -1
  82. package/storybook-static/assets/{InputImage.stories-9_4PdNVX.js → InputImage.stories-BgN8VFFS.js} +1 -1
  83. package/storybook-static/assets/{InteractiveComponents-gVX-Co65.js → InteractiveComponents-CgGBx8l1.js} +1 -1
  84. package/storybook-static/assets/{InteractiveComponents.stories-xGm6Qn3p.js → InteractiveComponents.stories-D7Wep_1W.js} +1 -1
  85. package/storybook-static/assets/{LayoutPicker-CAIUGlYR.js → LayoutPicker-CTD5g0Wu.js} +1 -1
  86. package/storybook-static/assets/{LayoutPicker-DyNgBEDt.js → LayoutPicker-DR5y1Myb.js} +1 -1
  87. package/storybook-static/assets/{LayoutPicker.stories-DjWIoqq_.js → LayoutPicker.stories-Dt7yQp6w.js} +1 -1
  88. package/storybook-static/assets/{Listbox-C1nug1gi.js → Listbox-C2RgETsr.js} +1 -1
  89. package/storybook-static/assets/{Listbox-DdUSWuvx.js → Listbox-CRXdkzAx.js} +1 -1
  90. package/storybook-static/assets/{Listbox.stories-CgXZhffL.js → Listbox.stories-45YthQmO.js} +1 -1
  91. package/storybook-static/assets/{Modal-C2JN8byf.js → Modal-BpcQFiJm.js} +1 -1
  92. package/storybook-static/assets/{Modal.stories-CEF1CDMw.js → Modal.stories-Il0VwPqg.js} +1 -1
  93. package/storybook-static/assets/{ModalManagerProvider-DpQegT4s.js → ModalManagerProvider-DLXe4U3x.js} +1 -1
  94. package/storybook-static/assets/{MultiSelect-4BySiqWq.js → MultiSelect-BD6mJ2vx.js} +1 -1
  95. package/storybook-static/assets/{MultiSelect-DI65H684.js → MultiSelect-Dxz8DA8o.js} +1 -1
  96. package/storybook-static/assets/{MultiSelect.stories-BMINO4tp.js → MultiSelect.stories-gkbGwBpe.js} +1 -1
  97. package/storybook-static/assets/{NoData-BF8QLM-6.js → NoData-Cl4UXZP6.js} +1 -1
  98. package/storybook-static/assets/{NotificationsHost-CoKBvP6W.js → NotificationsHost-B2vgz-sQ.js} +1 -1
  99. package/storybook-static/assets/{NotificationsHost.stories-ABBuJJZn.js → NotificationsHost.stories-7Fw9T4s4.js} +1 -1
  100. package/storybook-static/assets/{ODataMultiSelect-8jdLzrag.js → ODataMultiSelect-CGXrGRDW.js} +1 -1
  101. package/storybook-static/assets/{ODataMultiSelect.stories-Bbx2pEhr.js → ODataMultiSelect.stories-ppuz3Ivh.js} +1 -1
  102. package/storybook-static/assets/{ODataSelect-CCBMuL_6.js → ODataSelect-xKIjMIAt.js} +1 -1
  103. package/storybook-static/assets/{ODataSelect.stories-IRVdMUYS.js → ODataSelect.stories-laNLY7vk.js} +1 -1
  104. package/storybook-static/assets/{ODataTreeMultiSelect-CMYSul4g.js → ODataTreeMultiSelect-DFUONEUd.js} +1 -1
  105. package/storybook-static/assets/{ODataTreeMultiSelect.stories-B-7VuEMx.js → ODataTreeMultiSelect.stories-DKTkUiBW.js} +1 -1
  106. package/storybook-static/assets/{ODataTreeSelect-wABuQQ8m.js → ODataTreeSelect-J4u4Wsfe.js} +1 -1
  107. package/storybook-static/assets/{ODataTreeSelect.stories-B4PexyPP.js → ODataTreeSelect.stories-Drgf1o53.js} +1 -1
  108. package/storybook-static/assets/{OneStepScroller-Bsx2cAbW.js → OneStepScroller-hE3u2cmJ.js} +1 -1
  109. package/storybook-static/assets/{Option-Bi34xfha.js → Option-DhjNWSm2.js} +1 -1
  110. package/storybook-static/assets/{OptionButton-sAMQ-B-2.js → OptionButton-pWyuhK8d.js} +1 -1
  111. package/storybook-static/assets/{PeriodSelect-D8M2m7Ae.js → PeriodSelect-Clv23FEy.js} +1 -1
  112. package/storybook-static/assets/{PeriodSelect-DvbYBRp0.js → PeriodSelect-DKRTbhor.js} +1 -1
  113. package/storybook-static/assets/{PeriodSelect.stories-CF9om3YB.js → PeriodSelect.stories-BmMj08to.js} +1 -1
  114. package/storybook-static/assets/{PickerTriggerActions-DQ6Irt2H.js → PickerTriggerActions-l0pz64kI.js} +1 -1
  115. package/storybook-static/assets/{Popover-CoKI13TR.js → Popover-C6ma37U9.js} +1 -1
  116. package/storybook-static/assets/{Popover-Y5ZKg3I8.js → Popover-CgImrEnF.js} +1 -1
  117. package/storybook-static/assets/{Popover.stories-D8WTwZ-k.js → Popover.stories-pYPdoCie.js} +1 -1
  118. package/storybook-static/assets/{PresetRangeDateInput-C8-UkEaY.js → PresetRangeDateInput-BBTaxl7U.js} +1 -1
  119. package/storybook-static/assets/{PresetRangeDateInput-kYlehlXI.js → PresetRangeDateInput-BOz7K4tq.js} +1 -1
  120. package/storybook-static/assets/{PresetRangeDateInput.stories-Bw2Olt9n.js → PresetRangeDateInput.stories-DLm_xsNg.js} +1 -1
  121. package/storybook-static/assets/{PresetSelect-L0tuYJEl.js → PresetSelect-DVJNVQ0Y.js} +1 -1
  122. package/storybook-static/assets/{README-DZwnGvV1.js → README-9jx1x6qi.js} +1 -1
  123. package/storybook-static/assets/{README-gft7Uab5.js → README-B4Xr-JsN.js} +1 -1
  124. package/storybook-static/assets/{README-S2VOLhWx.js → README-B5rZ3QLJ.js} +1 -1
  125. package/storybook-static/assets/{README-CjqrGvr8.js → README-BDdVg3By.js} +1 -1
  126. package/storybook-static/assets/{README-C33_zdBH.js → README-BECvJlYF.js} +1 -1
  127. package/storybook-static/assets/{README-BVQt8mtd.js → README-BEjUSrTw.js} +1 -1
  128. package/storybook-static/assets/{README-CrYAH16i.js → README-BXKptrTk.js} +1 -1
  129. package/storybook-static/assets/{README-BXPXMULk.js → README-B_wGX6sN.js} +1 -1
  130. package/storybook-static/assets/{README-D13Q95J6.js → README-BfIVJh3-.js} +1 -1
  131. package/storybook-static/assets/{README-N9wZCeCb.js → README-Bgf6v4CI.js} +1 -1
  132. package/storybook-static/assets/{README-BxwHKa3w.js → README-Bmto4mN8.js} +1 -1
  133. package/storybook-static/assets/{README-BnVbW7Gs.js → README-CDlwnugz.js} +1 -1
  134. package/storybook-static/assets/{README-D5yuEPPv.js → README-CGRGUCj5.js} +1 -1
  135. package/storybook-static/assets/{README-B10YW1sd.js → README-CNkhkjA3.js} +1 -1
  136. package/storybook-static/assets/{README-BzHuSALx.js → README-CPbiCM44.js} +1 -1
  137. package/storybook-static/assets/{README-ChqY7Icu.js → README-CaQ_tDiK.js} +1 -1
  138. package/storybook-static/assets/{README-CHEiSVyW.js → README-CaYMYOLi.js} +1 -1
  139. package/storybook-static/assets/{README-Cab4zgqv.js → README-CgV2GMjt.js} +1 -1
  140. package/storybook-static/assets/{README-xgO81XJN.js → README-Cj1-wuG7.js} +1 -1
  141. package/storybook-static/assets/{README-DdW8haTK.js → README-CjvdkRtH.js} +1 -1
  142. package/storybook-static/assets/{README-Dp6_DOef.js → README-ClaZhzyO.js} +1 -1
  143. package/storybook-static/assets/{README-DlIoOZ58.js → README-Cs2RDVgN.js} +1 -1
  144. package/storybook-static/assets/{README-BrCC1uJU.js → README-CsE00A8j.js} +1 -1
  145. package/storybook-static/assets/{README-UELPBLbA.js → README-CsZEzBJP.js} +1 -1
  146. package/storybook-static/assets/{README-CO3dUhsD.js → README-CuS7_hvi.js} +1 -1
  147. package/storybook-static/assets/{README-CXPodKHT.js → README-D09eq_kv.js} +1 -1
  148. package/storybook-static/assets/{README-rfp-yzSZ.js → README-DDNwItD0.js} +1 -1
  149. package/storybook-static/assets/{README-CjCfW25k.js → README-DFI_0Xa-.js} +1 -1
  150. package/storybook-static/assets/{README-0xG00EW_.js → README-DNyQ5dAL.js} +1 -1
  151. package/storybook-static/assets/{README-Cyb-5mOG.js → README-DO_EutNH.js} +1 -1
  152. package/storybook-static/assets/{README-DBqfDDoK.js → README-DPhYvx9a.js} +1 -1
  153. package/storybook-static/assets/{README-BQsFSC9n.js → README-D_shHX2g.js} +1 -1
  154. package/storybook-static/assets/{README-BocI24Kg.js → README-DcN57PQO.js} +1 -1
  155. package/storybook-static/assets/{README-1v-Ux6-4.js → README-Dprsyjb3.js} +1 -1
  156. package/storybook-static/assets/{README-q3ocfiGy.js → README-DsKMlp5D.js} +1 -1
  157. package/storybook-static/assets/{README-NmcS3YJ6.js → README-DuSlk_Zw.js} +1 -1
  158. package/storybook-static/assets/{README-DrwiMWd7.js → README-DwJSX6TF.js} +1 -1
  159. package/storybook-static/assets/{README-BQ2U05OE.js → README-Dy8QkJy5.js} +1 -1
  160. package/storybook-static/assets/{README-DIa084ap.js → README-EYy5nk_J.js} +1 -1
  161. package/storybook-static/assets/{README-DvMUuU1d.js → README-EbWehfGJ.js} +1 -1
  162. package/storybook-static/assets/{README-CDufFsWQ.js → README-MPTR3r1B.js} +1 -1
  163. package/storybook-static/assets/{README-gpDcs_LH.js → README-PECG8BRh.js} +1 -1
  164. package/storybook-static/assets/{README-BN-M1WU0.js → README-UeQ6P9dU.js} +1 -1
  165. package/storybook-static/assets/{README-DSqT3qTl.js → README-bUo0Smq-.js} +1 -1
  166. package/storybook-static/assets/{README-CFpRXUWW.js → README-d4RlrI_M.js} +1 -1
  167. package/storybook-static/assets/{README-CmhWsQkb.js → README-emZYwvTg.js} +1 -1
  168. package/storybook-static/assets/{README-BPWfZ4-n.js → README-gKvDIeCq.js} +1 -1
  169. package/storybook-static/assets/{README-B1ksGK8E.js → README-p7SV8llU.js} +1 -1
  170. package/storybook-static/assets/{README-VcApJaXd.js → README-qhDVrEux.js} +1 -1
  171. package/storybook-static/assets/{README-CZLMmuEJ.js → README-rV7rsInW.js} +1 -1
  172. package/storybook-static/assets/{README-DIlnpVMH.js → README-uRH_sJT9.js} +1 -1
  173. package/storybook-static/assets/{README-D_zvxXbp.js → README-zlCSWis-.js} +1 -1
  174. package/storybook-static/assets/{RadioButton-DJEpCllJ.js → RadioButton-C6rZp79x.js} +1 -1
  175. package/storybook-static/assets/{RadioButton-CoPal8pt.js → RadioButton-PzYp1sbh.js} +1 -1
  176. package/storybook-static/assets/{RadioButton.stories-CrNbB_Qs.js → RadioButton.stories-DlBlaipI.js} +1 -1
  177. package/storybook-static/assets/{RadioGroup-DBlvBC8z.js → RadioGroup-BZ6jpcRK.js} +1 -1
  178. package/storybook-static/assets/{RadioGroup-Dv_q57B4.js → RadioGroup-CUTPaFXh.js} +1 -1
  179. package/storybook-static/assets/{RadioGroup.stories-CdafywwL.js → RadioGroup.stories-BmA8DAEX.js} +1 -1
  180. package/storybook-static/assets/{Scrollable-CVZxkb7b.js → Scrollable-CxrPKShA.js} +1 -1
  181. package/storybook-static/assets/{Select-BtuStcTW.js → Select-B3FoE2zw.js} +1 -1
  182. package/storybook-static/assets/{Select-B7fM7XXA.js → Select-CRnpjYGa.js} +1 -1
  183. package/storybook-static/assets/{Select.stories-D2i9D1wO.js → Select.stories-DxhEaTHD.js} +1 -1
  184. package/storybook-static/assets/{SerializableSelect-DsjutVwZ.js → SerializableSelect-JfVyMsfo.js} +1 -1
  185. package/storybook-static/assets/{SerializableSelect.stories-C4qr93lP.js → SerializableSelect.stories-DIHqxl-P.js} +1 -1
  186. package/storybook-static/assets/{SingleDateTimeInput-jOTDUNrw.js → SingleDateTimeInput-BHrmqVUi.js} +1 -1
  187. package/storybook-static/assets/{SingleDateTimeInput-CV1HjRhb.js → SingleDateTimeInput-DYi2W5-T.js} +1 -1
  188. package/storybook-static/assets/{SingleDateTimeInput.stories-yb4i7Se-.js → SingleDateTimeInput.stories-SJfUXQ27.js} +1 -1
  189. package/storybook-static/assets/{Slider-DGAxIRgF.js → Slider-DAsAVPS3.js} +1 -1
  190. package/storybook-static/assets/{Slider-DbiTyk2d.js → Slider-DhdKtsT1.js} +1 -1
  191. package/storybook-static/assets/{Slider.stories-BIPqFQgF.js → Slider.stories-BpMfeLzl.js} +1 -1
  192. package/storybook-static/assets/{SliderInput-DEbF8pTt.js → SliderInput-B63Rq_wR.js} +1 -1
  193. package/storybook-static/assets/{SliderInput-DPmmdNSI.js → SliderInput-H9TKoqbL.js} +1 -1
  194. package/storybook-static/assets/{SliderInput.stories-DpNI0YBv.js → SliderInput.stories-Cn7GhuHt.js} +1 -1
  195. package/storybook-static/assets/{Sortable-BYYO2Rd5.js → Sortable-CAjeg1_l.js} +1 -1
  196. package/storybook-static/assets/{Sortable.stories-CAig11WS.js → Sortable.stories-8lzpL0Lt.js} +1 -1
  197. package/storybook-static/assets/{Splitter-k76UJpxB.js → Splitter-D54uXac9.js} +1 -1
  198. package/storybook-static/assets/{Splitter.stories-CuaNuNp7.js → Splitter.stories-qqnOp0Be.js} +1 -1
  199. package/storybook-static/assets/{StateSelect-BdvIKDtX.js → StateSelect-CIwqD4QX.js} +1 -1
  200. package/storybook-static/assets/{StateSelect-BSx0a0xn.js → StateSelect-UC8bRpDR.js} +1 -1
  201. package/storybook-static/assets/{StateSelect.stories-Cn2k7xLt.js → StateSelect.stories-CeWB2shZ.js} +1 -1
  202. package/storybook-static/assets/{StringToggle.stories-BzYQZVOT.js → StringToggle.stories-CId-fhHG.js} +1 -1
  203. package/storybook-static/assets/{Switch-WXicw9j3.js → Switch-CRVzhG2B.js} +1 -1
  204. package/storybook-static/assets/{Switch-DtsM7AlJ.js → Switch-CVtJtLtK.js} +1 -1
  205. package/storybook-static/assets/{Switch.stories-DSJ6cmJH.js → Switch.stories-QTri2bfY.js} +1 -1
  206. package/storybook-static/assets/{Table-DG3Ysl0M.js → Table-BXvnFfUe.js} +1 -1
  207. package/storybook-static/assets/{Table.stories-DZld4Wa8.js → Table.stories-BcDC_lz-.js} +1 -1
  208. package/storybook-static/assets/{Tabs-BUkYwc0R.js → Tabs-D0eZ9Cgh.js} +1 -1
  209. package/storybook-static/assets/{Tabs.stories-Bxj65iOe.js → Tabs.stories-Co4DPEfD.js} +1 -1
  210. package/storybook-static/assets/{TabsBox-BufsM8ff.js → TabsBox-DbflFmuw.js} +1 -1
  211. package/storybook-static/assets/{TagInput-ButGKwPX.js → TagInput-DB7FGBMX.js} +1 -1
  212. package/storybook-static/assets/{TagInput.stories-BdBPL9C4.js → TagInput.stories-DUFf2b0k.js} +1 -1
  213. package/storybook-static/assets/{Text-CfVgVnx4.js → Text-B2YuarGk.js} +1 -1
  214. package/storybook-static/assets/{Textarea-Cw0dpv9O.js → Textarea-CKEIyyZn.js} +1 -1
  215. package/storybook-static/assets/{Textarea-BlRdt8GB.js → Textarea-DTqLlnko.js} +1 -1
  216. package/storybook-static/assets/{Textarea.stories-DIztJwoG.js → Textarea.stories-BgIIz2G-.js} +1 -1
  217. package/storybook-static/assets/{TimePanel-BaHjWmQy.js → TimePanel-B0OHydPr.js} +1 -1
  218. package/storybook-static/assets/{TimePanel.stories-CLhOwXWZ.js → TimePanel.stories-VwoN28G5.js} +1 -1
  219. package/storybook-static/assets/{Toggle-CeEIN_2z.js → Toggle-BCL50yyX.js} +1 -1
  220. package/storybook-static/assets/{Toggle-DS0d4WQL.js → Toggle-Cs4DVygF.js} +1 -1
  221. package/storybook-static/assets/{Toggle.stories-qQruW7gc.js → Toggle.stories-CpXAf4PL.js} +1 -1
  222. package/storybook-static/assets/{TreeMultiSelect-C19YnmWz.js → TreeMultiSelect-B_XsAJp-.js} +1 -1
  223. package/storybook-static/assets/{TreeMultiSelect-xvnFdWRY.js → TreeMultiSelect-DK2Y3CsI.js} +1 -1
  224. package/storybook-static/assets/{TreeMultiSelect.stories-CfvfyxYD.js → TreeMultiSelect.stories-BgPTdk2V.js} +1 -1
  225. package/storybook-static/assets/{TreePickerBase-CtEPKSbm.js → TreePickerBase-BEH20lQJ.js} +1 -1
  226. package/storybook-static/assets/{TreeSelect-BnLvixZ5.js → TreeSelect-B3sF0Kdg.js} +1 -1
  227. package/storybook-static/assets/{TreeSelect-CBkH-AEV.js → TreeSelect-Vx2Lkr0D.js} +1 -1
  228. package/storybook-static/assets/{TreeSelect.stories-Ee033WTq.js → TreeSelect.stories-t3hHAqnv.js} +1 -1
  229. package/storybook-static/assets/{TreeTable-Bj-wmrBR.js → TreeTable-C_wS4KRn.js} +1 -1
  230. package/storybook-static/assets/{TreeTable.stories-BIOrVNfx.js → TreeTable.stories-DqhjGEev.js} +1 -1
  231. package/storybook-static/assets/{blocks-DFW8ghoN.js → blocks-Cyh_k-EZ.js} +3 -3
  232. package/storybook-static/assets/{check-7oGyK4Lh.js → check-C2TxO0vM.js} +1 -1
  233. package/storybook-static/assets/{chevron-down-BBUXCskk.js → chevron-down-D-NHGmtk.js} +1 -1
  234. package/storybook-static/assets/{chevron-left-C9RcDRYm.js → chevron-left-CM7EAsdD.js} +1 -1
  235. package/storybook-static/assets/{chevron-right-Bz2dxTCT.js → chevron-right-CfuaKuy2.js} +1 -1
  236. package/storybook-static/assets/{chunk-W22LQPXL-BFc9wUX9.js → chunk-W22LQPXL-B7RoPLDL.js} +1 -1
  237. package/storybook-static/assets/{circle-alert-DxODWI3W.js → circle-alert-DOSGRi-t.js} +1 -1
  238. package/storybook-static/assets/{circle-check-Dt98F3HY.js → circle-check-BkRw3adn.js} +1 -1
  239. package/storybook-static/assets/{components-C9PL8fDL.js → components-znwoLfgu.js} +3 -3
  240. package/storybook-static/assets/contextMenu-8DDN0Php.js +2 -0
  241. package/storybook-static/assets/{download-Cicfr3Yq.js → download-vwxw-yX8.js} +1 -1
  242. package/storybook-static/assets/{floating-ui.react-j2x4WoIe.js → floating-ui.react-YRjL1BGe.js} +1 -1
  243. package/storybook-static/assets/{foundationApi-Czup-_8C.js → foundationApi-BxPdFkTS.js} +1 -1
  244. package/storybook-static/assets/{foundationLib-CvOU0kH6.js → foundationLib-rTXFCRH-.js} +1 -1
  245. package/storybook-static/assets/{hooks-D1LxuSK1.js → hooks-D9hEAXzf.js} +1 -1
  246. package/storybook-static/assets/iframe-CBbpuUos.js +1 -0
  247. package/storybook-static/assets/{iframe-CB9pifff.js → iframe-Ctjgxy8H.js} +3 -3
  248. package/storybook-static/assets/{info-H3kL_ony.js → info-Dl61zQfI.js} +1 -1
  249. package/storybook-static/assets/{odata-DZHQPho8.js → odata-BDsYgYEZ.js} +1 -1
  250. package/storybook-static/assets/{odataStoryFixtures-Dv4IyA2E.js → odataStoryFixtures-CokWXYCf.js} +1 -1
  251. package/storybook-static/assets/{react-D9ony7ur.js → react-0DwxKZMs.js} +1 -1
  252. package/storybook-static/assets/{refresh-cw-C1wTVwsA.js → refresh-cw-B8DNzoOe.js} +1 -1
  253. package/storybook-static/assets/{settings-2-CYAxQ8JZ.js → settings-2-DckqP9jM.js} +1 -1
  254. package/storybook-static/assets/{sortable-D3dOipv-.js → sortable-DREBv4GG.js} +1 -1
  255. package/storybook-static/assets/{syntaxhighlighter-QEQV7K2Y-BEAJBt17.js → syntaxhighlighter-QEQV7K2Y-BBaSxtnH.js} +1 -1
  256. package/storybook-static/assets/{trash-2-DFYiqA7Y.js → trash-2-CSbUpfo-.js} +1 -1
  257. package/storybook-static/assets/{triangle-alert-DT66rGfn.js → triangle-alert-BRLCqBPU.js} +1 -1
  258. package/storybook-static/assets/{useODataSelectBase-SGoINsPA.js → useODataSelectBase-oNEeP0OC.js} +1 -1
  259. package/storybook-static/assets/{useODataTreeData-Bd0rjQ8C.js → useODataTreeData-Blp3jPg9.js} +1 -1
  260. package/storybook-static/assets/{usePickerQuery-jINMRgys.js → usePickerQuery-DbaNcz3d.js} +1 -1
  261. package/storybook-static/assets/{usePickerTriggerController-C0xxhsv5.js → usePickerTriggerController-8HqdXbS9.js} +1 -1
  262. package/storybook-static/assets/{x-DgcBZVW3.js → x-4Az7SNSv.js} +1 -1
  263. package/storybook-static/iframe.html +2 -2
  264. package/storybook-static/project.json +1 -1
  265. package/dist/chunks/context-menu-CCAr_R-t.js.map +0 -1
  266. package/storybook-static/assets/ContextMenu-BvDbyzAk.js +0 -1
  267. package/storybook-static/assets/contextMenu-BOrF5Hzw.js +0 -2
  268. package/storybook-static/assets/iframe-BhNcQkWA.js +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-menu-HC7Vteb5.js","names":[],"sources":["../../src/context-menu/components/helpers.ts","../../src/context-menu/components/MenuContext.tsx","../../src/context-menu/components/ContextMenuTrigger.tsx","../../src/context-menu/ContextMenu.module.scss","../../src/context-menu/components/MenuContent.tsx","../../src/context-menu/components/MenuGroupLabel.tsx","../../src/context-menu/components/MenuItem.tsx","../../src/context-menu/components/MenuRoot.tsx","../../src/context-menu/components/MenuSeparator.tsx","../../src/context-menu/components/RadialMenuContent.tsx","../../src/context-menu/components/RadialMenuItem.tsx","../../src/context-menu/components/ContextMenu.tsx","../../src/context-menu/components/DropdownMenuTrigger.tsx","../../src/context-menu/components/DropdownMenu.tsx"],"sourcesContent":["import React from \"react\";\n\nexport function assignRef<T>(ref: React.Ref<T> | undefined, value: T) {\n\tif (!ref) return;\n\n\tif (typeof ref === \"function\") {\n\t\tref(value);\n\t\treturn;\n\t}\n\n\t(ref as React.MutableRefObject<T>).current = value;\n}\n\nexport function composeMouseHandlers<T extends HTMLElement>(\n\tuserHandler: ((event: React.MouseEvent<T>) => void) | undefined,\n\tlibraryHandler: (event: React.MouseEvent<T>) => void\n) {\n\treturn (event: React.MouseEvent<T>) => {\n\t\tuserHandler?.(event);\n\t\tif (event.defaultPrevented) return;\n\t\tlibraryHandler(event);\n\t};\n}\n\nexport function composeKeyboardHandlers<T extends HTMLElement>(\n\tuserHandler: ((event: React.KeyboardEvent<T>) => void) | undefined,\n\tlibraryHandler: (event: React.KeyboardEvent<T>) => void\n) {\n\treturn (event: React.KeyboardEvent<T>) => {\n\t\tuserHandler?.(event);\n\t\tif (event.defaultPrevented) return;\n\t\tlibraryHandler(event);\n\t};\n}\n","import { createContext, useContext } from \"react\";\n\nimport { createMissingContextError } from \"@ryuzaki13/react-foundation-lib/error\";\n\nimport type { MenuOpenSource, MenuPoint } from \"@ryuzaki13/react-foundation-lib/context-menu\";\n\nexport type MenuTriggerMode = \"click\" | \"contextmenu\";\n\ninterface MenuContextValue {\n\tmode: MenuTriggerMode;\n\topen: boolean;\n\topenSource: MenuOpenSource | null;\n\tanchorPoint: MenuPoint | null;\n\tfloatingStyles: React.CSSProperties;\n\tfloatingRef: React.RefObject<HTMLElement | null>;\n\ttriggerRef: React.RefObject<HTMLElement | null>;\n\tsetFloating: (node: HTMLElement | null) => void;\n\tregisterTriggerElement: (node: HTMLElement | null) => void;\n\tonTriggerClick: (event: React.MouseEvent<HTMLElement>) => void;\n\tonTriggerContextMenu: (event: React.MouseEvent<HTMLElement>, triggerElement?: HTMLElement) => void;\n\tonTriggerKeyDown: (event: React.KeyboardEvent<HTMLElement>, triggerElement?: HTMLElement) => void;\n\tcloseMenu: () => void;\n}\n\nexport const MenuContext = createContext<MenuContextValue | null>(null);\n\nexport function useMenuContext() {\n\tconst context = useContext(MenuContext);\n\tif (!context) {\n\t\tthrow createMissingContextError({\n\t\t\thookName: \"useMenuContext\",\n\t\t\tproviderName: \"MenuRoot\"\n\t\t});\n\t}\n\treturn context;\n}\n","import React, { cloneElement } from \"react\";\n\nimport { assignRef } from \"./helpers\";\nimport { useMenuContext } from \"./MenuContext\";\n\nexport interface ContextMenuTriggerProps {\n\tchildren: React.ReactElement<React.HTMLAttributes<HTMLElement> & { ref?: React.Ref<HTMLElement> }>;\n\t/** Позволяет одному ContextMenu обслуживать множество вложенных целей без отдельного floating-ui runtime на каждую строку или ячейку. */\n\tresolveTrigger?: (eventTarget: EventTarget | null) => HTMLElement | null;\n}\n\nexport const ContextMenuTrigger: React.FC<ContextMenuTriggerProps> = ({ children, resolveTrigger }) => {\n\tconst { mode, open, registerTriggerElement, onTriggerContextMenu, onTriggerKeyDown } = useMenuContext();\n\n\tif (mode !== \"contextmenu\") {\n\t\tthrow new Error(\"ContextMenu.Trigger must be used within <ContextMenu>\");\n\t}\n\n\treturn cloneElement(children, {\n\t\tref: (node: HTMLElement | null) => {\n\t\t\tconst childRef = (children.props as { ref?: React.Ref<HTMLElement> }).ref;\n\t\t\tassignRef(childRef, node);\n\t\t\tregisterTriggerElement(node);\n\t\t},\n\t\t\"aria-haspopup\": \"menu\",\n\t\t\"aria-expanded\": open,\n\t\tonContextMenu: (event: React.MouseEvent<HTMLElement>) => {\n\t\t\tchildren.props.onContextMenu?.(event);\n\t\t\tif (event.defaultPrevented) return;\n\t\t\tconst triggerElement = resolveTrigger ? resolveTrigger(event.target) : event.currentTarget;\n\t\t\tif (triggerElement) onTriggerContextMenu(event, triggerElement);\n\t\t},\n\t\tonKeyDown: (event: React.KeyboardEvent<HTMLElement>) => {\n\t\t\tchildren.props.onKeyDown?.(event);\n\t\t\tif (event.defaultPrevented) return;\n\t\t\tconst triggerElement = resolveTrigger ? resolveTrigger(event.target) : event.currentTarget;\n\t\t\tif (triggerElement) onTriggerKeyDown(event, triggerElement);\n\t\t}\n\t});\n};\n","@use \"@/styles/mixins\" as *;\n\n.menuPositioner {\n\tz-index: var(--z-dropdown);\n\toutline: none;\n}\n\n.menuOptions {\n\t--menu-max-height: calc(100dvh - var(--space-xl));\n\t--menu-min-width: 14em;\n\t--menu-max-width: min(24em, calc(100dvw - var(--space-xl)));\n\t--input-width: var(--menu-min-width);\n\n\tmin-width: var(--menu-min-width);\n\tmax-width: var(--menu-max-width);\n\tmax-height: var(--menu-max-height);\n}\n\n.radialPanel {\n\tposition: fixed;\n\twidth: var(--radial-panel-size);\n\theight: var(--radial-panel-size);\n\tz-index: var(--z-context-menu, var(--z-dropdown));\n\toutline: none;\n\tpointer-events: none;\n}\n\n.radialRing {\n\tposition: absolute;\n\tinset: calc(var(--radial-item-size) / 2);\n\tborder: var(--border);\n\tborder-radius: 50%;\n\tbackground:\n\t\tradial-gradient(circle, color-mix(in srgb, var(--surface-0) 96%, transparent) 0 36%, transparent 37%),\n\t\tcolor-mix(in srgb, var(--surface-0) 88%, transparent);\n\tbox-shadow: var(--shadow-md);\n\tpointer-events: none;\n}\n\n.radialCenterButton {\n\tposition: absolute;\n\tleft: 50%;\n\ttop: 50%;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: calc(var(--radial-item-size) * 0.72);\n\theight: calc(var(--radial-item-size) * 0.72);\n\tpadding: var(--space-xs);\n\ttransform: translate(-50%, -50%);\n\tborder: var(--border);\n\tborder-radius: 50%;\n\tbackground-color: var(--surface-0);\n\tcolor: var(--content-0);\n\tbox-shadow: var(--shadow-sm);\n\tpointer-events: auto;\n\ttransition:\n\t\tbackground-color var(--transition-fast) ease,\n\t\tborder-color var(--transition-fast) ease,\n\t\tcolor var(--transition-fast) ease,\n\t\ttransform var(--transition-fast) ease;\n\n\t&:focus {\n\t\tbackground-color: var(--surface-1);\n\t\tborder-color: var(--border-1);\n\t}\n\n\t@include hover(true) {\n\t\tbackground-color: var(--surface-accent);\n\t\tcolor: var(--content-accent);\n\t\tcursor: pointer;\n\t\ttransform: translate(-50%, -50%) scale(1.06);\n\t}\n}\n\n.radialCenterButtonText {\n\tmax-width: 100%;\n\toverflow: hidden;\n\ttext-align: center;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n\tfont-size: var(--font-size-sm);\n\tline-height: 1.1;\n}\n\n.radialItems {\n\tposition: absolute;\n\tinset: 0;\n\tpointer-events: none;\n}\n\n.radialItemSlot {\n\tposition: absolute;\n\tleft: 50%;\n\ttop: 50%;\n\twidth: var(--radial-item-size);\n\theight: var(--radial-item-size);\n\ttransform: rotate(var(--radial-item-angle)) translate(var(--radial-radius)) rotate(calc(var(--radial-item-angle) * -1))\n\t\ttranslate(-50%, -50%);\n\tpointer-events: none;\n}\n\n.radialItem {\n\tdisplay: grid;\n\tgrid-template-rows: 1fr auto;\n\talign-items: center;\n\tjustify-items: center;\n\tgap: 0.15rem;\n\twidth: 100%;\n\theight: 100%;\n\tpadding: var(--space-xs);\n\tborder: var(--border);\n\tborder-radius: 50%;\n\tbackground-color: var(--surface-0);\n\tcolor: var(--content-0);\n\tbox-shadow: var(--shadow-sm);\n\tpointer-events: auto;\n\ttransition:\n\t\tbackground-color var(--transition-fast) ease,\n\t\tborder-color var(--transition-fast) ease,\n\t\tcolor var(--transition-fast) ease,\n\t\ttransform var(--transition-fast) ease;\n\n\t&:focus {\n\t\tbackground-color: var(--surface-1);\n\t\tborder-color: var(--border-1);\n\t}\n\n\t&:disabled,\n\t&[aria-disabled=\"true\"] {\n\t\tcursor: default;\n\t\tcolor: var(--content-2);\n\t\topacity: 0.52;\n\t\tpointer-events: none;\n\t}\n\n\t@include hover(true) {\n\t\tbackground-color: var(--surface-accent);\n\t\tcolor: var(--content-accent);\n\t\tcursor: pointer;\n\t\ttransform: scale(1.06);\n\t}\n}\n\n.radialItemIcon {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tmin-width: var(--space-md);\n\tmin-height: var(--space-md);\n\n\t> svg {\n\t\twidth: var(--space-md);\n\t\theight: var(--space-md);\n\t}\n}\n\n.radialItemText {\n\tmax-width: 100%;\n\toverflow: hidden;\n\ttext-align: center;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n\tfont-size: var(--font-size-sm);\n}\n","import React, { useCallback } from \"react\";\n\nimport { useClickOutside, useEscapeDismiss, useOverlayFocus } from \"@ryuzaki13/react-foundation-lib/dom\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { createPortal } from \"react-dom\";\n\nimport { PickerOptions } from \"../../picker\";\nimport styles from \"../ContextMenu.module.scss\";\n\nimport { useMenuContext } from \"./MenuContext\";\n\nexport interface MenuContentProps {\n\tchildren: React.ReactNode | ((ctx: { closeMenu: () => void }) => React.ReactNode);\n\tclassName?: string;\n\tcloseOnOutside?: boolean;\n\tcloseOnEscape?: boolean;\n\tdisableOutsideClick?: boolean;\n\trestoreFocus?: boolean;\n}\n\nexport const MenuContent: React.FC<MenuContentProps> = ({\n\tchildren,\n\tclassName,\n\tcloseOnOutside = true,\n\tcloseOnEscape = true,\n\tdisableOutsideClick = false,\n\trestoreFocus = true\n}) => {\n\tconst { open, floatingStyles, floatingRef, triggerRef, setFloating, closeMenu } = useMenuContext();\n\n\tconst getNavigableItems = useCallback(() => {\n\t\tconst floatingElement = floatingRef.current;\n\t\tif (!floatingElement) return [];\n\n\t\treturn Array.from(floatingElement.querySelectorAll<HTMLElement>('[data-menu-item=\"true\"]:not([data-disabled=\"true\"])'));\n\t}, [floatingRef]);\n\n\tuseOverlayFocus<HTMLElement>({\n\t\tactive: open,\n\t\tinitialFocus: (container) => getNavigableItems()[0] ?? container,\n\t\trestoreFocus,\n\t\trestoreFocusTarget: () => triggerRef.current,\n\t\tcontainerRef: floatingRef\n\t});\n\n\tuseEscapeDismiss({\n\t\tactive: open,\n\t\tenabled: closeOnEscape,\n\t\tonDismiss: closeMenu,\n\t\tcontainerRef: floatingRef\n\t});\n\n\tconst outsideClose = useCallback(() => {\n\t\tif (!open || disableOutsideClick) return;\n\t\tif (closeOnOutside) {\n\t\t\tcloseMenu();\n\t\t}\n\t}, [open, disableOutsideClick, closeOnOutside, closeMenu]);\n\n\tuseClickOutside([floatingRef as React.RefObject<HTMLElement>, triggerRef as React.RefObject<HTMLElement>], outsideClose);\n\n\tconst onMenuKeyDown = useCallback(\n\t\t(event: React.KeyboardEvent<HTMLElement>) => {\n\t\t\tconst items = getNavigableItems();\n\t\t\tif (items.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst activeElement = document.activeElement as HTMLElement | null;\n\t\t\tconst currentIndex = activeElement ? items.indexOf(activeElement) : -1;\n\n\t\t\tif (event.key === \"ArrowDown\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst nextIndex = currentIndex >= 0 ? (currentIndex + 1) % items.length : 0;\n\t\t\t\titems[nextIndex]?.focus();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key === \"ArrowUp\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst nextIndex = currentIndex >= 0 ? (currentIndex - 1 + items.length) % items.length : items.length - 1;\n\t\t\t\titems[nextIndex]?.focus();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key === \"Home\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\titems[0]?.focus();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key === \"End\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\titems[items.length - 1]?.focus();\n\t\t\t}\n\t\t},\n\t\t[getNavigableItems]\n\t);\n\n\tif (typeof document === \"undefined\") return null;\n\n\treturn createPortal(\n\t\t<AnimatePresence>\n\t\t\t{open && (\n\t\t\t\t<motion.div\n\t\t\t\t\tref={setFloating}\n\t\t\t\t\tstyle={floatingStyles}\n\t\t\t\t\trole=\"menu\"\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\tclassName={styles.menuPositioner}\n\t\t\t\t\tonKeyDown={onMenuKeyDown}\n\t\t\t\t\tinitial={{ opacity: 0, scale: 0.96, y: -2 }}\n\t\t\t\t\tanimate={{ opacity: 1, scale: 1, y: 0 }}\n\t\t\t\t\texit={{ opacity: 0, scale: 0.96, y: -2 }}\n\t\t\t\t\ttransition={{ duration: 0.14, ease: \"easeOut\" }}>\n\t\t\t\t\t<PickerOptions className={cn(styles.menuOptions, className)}>\n\t\t\t\t\t\t{typeof children === \"function\" ? children({ closeMenu }) : children}\n\t\t\t\t\t</PickerOptions>\n\t\t\t\t</motion.div>\n\t\t\t)}\n\t\t</AnimatePresence>,\n\t\tdocument.body\n\t);\n};\n","import React from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport uiStyles from \"../../ui.module.scss\";\n\nexport interface MenuGroupLabelProps {\n\tchildren: React.ReactNode;\n\tclassName?: string;\n}\n\nexport const MenuGroupLabel: React.FC<MenuGroupLabelProps> = ({ children, className }) => {\n\treturn <div className={cn(uiStyles.uiPopupGroupLabel, className)}>{children}</div>;\n};\n","import { type HTMLAttributeAnchorTarget, type MouseEvent, type ReactNode, useCallback } from \"react\";\n\nimport { Option, OptionButton, OptionLink } from \"../../option\";\n\nimport { useMenuContext } from \"./MenuContext\";\n\nexport interface MenuItemProps {\n\tchildren: string;\n\ticon?: ReactNode;\n\thotKey?: string;\n\tclassName?: string;\n\tdisabled?: boolean;\n\thref?: string;\n\ttarget?: HTMLAttributeAnchorTarget;\n\trel?: string;\n\tcloseOnSelect?: boolean;\n\tonSelect?: (event: MouseEvent<HTMLElement>) => void;\n}\n\nexport function MenuItem({\n\tchildren,\n\ticon,\n\thotKey,\n\tclassName,\n\tdisabled,\n\thref,\n\ttarget,\n\trel,\n\tcloseOnSelect = true,\n\tonSelect\n}: MenuItemProps) {\n\tconst { closeMenu } = useMenuContext();\n\n\tconst handleClick = useCallback(\n\t\t(event: React.MouseEvent<HTMLElement>) => {\n\t\t\tif (disabled) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tonSelect?.(event);\n\t\t\tif (event.defaultPrevented) return;\n\n\t\t\tif (closeOnSelect) {\n\t\t\t\tcloseMenu();\n\t\t\t}\n\t\t},\n\t\t[disabled, onSelect, closeOnSelect, closeMenu]\n\t);\n\n\tif (href) {\n\t\treturn (\n\t\t\t<Option disabled={disabled} className={className}>\n\t\t\t\t<OptionLink\n\t\t\t\t\ticon={icon}\n\t\t\t\t\thotkey={hotKey}\n\t\t\t\t\ttext={children}\n\t\t\t\t\thref={href}\n\t\t\t\t\ttarget={target}\n\t\t\t\t\trel={rel}\n\t\t\t\t\trole=\"menuitem\"\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\taria-disabled={disabled}\n\t\t\t\t\tdata-menu-item=\"true\"\n\t\t\t\t\tdata-disabled={disabled ? \"true\" : undefined}\n\t\t\t\t\tdata-ui=\"context-menu-item\"\n\t\t\t\t\tdata-action=\"select-context-menu-item\"\n\t\t\t\t\tonClick={handleClick as React.MouseEventHandler<HTMLAnchorElement>}\n\t\t\t\t/>\n\t\t\t</Option>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Option disabled={disabled} className={className}>\n\t\t\t<OptionButton\n\t\t\t\ticon={icon}\n\t\t\t\thotkey={hotKey}\n\t\t\t\ttext={children}\n\t\t\t\trole=\"menuitem\"\n\t\t\t\ttabIndex={-1}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tdata-menu-item=\"true\"\n\t\t\t\tdata-disabled={disabled ? \"true\" : undefined}\n\t\t\t\tdata-ui=\"context-menu-item\"\n\t\t\t\tdata-action=\"select-context-menu-item\"\n\t\t\t\tonClick={handleClick as React.MouseEventHandler<HTMLButtonElement>}\n\t\t\t/>\n\t\t</Option>\n\t);\n}\n","import React, { useCallback, useMemo, useRef, useState } from \"react\";\n\nimport { autoUpdate, flip, offset, Placement, shift, useFloating } from \"@floating-ui/react\";\nimport {\n\tcloseMenu,\n\tcreateVirtualAnchor,\n\tgetMenuPointFromEvent,\n\tgetMenuPointFromRect,\n\tinitialMenuState,\n\topenMenu\n} from \"@ryuzaki13/react-foundation-lib/context-menu\";\n\nimport { MenuContext, MenuTriggerMode } from \"./MenuContext\";\n\ninterface MenuRootProps {\n\tchildren: React.ReactNode;\n\tmode: MenuTriggerMode;\n\tplacement?: Placement;\n\topen?: boolean;\n\tdefaultOpen?: boolean;\n\tonOpenChange?: (open: boolean) => void;\n}\n\nexport function MenuRoot({\n\tchildren,\n\tmode,\n\tplacement = mode === \"click\" ? \"bottom-start\" : \"right-start\",\n\topen: controlledOpen,\n\tdefaultOpen,\n\tonOpenChange\n}: MenuRootProps) {\n\tconst [menuState, setMenuState] = useState(initialMenuState);\n\tconst [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen ?? false);\n\tconst isControlled = controlledOpen !== undefined;\n\tconst open = isControlled ? controlledOpen : uncontrolledOpen;\n\tconst triggerElementRef = useRef<HTMLElement | null>(null);\n\tconst registeredTriggerElementRef = useRef<HTMLElement | null>(null);\n\n\tconst { refs, floatingStyles, update } = useFloating({\n\t\tplacement,\n\t\tstrategy: mode === \"contextmenu\" ? \"fixed\" : \"absolute\",\n\t\ttransform: false,\n\t\tmiddleware: [offset(6), flip({ padding: 8 }), shift({ padding: 8 })],\n\t\twhileElementsMounted: autoUpdate\n\t});\n\n\tconst setOpen = useCallback(\n\t\t(nextOpen: boolean) => {\n\t\t\tif (!isControlled) {\n\t\t\t\tsetUncontrolledOpen(nextOpen);\n\t\t\t}\n\t\t\tonOpenChange?.(nextOpen);\n\t\t\tif (!nextOpen) {\n\t\t\t\tsetMenuState((state) => closeMenu(state));\n\t\t\t}\n\t\t},\n\t\t[isControlled, onOpenChange]\n\t);\n\n\tconst closeMenuHandler = useCallback(() => {\n\t\tsetOpen(false);\n\t}, [setOpen]);\n\n\tconst openAtElement = useCallback(\n\t\t(element: HTMLElement, source: \"click\" | \"keyboard\") => {\n\t\t\trefs.setReference(element);\n\t\t\tsetMenuState(\n\t\t\t\topenMenu({\n\t\t\t\t\tsource,\n\t\t\t\t\tanchor: {\n\t\t\t\t\t\ttype: \"element\",\n\t\t\t\t\t\telement\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t\tsetOpen(true);\n\t\t},\n\t\t[refs, setOpen]\n\t);\n\n\tconst openAtPoint = useCallback(\n\t\t(point: { x: number; y: number }, source: \"contextmenu\" | \"keyboard\", contextElement?: HTMLElement | null) => {\n\t\t\trefs.setReference(createVirtualAnchor(point, contextElement));\n\t\t\tsetMenuState(\n\t\t\t\topenMenu({\n\t\t\t\t\tsource,\n\t\t\t\t\tanchor: {\n\t\t\t\t\t\ttype: \"point\",\n\t\t\t\t\t\tpoint,\n\t\t\t\t\t\tcontextElement\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t\tsetOpen(true);\n\t\t\tupdate();\n\t\t},\n\t\t[refs, setOpen, update]\n\t);\n\n\tconst registerTriggerElement = useCallback(\n\t\t(node: HTMLElement | null) => {\n\t\t\tconst previous = registeredTriggerElementRef.current;\n\t\t\tregisteredTriggerElementRef.current = node;\n\t\t\t// Повторный ref-callback общего контейнера не должен заменить делегированную цель,\n\t\t\t// иначе после закрытия фокус вернётся на всю таблицу вместо исходной ячейки.\n\t\t\tif (triggerElementRef.current === null || triggerElementRef.current === previous) {\n\t\t\t\ttriggerElementRef.current = node;\n\t\t\t}\n\t\t\tif (mode === \"click\") {\n\t\t\t\trefs.setReference(node);\n\t\t\t}\n\t\t},\n\t\t[mode, refs]\n\t);\n\n\tconst onTriggerClick = useCallback(\n\t\t(event: React.MouseEvent<HTMLElement>) => {\n\t\t\tif (mode !== \"click\") return;\n\t\t\tconst element = event.currentTarget;\n\n\t\t\tif (open && menuState.anchor?.type === \"element\" && menuState.anchor.element === element) {\n\t\t\t\tcloseMenuHandler();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\topenAtElement(element, \"click\");\n\t\t},\n\t\t[mode, open, menuState.anchor, closeMenuHandler, openAtElement]\n\t);\n\n\tconst onTriggerContextMenu = useCallback(\n\t\t(event: React.MouseEvent<HTMLElement>, triggerElement = event.currentTarget) => {\n\t\t\tif (mode !== \"contextmenu\") return;\n\t\t\tevent.preventDefault();\n\n\t\t\tconst point = getMenuPointFromEvent(event);\n\t\t\ttriggerElementRef.current = triggerElement;\n\t\t\topenAtPoint(point, \"contextmenu\", triggerElement);\n\t\t},\n\t\t[mode, openAtPoint]\n\t);\n\n\tconst onTriggerKeyDown = useCallback(\n\t\t(event: React.KeyboardEvent<HTMLElement>, triggerElement = event.currentTarget) => {\n\t\t\tconst isContextMenuKeyboardOpen = event.key === \"ContextMenu\" || (event.shiftKey && event.key === \"F10\");\n\t\t\tif (!isContextMenuKeyboardOpen) return;\n\n\t\t\tevent.preventDefault();\n\t\t\ttriggerElementRef.current = triggerElement;\n\n\t\t\tif (mode === \"click\") {\n\t\t\t\topenAtElement(triggerElement, \"keyboard\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst point = getMenuPointFromRect(triggerElement.getBoundingClientRect());\n\t\t\topenAtPoint(point, \"keyboard\", triggerElement);\n\t\t},\n\t\t[mode, openAtElement, openAtPoint]\n\t);\n\n\tconst visible = open && menuState.anchor !== null;\n\tconst anchorPoint = useMemo(() => {\n\t\tif (!menuState.anchor) return null;\n\n\t\tif (menuState.anchor.type === \"point\") {\n\t\t\treturn menuState.anchor.point;\n\t\t}\n\n\t\tconst rect = menuState.anchor.element.getBoundingClientRect();\n\t\treturn getMenuPointFromRect(rect);\n\t}, [menuState.anchor]);\n\n\tconst value = useMemo(\n\t\t() => ({\n\t\t\tmode,\n\t\t\topen: visible,\n\t\t\topenSource: menuState.source,\n\t\t\tanchorPoint,\n\t\t\tfloatingStyles,\n\t\t\tfloatingRef: refs.floating,\n\t\t\ttriggerRef: triggerElementRef,\n\t\t\tsetFloating: refs.setFloating,\n\t\t\tregisterTriggerElement,\n\t\t\tonTriggerClick,\n\t\t\tonTriggerContextMenu,\n\t\t\tonTriggerKeyDown,\n\t\t\tcloseMenu: closeMenuHandler\n\t\t}),\n\t\t[\n\t\t\tmode,\n\t\t\tvisible,\n\t\t\tmenuState.source,\n\t\t\tanchorPoint,\n\t\t\tfloatingStyles,\n\t\t\trefs.floating,\n\t\t\trefs.setFloating,\n\t\t\tregisterTriggerElement,\n\t\t\tonTriggerClick,\n\t\t\tonTriggerContextMenu,\n\t\t\tonTriggerKeyDown,\n\t\t\tcloseMenuHandler\n\t\t]\n\t);\n\n\treturn <MenuContext.Provider value={value}>{children}</MenuContext.Provider>;\n}\n","import React from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport uiStyles from \"../../ui.module.scss\";\n\nexport interface MenuSeparatorProps {\n\tclassName?: string;\n}\n\nexport const MenuSeparator: React.FC<MenuSeparatorProps> = ({ className }) => {\n\treturn <div role=\"separator\" className={cn(uiStyles.uiPopupOptionSeparator, className)} />;\n};\n","import React, { Children, useCallback, useEffect, useMemo } from \"react\";\n\nimport { useClickOutside, useEscapeDismiss, useOverlayFocus } from \"@ryuzaki13/react-foundation-lib/dom\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { createPortal } from \"react-dom\";\n\nimport styles from \"../ContextMenu.module.scss\";\n\nimport { useMenuContext } from \"./MenuContext\";\n\nexport interface RadialMenuContentProps {\n\tchildren: React.ReactNode | ((ctx: { closeMenu: () => void }) => React.ReactNode);\n\tclassName?: string;\n\tcloseOnOutside?: boolean;\n\tcloseOnEscape?: boolean;\n\tdisableOutsideClick?: boolean;\n\trestoreFocus?: boolean;\n\tradius?: number;\n\titemSize?: number;\n\tcloseLabel?: string;\n}\n\nfunction clamp(value: number, min: number, max: number) {\n\tif (max < min) return min;\n\treturn Math.min(Math.max(value, min), max);\n}\n\nexport const RadialMenuContent: React.FC<RadialMenuContentProps> = ({\n\tchildren,\n\tclassName,\n\tcloseOnOutside = true,\n\tcloseOnEscape = true,\n\tdisableOutsideClick = false,\n\trestoreFocus = true,\n\tradius = 76,\n\titemSize = 64,\n\tcloseLabel = \"Закрыть\"\n}) => {\n\tconst { open, anchorPoint, floatingRef, triggerRef, setFloating, closeMenu } = useMenuContext();\n\n\tconst resolvedChildren = typeof children === \"function\" ? children({ closeMenu }) : children;\n\tconst itemNodes = useMemo(() => Children.toArray(resolvedChildren), [resolvedChildren]);\n\tconst itemCount = itemNodes.length;\n\tconst panelSize = radius * 2 + itemSize;\n\n\tconst panelPoint = useMemo(() => {\n\t\tif (typeof window === \"undefined\" || !anchorPoint) return null;\n\n\t\t// Радиальное меню центрируется на точке вызова, но не выходит за границы viewport.\n\t\tconst safeOffset = panelSize / 2 + 8;\n\t\treturn {\n\t\t\tx: clamp(anchorPoint.x, safeOffset, window.innerWidth - safeOffset),\n\t\t\ty: clamp(anchorPoint.y, safeOffset, window.innerHeight - safeOffset)\n\t\t};\n\t}, [anchorPoint, panelSize]);\n\n\tconst getNavigableItems = useCallback(() => {\n\t\tconst floatingElement = floatingRef.current;\n\t\tif (!floatingElement) return [];\n\n\t\treturn Array.from(floatingElement.querySelectorAll<HTMLElement>('[data-menu-item=\"true\"]:not([data-disabled=\"true\"])'));\n\t}, [floatingRef]);\n\n\tuseOverlayFocus<HTMLElement>({\n\t\tactive: open,\n\t\tinitialFocus: (container) => getNavigableItems()[0] ?? container,\n\t\trestoreFocus,\n\t\trestoreFocusTarget: () => triggerRef.current,\n\t\tcontainerRef: floatingRef\n\t});\n\n\tuseEffect(() => {\n\t\tif (!open || !anchorPoint) return;\n\n\t\tlet rafId = 0;\n\n\t\t/**\n\t\t * Повторный правый клик при уже открытом меню меняет только якорь, поэтому общий\n\t\t * эффект начального фокуса не перезапускается. Возвращаем фокус в меню явно.\n\t\t */\n\t\tconst focusMenuOnReposition = () => {\n\t\t\tconst focusTarget = getNavigableItems()[0] ?? floatingRef.current;\n\t\t\tfocusTarget?.focus();\n\t\t};\n\n\t\trafId = window.requestAnimationFrame(focusMenuOnReposition);\n\t\treturn () => window.cancelAnimationFrame(rafId);\n\t}, [open, anchorPoint, getNavigableItems, floatingRef]);\n\n\tuseEscapeDismiss({\n\t\tactive: open,\n\t\tenabled: closeOnEscape,\n\t\tonDismiss: closeMenu,\n\t\tcontainerRef: floatingRef\n\t});\n\n\tconst outsideClose = useCallback(() => {\n\t\tif (!open || disableOutsideClick) return;\n\t\tif (closeOnOutside) {\n\t\t\tcloseMenu();\n\t\t}\n\t}, [open, disableOutsideClick, closeOnOutside, closeMenu]);\n\n\tuseClickOutside([floatingRef as React.RefObject<HTMLElement>, triggerRef as React.RefObject<HTMLElement>], outsideClose);\n\n\tconst onMenuKeyDown = useCallback(\n\t\t(event: React.KeyboardEvent<HTMLElement>) => {\n\t\t\tconst items = getNavigableItems();\n\t\t\tif (items.length === 0) return;\n\n\t\t\tconst activeElement = document.activeElement as HTMLElement | null;\n\t\t\tconst currentIndex = activeElement ? items.indexOf(activeElement) : -1;\n\n\t\t\tif (event.key === \"ArrowRight\" || event.key === \"ArrowDown\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst nextIndex = currentIndex >= 0 ? (currentIndex + 1) % items.length : 0;\n\t\t\t\titems[nextIndex]?.focus();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key === \"ArrowLeft\" || event.key === \"ArrowUp\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst nextIndex = currentIndex >= 0 ? (currentIndex - 1 + items.length) % items.length : items.length - 1;\n\t\t\t\titems[nextIndex]?.focus();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key === \"Home\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\titems[0]?.focus();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key === \"End\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\titems[items.length - 1]?.focus();\n\t\t\t}\n\t\t},\n\t\t[getNavigableItems]\n\t);\n\n\tif (typeof document === \"undefined\") return null;\n\n\treturn createPortal(\n\t\t<AnimatePresence>\n\t\t\t{open && panelPoint && (\n\t\t\t\t<motion.div\n\t\t\t\t\tref={setFloating}\n\t\t\t\t\tstyle={\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"--radial-panel-size\": `${panelSize}px`,\n\t\t\t\t\t\t\t\"--radial-radius\": `${radius}px`,\n\t\t\t\t\t\t\t\"--radial-item-size\": `${itemSize}px`,\n\t\t\t\t\t\t\tleft: panelPoint.x - panelSize / 2,\n\t\t\t\t\t\t\ttop: panelPoint.y - panelSize / 2,\n\t\t\t\t\t\t\ttransformOrigin: \"center\"\n\t\t\t\t\t\t} as React.CSSProperties\n\t\t\t\t\t}\n\t\t\t\t\trole=\"menu\"\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\tclassName={cn(styles.radialPanel, className)}\n\t\t\t\t\tonKeyDown={onMenuKeyDown}\n\t\t\t\t\tinitial={{ opacity: 0, scale: 0.78 }}\n\t\t\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\t\t\texit={{ opacity: 0, scale: 0.78 }}\n\t\t\t\t\ttransition={{ duration: 0.16, ease: \"easeOut\" }}>\n\t\t\t\t\t<div className={styles.radialRing} aria-hidden=\"true\" />\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\trole=\"menuitem\"\n\t\t\t\t\t\tclassName={styles.radialCenterButton}\n\t\t\t\t\t\taria-label={closeLabel}\n\t\t\t\t\t\tdata-menu-item=\"true\"\n\t\t\t\t\t\tdata-radial-close=\"true\"\n\t\t\t\t\t\tonClick={closeMenu}>\n\t\t\t\t\t\t<span className={styles.radialCenterButtonText}>{closeLabel}</span>\n\t\t\t\t\t</button>\n\t\t\t\t\t<div className={styles.radialItems}>\n\t\t\t\t\t\t{itemNodes.map((item, index) => {\n\t\t\t\t\t\t\tconst angle = itemCount > 0 ? -90 + (360 / itemCount) * index : -90;\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t// Индекс допустим: порядок пунктов полностью задает геометрию кольца.\n\t\t\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\t\t\tclassName={styles.radialItemSlot}\n\t\t\t\t\t\t\t\t\tstyle={{ \"--radial-item-angle\": `${angle}deg` } as React.CSSProperties}>\n\t\t\t\t\t\t\t\t\t{item}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</div>\n\t\t\t\t</motion.div>\n\t\t\t)}\n\t\t</AnimatePresence>,\n\t\tdocument.body\n\t);\n};\n","import React, { useCallback } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport styles from \"../ContextMenu.module.scss\";\n\nimport { useMenuContext } from \"./MenuContext\";\n\nexport interface RadialMenuItemProps {\n\tchildren: React.ReactNode;\n\ticon?: React.ReactNode;\n\tclassName?: string;\n\tdisabled?: boolean;\n\tcloseOnSelect?: boolean;\n\tonSelect?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n}\n\nexport const RadialMenuItem: React.FC<RadialMenuItemProps> = ({ children, icon, className, disabled, closeOnSelect = true, onSelect }) => {\n\tconst { closeMenu } = useMenuContext();\n\n\tconst handleClick = useCallback(\n\t\t(event: React.MouseEvent<HTMLButtonElement>) => {\n\t\t\tif (disabled) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tonSelect?.(event);\n\t\t\tif (event.defaultPrevented) return;\n\n\t\t\tif (closeOnSelect) {\n\t\t\t\tcloseMenu();\n\t\t\t}\n\t\t},\n\t\t[disabled, onSelect, closeOnSelect, closeMenu]\n\t);\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\trole=\"menuitem\"\n\t\t\ttabIndex={-1}\n\t\t\tdisabled={disabled}\n\t\t\taria-disabled={disabled}\n\t\t\tdata-menu-item=\"true\"\n\t\t\tdata-disabled={disabled ? \"true\" : undefined}\n\t\t\tdata-ui=\"radial-menu-item\"\n\t\t\tdata-action=\"select-radial-menu-item\"\n\t\t\tclassName={cn(styles.radialItem, className)}\n\t\t\tonClick={handleClick}>\n\t\t\t{icon && <span className={styles.radialItemIcon}>{icon}</span>}\n\t\t\t<span className={styles.radialItemText}>{children}</span>\n\t\t</button>\n\t);\n};\n","/* eslint-disable react-refresh/only-export-components */\nimport React from \"react\";\n\nimport { Placement } from \"@floating-ui/react\";\n\nimport { ContextMenuTrigger } from \"./ContextMenuTrigger\";\nimport { MenuContent } from \"./MenuContent\";\nimport { MenuGroupLabel } from \"./MenuGroupLabel\";\nimport { MenuItem } from \"./MenuItem\";\nimport { MenuRoot } from \"./MenuRoot\";\nimport { MenuSeparator } from \"./MenuSeparator\";\nimport { RadialMenuContent } from \"./RadialMenuContent\";\nimport { RadialMenuItem } from \"./RadialMenuItem\";\n\nexport interface ContextMenuProps {\n\tchildren: React.ReactNode;\n\tplacement?: Placement;\n\topen?: boolean;\n\tdefaultOpen?: boolean;\n\tonOpenChange?: (open: boolean) => void;\n}\n\nconst ContextMenuRoot: React.FC<ContextMenuProps> = ({ children, placement, open, defaultOpen, onOpenChange }) => {\n\treturn (\n\t\t<MenuRoot mode=\"contextmenu\" placement={placement} open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange}>\n\t\t\t{children}\n\t\t</MenuRoot>\n\t);\n};\n\nexport const ContextMenu = Object.assign(ContextMenuRoot, {\n\tTrigger: ContextMenuTrigger,\n\tContent: MenuContent,\n\tRadialContent: RadialMenuContent,\n\tItem: MenuItem,\n\tRadialItem: RadialMenuItem,\n\tSeparator: MenuSeparator,\n\tGroupLabel: MenuGroupLabel\n});\n","import React, { cloneElement } from \"react\";\n\nimport { assignRef, composeKeyboardHandlers, composeMouseHandlers } from \"./helpers\";\nimport { useMenuContext } from \"./MenuContext\";\n\nexport interface DropdownMenuTriggerProps {\n\tchildren: React.ReactElement<React.HTMLAttributes<HTMLElement> & { ref?: React.Ref<HTMLElement> }>;\n}\n\nexport const DropdownMenuTrigger: React.FC<DropdownMenuTriggerProps> = ({ children }) => {\n\tconst { mode, open, registerTriggerElement, onTriggerClick, onTriggerKeyDown } = useMenuContext();\n\n\tif (mode !== \"click\") {\n\t\tthrow new Error(\"DropdownMenu.Trigger must be used within <DropdownMenu>\");\n\t}\n\n\treturn cloneElement(children, {\n\t\tref: (node: HTMLElement | null) => {\n\t\t\tconst childRef = (children.props as { ref?: React.Ref<HTMLElement> }).ref;\n\t\t\tassignRef(childRef, node);\n\t\t\tregisterTriggerElement(node);\n\t\t},\n\t\t\"aria-haspopup\": \"menu\",\n\t\t\"aria-expanded\": open,\n\t\tonClick: composeMouseHandlers(children.props.onClick, onTriggerClick),\n\t\tonKeyDown: composeKeyboardHandlers(children.props.onKeyDown, onTriggerKeyDown)\n\t});\n};\n","/* eslint-disable react-refresh/only-export-components */\nimport React from \"react\";\n\nimport { Placement } from \"@floating-ui/react\";\n\nimport { DropdownMenuTrigger } from \"./DropdownMenuTrigger\";\nimport { MenuContent } from \"./MenuContent\";\nimport { MenuGroupLabel } from \"./MenuGroupLabel\";\nimport { MenuItem } from \"./MenuItem\";\nimport { MenuRoot } from \"./MenuRoot\";\nimport { MenuSeparator } from \"./MenuSeparator\";\n\nexport interface DropdownMenuProps {\n\tchildren: React.ReactNode;\n\tplacement?: Placement;\n\topen?: boolean;\n\tdefaultOpen?: boolean;\n\tonOpenChange?: (open: boolean) => void;\n}\n\nconst DropdownMenuRoot: React.FC<DropdownMenuProps> = ({ children, placement, open, defaultOpen, onOpenChange }) => {\n\treturn (\n\t\t<MenuRoot mode=\"click\" placement={placement} open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange}>\n\t\t\t{children}\n\t\t</MenuRoot>\n\t);\n};\n\nexport const DropdownMenu = Object.assign(DropdownMenuRoot, {\n\tTrigger: DropdownMenuTrigger,\n\tContent: MenuContent,\n\tItem: MenuItem,\n\tSeparator: MenuSeparator,\n\tGroupLabel: MenuGroupLabel\n});\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { a as e, c as t, d as n, i as r, n as i, o as a, p as ee, r as te, s as ne, t as re } from "./base-table-BNtd1xSl.js";
1
+ import { a as e, c as t, d as n, i as r, n as i, o as a, p as ee, r as te, s as ne, t as re } from "./base-table-CClQop2i.js";
2
2
  import { useEffect as ie, useEffectEvent as ae, useMemo as o, useRef as s } from "react";
3
3
  import { jsx as c } from "react/jsx-runtime";
4
4
  import { formatPipelineDisplayValue as l } from "@ryuzaki13/react-foundation-lib/formatters";
@@ -138,4 +138,4 @@ function m({ title: m, isLoading: h, isFetching: se, data: g, columns: _, select
138
138
  //#endregion
139
139
  export { m as t };
140
140
 
141
- //# sourceMappingURL=table-C3sKpYHL.js.map
141
+ //# sourceMappingURL=table-ZPWbKoR-.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table-C3sKpYHL.js","names":[],"sources":["../../src/table/Table.module.scss","../../src/table/Table.tsx"],"sourcesContent":[".selectedIndicatorCell {\n\tbox-shadow: inset 0.1875rem 0 0 var(--content-accent);\n}\n\n.sentinel {\n\theight: 1px;\n}\n","import { useEffect, useEffectEvent, useMemo, useRef } from \"react\";\n\nimport { formatPipelineDisplayValue } from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport { TableFormulaRowData } from \"@ryuzaki13/react-foundation-lib/formulas\";\nimport {\n\ttype FoundationTableRow,\n\tfoundationTableFeatures,\n\ttype TableColumnDef,\n\ttype TableColumnOrderState,\n\ttype TableColumnSizingState,\n\ttype TableColumnVisibilityState,\n\ttype TableSelectionMode,\n\tuseTableRowSelection\n} from \"@ryuzaki13/react-foundation-lib/table\";\nimport { useTable } from \"@tanstack/react-table\";\n\nimport {\n\tBaseTable,\n\tbuildBaseTableMergedCellsLayout,\n\tbuildTableFormattingSnapshot,\n\tFormattedTableCell,\n\tgetOrderedVisibleLeafColumns,\n\tshouldUseTableFormatting,\n\tuseTableColumnOrder,\n\tuseTableColumnPinning,\n\tuseTableColumnSizing,\n\tuseTableColumnVisibility,\n\ttype BaseTableColumnState,\n\ttype BaseTableProps,\n\ttype TableColumnPinningState\n} from \"../base-table\";\n\nimport styles from \"./Table.module.scss\";\n\n/**\n * Возвращает индекс как строковый id, если внешний id не передан.\n */\nfunction defaultGetRowId<TData>(_row: TData, index: number): string {\n\treturn String(index);\n}\n\n/**\n * Пропсы компонента Table.\n *\n * Компонент предназначен для плоских данных и по API осознанно сближен с TreeTable.\n */\nexport interface TableProps<TData extends object> {\n\t/**\n\t * Необязательный заголовок над таблицей.\n\t */\n\ttitle?: string;\n\t/**\n\t * Признак первичной загрузки.\n\t */\n\tisLoading?: boolean;\n\t/**\n\t * Признак фоновой догрузки или обновления данных.\n\t */\n\tisFetching?: boolean;\n\t/**\n\t * Плоский источник строк.\n\t */\n\tdata: readonly TData[] | undefined | null;\n\t/**\n\t * Описание колонок таблицы.\n\t */\n\tcolumns: readonly TableColumnDef<TData>[];\n\t/**\n\t * Режим выбора строк.\n\t */\n\tselectionMode?: TableSelectionMode;\n\t/**\n\t * Внешний список выбранных строк.\n\t *\n\t * Если передан, таблица синхронизирует визуальное выделение с этим набором id.\n\t */\n\tselectedRowIds?: readonly string[];\n\t/**\n\t * Стабильный идентификатор строки.\n\t *\n\t * Если не задан, используется индекс строки.\n\t */\n\tgetRowId?: (row: TData, index: number) => string;\n\t/**\n\t * Дополнительный CSS-класс корневого контейнера.\n\t */\n\tclassName?: string;\n\tminHeight?: `${number}em` | `${number}%`;\n\t/**\n\t * Дополнительный CSS-класс тега `table`.\n\t */\n\ttableClassName?: string;\n\t/**\n\t * Внешнее controlled-состояние видимости колонок.\n\t */\n\tcolumnVisibility?: TableColumnVisibilityState;\n\t/**\n\t * Стартовое uncontrolled-состояние видимости колонок.\n\t */\n\tdefaultColumnVisibility?: TableColumnVisibilityState;\n\t/**\n\t * Внешнее controlled-состояние порядка колонок.\n\t */\n\tcolumnOrder?: readonly string[];\n\t/**\n\t * Стартовое uncontrolled-состояние порядка колонок.\n\t */\n\tdefaultColumnOrder?: readonly string[];\n\t/**\n\t * Внешнее controlled-состояние ширин колонок в px.\n\t */\n\tcolumnSizing?: TableColumnSizingState;\n\t/**\n\t * Стартовое uncontrolled-состояние ширин колонок в px.\n\t */\n\tdefaultColumnSizing?: TableColumnSizingState;\n\t/**\n\t * Внешнее controlled-состояние start-pinning для колонок.\n\t */\n\tcolumnPinning?: TableColumnPinningState;\n\t/**\n\t * Стартовое uncontrolled-состояние start-pinning для колонок.\n\t */\n\tdefaultColumnPinning?: TableColumnPinningState;\n\t/**\n\t * Включает изменение ширины колонок через header-handle.\n\t */\n\tenableColumnResizing?: boolean;\n\t/**\n\t * Включает изменение порядка колонок через drag&drop заголовков.\n\t */\n\tenableColumnReordering?: boolean;\n\t/**\n\t * Минимальная ширина колонки при resize в px.\n\t */\n\tcolumnResizeMinWidth?: number;\n\t/**\n\t * Вызывается после изменения видимости колонок.\n\t */\n\tonColumnVisibilityChange?: (state: TableColumnVisibilityState) => void;\n\t/**\n\t * Вызывается после изменения порядка колонок.\n\t */\n\tonColumnOrderChange?: (state: TableColumnOrderState) => void;\n\t/**\n\t * Вызывается после изменения ширины колонок.\n\t */\n\tonColumnSizingChange?: (state: TableColumnSizingState) => void;\n\t/**\n\t * Вызывается после изменения start-pinning state.\n\t */\n\tonColumnPinningChange?: (state: TableColumnPinningState) => void;\n\t/**\n\t * Вызывается при активации строки кликом или клавиатурой.\n\t */\n\tonRowClick?: (row: TData) => void;\n\t/**\n\t * Вызывается после изменения выбранных строк.\n\t */\n\tonRowSelectionChange?: (rows: TData[]) => void;\n\t/**\n\t * Вызывается при достижении конца таблицы внутри scroll-контейнера.\n\t */\n\tonReachEnd?: () => void;\n\t/**\n\t * Позволяет запретить выбор отдельных строк.\n\t */\n\tgetRowCanSelect?: (row: TData) => boolean;\n\t/**\n\t * Позволяет добавить CSS-класс для конкретной строки.\n\t */\n\tgetRowClassName?: (row: TData) => string | undefined;\n\t/**\n\t * Контекстное меню заголовка колонки. Используется для общих runtime-действий\n\t * вроде server sorting без встраивания доменной логики в shared-таблицу.\n\t */\n\trenderHeaderContextMenu?: BaseTableProps<TData>[\"renderHeaderContextMenu\"];\n\t/**\n\t * Тонкая точка расширения содержимого ячейки поверх стандартного форматирования.\n\t *\n\t * В отличие от `column.cell`, этот слот не отключает общий formatting-runtime:\n\t * `defaultContent` уже содержит отформатированное значение, если оно применимо.\n\t */\n\trenderCellContent?: BaseTableProps<TData>[\"renderCellContent\"];\n}\n\n/**\n * Плоская таблица на базе TanStack Table как React-альтернатива `sap.m.Table`.\n */\nexport function Table<TData extends object>({\n\ttitle,\n\tisLoading,\n\tisFetching,\n\tdata,\n\tcolumns,\n\tselectionMode = \"none\",\n\tselectedRowIds,\n\tgetRowId,\n\tclassName,\n\tminHeight,\n\ttableClassName,\n\tcolumnVisibility,\n\tdefaultColumnVisibility,\n\tcolumnOrder,\n\tdefaultColumnOrder,\n\tcolumnSizing,\n\tdefaultColumnSizing,\n\tcolumnPinning,\n\tdefaultColumnPinning,\n\tenableColumnResizing = false,\n\tenableColumnReordering = false,\n\tcolumnResizeMinWidth,\n\tonColumnVisibilityChange,\n\tonColumnOrderChange,\n\tonColumnSizingChange,\n\tonColumnPinningChange,\n\tonRowClick,\n\tonRowSelectionChange,\n\tonReachEnd,\n\tgetRowCanSelect,\n\tgetRowClassName,\n\trenderHeaderContextMenu,\n\trenderCellContent\n}: TableProps<TData>) {\n\tconst tableData = useMemo(() => data ?? [], [data]);\n\tconst formattingSnapshot = useMemo(() => buildTableFormattingSnapshot(columns), [columns]);\n\tconst resolveRowId = getRowId ?? defaultGetRowId<TData>;\n\tconst rowById = useMemo(() => new Map(tableData.map((row, index) => [resolveRowId(row, index), row])), [resolveRowId, tableData]);\n\tconst availableRowIds = useMemo(() => Array.from(rowById.keys()), [rowById]);\n\tconst scrollableRef = useRef<HTMLDivElement | null>(null);\n\tconst sentinelRef = useRef<HTMLDivElement | null>(null);\n\n\tconst { rowSelection, activateRowSelection } = useTableRowSelection({\n\t\tavailableRowIds,\n\t\trowById,\n\t\tselectionMode,\n\t\tselectedRowIds,\n\t\tonRowSelectionChange\n\t});\n\tconst { columnVisibility: resolvedColumnVisibility, onColumnVisibilityChange: handleColumnVisibilityChange } = useTableColumnVisibility(\n\t\t{\n\t\t\tcolumnVisibility,\n\t\t\tdefaultColumnVisibility,\n\t\t\tonColumnVisibilityChange\n\t\t}\n\t);\n\tconst { columnOrder: resolvedColumnOrder, onColumnOrderChange: handleColumnOrderChange } = useTableColumnOrder({\n\t\tcolumnOrder,\n\t\tdefaultColumnOrder,\n\t\tonColumnOrderChange\n\t});\n\tconst { columnSizing: resolvedColumnSizing, onColumnSizingChange: handleColumnSizingChange } = useTableColumnSizing({\n\t\tcolumnSizing,\n\t\tdefaultColumnSizing,\n\t\tcolumnResizeMinWidth,\n\t\tonColumnSizingChange\n\t});\n\tconst { columnPinning: resolvedColumnPinning, onColumnPinningChange: handleColumnPinningChange } = useTableColumnPinning({\n\t\tcolumnPinning,\n\t\tdefaultColumnPinning,\n\t\tonColumnPinningChange\n\t});\n\tconst baseTableColumnState = useMemo<BaseTableColumnState>(\n\t\t() => ({\n\t\t\tcolumnOrder: resolvedColumnOrder,\n\t\t\tcolumnPinning: resolvedColumnPinning,\n\t\t\tcolumnSizing: resolvedColumnSizing,\n\t\t\tcolumnVisibility: resolvedColumnVisibility\n\t\t}),\n\t\t[resolvedColumnOrder, resolvedColumnPinning, resolvedColumnSizing, resolvedColumnVisibility]\n\t);\n\n\tconst emitReachEnd = useEffectEvent(() => {\n\t\tonReachEnd?.();\n\t});\n\n\tuseEffect(() => {\n\t\tif (!onReachEnd || !scrollableRef.current || !sentinelRef.current || isLoading) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst observer = new IntersectionObserver(\n\t\t\t(entries) => {\n\t\t\t\tconst entry = entries[0];\n\n\t\t\t\tif (entry?.isIntersecting) {\n\t\t\t\t\temitReachEnd();\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\troot: scrollableRef.current,\n\t\t\t\tthreshold: 0.1\n\t\t\t}\n\t\t);\n\n\t\tobserver.observe(sentinelRef.current);\n\n\t\treturn () => observer.disconnect();\n\t}, [isLoading, onReachEnd, tableData.length]);\n\n\tconst table = useTable({\n\t\tfeatures: foundationTableFeatures,\n\t\tdata: tableData as TData[],\n\t\tcolumns: columns as TableColumnDef<TData>[],\n\t\tstate: {\n\t\t\tcolumnOrder: resolvedColumnOrder,\n\t\t\tcolumnPinning: resolvedColumnPinning,\n\t\t\tcolumnSizing: resolvedColumnSizing,\n\t\t\tcolumnVisibility: resolvedColumnVisibility,\n\t\t\trowSelection\n\t\t},\n\t\tonColumnOrderChange: handleColumnOrderChange,\n\t\tonColumnPinningChange: handleColumnPinningChange,\n\t\tonColumnSizingChange: handleColumnSizingChange,\n\t\tonColumnVisibilityChange: handleColumnVisibilityChange,\n\t\tgetRowId: (row, index) => resolveRowId(row, index),\n\t\tenableMultiRowSelection: selectionMode === \"multi\",\n\t\tenableRowSelection: (row) => {\n\t\t\tif (selectionMode === \"none\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn getRowCanSelect ? getRowCanSelect(row.original) : true;\n\t\t}\n\t});\n\n\tconst visibleLeafColumns = getOrderedVisibleLeafColumns(table, baseTableColumnState);\n\tconst rowModelRows = table.getRowModel().rows;\n\tconst mergedCellLayout = useMemo(\n\t\t() =>\n\t\t\tbuildBaseTableMergedCellsLayout({\n\t\t\t\trows: rowModelRows,\n\t\t\t\tcolumns: visibleLeafColumns\n\t\t\t}),\n\t\t[rowModelRows, visibleLeafColumns]\n\t);\n\tconst leadingColumnId = visibleLeafColumns[0]?.id;\n\n\t/**\n\t * Активирует строку: обновляет выбор в соответствии с режимом и вызывает внешний callback.\n\t */\n\tconst activateRow = (row: FoundationTableRow<TData>) => {\n\t\tactivateRowSelection(row.id, row.getCanSelect());\n\t\tonRowClick?.(row.original);\n\t};\n\n\treturn (\n\t\t<BaseTable\n\t\t\ttable={table}\n\t\t\tcolumnState={baseTableColumnState}\n\t\t\ttitle={title}\n\t\t\tisLoading={isLoading}\n\t\t\tisFetching={isFetching}\n\t\t\tclassName={className}\n\t\t\tminHeight={minHeight}\n\t\t\ttableClassName={tableClassName}\n\t\t\tselectionMode={selectionMode}\n\t\t\tscrollableRef={scrollableRef}\n\t\t\tonActivateRow={selectionMode !== \"none\" || onRowClick ? activateRow : undefined}\n\t\t\tisRowInteractive={(row) => Boolean(onRowClick || (selectionMode !== \"none\" && row.getCanSelect()))}\n\t\t\tgetRowClassName={(row) => getRowClassName?.(row.original)}\n\t\t\tgetCellClassName={({ row, cell }) =>\n\t\t\t\tcell.column.id === leadingColumnId && row.getIsSelected() ? styles.selectedIndicatorCell : undefined\n\t\t\t}\n\t\t\tgetCellLayout={({ cell }) => mergedCellLayout.get(cell.id)}\n\t\t\trenderHeaderContextMenu={renderHeaderContextMenu}\n\t\t\tenableColumnResizing={enableColumnResizing}\n\t\t\tenableColumnReordering={enableColumnReordering}\n\t\t\tcolumnResizeMinWidth={columnResizeMinWidth}\n\t\t\trenderCellContent={(args) => {\n\t\t\t\tconst displayValue = formatPipelineDisplayValue({\n\t\t\t\t\tfield: formattingSnapshot.runtimeByColumnId[args.cell.column.id],\n\t\t\t\t\trawValue: args.cell.getValue(),\n\t\t\t\t\trowData: args.row.original as TableFormulaRowData,\n\t\t\t\t\trowKind: \"plain\"\n\t\t\t\t});\n\t\t\t\tconst defaultContent = !shouldUseTableFormatting({\n\t\t\t\t\tcolumnId: args.cell.column.id,\n\t\t\t\t\truntimeByColumnId: formattingSnapshot.runtimeByColumnId,\n\t\t\t\t\tcustomCellColumnIds: formattingSnapshot.customCellColumnIds\n\t\t\t\t}) ? (\n\t\t\t\t\targs.defaultContent\n\t\t\t\t) : (\n\t\t\t\t\t<FormattedTableCell displayValue={displayValue} align={args.columnMeta?.align} />\n\t\t\t\t);\n\n\t\t\t\tif (renderCellContent) {\n\t\t\t\t\treturn renderCellContent({\n\t\t\t\t\t\t...args,\n\t\t\t\t\t\tdefaultContent,\n\t\t\t\t\t\tdisplayValue\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn defaultContent;\n\t\t\t}}\n\t\t\tafterTableContent={onReachEnd ? <div ref={sentinelRef} className={styles.sentinel} aria-hidden=\"true\" /> : null}\n\t\t/>\n\t);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"table-ZPWbKoR-.js","names":[],"sources":["../../src/table/Table.module.scss","../../src/table/Table.tsx"],"sourcesContent":[".selectedIndicatorCell {\n\tbox-shadow: inset 0.1875rem 0 0 var(--content-accent);\n}\n\n.sentinel {\n\theight: 1px;\n}\n","import { useEffect, useEffectEvent, useMemo, useRef } from \"react\";\n\nimport { formatPipelineDisplayValue } from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport { TableFormulaRowData } from \"@ryuzaki13/react-foundation-lib/formulas\";\nimport {\n\ttype FoundationTableRow,\n\tfoundationTableFeatures,\n\ttype TableColumnDef,\n\ttype TableColumnOrderState,\n\ttype TableColumnSizingState,\n\ttype TableColumnVisibilityState,\n\ttype TableSelectionMode,\n\tuseTableRowSelection\n} from \"@ryuzaki13/react-foundation-lib/table\";\nimport { useTable } from \"@tanstack/react-table\";\n\nimport {\n\tBaseTable,\n\tbuildBaseTableMergedCellsLayout,\n\tbuildTableFormattingSnapshot,\n\tFormattedTableCell,\n\tgetOrderedVisibleLeafColumns,\n\tshouldUseTableFormatting,\n\tuseTableColumnOrder,\n\tuseTableColumnPinning,\n\tuseTableColumnSizing,\n\tuseTableColumnVisibility,\n\ttype BaseTableColumnState,\n\ttype BaseTableProps,\n\ttype TableColumnPinningState\n} from \"../base-table\";\n\nimport styles from \"./Table.module.scss\";\n\n/**\n * Возвращает индекс как строковый id, если внешний id не передан.\n */\nfunction defaultGetRowId<TData>(_row: TData, index: number): string {\n\treturn String(index);\n}\n\n/**\n * Пропсы компонента Table.\n *\n * Компонент предназначен для плоских данных и по API осознанно сближен с TreeTable.\n */\nexport interface TableProps<TData extends object> {\n\t/**\n\t * Необязательный заголовок над таблицей.\n\t */\n\ttitle?: string;\n\t/**\n\t * Признак первичной загрузки.\n\t */\n\tisLoading?: boolean;\n\t/**\n\t * Признак фоновой догрузки или обновления данных.\n\t */\n\tisFetching?: boolean;\n\t/**\n\t * Плоский источник строк.\n\t */\n\tdata: readonly TData[] | undefined | null;\n\t/**\n\t * Описание колонок таблицы.\n\t */\n\tcolumns: readonly TableColumnDef<TData>[];\n\t/**\n\t * Режим выбора строк.\n\t */\n\tselectionMode?: TableSelectionMode;\n\t/**\n\t * Внешний список выбранных строк.\n\t *\n\t * Если передан, таблица синхронизирует визуальное выделение с этим набором id.\n\t */\n\tselectedRowIds?: readonly string[];\n\t/**\n\t * Стабильный идентификатор строки.\n\t *\n\t * Если не задан, используется индекс строки.\n\t */\n\tgetRowId?: (row: TData, index: number) => string;\n\t/**\n\t * Дополнительный CSS-класс корневого контейнера.\n\t */\n\tclassName?: string;\n\tminHeight?: `${number}em` | `${number}%`;\n\t/**\n\t * Дополнительный CSS-класс тега `table`.\n\t */\n\ttableClassName?: string;\n\t/**\n\t * Внешнее controlled-состояние видимости колонок.\n\t */\n\tcolumnVisibility?: TableColumnVisibilityState;\n\t/**\n\t * Стартовое uncontrolled-состояние видимости колонок.\n\t */\n\tdefaultColumnVisibility?: TableColumnVisibilityState;\n\t/**\n\t * Внешнее controlled-состояние порядка колонок.\n\t */\n\tcolumnOrder?: readonly string[];\n\t/**\n\t * Стартовое uncontrolled-состояние порядка колонок.\n\t */\n\tdefaultColumnOrder?: readonly string[];\n\t/**\n\t * Внешнее controlled-состояние ширин колонок в px.\n\t */\n\tcolumnSizing?: TableColumnSizingState;\n\t/**\n\t * Стартовое uncontrolled-состояние ширин колонок в px.\n\t */\n\tdefaultColumnSizing?: TableColumnSizingState;\n\t/**\n\t * Внешнее controlled-состояние start-pinning для колонок.\n\t */\n\tcolumnPinning?: TableColumnPinningState;\n\t/**\n\t * Стартовое uncontrolled-состояние start-pinning для колонок.\n\t */\n\tdefaultColumnPinning?: TableColumnPinningState;\n\t/**\n\t * Включает изменение ширины колонок через header-handle.\n\t */\n\tenableColumnResizing?: boolean;\n\t/**\n\t * Включает изменение порядка колонок через drag&drop заголовков.\n\t */\n\tenableColumnReordering?: boolean;\n\t/**\n\t * Минимальная ширина колонки при resize в px.\n\t */\n\tcolumnResizeMinWidth?: number;\n\t/**\n\t * Вызывается после изменения видимости колонок.\n\t */\n\tonColumnVisibilityChange?: (state: TableColumnVisibilityState) => void;\n\t/**\n\t * Вызывается после изменения порядка колонок.\n\t */\n\tonColumnOrderChange?: (state: TableColumnOrderState) => void;\n\t/**\n\t * Вызывается после изменения ширины колонок.\n\t */\n\tonColumnSizingChange?: (state: TableColumnSizingState) => void;\n\t/**\n\t * Вызывается после изменения start-pinning state.\n\t */\n\tonColumnPinningChange?: (state: TableColumnPinningState) => void;\n\t/**\n\t * Вызывается при активации строки кликом или клавиатурой.\n\t */\n\tonRowClick?: (row: TData) => void;\n\t/**\n\t * Вызывается после изменения выбранных строк.\n\t */\n\tonRowSelectionChange?: (rows: TData[]) => void;\n\t/**\n\t * Вызывается при достижении конца таблицы внутри scroll-контейнера.\n\t */\n\tonReachEnd?: () => void;\n\t/**\n\t * Позволяет запретить выбор отдельных строк.\n\t */\n\tgetRowCanSelect?: (row: TData) => boolean;\n\t/**\n\t * Позволяет добавить CSS-класс для конкретной строки.\n\t */\n\tgetRowClassName?: (row: TData) => string | undefined;\n\t/**\n\t * Контекстное меню заголовка колонки. Используется для общих runtime-действий\n\t * вроде server sorting без встраивания доменной логики в shared-таблицу.\n\t */\n\trenderHeaderContextMenu?: BaseTableProps<TData>[\"renderHeaderContextMenu\"];\n\t/**\n\t * Тонкая точка расширения содержимого ячейки поверх стандартного форматирования.\n\t *\n\t * В отличие от `column.cell`, этот слот не отключает общий formatting-runtime:\n\t * `defaultContent` уже содержит отформатированное значение, если оно применимо.\n\t */\n\trenderCellContent?: BaseTableProps<TData>[\"renderCellContent\"];\n}\n\n/**\n * Плоская таблица на базе TanStack Table как React-альтернатива `sap.m.Table`.\n */\nexport function Table<TData extends object>({\n\ttitle,\n\tisLoading,\n\tisFetching,\n\tdata,\n\tcolumns,\n\tselectionMode = \"none\",\n\tselectedRowIds,\n\tgetRowId,\n\tclassName,\n\tminHeight,\n\ttableClassName,\n\tcolumnVisibility,\n\tdefaultColumnVisibility,\n\tcolumnOrder,\n\tdefaultColumnOrder,\n\tcolumnSizing,\n\tdefaultColumnSizing,\n\tcolumnPinning,\n\tdefaultColumnPinning,\n\tenableColumnResizing = false,\n\tenableColumnReordering = false,\n\tcolumnResizeMinWidth,\n\tonColumnVisibilityChange,\n\tonColumnOrderChange,\n\tonColumnSizingChange,\n\tonColumnPinningChange,\n\tonRowClick,\n\tonRowSelectionChange,\n\tonReachEnd,\n\tgetRowCanSelect,\n\tgetRowClassName,\n\trenderHeaderContextMenu,\n\trenderCellContent\n}: TableProps<TData>) {\n\tconst tableData = useMemo(() => data ?? [], [data]);\n\tconst formattingSnapshot = useMemo(() => buildTableFormattingSnapshot(columns), [columns]);\n\tconst resolveRowId = getRowId ?? defaultGetRowId<TData>;\n\tconst rowById = useMemo(() => new Map(tableData.map((row, index) => [resolveRowId(row, index), row])), [resolveRowId, tableData]);\n\tconst availableRowIds = useMemo(() => Array.from(rowById.keys()), [rowById]);\n\tconst scrollableRef = useRef<HTMLDivElement | null>(null);\n\tconst sentinelRef = useRef<HTMLDivElement | null>(null);\n\n\tconst { rowSelection, activateRowSelection } = useTableRowSelection({\n\t\tavailableRowIds,\n\t\trowById,\n\t\tselectionMode,\n\t\tselectedRowIds,\n\t\tonRowSelectionChange\n\t});\n\tconst { columnVisibility: resolvedColumnVisibility, onColumnVisibilityChange: handleColumnVisibilityChange } = useTableColumnVisibility(\n\t\t{\n\t\t\tcolumnVisibility,\n\t\t\tdefaultColumnVisibility,\n\t\t\tonColumnVisibilityChange\n\t\t}\n\t);\n\tconst { columnOrder: resolvedColumnOrder, onColumnOrderChange: handleColumnOrderChange } = useTableColumnOrder({\n\t\tcolumnOrder,\n\t\tdefaultColumnOrder,\n\t\tonColumnOrderChange\n\t});\n\tconst { columnSizing: resolvedColumnSizing, onColumnSizingChange: handleColumnSizingChange } = useTableColumnSizing({\n\t\tcolumnSizing,\n\t\tdefaultColumnSizing,\n\t\tcolumnResizeMinWidth,\n\t\tonColumnSizingChange\n\t});\n\tconst { columnPinning: resolvedColumnPinning, onColumnPinningChange: handleColumnPinningChange } = useTableColumnPinning({\n\t\tcolumnPinning,\n\t\tdefaultColumnPinning,\n\t\tonColumnPinningChange\n\t});\n\tconst baseTableColumnState = useMemo<BaseTableColumnState>(\n\t\t() => ({\n\t\t\tcolumnOrder: resolvedColumnOrder,\n\t\t\tcolumnPinning: resolvedColumnPinning,\n\t\t\tcolumnSizing: resolvedColumnSizing,\n\t\t\tcolumnVisibility: resolvedColumnVisibility\n\t\t}),\n\t\t[resolvedColumnOrder, resolvedColumnPinning, resolvedColumnSizing, resolvedColumnVisibility]\n\t);\n\n\tconst emitReachEnd = useEffectEvent(() => {\n\t\tonReachEnd?.();\n\t});\n\n\tuseEffect(() => {\n\t\tif (!onReachEnd || !scrollableRef.current || !sentinelRef.current || isLoading) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst observer = new IntersectionObserver(\n\t\t\t(entries) => {\n\t\t\t\tconst entry = entries[0];\n\n\t\t\t\tif (entry?.isIntersecting) {\n\t\t\t\t\temitReachEnd();\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\troot: scrollableRef.current,\n\t\t\t\tthreshold: 0.1\n\t\t\t}\n\t\t);\n\n\t\tobserver.observe(sentinelRef.current);\n\n\t\treturn () => observer.disconnect();\n\t}, [isLoading, onReachEnd, tableData.length]);\n\n\tconst table = useTable({\n\t\tfeatures: foundationTableFeatures,\n\t\tdata: tableData as TData[],\n\t\tcolumns: columns as TableColumnDef<TData>[],\n\t\tstate: {\n\t\t\tcolumnOrder: resolvedColumnOrder,\n\t\t\tcolumnPinning: resolvedColumnPinning,\n\t\t\tcolumnSizing: resolvedColumnSizing,\n\t\t\tcolumnVisibility: resolvedColumnVisibility,\n\t\t\trowSelection\n\t\t},\n\t\tonColumnOrderChange: handleColumnOrderChange,\n\t\tonColumnPinningChange: handleColumnPinningChange,\n\t\tonColumnSizingChange: handleColumnSizingChange,\n\t\tonColumnVisibilityChange: handleColumnVisibilityChange,\n\t\tgetRowId: (row, index) => resolveRowId(row, index),\n\t\tenableMultiRowSelection: selectionMode === \"multi\",\n\t\tenableRowSelection: (row) => {\n\t\t\tif (selectionMode === \"none\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn getRowCanSelect ? getRowCanSelect(row.original) : true;\n\t\t}\n\t});\n\n\tconst visibleLeafColumns = getOrderedVisibleLeafColumns(table, baseTableColumnState);\n\tconst rowModelRows = table.getRowModel().rows;\n\tconst mergedCellLayout = useMemo(\n\t\t() =>\n\t\t\tbuildBaseTableMergedCellsLayout({\n\t\t\t\trows: rowModelRows,\n\t\t\t\tcolumns: visibleLeafColumns\n\t\t\t}),\n\t\t[rowModelRows, visibleLeafColumns]\n\t);\n\tconst leadingColumnId = visibleLeafColumns[0]?.id;\n\n\t/**\n\t * Активирует строку: обновляет выбор в соответствии с режимом и вызывает внешний callback.\n\t */\n\tconst activateRow = (row: FoundationTableRow<TData>) => {\n\t\tactivateRowSelection(row.id, row.getCanSelect());\n\t\tonRowClick?.(row.original);\n\t};\n\n\treturn (\n\t\t<BaseTable\n\t\t\ttable={table}\n\t\t\tcolumnState={baseTableColumnState}\n\t\t\ttitle={title}\n\t\t\tisLoading={isLoading}\n\t\t\tisFetching={isFetching}\n\t\t\tclassName={className}\n\t\t\tminHeight={minHeight}\n\t\t\ttableClassName={tableClassName}\n\t\t\tselectionMode={selectionMode}\n\t\t\tscrollableRef={scrollableRef}\n\t\t\tonActivateRow={selectionMode !== \"none\" || onRowClick ? activateRow : undefined}\n\t\t\tisRowInteractive={(row) => Boolean(onRowClick || (selectionMode !== \"none\" && row.getCanSelect()))}\n\t\t\tgetRowClassName={(row) => getRowClassName?.(row.original)}\n\t\t\tgetCellClassName={({ row, cell }) =>\n\t\t\t\tcell.column.id === leadingColumnId && row.getIsSelected() ? styles.selectedIndicatorCell : undefined\n\t\t\t}\n\t\t\tgetCellLayout={({ cell }) => mergedCellLayout.get(cell.id)}\n\t\t\trenderHeaderContextMenu={renderHeaderContextMenu}\n\t\t\tenableColumnResizing={enableColumnResizing}\n\t\t\tenableColumnReordering={enableColumnReordering}\n\t\t\tcolumnResizeMinWidth={columnResizeMinWidth}\n\t\t\trenderCellContent={(args) => {\n\t\t\t\tconst displayValue = formatPipelineDisplayValue({\n\t\t\t\t\tfield: formattingSnapshot.runtimeByColumnId[args.cell.column.id],\n\t\t\t\t\trawValue: args.cell.getValue(),\n\t\t\t\t\trowData: args.row.original as TableFormulaRowData,\n\t\t\t\t\trowKind: \"plain\"\n\t\t\t\t});\n\t\t\t\tconst defaultContent = !shouldUseTableFormatting({\n\t\t\t\t\tcolumnId: args.cell.column.id,\n\t\t\t\t\truntimeByColumnId: formattingSnapshot.runtimeByColumnId,\n\t\t\t\t\tcustomCellColumnIds: formattingSnapshot.customCellColumnIds\n\t\t\t\t}) ? (\n\t\t\t\t\targs.defaultContent\n\t\t\t\t) : (\n\t\t\t\t\t<FormattedTableCell displayValue={displayValue} align={args.columnMeta?.align} />\n\t\t\t\t);\n\n\t\t\t\tif (renderCellContent) {\n\t\t\t\t\treturn renderCellContent({\n\t\t\t\t\t\t...args,\n\t\t\t\t\t\tdefaultContent,\n\t\t\t\t\t\tdisplayValue\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn defaultContent;\n\t\t\t}}\n\t\t\tafterTableContent={onReachEnd ? <div ref={sentinelRef} className={styles.sentinel} aria-hidden=\"true\" /> : null}\n\t\t/>\n\t);\n}\n"],"mappings":"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"}
@@ -3,6 +3,8 @@ export interface ContextMenuTriggerProps {
3
3
  children: React.ReactElement<React.HTMLAttributes<HTMLElement> & {
4
4
  ref?: React.Ref<HTMLElement>;
5
5
  }>;
6
+ /** Позволяет одному ContextMenu обслуживать множество вложенных целей без отдельного floating-ui runtime на каждую строку или ячейку. */
7
+ resolveTrigger?: (eventTarget: EventTarget | null) => HTMLElement | null;
6
8
  }
7
9
  export declare const ContextMenuTrigger: React.FC<ContextMenuTriggerProps>;
8
10
  //# sourceMappingURL=ContextMenuTrigger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ContextMenuTrigger.d.ts","sourceRoot":"","sources":["../../../src/context-menu/components/ContextMenuTrigger.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuB,MAAM,OAAO,CAAC;AAK5C,MAAM,WAAW,uBAAuB;IACvC,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,GAAG;QAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;KAAE,CAAC,CAAC;CACnG;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAkBhE,CAAC"}
1
+ {"version":3,"file":"ContextMenuTrigger.d.ts","sourceRoot":"","sources":["../../../src/context-menu/components/ContextMenuTrigger.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuB,MAAM,OAAO,CAAC;AAK5C,MAAM,WAAW,uBAAuB;IACvC,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,GAAG;QAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;KAAE,CAAC,CAAC;IACnG,yIAAyI;IACzI,cAAc,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,KAAK,WAAW,GAAG,IAAI,CAAC;CACzE;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CA4BhE,CAAC"}
@@ -11,8 +11,8 @@ interface MenuContextValue {
11
11
  setFloating: (node: HTMLElement | null) => void;
12
12
  registerTriggerElement: (node: HTMLElement | null) => void;
13
13
  onTriggerClick: (event: React.MouseEvent<HTMLElement>) => void;
14
- onTriggerContextMenu: (event: React.MouseEvent<HTMLElement>) => void;
15
- onTriggerKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;
14
+ onTriggerContextMenu: (event: React.MouseEvent<HTMLElement>, triggerElement?: HTMLElement) => void;
15
+ onTriggerKeyDown: (event: React.KeyboardEvent<HTMLElement>, triggerElement?: HTMLElement) => void;
16
16
  closeMenu: () => void;
17
17
  }
18
18
  export declare const MenuContext: import("react").Context<MenuContextValue | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"MenuContext.d.ts","sourceRoot":"","sources":["../../../src/context-menu/components/MenuContext.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,8CAA8C,CAAC;AAE9F,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,aAAa,CAAC;AAEtD,UAAU,gBAAgB;IACzB,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;IAClC,WAAW,EAAE,SAAS,GAAG,IAAI,CAAC;IAC9B,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC;IACpC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACjD,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAChD,WAAW,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,sBAAsB,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3D,cAAc,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC/D,oBAAoB,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACrE,gBAAgB,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACpE,SAAS,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,eAAO,MAAM,WAAW,kDAA+C,CAAC;AAExE,wBAAgB,cAAc,qBAS7B"}
1
+ {"version":3,"file":"MenuContext.d.ts","sourceRoot":"","sources":["../../../src/context-menu/components/MenuContext.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,8CAA8C,CAAC;AAE9F,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,aAAa,CAAC;AAEtD,UAAU,gBAAgB;IACzB,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;IAClC,WAAW,EAAE,SAAS,GAAG,IAAI,CAAC;IAC9B,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC;IACpC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACjD,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAChD,WAAW,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,sBAAsB,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3D,cAAc,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC/D,oBAAoB,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,cAAc,CAAC,EAAE,WAAW,KAAK,IAAI,CAAC;IACnG,gBAAgB,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,cAAc,CAAC,EAAE,WAAW,KAAK,IAAI,CAAC;IAClG,SAAS,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,eAAO,MAAM,WAAW,kDAA+C,CAAC;AAExE,wBAAgB,cAAc,qBAS7B"}
@@ -1 +1 @@
1
- {"version":3,"file":"MenuRoot.d.ts","sourceRoot":"","sources":["../../../src/context-menu/components/MenuRoot.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiD,MAAM,OAAO,CAAC;AAEtE,OAAO,EAA4B,SAAS,EAAsB,MAAM,oBAAoB,CAAC;AAU7F,OAAO,EAAe,eAAe,EAAE,MAAM,eAAe,CAAC;AAE7D,UAAU,aAAa;IACtB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,IAAI,EAAE,eAAe,CAAC;IACtB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC;AAED,wBAAgB,QAAQ,CAAC,EACxB,QAAQ,EACR,IAAI,EACJ,SAA6D,EAC7D,IAAI,EAAE,cAAc,EACpB,WAAW,EACX,YAAY,EACZ,EAAE,aAAa,qBAyKf"}
1
+ {"version":3,"file":"MenuRoot.d.ts","sourceRoot":"","sources":["../../../src/context-menu/components/MenuRoot.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiD,MAAM,OAAO,CAAC;AAEtE,OAAO,EAA4B,SAAS,EAAsB,MAAM,oBAAoB,CAAC;AAU7F,OAAO,EAAe,eAAe,EAAE,MAAM,eAAe,CAAC;AAE7D,UAAU,aAAa;IACtB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,IAAI,EAAE,eAAe,CAAC;IACtB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC;AAED,wBAAgB,QAAQ,CAAC,EACxB,QAAQ,EACR,IAAI,EACJ,SAA6D,EAC7D,IAAI,EAAE,cAAc,EACpB,WAAW,EACX,YAAY,EACZ,EAAE,aAAa,qBAgLf"}
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "../chunks/context-menu-CCAr_R-t.js";
1
+ import { n as e, t } from "../chunks/context-menu-HC7Vteb5.js";
2
2
  export { e as ContextMenu, t as DropdownMenu };
@@ -1,4 +1,4 @@
1
- import { t as e } from "../chunks/table-C3sKpYHL.js";
1
+ import { t as e } from "../chunks/table-ZPWbKoR-.js";
2
2
  import { useMemo as t } from "react";
3
3
  import { jsx as n } from "react/jsx-runtime";
4
4
  //#region src/simple-table/SimpleTable.tsx
@@ -1,2 +1,2 @@
1
- import { t as e } from "../chunks/table-C3sKpYHL.js";
1
+ import { t as e } from "../chunks/table-ZPWbKoR-.js";
2
2
  export { e as Table };
@@ -1,4 +1,4 @@
1
- import { n as e } from "../chunks/context-menu-CCAr_R-t.js";
1
+ import { n as e } from "../chunks/context-menu-HC7Vteb5.js";
2
2
  import { Fragment as t, jsx as n, jsxs as r } from "react/jsx-runtime";
3
3
  import { BrushCleaningIcon as i, SortAscIcon as a, SortDescIcon as o } from "lucide-react";
4
4
  //#region src/table-sorting/TableSortingControls.tsx
@@ -1,4 +1,4 @@
1
- import { a as e, c as t, d as n, i as r, n as i, o as ee, p as te, r as ne, s as re, t as ie } from "../chunks/base-table-BNtd1xSl.js";
1
+ import { a as e, c as t, d as n, i as r, n as i, o as ee, p as te, r as ne, s as re, t as ie } from "../chunks/base-table-CClQop2i.js";
2
2
  import { useEffect as a, useEffectEvent as o, useMemo as s, useRef as c, useState as ae } from "react";
3
3
  import { cn as oe } from "@ryuzaki13/react-foundation-lib/utils";
4
4
  import { jsx as l, jsxs as u } from "react/jsx-runtime";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ryuzaki13/react-foundation-ui",
3
- "version": "1.10.1",
3
+ "version": "1.11.0",
4
4
  "description": "Reusable React foundation UI primitives and Storybook stories.",
5
5
  "license": "MIT",
6
6
  "author": "Ryuzaki13",
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-CB9pifff.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-DFW8ghoN.js";import{a as p,i as m,n as h,o as g,r as _,s as v,t as y}from"./Badge.stories-DCRYgiFn.js";function b(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(s,{of:h,parameters:{atomicCanvas:!0,layout:`padded`,docs:{toc:!0}}}),`
1
+ import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Ctjgxy8H.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-Cyh_k-EZ.js";import{a as p,i as m,n as h,o as g,r as _,s as v,t as y}from"./Badge.stories-Dq22iAGc.js";function b(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(s,{of:h,parameters:{atomicCanvas:!0,layout:`padded`,docs:{toc:!0}}}),`
2
2
  `,(0,S.jsx)(u,{children:`Badge`}),`
3
3
  `,(0,S.jsx)(o,{children:`Компактная текстовая метка для статусов, категорий, фильтров и коротких служебных пометок`}),`
4
4
  `,(0,S.jsx)(t.p,{children:`Badge подходит для коротких подписей, которые должны быстро читаться и не перегружать интерфейс:`}),`
@@ -1,4 +1,4 @@
1
- import{n as e,r as t}from"./rolldown-runtime-DkW27tQK.js";import{t as n}from"./react-BZJXY1be.js";import{n as r}from"./iframe-CB9pifff.js";import{i,n as a,r as o,t as s}from"./BadgeList-hUxkrQKk.js";var c=t({Appearances:()=>h,Basic:()=>p,RemovableList:()=>_,Sizes:()=>g,Tones:()=>m,__namedExportsOrder:()=>v,default:()=>f}),l,u,d,f,p,m,h,g,_,v;function y(){return(y=e((()=>{l=n(),i(),a(),u=r(),{useArgs:d}=__STORYBOOK_MODULE_PREVIEW_API__,f={title:`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:[`xs`,`sm`,`md`,`lg`,`xl`]},tone:{description:`Цветовой тон бейджа.`,control:`inline-radio`,options:[`neutral`,`brand`,`success`,`warning`,`error`,`info`]},appearance:{description:`Форма бейджа.`,control:`inline-radio`,options:[`solid`,`outline`,`ghost`,`transparent`]},onRemove:{description:`Показывает кнопку удаления и вызывает обработчик по клику.`,control:!1}}},p={render:function(){let[e]=d();return(0,u.jsx)(o,{...e})}},m={render:()=>(0,u.jsxs)(s,{children:[(0,u.jsx)(o,{tone:`neutral`,appearance:`outline`,children:`Neutral`}),(0,u.jsx)(o,{tone:`success`,appearance:`solid`,children:`Успешно`}),(0,u.jsx)(o,{tone:`warning`,appearance:`solid`,children:`Внимание`}),(0,u.jsx)(o,{tone:`error`,appearance:`solid`,children:`Ошибка`}),(0,u.jsx)(o,{tone:`info`,appearance:`solid`,children:`Информация`})]})},h={render:()=>(0,u.jsxs)(s,{children:[(0,u.jsx)(o,{tone:`neutral`,appearance:`solid`,children:`Solid`}),(0,u.jsx)(o,{tone:`neutral`,appearance:`outline`,children:`Outline`}),(0,u.jsx)(o,{tone:`info`,appearance:`ghost`,children:`Ghost`}),(0,u.jsx)(o,{tone:`warning`,appearance:`transparent`,children:`Transparent`})]})},g={render:()=>(0,u.jsxs)(s,{children:[(0,u.jsx)(o,{size:`xs`,children:`Extra Small`}),(0,u.jsx)(o,{size:`sm`,children:`Small`}),(0,u.jsx)(o,{size:`md`,children:`Medium`}),(0,u.jsx)(o,{size:`lg`,children:`Large`}),(0,u.jsx)(o,{size:`xl`,children:`Extra Large`})]})},_={render:()=>{let[e,t]=(0,l.useState)([`Фильтр A`,`Фильтр B`,`Фильтр C`]);return(0,u.jsx)(s,{children:e.map(e=>(0,u.jsx)(o,{tone:`info`,appearance:`outline`,onRemove:()=>t(t=>t.filter(t=>t!==e)),children:e},e))})}},p.parameters={...p.parameters,docs:{...p.parameters?.docs,source:{originalSource:`{
1
+ import{n as e,r as t}from"./rolldown-runtime-DkW27tQK.js";import{t as n}from"./react-BZJXY1be.js";import{n as r}from"./iframe-Ctjgxy8H.js";import{i,n as a,r as o,t as s}from"./BadgeList-Cf2yUv1u.js";var c=t({Appearances:()=>h,Basic:()=>p,RemovableList:()=>_,Sizes:()=>g,Tones:()=>m,__namedExportsOrder:()=>v,default:()=>f}),l,u,d,f,p,m,h,g,_,v;function y(){return(y=e((()=>{l=n(),i(),a(),u=r(),{useArgs:d}=__STORYBOOK_MODULE_PREVIEW_API__,f={title:`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:[`xs`,`sm`,`md`,`lg`,`xl`]},tone:{description:`Цветовой тон бейджа.`,control:`inline-radio`,options:[`neutral`,`brand`,`success`,`warning`,`error`,`info`]},appearance:{description:`Форма бейджа.`,control:`inline-radio`,options:[`solid`,`outline`,`ghost`,`transparent`]},onRemove:{description:`Показывает кнопку удаления и вызывает обработчик по клику.`,control:!1}}},p={render:function(){let[e]=d();return(0,u.jsx)(o,{...e})}},m={render:()=>(0,u.jsxs)(s,{children:[(0,u.jsx)(o,{tone:`neutral`,appearance:`outline`,children:`Neutral`}),(0,u.jsx)(o,{tone:`success`,appearance:`solid`,children:`Успешно`}),(0,u.jsx)(o,{tone:`warning`,appearance:`solid`,children:`Внимание`}),(0,u.jsx)(o,{tone:`error`,appearance:`solid`,children:`Ошибка`}),(0,u.jsx)(o,{tone:`info`,appearance:`solid`,children:`Информация`})]})},h={render:()=>(0,u.jsxs)(s,{children:[(0,u.jsx)(o,{tone:`neutral`,appearance:`solid`,children:`Solid`}),(0,u.jsx)(o,{tone:`neutral`,appearance:`outline`,children:`Outline`}),(0,u.jsx)(o,{tone:`info`,appearance:`ghost`,children:`Ghost`}),(0,u.jsx)(o,{tone:`warning`,appearance:`transparent`,children:`Transparent`})]})},g={render:()=>(0,u.jsxs)(s,{children:[(0,u.jsx)(o,{size:`xs`,children:`Extra Small`}),(0,u.jsx)(o,{size:`sm`,children:`Small`}),(0,u.jsx)(o,{size:`md`,children:`Medium`}),(0,u.jsx)(o,{size:`lg`,children:`Large`}),(0,u.jsx)(o,{size:`xl`,children:`Extra Large`})]})},_={render:()=>{let[e,t]=(0,l.useState)([`Фильтр A`,`Фильтр B`,`Фильтр C`]);return(0,u.jsx)(s,{children:e.map(e=>(0,u.jsx)(o,{tone:`info`,appearance:`outline`,onRemove:()=>t(t=>t.filter(t=>t!==e)),children:e},e))})}},p.parameters={...p.parameters,docs:{...p.parameters?.docs,source:{originalSource:`{
2
2
  render: function Render() {
3
3
  const [args] = useArgs<BadgeStoryArgs>();
4
4
  return <Badge {...args} />;
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{t}from"./react-BZJXY1be.js";import{n,t as r}from"./x-DgcBZVW3.js";import{n as i}from"./iframe-CB9pifff.js";import{a,i as o}from"./utils-tg3ibbzi.js";import{a as s,l as c}from"./array-D-_yMMUK-BQ0uu1hZ.js";import{n as l,t as u}from"./FloatingPopover-Cmz412EM.js";import{a as d,i as f,r as p,t as m}from"./uiClasses-Bz6cvlDQ.js";import{n as h,t as g}from"./FlexContainer-BWyPlTMB.js";function _({maxChar:e,placement:t=`left`,closeDelay:n=0,maxWidth:r,children:i,block:a,state:o,textWrap:s,textWrapProps:l}){let d=c(i);if(!d.length||e&&d.length<e)return(0,v.jsx)(`span`,{children:d});let f=s??`div`,p={style:{display:a?`block`:`inline-block`,width:e?`${e-3}ch`:`auto`},className:`textOverflow`},m={...l,...p,style:{...l?.style,...p.style},className:[l?.className,p.className].filter(Boolean).join(` `)};return(0,v.jsx)(u,{state:o,placement:t,openOnHover:!0,content:d,closeDelay:n,maxWidth:r,children:(0,v.jsx)(f,{...m,children:d})})}var v;function y(){return(y=e((()=>{s(),l(),v=i(),_.__docgenInfo={description:``,methods:[],displayName:`TextOverflow`,props:{children:{required:!0,tsType:{name:`string`},description:``},maxChar:{required:!1,tsType:{name:`number`},description:``},maxWidth:{required:!1,tsType:{name:`number`},description:`Максимальная ширина тултипа в em.`},placement:{required:!1,tsType:{name:`Placement`},description:``,defaultValue:{value:`"left"`,computed:!1}},closeDelay:{required:!1,tsType:{name:`number`},description:``,defaultValue:{value:`0`,computed:!1}},block:{required:!1,tsType:{name:`literal`,value:`true`},description:`Для работы text-overflow элемент обязан быть блочным или inline-block.
1
+ import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{t}from"./react-BZJXY1be.js";import{n,t as r}from"./x-4Az7SNSv.js";import{n as i}from"./iframe-Ctjgxy8H.js";import{a,i as o}from"./utils-tg3ibbzi.js";import{a as s,l as c}from"./array-D-_yMMUK-BQ0uu1hZ.js";import{n as l,t as u}from"./FloatingPopover-Bdkmabj9.js";import{a as d,i as f,r as p,t as m}from"./uiClasses-Bz6cvlDQ.js";import{n as h,t as g}from"./FlexContainer-BWyPlTMB.js";function _({maxChar:e,placement:t=`left`,closeDelay:n=0,maxWidth:r,children:i,block:a,state:o,textWrap:s,textWrapProps:l}){let d=c(i);if(!d.length||e&&d.length<e)return(0,v.jsx)(`span`,{children:d});let f=s??`div`,p={style:{display:a?`block`:`inline-block`,width:e?`${e-3}ch`:`auto`},className:`textOverflow`},m={...l,...p,style:{...l?.style,...p.style},className:[l?.className,p.className].filter(Boolean).join(` `)};return(0,v.jsx)(u,{state:o,placement:t,openOnHover:!0,content:d,closeDelay:n,maxWidth:r,children:(0,v.jsx)(f,{...m,children:d})})}var v;function y(){return(y=e((()=>{s(),l(),v=i(),_.__docgenInfo={description:``,methods:[],displayName:`TextOverflow`,props:{children:{required:!0,tsType:{name:`string`},description:``},maxChar:{required:!1,tsType:{name:`number`},description:``},maxWidth:{required:!1,tsType:{name:`number`},description:`Максимальная ширина тултипа в em.`},placement:{required:!1,tsType:{name:`Placement`},description:``,defaultValue:{value:`"left"`,computed:!1}},closeDelay:{required:!1,tsType:{name:`number`},description:``,defaultValue:{value:`0`,computed:!1}},block:{required:!1,tsType:{name:`literal`,value:`true`},description:`Для работы text-overflow элемент обязан быть блочным или inline-block.
2
2
  Если в качестве обёртки передается инлайновый компонент, то он будет
3
3
  перезаписан через стили на display: block или inline-block в зависимости
4
4
  от установки данного пропса.`},state:{required:!1,tsType:{name:`union`,raw:`"information" | "error" | "warning" | "success" | "negative"`,elements:[{name:`literal`,value:`"information"`},{name:`literal`,value:`"error"`},{name:`literal`,value:`"warning"`},{name:`literal`,value:`"success"`},{name:`literal`,value:`"negative"`}]},description:``},textWrap:{required:!1,tsType:{name:`T`},description:``},textWrapProps:{required:!1,tsType:{name:`Omit`,elements:[{name:`ComponentProps`,elements:[{name:`T`}],raw:`ComponentProps<T>`},{name:`literal`,value:`"children"`}],raw:`Omit<ComponentProps<T>, "children">`},description:``}}}})))()}var b,x,S,C,w,T,E,D,O,k;function A(){return(A=e((()=>{b=`qBtmnH`,x=`p-HsHY`,S=`u9tQAE`,C=`FRScRz`,w=`W13uQO`,T=`_3IRcM9`,E=`R3ybI7`,D=`DdWAaC`,O=`_5cXBQF`,k={badge:b,passive:x,sizeXs:S,sizeSm:C,sizeMd:w,sizeLg:T,sizeXl:E,content:D,removeButton:O}})))()}function j({children:e,size:t=`sm`,tone:n,appearance:i,className:o,onRemove:s}){let c=n??`neutral`,l=d({tone:n,appearance:i,fallbackTone:c,fallbackAppearance:c===`neutral`?`outline`:`solid`});return(0,M.jsxs)(`div`,{className:a(k.badge,N[t],p(l.tone),m(l.appearance),!s&&k.passive,o),children:[(0,M.jsx)(_,{maxChar:25,placement:`top`,block:!0,textWrapProps:{className:k.content},children:String(e)}),s&&(0,M.jsx)(`button`,{type:`button`,onClick:s,className:k.removeButton,"aria-label":`Удалить бейдж`,"data-ui":`badge-remove-button`,"data-action":`remove-badge`,children:(0,M.jsx)(r,{})})]})}var M,N;function P(){return(P=e((()=>{o(),n(),y(),f(),A(),M=i(),N={xs:k.sizeXs,sm:k.sizeSm,md:k.sizeMd,lg:k.sizeLg,xl:k.sizeXl},j.__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" | "brand" | "error" | "warning" | "success" | "info"`,elements:[{name:`literal`,value:`"neutral"`},{name:`literal`,value:`"brand"`},{name:`literal`,value:`"error"`},{name:`literal`,value:`"warning"`},{name:`literal`,value:`"success"`},{name:`literal`,value:`"info"`}]},description:``},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 F({children:e}){return(0,L.jsx)(g,{inline:!0,wrap:!0,gap:`sm`,align:`baseline`,children:I.Children.map(e,(e,t)=>(0,L.jsx)(I.Fragment,{children:e},t))})}var I,L;function R(){return(R=e((()=>{I=t(),h(),L=i(),F.__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:``}}}})))()}export{P as i,R as n,j as r,F as t};
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-CB9pifff.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-DFW8ghoN.js";import{a as p,i as m,n as h,o as g,r as _,t as v}from"./Button.stories-C3IDTh6L.js";function y(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(s,{of:h,parameters:{atomicCanvas:!0,layout:`padded`,docs:{toc:!0}}}),`
1
+ import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Ctjgxy8H.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-Cyh_k-EZ.js";import{a as p,i as m,n as h,o as g,r as _,t as v}from"./Button.stories-4tFPDHfK.js";function y(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(s,{of:h,parameters:{atomicCanvas:!0,layout:`padded`,docs:{toc:!0}}}),`
2
2
  `,(0,x.jsx)(u,{children:`Button`}),`
3
3
  `,(0,x.jsx)(o,{children:`Базовая action-кнопка дизайн-системы для пользовательских действий, подтверждений и быстрых операций`}),`
4
4
  `,(0,x.jsxs)(t.p,{children:[(0,x.jsx)(t.code,{children:`Button`}),` используется как универсальная кнопка интерфейса: в формах, тулбарах, модальных окнах, карточках, таблицах и компактных icon-only сценариях.`]}),`
@@ -1,4 +1,4 @@
1
- import{a as e,n as t}from"./rolldown-runtime-DkW27tQK.js";import{t as n}from"./react-BZJXY1be.js";import{n as r}from"./iframe-CB9pifff.js";import{a as i,i as a}from"./utils-tg3ibbzi.js";import{n as o,t as s}from"./FloatingPopover-Cmz412EM.js";import{n as c,t as l}from"./ui.module-31LPbZGK.js";import{a as u,i as d,r as f,t as p}from"./uiClasses-Bz6cvlDQ.js";var m,h,g,_,v;function y(){return(y=t((()=>{m=`wLOHwj`,h=`lFsM-Y`,g=`LPob63`,_=`tsaGtv`,v={button:m,iconOnly:h,buttonInner:g,buttonIcon:_}})))()}var b,x,S;function C(){return(C=t((()=>{b=e(n(),1),a(),o(),l(),d(),y(),x=r(),S=(0,b.forwardRef)(function({children:e,disabled:t,className:n,icon:r,iconEnd:a,title:o,variant:l,tone:d,appearance:m,type:h=`button`,"aria-label":g,..._},y){let S=b.Children.count(e)>0,C=!!r&&!S,w=u({variant:l,tone:d,appearance:m,fallbackAppearance:d&&d!==`neutral`?`solid`:`outline`}),T=C?g??o:g,E=(0,x.jsx)(`button`,{..._,ref:y,type:h,disabled:t,"aria-label":T,className:i(c.uiElement,c.uiInputControl,v.button,f(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 o?(0,x.jsx)(s,{placement:`bottom`,tooltip:!0,content:(0,x.jsx)(x.Fragment,{children:o}),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{a as e,n as t}from"./rolldown-runtime-DkW27tQK.js";import{t as n}from"./react-BZJXY1be.js";import{n as r}from"./iframe-Ctjgxy8H.js";import{a as i,i as a}from"./utils-tg3ibbzi.js";import{n as o,t as s}from"./FloatingPopover-Bdkmabj9.js";import{n as c,t as l}from"./ui.module-31LPbZGK.js";import{a as u,i as d,r as f,t as p}from"./uiClasses-Bz6cvlDQ.js";var m,h,g,_,v;function y(){return(y=t((()=>{m=`wLOHwj`,h=`lFsM-Y`,g=`LPob63`,_=`tsaGtv`,v={button:m,iconOnly:h,buttonInner:g,buttonIcon:_}})))()}var b,x,S;function C(){return(C=t((()=>{b=e(n(),1),a(),o(),l(),d(),y(),x=r(),S=(0,b.forwardRef)(function({children:e,disabled:t,className:n,icon:r,iconEnd:a,title:o,variant:l,tone:d,appearance:m,type:h=`button`,"aria-label":g,..._},y){let S=b.Children.count(e)>0,C=!!r&&!S,w=u({variant:l,tone:d,appearance:m,fallbackAppearance:d&&d!==`neutral`?`solid`:`outline`}),T=C?g??o:g,E=(0,x.jsx)(`button`,{..._,ref:y,type:h,disabled:t,"aria-label":T,className:i(c.uiElement,c.uiInputControl,v.button,f(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 o?(0,x.jsx)(s,{placement:`bottom`,tooltip:!0,content:(0,x.jsx)(x.Fragment,{children:o}),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
  | "brand"
@@ -1,4 +1,4 @@
1
- import{n as e,r as t}from"./rolldown-runtime-DkW27tQK.js";import{n,t as r}from"./check-7oGyK4Lh.js";import{n as i,t as a}from"./download-Cicfr3Yq.js";import{i as o,n as s,r as c}from"./iframe-CB9pifff.js";import{n as l,t as u}from"./Button-CN90zPTE.js";var d,f;function p(){return(p=e((()=>{o(),d=[[`path`,{d:`M10.268 21a2 2 0 0 0 3.464 0`,key:`vwvbt9`}],[`path`,{d:`M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326`,key:`11g9vi`}]],f=c(`bell`,d)})))()}var m,h;function g(){return(g=e((()=>{o(),m=[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]],h=c(`plus`,m)})))()}var _=t({Basic:()=>x,ComposableScheme:()=>C,Variants:()=>S,WithIcons:()=>w,__namedExportsOrder:()=>T,default:()=>b}),v,y,b,x,S,C,w,T;function E(){return(E=e((()=>{p(),n(),i(),g(),l(),v=s(),{useArgs:y}=__STORYBOOK_MODULE_PREVIEW_API__,b={title:`UI/Button`,component:u,args:{children:`Действие`,variant:`neutralOutline`,disabled:!1,iconEnd:!1},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{children:{description:`Текстовое содержимое кнопки.`,control:`text`},variant:{description:"Готовая схема для обратной совместимости. Если заданы `tone` или `appearance`, они имеют приоритет.",control:`select`,options:[`neutral`,`neutralOutline`,`ghost`,`brand`,`error`,`warning`,`success`,`info`,`brandOutline`,`errorOutline`,`warningOutline`,`successOutline`,`infoOutline`,`transparent`]},tone:{description:`Цветовой тон кнопки.`,control:`inline-radio`,options:[`neutral`,`brand`,`error`,`warning`,`success`,`info`]},appearance:{description:`Визуальная форма кнопки.`,control:`inline-radio`,options:[`solid`,`outline`,`ghost`,`transparent`]},icon:{description:`Иконка слева или справа от текста.`,control:!1},iconEnd:{description:`Перемещает иконку в конец кнопки.`,control:`boolean`},type:{description:"Тип нативной кнопки; по умолчанию безопасный `button`.",control:`select`,options:[`button`,`submit`,`reset`]},disabled:{description:`Блокирует нажатие.`,control:`boolean`}}},x={render:function(){let[e]=y();return(0,v.jsx)(u,{...e})}},S={render:()=>(0,v.jsxs)(`div`,{style:{display:`grid`,gap:12,gridTemplateColumns:`repeat(auto-fit, minmax(180px, 1fr))`},children:[(0,v.jsx)(u,{variant:`neutral`,children:`Neutral Solid`}),(0,v.jsx)(u,{variant:`neutralOutline`,children:`Neutral Outline`}),(0,v.jsx)(u,{variant:`ghost`,children:`Ghost`}),(0,v.jsx)(u,{variant:`brand`,children:`Brand Solid`}),(0,v.jsx)(u,{variant:`brandOutline`,children:`Brand Outline`}),(0,v.jsx)(u,{variant:`info`,children:`Info Solid`}),(0,v.jsx)(u,{variant:`success`,children:`Success Solid`}),(0,v.jsx)(u,{variant:`warning`,children:`Warning Solid`}),(0,v.jsx)(u,{variant:`error`,children:`Error Solid`}),(0,v.jsx)(u,{variant:`infoOutline`,children:`Info Outline`}),(0,v.jsx)(u,{variant:`successOutline`,children:`Success Outline`}),(0,v.jsx)(u,{variant:`warningOutline`,children:`Warning Outline`}),(0,v.jsx)(u,{variant:`errorOutline`,children:`Error Outline`}),(0,v.jsx)(u,{variant:`transparent`,children:`Transparent`})]}),args:{children:`Действие`}},C={render:()=>(0,v.jsxs)(`div`,{style:{display:`grid`,gap:12,gridTemplateColumns:`repeat(auto-fit, minmax(180px, 1fr))`},children:[(0,v.jsx)(u,{tone:`neutral`,appearance:`solid`,children:`Neutral Solid`}),(0,v.jsx)(u,{tone:`neutral`,appearance:`outline`,children:`Neutral Outline`}),(0,v.jsx)(u,{tone:`neutral`,appearance:`ghost`,children:`Neutral Ghost`}),(0,v.jsx)(u,{tone:`brand`,appearance:`solid`,children:`Brand Solid`}),(0,v.jsx)(u,{tone:`brand`,appearance:`outline`,children:`Brand Outline`}),(0,v.jsx)(u,{tone:`brand`,appearance:`ghost`,children:`Brand Ghost`}),(0,v.jsx)(u,{tone:`brand`,appearance:`transparent`,children:`Brand Transparent`}),(0,v.jsx)(u,{tone:`info`,appearance:`outline`,children:`Info Outline`}),(0,v.jsx)(u,{tone:`success`,appearance:`solid`,children:`Success Solid`}),(0,v.jsx)(u,{tone:`error`,appearance:`transparent`,children:`Error Transparent`})]})},w={render:()=>(0,v.jsxs)(`div`,{style:{display:`flex`,gap:12,flexWrap:`wrap`},children:[(0,v.jsx)(u,{icon:(0,v.jsx)(a,{}),children:`Скачать`}),(0,v.jsx)(u,{icon:(0,v.jsx)(h,{}),tone:`info`,appearance:`solid`,children:`Создать`}),(0,v.jsx)(u,{icon:(0,v.jsx)(r,{}),iconEnd:!0,tone:`success`,appearance:`solid`,children:`Подтвердить`}),(0,v.jsx)(u,{icon:(0,v.jsx)(f,{}),title:`Уведомления`})]}),args:{children:`Действие`}},x.parameters={...x.parameters,docs:{...x.parameters?.docs,source:{originalSource:`{
1
+ import{n as e,r as t}from"./rolldown-runtime-DkW27tQK.js";import{n,t as r}from"./check-C2TxO0vM.js";import{n as i,t as a}from"./download-vwxw-yX8.js";import{i as o,n as s,r as c}from"./iframe-Ctjgxy8H.js";import{n as l,t as u}from"./Button-DQHgQZCq.js";var d,f;function p(){return(p=e((()=>{o(),d=[[`path`,{d:`M10.268 21a2 2 0 0 0 3.464 0`,key:`vwvbt9`}],[`path`,{d:`M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326`,key:`11g9vi`}]],f=c(`bell`,d)})))()}var m,h;function g(){return(g=e((()=>{o(),m=[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]],h=c(`plus`,m)})))()}var _=t({Basic:()=>x,ComposableScheme:()=>C,Variants:()=>S,WithIcons:()=>w,__namedExportsOrder:()=>T,default:()=>b}),v,y,b,x,S,C,w,T;function E(){return(E=e((()=>{p(),n(),i(),g(),l(),v=s(),{useArgs:y}=__STORYBOOK_MODULE_PREVIEW_API__,b={title:`UI/Button`,component:u,args:{children:`Действие`,variant:`neutralOutline`,disabled:!1,iconEnd:!1},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{children:{description:`Текстовое содержимое кнопки.`,control:`text`},variant:{description:"Готовая схема для обратной совместимости. Если заданы `tone` или `appearance`, они имеют приоритет.",control:`select`,options:[`neutral`,`neutralOutline`,`ghost`,`brand`,`error`,`warning`,`success`,`info`,`brandOutline`,`errorOutline`,`warningOutline`,`successOutline`,`infoOutline`,`transparent`]},tone:{description:`Цветовой тон кнопки.`,control:`inline-radio`,options:[`neutral`,`brand`,`error`,`warning`,`success`,`info`]},appearance:{description:`Визуальная форма кнопки.`,control:`inline-radio`,options:[`solid`,`outline`,`ghost`,`transparent`]},icon:{description:`Иконка слева или справа от текста.`,control:!1},iconEnd:{description:`Перемещает иконку в конец кнопки.`,control:`boolean`},type:{description:"Тип нативной кнопки; по умолчанию безопасный `button`.",control:`select`,options:[`button`,`submit`,`reset`]},disabled:{description:`Блокирует нажатие.`,control:`boolean`}}},x={render:function(){let[e]=y();return(0,v.jsx)(u,{...e})}},S={render:()=>(0,v.jsxs)(`div`,{style:{display:`grid`,gap:12,gridTemplateColumns:`repeat(auto-fit, minmax(180px, 1fr))`},children:[(0,v.jsx)(u,{variant:`neutral`,children:`Neutral Solid`}),(0,v.jsx)(u,{variant:`neutralOutline`,children:`Neutral Outline`}),(0,v.jsx)(u,{variant:`ghost`,children:`Ghost`}),(0,v.jsx)(u,{variant:`brand`,children:`Brand Solid`}),(0,v.jsx)(u,{variant:`brandOutline`,children:`Brand Outline`}),(0,v.jsx)(u,{variant:`info`,children:`Info Solid`}),(0,v.jsx)(u,{variant:`success`,children:`Success Solid`}),(0,v.jsx)(u,{variant:`warning`,children:`Warning Solid`}),(0,v.jsx)(u,{variant:`error`,children:`Error Solid`}),(0,v.jsx)(u,{variant:`infoOutline`,children:`Info Outline`}),(0,v.jsx)(u,{variant:`successOutline`,children:`Success Outline`}),(0,v.jsx)(u,{variant:`warningOutline`,children:`Warning Outline`}),(0,v.jsx)(u,{variant:`errorOutline`,children:`Error Outline`}),(0,v.jsx)(u,{variant:`transparent`,children:`Transparent`})]}),args:{children:`Действие`}},C={render:()=>(0,v.jsxs)(`div`,{style:{display:`grid`,gap:12,gridTemplateColumns:`repeat(auto-fit, minmax(180px, 1fr))`},children:[(0,v.jsx)(u,{tone:`neutral`,appearance:`solid`,children:`Neutral Solid`}),(0,v.jsx)(u,{tone:`neutral`,appearance:`outline`,children:`Neutral Outline`}),(0,v.jsx)(u,{tone:`neutral`,appearance:`ghost`,children:`Neutral Ghost`}),(0,v.jsx)(u,{tone:`brand`,appearance:`solid`,children:`Brand Solid`}),(0,v.jsx)(u,{tone:`brand`,appearance:`outline`,children:`Brand Outline`}),(0,v.jsx)(u,{tone:`brand`,appearance:`ghost`,children:`Brand Ghost`}),(0,v.jsx)(u,{tone:`brand`,appearance:`transparent`,children:`Brand Transparent`}),(0,v.jsx)(u,{tone:`info`,appearance:`outline`,children:`Info Outline`}),(0,v.jsx)(u,{tone:`success`,appearance:`solid`,children:`Success Solid`}),(0,v.jsx)(u,{tone:`error`,appearance:`transparent`,children:`Error Transparent`})]})},w={render:()=>(0,v.jsxs)(`div`,{style:{display:`flex`,gap:12,flexWrap:`wrap`},children:[(0,v.jsx)(u,{icon:(0,v.jsx)(a,{}),children:`Скачать`}),(0,v.jsx)(u,{icon:(0,v.jsx)(h,{}),tone:`info`,appearance:`solid`,children:`Создать`}),(0,v.jsx)(u,{icon:(0,v.jsx)(r,{}),iconEnd:!0,tone:`success`,appearance:`solid`,children:`Подтвердить`}),(0,v.jsx)(u,{icon:(0,v.jsx)(f,{}),title:`Уведомления`})]}),args:{children:`Действие`}},x.parameters={...x.parameters,docs:{...x.parameters?.docs,source:{originalSource:`{
2
2
  render: function Render() {
3
3
  const [args] = useArgs<ButtonProps>();
4
4
  return <Button {...args} />;
@@ -1 +1 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{t}from"./react-BZJXY1be.js";import{n,t as r}from"./chevron-left-C9RcDRYm.js";import{n as i,t as a}from"./chevron-right-Bz2dxTCT.js";import{i as o,n as s,r as c}from"./iframe-CB9pifff.js";import{a as l,i as u}from"./utils-tg3ibbzi.js";import{C as d,b as f,c as p,h as m,m as h,n as g,o as _,w as v,x as y,y as b}from"./formatters-D33Uh3si-Df97arf9.js";import{n as x,t as S}from"./Button-CN90zPTE.js";var C,w;function T(){return(T=e((()=>{o(),C=[[`path`,{d:`M8 2v3`,key:`1ioesn`}],[`path`,{d:`M16 2v3`,key:`otl347`}],[`rect`,{x:`3`,y:`3`,width:`18`,height:`18`,rx:`2`,key:`h1oib`}],[`path`,{d:`M3 9h18`,key:`1pudct`}],[`path`,{d:`M8 13h.01`,key:`1sbv64`}],[`path`,{d:`M12 13h.01`,key:`y0uutt`}],[`path`,{d:`M16 13h.01`,key:`wip0gl`}],[`path`,{d:`M8 17h.01`,key:`p3bg7i`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}],[`path`,{d:`M16 17h.01`,key:`ql8jdd`}]],w=c(`calendar-days`,C)})))()}function ee(e){return e===`month`?`month`:e===`year`?`year`:`day`}function E(e,t){return k.indexOf(e)>=k.indexOf(t)}function te(e,t){let n=ee(e);return E(n,t)?n:t}function D(e,t){return!e||!t?!1:e.start.getTime()===t.start.getTime()&&e.end.getTime()===t.end.getTime()}function ne(e,t,n){if(!e||!t||!n)return!1;let r=Math.min(t.start.getTime(),n.start.getTime()),i=Math.max(t.end.getTime(),n.end.getTime());return e.start.getTime()>=r&&e.end.getTime()<=i}function O({date:e,value:t,hoveredDate:n,selectsRange:r,selectionOptions:i}){let a=g(e,i),o=!r&&t instanceof Date?t:null,s=g(o,i);if(!r||!Array.isArray(t))return{selected:_(e,s),range:!1,rangeStart:!1,rangeEnd:!1};let[c,l]=t,u=g(c,i),d=g(l??(c?n:null),i),f=D(a,u),p=D(a,d);return{selected:!1,range:ne(a,u,d)&&!f&&!p,rangeStart:f,rangeEnd:p}}var k,re;function A(){return(A=e((()=>{b(),k=[`day`,`month`,`year`],re=[`friday`,`saturday`,`sunday`]})))()}var ie,ae,oe,se,ce,le,ue,de,fe,j,M,N,P,F,I,L,R;function z(){return(z=e((()=>{ie=`Dshr-j`,ae=`esetVt`,oe=`i-LJYe`,se=`XZsnCH`,ce=`_2KDjTS`,le=`o-freG`,ue=`GcV08-`,de=`UCrE-I`,fe=`L2V3uq`,j=`Te9oCq`,M=`cUF2pQ`,N=`d1L5uw`,P=`LU0M9Y`,F=`MR3y5p`,I=`VDqDpm`,L=`CLR-7m`,R={dayView:ie,weekdays:ae,weekday:oe,daysGrid:se,week:ce,day:le,disabled:ue,outsideMonth:de,periodSelection:fe,periodPreview:j,selected:M,range:N,rangeStart:P,rangeEnd:F,weekend:I,now:L}})))()}var B,V,H,pe,U;function me(){return(me=e((()=>{B=t(),b(),u(),z(),V=s(),H=[`Пн`,`Вт`,`Ср`,`Чт`,`Пт`,`Сб`,`Вс`],pe=new Intl.DateTimeFormat(`ru-RU`,{weekday:`long`,year:`numeric`,month:`long`,day:`numeric`}),U=({now:e,currentDate:t,value:n,onChange:r,minDate:i,maxDate:a,selectsRange:o,selectionMode:s=`day`,weekEndDay:c=`sunday`})=>{let[u,f]=(0,B.useState)(null),m={selectionMode:s,weekEndDay:c},v=(()=>{let e=t.getFullYear(),n=t.getMonth(),r=h(e,n,1),i=h(e,n+1,0),a=r.getDay()===0?6:r.getDay()-1,o=42-(a+i.getDate()),s=[],c=h(e,n,0).getDate();for(let t=a;t>0;--t)s.push(h(e,n-1,c-t+1));for(let t=1;t<=i.getDate();t+=1)s.push(h(e,n,t));for(let t=1;t<=o;t+=1)s.push(h(e,n+1,t));let l=[];for(let e=0;e<s.length;e+=7)l.push(s.slice(e,e+7));return l})(),b=o&&Array.isArray(n)?n[0]:null,x=o&&Array.isArray(n)?n[1]:null,S=g(o?null:n,m),C=g(u,m),w=x??(b?C?.end??null:null),T=s===`week`,ee=T&&(!o||!b),E=e=>{if(!o||!b||!w)return!1;let t=d(e).getTime(),n=b.getTime(),r=w.getTime();return t>=Math.min(n,r)&&t<=Math.max(n,r)},te=e=>!y(g(e,m),{minDate:i,maxDate:a}),D=(e,t)=>{t||(T&&f(e),!(!o||!b||x)&&(T||f(e)))};return(0,V.jsxs)(`div`,{className:R.dayView,children:[(0,V.jsx)(`div`,{className:R.weekdays,children:H.map(e=>(0,V.jsx)(`div`,{className:R.weekday,children:e},e))}),(0,V.jsx)(`div`,{className:R.daysGrid,onMouseLeave:()=>{(T||!x)&&f(null)},children:v.map((n,i)=>(0,V.jsx)(`div`,{className:R.week,children:n.map((n,a)=>{let o=n.getMonth()===t.getMonth(),c=_(n,S),u=ee&&_(n,C),d=E(n),f=p(n,b),m=p(n,w),h=p(n,e),g=te(n);return(0,V.jsx)(`button`,{type:`button`,onClick:()=>!g&&r(n),onMouseEnter:()=>D(n,g),disabled:g,"data-ui":`calendar-day-button`,"data-action":`select-calendar-day`,className:l(R.day,{[R.outsideMonth]:!o,[R.periodSelection]:s===`week`,[R.periodPreview]:u&&!c,[R.selected]:c,[R.range]:d&&!f&&!m,[R.rangeStart]:f,[R.rangeEnd]:m,[R.disabled]:g,[R.weekend]:a>4,[R.now]:h}),"aria-label":pe.format(n),"aria-pressed":c||d||f||m,children:n.getDate()},`${i}-${a}`)})},i))})]})},U.__docgenInfo={description:`Отображает сетку дней месяца в календарной семантике без timezone-сдвига.`,methods:[],displayName:`CalendarDayView`,props:{selectionMode:{defaultValue:{value:`"day"`,computed:!1},required:!1},weekEndDay:{defaultValue:{value:`"sunday"`,computed:!1},required:!1}}}})))()}var he,ge,_e,ve,ye,be,xe,Se,W;function Ce(){return(Ce=e((()=>{he=`p5pRGW`,ge=`pUHpxD`,_e=`lwWv-z`,ve=`_8gn-3z`,ye=`b57d-c`,be=`nGc5FO`,xe=`JLqjri`,Se=`UQMYwg`,W={monthView:he,monthsGrid:ge,month:_e,disabled:ve,range:ye,selected:be,rangeStart:xe,rangeEnd:Se}})))()}var we,G,Te,Ee,K;function De(){return(De=e((()=>{we=t(),b(),u(),A(),Ce(),G=s(),Te=new Intl.DateTimeFormat(`ru-RU`,{month:`short`}),Ee=new Intl.DateTimeFormat(`ru-RU`,{month:`long`,year:`numeric`}),K=({currentDate:e,value:t,onChange:n,minDate:r,maxDate:i,selectsRange:a,selectsPeriod:o,selectionMode:s=`day`,weekEndDay:c=`sunday`})=>{let[u,d]=(0,we.useState)(null),f=Array.from({length:12},(e,t)=>t),p=e.getFullYear(),m={selectionMode:s,weekEndDay:c},_=a&&Array.isArray(t)?t[0]:null,v=a&&Array.isArray(t)?t[1]:null,b=e=>Te.format(h(p,e,1)),x=e=>{if(!r&&!i)return!1;let t=h(p,e,1),n=h(p,e+1,0,23,59,59);return o?!y(g(t,m),{minDate:r,maxDate:i}):!!(r&&n<r||i&&t>i)},S=(e,t)=>{!a||!_||v||t||d(e)};return(0,G.jsx)(`div`,{className:W.monthView,children:(0,G.jsx)(`div`,{className:W.monthsGrid,onMouseLeave:()=>{v||d(null)},children:f.map(e=>{let r=x(e),i=h(p,e,1),o=O({date:i,value:t,hoveredDate:u,selectsRange:a,selectionOptions:m});return(0,G.jsx)(`button`,{type:`button`,onClick:()=>!r&&n(i),onMouseEnter:()=>S(i,r),disabled:r,"data-ui":`calendar-month-button`,"data-action":`select-calendar-month`,className:l(W.month,{[W.selected]:o.selected,[W.range]:o.range,[W.rangeStart]:o.rangeStart,[W.rangeEnd]:o.rangeEnd,[W.disabled]:r}),"aria-label":Ee.format(i),"aria-pressed":o.selected||o.range||o.rangeStart||o.rangeEnd,children:b(e)},e)})})})},K.__docgenInfo={description:`Отображает выбор месяца в календарной семантике без timezone-сдвига.`,methods:[],displayName:`CalendarMonthView`,props:{selectionMode:{defaultValue:{value:`"day"`,computed:!1},required:!1},weekEndDay:{defaultValue:{value:`"sunday"`,computed:!1},required:!1}}}})))()}var Oe,ke,q;function Ae(){return(Ae=e((()=>{Oe=`E35KE6`,ke=`L14Qef`,q={calendarView:Oe,calendarHeader:ke}})))()}var je,Me,Ne,Pe,Fe,Ie,Le,Re,J;function Y(){return(Y=e((()=>{je=`_--xW7O`,Me=`-N-5Jk`,Ne=`hhY92S`,Pe=`IhX7jj`,Fe=`NWNpWj`,Ie=`d1SfcV`,Le=`Gkui4r`,Re=`_0dVZLW`,J={yearView:je,yearsGrid:Me,year:Ne,disabled:Pe,range:Fe,selected:Ie,rangeStart:Le,rangeEnd:Re}})))()}var ze,X,Z;function Be(){return(Be=e((()=>{ze=t(),b(),u(),A(),Y(),X=s(),Z=({currentDate:e,value:t,onChange:n,minDate:r,maxDate:i,selectsRange:a,selectsPeriod:o,selectionMode:s=`day`,weekEndDay:c=`sunday`})=>{let[u,d]=(0,ze.useState)(null),f=Math.floor(e.getFullYear()/12)*12,p=Array.from({length:12},(e,t)=>f+t),m={selectionMode:s,weekEndDay:c},_=a&&Array.isArray(t)?t[0]:null,v=a&&Array.isArray(t)?t[1]:null,b=e=>{if(!r&&!i)return!1;let t=h(e,0,1),n=h(e,11,31,23,59,59);return o?!y(g(t,m),{minDate:r,maxDate:i}):!!(r&&n<r||i&&t>i)},x=(e,t)=>{!a||!_||v||t||d(e)};return(0,X.jsx)(`div`,{className:J.yearView,children:(0,X.jsx)(`div`,{className:J.yearsGrid,onMouseLeave:()=>{v||d(null)},children:p.map(e=>{let r=b(e),i=h(e,0,1),o=O({date:i,value:t,hoveredDate:u,selectsRange:a,selectionOptions:m});return(0,X.jsx)(`button`,{type:`button`,onClick:()=>!r&&n(i),onMouseEnter:()=>x(i,r),disabled:r,"data-ui":`calendar-year-button`,"data-action":`select-calendar-year`,className:l(J.year,{[J.selected]:o.selected,[J.range]:o.range,[J.rangeStart]:o.rangeStart,[J.rangeEnd]:o.rangeEnd,[J.disabled]:r}),"aria-label":e.toString(),"aria-pressed":o.selected||o.range||o.rangeStart||o.rangeEnd,children:e},e)})})})},Z.__docgenInfo={description:`Отображает выбор года в календарной семантике без timezone-сдвига.`,methods:[],displayName:`CalendarYearView`,props:{selectionMode:{defaultValue:{value:`"day"`,computed:!1},required:!1},weekEndDay:{defaultValue:{value:`"sunday"`,computed:!1},required:!1}}}})))()}function Ve(e,t){if(t&&f(e)&&e[0]instanceof Date)return e[0];if(!t&&e instanceof Date)return e}function He({view:e,datePickerLevel:t,selectionMode:n=`day`,weekEndDay:i=`sunday`,onViewChange:o,...s}){let[c]=(0,Q.useState)(()=>d(new Date)),l=Ve(s.value,s.selectsRange),u=l?.getTime()??null,[f,p]=(0,Q.useState)(()=>({sourceValueTime:u,currentDate:l??d(new Date)})),h=l&&f.sourceValueTime!==u?l:f.currentDate,_=s.currentDate??h,b={selectionMode:n,weekEndDay:i},x=e=>{let t=typeof e==`function`?e(_):e;s.currentDate===void 0&&p({sourceValueTime:u,currentDate:t}),s.onCurrentDateChange?.(t)},C=()=>{if(e===`day`){x(e=>m(e,-1));return}if(e===`month`){x(e=>v(e,-1));return}x(e=>v(e,-12))},w=()=>{if(e===`day`){x(e=>m(e,1));return}if(e===`month`){x(e=>v(e,1));return}x(e=>v(e,12))};return(0,$.jsxs)(`div`,{className:q.calendarView,children:[(()=>{let t=``;if(e===`day`)t=_.toLocaleDateString(`ru-RU`,{month:`long`,year:`numeric`});else if(e===`month`)t=_.getFullYear().toString();else{let e=Math.floor(_.getFullYear()/12)*12;t=`${e} - ${e+11}`}return(0,$.jsxs)(`div`,{className:q.calendarHeader,children:[(0,$.jsx)(S,{icon:(0,$.jsx)(r,{}),onClick:C,variant:`ghost`,"aria-label":`Предыдущий`,"data-action":`calendar-previous`}),(0,$.jsx)(S,{onClick:()=>{e===`day`?o(`month`):e===`month`&&o(`year`)},variant:`ghost`,className:`flex1`,"data-ui":`calendar-view-switch-button`,"data-action":`calendar-switch-view`,children:t}),(0,$.jsx)(S,{icon:(0,$.jsx)(a,{}),onClick:w,variant:`ghost`,"aria-label":`Следующий`,"data-ui":`calendar-next-button`,"data-action":`calendar-next`})]})})(),(()=>{let r=e=>{let t=g(e,b);if(!(!t||!y(t,{minDate:s.minDate,maxDate:s.maxDate}))){if(s.selectsRange){let e=null,n=null;if(Array.isArray(s.value)&&([e,n]=s.value),!e||n){s.onChange([t.start,null]);return}let r=g(e,b);if(!r)return;if(t.start<r.start){s.onChange([t.start,r.end]);return}s.onChange([r.start,t.end]);return}s.onChange(t.start)}},a=e=>{if(x(e),n===`month`||!E(`day`,t)){r(e);return}o(`day`)},l=e=>{if(x(e),n===`year`||!E(`month`,t)){r(e);return}o(`month`)};switch(e){case`day`:return(0,$.jsx)(U,{now:c,currentDate:_,value:s.value,onChange:r,minDate:s.minDate,maxDate:s.maxDate,selectsRange:s.selectsRange,selectionMode:n,weekEndDay:i});case`month`:return(0,$.jsx)(K,{currentDate:_,value:s.value,onChange:a,minDate:s.minDate,maxDate:s.maxDate,selectsRange:s.selectsRange,selectsPeriod:n===`month`||!E(`day`,t),selectionMode:n,weekEndDay:i});case`year`:return(0,$.jsx)(Z,{currentDate:_,value:s.value,onChange:l,minDate:s.minDate,maxDate:s.maxDate,selectsRange:s.selectsRange,selectsPeriod:n===`year`||!E(`month`,t),selectionMode:n,weekEndDay:i});default:return null}})()]})}var Q,$;function Ue(){return(Ue=e((()=>{Q=t(),b(),n(),i(),x(),A(),me(),De(),Ae(),Be(),$=s(),He.__docgenInfo={description:`Отображает календарь выбора даты в календарной семантике без timezone-сдвига.`,methods:[],displayName:`CalendarView`,props:{view:{required:!0,tsType:{name:`union`,raw:`"day" | "month" | "year"`,elements:[{name:`literal`,value:`"day"`},{name:`literal`,value:`"month"`},{name:`literal`,value:`"year"`}]},description:``},datePickerLevel:{required:!0,tsType:{name:`union`,raw:`"day" | "month" | "year"`,elements:[{name:`literal`,value:`"day"`},{name:`literal`,value:`"month"`},{name:`literal`,value:`"year"`}]},description:``},selectionMode:{required:!1,tsType:{name:`CalendarPeriodSelectionMode`},description:``,defaultValue:{value:`"day"`,computed:!1}},weekEndDay:{required:!1,tsType:{name:`CalendarWeekEndDay`},description:``,defaultValue:{value:`"sunday"`,computed:!1}},onViewChange:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(view: CalendarType) => void`,signature:{arguments:[{type:{name:`union`,raw:`"day" | "month" | "year"`,elements:[{name:`literal`,value:`"day"`},{name:`literal`,value:`"month"`},{name:`literal`,value:`"year"`}]},name:`view`}],return:{name:`void`}}},description:``},selectsRange:{required:!1,tsType:{name:`boolean`},description:``},value:{required:!0,tsType:{name:`union`,raw:`Date | NullableDateRange | null`,elements:[{name:`Date`},{name:`NullableDateRange`},{name:`null`}]},description:``},onChange:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(date: Date | NullableDateRange) => void`,signature:{arguments:[{type:{name:`union`,raw:`Date | NullableDateRange`,elements:[{name:`Date`},{name:`NullableDateRange`}]},name:`date`}],return:{name:`void`}}},description:``},minDate:{required:!1,tsType:{name:`Date`},description:``},maxDate:{required:!1,tsType:{name:`Date`},description:``},currentDate:{required:!1,tsType:{name:`Date`},description:``},onCurrentDateChange:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(date: Date) => void`,signature:{arguments:[{type:{name:`Date`},name:`date`}],return:{name:`void`}}},description:``}}}})))()}export{E as a,T as c,A as i,Ue as n,te as o,re as r,w as s,He as t};
1
+ import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{t}from"./react-BZJXY1be.js";import{n,t as r}from"./chevron-left-CM7EAsdD.js";import{n as i,t as a}from"./chevron-right-CfuaKuy2.js";import{i as o,n as s,r as c}from"./iframe-Ctjgxy8H.js";import{a as l,i as u}from"./utils-tg3ibbzi.js";import{C as d,b as f,c as p,h as m,m as h,n as g,o as _,w as v,x as y,y as b}from"./formatters-D33Uh3si-Df97arf9.js";import{n as x,t as S}from"./Button-DQHgQZCq.js";var C,w;function T(){return(T=e((()=>{o(),C=[[`path`,{d:`M8 2v3`,key:`1ioesn`}],[`path`,{d:`M16 2v3`,key:`otl347`}],[`rect`,{x:`3`,y:`3`,width:`18`,height:`18`,rx:`2`,key:`h1oib`}],[`path`,{d:`M3 9h18`,key:`1pudct`}],[`path`,{d:`M8 13h.01`,key:`1sbv64`}],[`path`,{d:`M12 13h.01`,key:`y0uutt`}],[`path`,{d:`M16 13h.01`,key:`wip0gl`}],[`path`,{d:`M8 17h.01`,key:`p3bg7i`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}],[`path`,{d:`M16 17h.01`,key:`ql8jdd`}]],w=c(`calendar-days`,C)})))()}function ee(e){return e===`month`?`month`:e===`year`?`year`:`day`}function E(e,t){return k.indexOf(e)>=k.indexOf(t)}function te(e,t){let n=ee(e);return E(n,t)?n:t}function D(e,t){return!e||!t?!1:e.start.getTime()===t.start.getTime()&&e.end.getTime()===t.end.getTime()}function ne(e,t,n){if(!e||!t||!n)return!1;let r=Math.min(t.start.getTime(),n.start.getTime()),i=Math.max(t.end.getTime(),n.end.getTime());return e.start.getTime()>=r&&e.end.getTime()<=i}function O({date:e,value:t,hoveredDate:n,selectsRange:r,selectionOptions:i}){let a=g(e,i),o=!r&&t instanceof Date?t:null,s=g(o,i);if(!r||!Array.isArray(t))return{selected:_(e,s),range:!1,rangeStart:!1,rangeEnd:!1};let[c,l]=t,u=g(c,i),d=g(l??(c?n:null),i),f=D(a,u),p=D(a,d);return{selected:!1,range:ne(a,u,d)&&!f&&!p,rangeStart:f,rangeEnd:p}}var k,re;function A(){return(A=e((()=>{b(),k=[`day`,`month`,`year`],re=[`friday`,`saturday`,`sunday`]})))()}var ie,ae,oe,se,ce,le,ue,de,fe,j,M,N,P,F,I,L,R;function z(){return(z=e((()=>{ie=`Dshr-j`,ae=`esetVt`,oe=`i-LJYe`,se=`XZsnCH`,ce=`_2KDjTS`,le=`o-freG`,ue=`GcV08-`,de=`UCrE-I`,fe=`L2V3uq`,j=`Te9oCq`,M=`cUF2pQ`,N=`d1L5uw`,P=`LU0M9Y`,F=`MR3y5p`,I=`VDqDpm`,L=`CLR-7m`,R={dayView:ie,weekdays:ae,weekday:oe,daysGrid:se,week:ce,day:le,disabled:ue,outsideMonth:de,periodSelection:fe,periodPreview:j,selected:M,range:N,rangeStart:P,rangeEnd:F,weekend:I,now:L}})))()}var B,V,H,pe,U;function me(){return(me=e((()=>{B=t(),b(),u(),z(),V=s(),H=[`Пн`,`Вт`,`Ср`,`Чт`,`Пт`,`Сб`,`Вс`],pe=new Intl.DateTimeFormat(`ru-RU`,{weekday:`long`,year:`numeric`,month:`long`,day:`numeric`}),U=({now:e,currentDate:t,value:n,onChange:r,minDate:i,maxDate:a,selectsRange:o,selectionMode:s=`day`,weekEndDay:c=`sunday`})=>{let[u,f]=(0,B.useState)(null),m={selectionMode:s,weekEndDay:c},v=(()=>{let e=t.getFullYear(),n=t.getMonth(),r=h(e,n,1),i=h(e,n+1,0),a=r.getDay()===0?6:r.getDay()-1,o=42-(a+i.getDate()),s=[],c=h(e,n,0).getDate();for(let t=a;t>0;--t)s.push(h(e,n-1,c-t+1));for(let t=1;t<=i.getDate();t+=1)s.push(h(e,n,t));for(let t=1;t<=o;t+=1)s.push(h(e,n+1,t));let l=[];for(let e=0;e<s.length;e+=7)l.push(s.slice(e,e+7));return l})(),b=o&&Array.isArray(n)?n[0]:null,x=o&&Array.isArray(n)?n[1]:null,S=g(o?null:n,m),C=g(u,m),w=x??(b?C?.end??null:null),T=s===`week`,ee=T&&(!o||!b),E=e=>{if(!o||!b||!w)return!1;let t=d(e).getTime(),n=b.getTime(),r=w.getTime();return t>=Math.min(n,r)&&t<=Math.max(n,r)},te=e=>!y(g(e,m),{minDate:i,maxDate:a}),D=(e,t)=>{t||(T&&f(e),!(!o||!b||x)&&(T||f(e)))};return(0,V.jsxs)(`div`,{className:R.dayView,children:[(0,V.jsx)(`div`,{className:R.weekdays,children:H.map(e=>(0,V.jsx)(`div`,{className:R.weekday,children:e},e))}),(0,V.jsx)(`div`,{className:R.daysGrid,onMouseLeave:()=>{(T||!x)&&f(null)},children:v.map((n,i)=>(0,V.jsx)(`div`,{className:R.week,children:n.map((n,a)=>{let o=n.getMonth()===t.getMonth(),c=_(n,S),u=ee&&_(n,C),d=E(n),f=p(n,b),m=p(n,w),h=p(n,e),g=te(n);return(0,V.jsx)(`button`,{type:`button`,onClick:()=>!g&&r(n),onMouseEnter:()=>D(n,g),disabled:g,"data-ui":`calendar-day-button`,"data-action":`select-calendar-day`,className:l(R.day,{[R.outsideMonth]:!o,[R.periodSelection]:s===`week`,[R.periodPreview]:u&&!c,[R.selected]:c,[R.range]:d&&!f&&!m,[R.rangeStart]:f,[R.rangeEnd]:m,[R.disabled]:g,[R.weekend]:a>4,[R.now]:h}),"aria-label":pe.format(n),"aria-pressed":c||d||f||m,children:n.getDate()},`${i}-${a}`)})},i))})]})},U.__docgenInfo={description:`Отображает сетку дней месяца в календарной семантике без timezone-сдвига.`,methods:[],displayName:`CalendarDayView`,props:{selectionMode:{defaultValue:{value:`"day"`,computed:!1},required:!1},weekEndDay:{defaultValue:{value:`"sunday"`,computed:!1},required:!1}}}})))()}var he,ge,_e,ve,ye,be,xe,Se,W;function Ce(){return(Ce=e((()=>{he=`p5pRGW`,ge=`pUHpxD`,_e=`lwWv-z`,ve=`_8gn-3z`,ye=`b57d-c`,be=`nGc5FO`,xe=`JLqjri`,Se=`UQMYwg`,W={monthView:he,monthsGrid:ge,month:_e,disabled:ve,range:ye,selected:be,rangeStart:xe,rangeEnd:Se}})))()}var we,G,Te,Ee,K;function De(){return(De=e((()=>{we=t(),b(),u(),A(),Ce(),G=s(),Te=new Intl.DateTimeFormat(`ru-RU`,{month:`short`}),Ee=new Intl.DateTimeFormat(`ru-RU`,{month:`long`,year:`numeric`}),K=({currentDate:e,value:t,onChange:n,minDate:r,maxDate:i,selectsRange:a,selectsPeriod:o,selectionMode:s=`day`,weekEndDay:c=`sunday`})=>{let[u,d]=(0,we.useState)(null),f=Array.from({length:12},(e,t)=>t),p=e.getFullYear(),m={selectionMode:s,weekEndDay:c},_=a&&Array.isArray(t)?t[0]:null,v=a&&Array.isArray(t)?t[1]:null,b=e=>Te.format(h(p,e,1)),x=e=>{if(!r&&!i)return!1;let t=h(p,e,1),n=h(p,e+1,0,23,59,59);return o?!y(g(t,m),{minDate:r,maxDate:i}):!!(r&&n<r||i&&t>i)},S=(e,t)=>{!a||!_||v||t||d(e)};return(0,G.jsx)(`div`,{className:W.monthView,children:(0,G.jsx)(`div`,{className:W.monthsGrid,onMouseLeave:()=>{v||d(null)},children:f.map(e=>{let r=x(e),i=h(p,e,1),o=O({date:i,value:t,hoveredDate:u,selectsRange:a,selectionOptions:m});return(0,G.jsx)(`button`,{type:`button`,onClick:()=>!r&&n(i),onMouseEnter:()=>S(i,r),disabled:r,"data-ui":`calendar-month-button`,"data-action":`select-calendar-month`,className:l(W.month,{[W.selected]:o.selected,[W.range]:o.range,[W.rangeStart]:o.rangeStart,[W.rangeEnd]:o.rangeEnd,[W.disabled]:r}),"aria-label":Ee.format(i),"aria-pressed":o.selected||o.range||o.rangeStart||o.rangeEnd,children:b(e)},e)})})})},K.__docgenInfo={description:`Отображает выбор месяца в календарной семантике без timezone-сдвига.`,methods:[],displayName:`CalendarMonthView`,props:{selectionMode:{defaultValue:{value:`"day"`,computed:!1},required:!1},weekEndDay:{defaultValue:{value:`"sunday"`,computed:!1},required:!1}}}})))()}var Oe,ke,q;function Ae(){return(Ae=e((()=>{Oe=`E35KE6`,ke=`L14Qef`,q={calendarView:Oe,calendarHeader:ke}})))()}var je,Me,Ne,Pe,Fe,Ie,Le,Re,J;function Y(){return(Y=e((()=>{je=`_--xW7O`,Me=`-N-5Jk`,Ne=`hhY92S`,Pe=`IhX7jj`,Fe=`NWNpWj`,Ie=`d1SfcV`,Le=`Gkui4r`,Re=`_0dVZLW`,J={yearView:je,yearsGrid:Me,year:Ne,disabled:Pe,range:Fe,selected:Ie,rangeStart:Le,rangeEnd:Re}})))()}var ze,X,Z;function Be(){return(Be=e((()=>{ze=t(),b(),u(),A(),Y(),X=s(),Z=({currentDate:e,value:t,onChange:n,minDate:r,maxDate:i,selectsRange:a,selectsPeriod:o,selectionMode:s=`day`,weekEndDay:c=`sunday`})=>{let[u,d]=(0,ze.useState)(null),f=Math.floor(e.getFullYear()/12)*12,p=Array.from({length:12},(e,t)=>f+t),m={selectionMode:s,weekEndDay:c},_=a&&Array.isArray(t)?t[0]:null,v=a&&Array.isArray(t)?t[1]:null,b=e=>{if(!r&&!i)return!1;let t=h(e,0,1),n=h(e,11,31,23,59,59);return o?!y(g(t,m),{minDate:r,maxDate:i}):!!(r&&n<r||i&&t>i)},x=(e,t)=>{!a||!_||v||t||d(e)};return(0,X.jsx)(`div`,{className:J.yearView,children:(0,X.jsx)(`div`,{className:J.yearsGrid,onMouseLeave:()=>{v||d(null)},children:p.map(e=>{let r=b(e),i=h(e,0,1),o=O({date:i,value:t,hoveredDate:u,selectsRange:a,selectionOptions:m});return(0,X.jsx)(`button`,{type:`button`,onClick:()=>!r&&n(i),onMouseEnter:()=>x(i,r),disabled:r,"data-ui":`calendar-year-button`,"data-action":`select-calendar-year`,className:l(J.year,{[J.selected]:o.selected,[J.range]:o.range,[J.rangeStart]:o.rangeStart,[J.rangeEnd]:o.rangeEnd,[J.disabled]:r}),"aria-label":e.toString(),"aria-pressed":o.selected||o.range||o.rangeStart||o.rangeEnd,children:e},e)})})})},Z.__docgenInfo={description:`Отображает выбор года в календарной семантике без timezone-сдвига.`,methods:[],displayName:`CalendarYearView`,props:{selectionMode:{defaultValue:{value:`"day"`,computed:!1},required:!1},weekEndDay:{defaultValue:{value:`"sunday"`,computed:!1},required:!1}}}})))()}function Ve(e,t){if(t&&f(e)&&e[0]instanceof Date)return e[0];if(!t&&e instanceof Date)return e}function He({view:e,datePickerLevel:t,selectionMode:n=`day`,weekEndDay:i=`sunday`,onViewChange:o,...s}){let[c]=(0,Q.useState)(()=>d(new Date)),l=Ve(s.value,s.selectsRange),u=l?.getTime()??null,[f,p]=(0,Q.useState)(()=>({sourceValueTime:u,currentDate:l??d(new Date)})),h=l&&f.sourceValueTime!==u?l:f.currentDate,_=s.currentDate??h,b={selectionMode:n,weekEndDay:i},x=e=>{let t=typeof e==`function`?e(_):e;s.currentDate===void 0&&p({sourceValueTime:u,currentDate:t}),s.onCurrentDateChange?.(t)},C=()=>{if(e===`day`){x(e=>m(e,-1));return}if(e===`month`){x(e=>v(e,-1));return}x(e=>v(e,-12))},w=()=>{if(e===`day`){x(e=>m(e,1));return}if(e===`month`){x(e=>v(e,1));return}x(e=>v(e,12))};return(0,$.jsxs)(`div`,{className:q.calendarView,children:[(()=>{let t=``;if(e===`day`)t=_.toLocaleDateString(`ru-RU`,{month:`long`,year:`numeric`});else if(e===`month`)t=_.getFullYear().toString();else{let e=Math.floor(_.getFullYear()/12)*12;t=`${e} - ${e+11}`}return(0,$.jsxs)(`div`,{className:q.calendarHeader,children:[(0,$.jsx)(S,{icon:(0,$.jsx)(r,{}),onClick:C,variant:`ghost`,"aria-label":`Предыдущий`,"data-action":`calendar-previous`}),(0,$.jsx)(S,{onClick:()=>{e===`day`?o(`month`):e===`month`&&o(`year`)},variant:`ghost`,className:`flex1`,"data-ui":`calendar-view-switch-button`,"data-action":`calendar-switch-view`,children:t}),(0,$.jsx)(S,{icon:(0,$.jsx)(a,{}),onClick:w,variant:`ghost`,"aria-label":`Следующий`,"data-ui":`calendar-next-button`,"data-action":`calendar-next`})]})})(),(()=>{let r=e=>{let t=g(e,b);if(!(!t||!y(t,{minDate:s.minDate,maxDate:s.maxDate}))){if(s.selectsRange){let e=null,n=null;if(Array.isArray(s.value)&&([e,n]=s.value),!e||n){s.onChange([t.start,null]);return}let r=g(e,b);if(!r)return;if(t.start<r.start){s.onChange([t.start,r.end]);return}s.onChange([r.start,t.end]);return}s.onChange(t.start)}},a=e=>{if(x(e),n===`month`||!E(`day`,t)){r(e);return}o(`day`)},l=e=>{if(x(e),n===`year`||!E(`month`,t)){r(e);return}o(`month`)};switch(e){case`day`:return(0,$.jsx)(U,{now:c,currentDate:_,value:s.value,onChange:r,minDate:s.minDate,maxDate:s.maxDate,selectsRange:s.selectsRange,selectionMode:n,weekEndDay:i});case`month`:return(0,$.jsx)(K,{currentDate:_,value:s.value,onChange:a,minDate:s.minDate,maxDate:s.maxDate,selectsRange:s.selectsRange,selectsPeriod:n===`month`||!E(`day`,t),selectionMode:n,weekEndDay:i});case`year`:return(0,$.jsx)(Z,{currentDate:_,value:s.value,onChange:l,minDate:s.minDate,maxDate:s.maxDate,selectsRange:s.selectsRange,selectsPeriod:n===`year`||!E(`month`,t),selectionMode:n,weekEndDay:i});default:return null}})()]})}var Q,$;function Ue(){return(Ue=e((()=>{Q=t(),b(),n(),i(),x(),A(),me(),De(),Ae(),Be(),$=s(),He.__docgenInfo={description:`Отображает календарь выбора даты в календарной семантике без timezone-сдвига.`,methods:[],displayName:`CalendarView`,props:{view:{required:!0,tsType:{name:`union`,raw:`"day" | "month" | "year"`,elements:[{name:`literal`,value:`"day"`},{name:`literal`,value:`"month"`},{name:`literal`,value:`"year"`}]},description:``},datePickerLevel:{required:!0,tsType:{name:`union`,raw:`"day" | "month" | "year"`,elements:[{name:`literal`,value:`"day"`},{name:`literal`,value:`"month"`},{name:`literal`,value:`"year"`}]},description:``},selectionMode:{required:!1,tsType:{name:`CalendarPeriodSelectionMode`},description:``,defaultValue:{value:`"day"`,computed:!1}},weekEndDay:{required:!1,tsType:{name:`CalendarWeekEndDay`},description:``,defaultValue:{value:`"sunday"`,computed:!1}},onViewChange:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(view: CalendarType) => void`,signature:{arguments:[{type:{name:`union`,raw:`"day" | "month" | "year"`,elements:[{name:`literal`,value:`"day"`},{name:`literal`,value:`"month"`},{name:`literal`,value:`"year"`}]},name:`view`}],return:{name:`void`}}},description:``},selectsRange:{required:!1,tsType:{name:`boolean`},description:``},value:{required:!0,tsType:{name:`union`,raw:`Date | NullableDateRange | null`,elements:[{name:`Date`},{name:`NullableDateRange`},{name:`null`}]},description:``},onChange:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(date: Date | NullableDateRange) => void`,signature:{arguments:[{type:{name:`union`,raw:`Date | NullableDateRange`,elements:[{name:`Date`},{name:`NullableDateRange`}]},name:`date`}],return:{name:`void`}}},description:``},minDate:{required:!1,tsType:{name:`Date`},description:``},maxDate:{required:!1,tsType:{name:`Date`},description:``},currentDate:{required:!1,tsType:{name:`Date`},description:``},onCurrentDateChange:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(date: Date) => void`,signature:{arguments:[{type:{name:`Date`},name:`date`}],return:{name:`void`}}},description:``}}}})))()}export{E as a,T as c,A as i,Ue as n,te as o,re as r,w as s,He as t};
@@ -1,2 +1,2 @@
1
- import{a as e,n as t}from"./rolldown-runtime-DkW27tQK.js";import{t as n}from"./react-BZJXY1be.js";import{n as r,t as i}from"./check-7oGyK4Lh.js";import{i as a,n as o,r as s}from"./iframe-CB9pifff.js";import{a as c,i as l}from"./utils-tg3ibbzi.js";import{n as u,t as d}from"./ui.module-31LPbZGK.js";import{i as f,r as p}from"./uiClasses-Bz6cvlDQ.js";import{n as m,t as h}from"./CheckBox.module-BOAVN-Ny.js";var g,_;function v(){return(v=t((()=>{a(),g=[[`path`,{d:`M5 12h14`,key:`1ays0h`}]],_=s(`minus`,g)})))()}function y({label:e,description:t,placeholder:n,disabled:r,size:a,className:o,onChange:s,value:l,noWrap:d,id:f,tone:m=`neutral`,indeterminate:g=!1,...v}){let y=(0,b.useId)(),S=f??y,C=t?`${S}-description`:void 0,w=e??n,T=l??!1,E=e=>{e&&(e.indeterminate=g)};return(0,x.jsxs)(`div`,{className:c(u.uiElement,a&&u.uiSizable,a&&u[a],r&&u.disabled,o),"aria-disabled":r||void 0,children:[(0,x.jsxs)(`div`,{className:h.row,children:[(0,x.jsxs)(`div`,{className:c(h.wrapper,p(m)),children:[(0,x.jsx)(`input`,{...v,ref:E,id:S,type:`checkbox`,checked:T,disabled:r,"aria-checked":g?`mixed`:T,"aria-describedby":C,className:c(u.uiSelectionControl,h.input,g&&h.inputIndeterminate),onChange:()=>s?.(!T)}),(0,x.jsx)(`div`,{className:c(u.uiSelectionIcon,h.icon),"aria-hidden":`true`,children:g?(0,x.jsx)(_,{}):(0,x.jsx)(i,{})})]}),w&&(0,x.jsx)(`label`,{htmlFor:S,className:c(u.uiLabelBase,d&&`textNoWrap`),children:w})]}),t&&(0,x.jsx)(`p`,{id:C,className:u.uiDescription,children:t})]})}var b,x;function S(){return(S=t((()=>{b=e(n(),1),l(),r(),v(),d(),f(),m(),x=o(),y.__docgenInfo={description:`Компонент флажка для выбора булевого значения в формах и списках.
1
+ import{a as e,n as t}from"./rolldown-runtime-DkW27tQK.js";import{t as n}from"./react-BZJXY1be.js";import{n as r,t as i}from"./check-C2TxO0vM.js";import{i as a,n as o,r as s}from"./iframe-Ctjgxy8H.js";import{a as c,i as l}from"./utils-tg3ibbzi.js";import{n as u,t as d}from"./ui.module-31LPbZGK.js";import{i as f,r as p}from"./uiClasses-Bz6cvlDQ.js";import{n as m,t as h}from"./CheckBox.module-BOAVN-Ny.js";var g,_;function v(){return(v=t((()=>{a(),g=[[`path`,{d:`M5 12h14`,key:`1ays0h`}]],_=s(`minus`,g)})))()}function y({label:e,description:t,placeholder:n,disabled:r,size:a,className:o,onChange:s,value:l,noWrap:d,id:f,tone:m=`neutral`,indeterminate:g=!1,...v}){let y=(0,b.useId)(),S=f??y,C=t?`${S}-description`:void 0,w=e??n,T=l??!1,E=e=>{e&&(e.indeterminate=g)};return(0,x.jsxs)(`div`,{className:c(u.uiElement,a&&u.uiSizable,a&&u[a],r&&u.disabled,o),"aria-disabled":r||void 0,children:[(0,x.jsxs)(`div`,{className:h.row,children:[(0,x.jsxs)(`div`,{className:c(h.wrapper,p(m)),children:[(0,x.jsx)(`input`,{...v,ref:E,id:S,type:`checkbox`,checked:T,disabled:r,"aria-checked":g?`mixed`:T,"aria-describedby":C,className:c(u.uiSelectionControl,h.input,g&&h.inputIndeterminate),onChange:()=>s?.(!T)}),(0,x.jsx)(`div`,{className:c(u.uiSelectionIcon,h.icon),"aria-hidden":`true`,children:g?(0,x.jsx)(_,{}):(0,x.jsx)(i,{})})]}),w&&(0,x.jsx)(`label`,{htmlFor:S,className:c(u.uiLabelBase,d&&`textNoWrap`),children:w})]}),t&&(0,x.jsx)(`p`,{id:C,className:u.uiDescription,children:t})]})}var b,x;function S(){return(S=t((()=>{b=e(n(),1),l(),r(),v(),d(),f(),m(),x=o(),y.__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" | "brand" | "error" | "warning" | "success" | "info"`,elements:[{name:`literal`,value:`"neutral"`},{name:`literal`,value:`"brand"`},{name:`literal`,value:`"error"`},{name:`literal`,value:`"warning"`},{name:`literal`,value:`"success"`},{name:`literal`,value:`"info"`}]},description:``,defaultValue:{value:`"neutral"`,computed:!1}},noWrap:{required:!1,tsType:{name:`boolean`},description:``},indeterminate:{required:!1,tsType:{name:`boolean`},description:'Показывает частично выбранную группу и публикует `aria-checked="mixed"`.',defaultValue:{value:`false`,computed:!1}}},composes:[`Omit`]}})))()}export{S as n,y as t};
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-CB9pifff.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-DFW8ghoN.js";import{a as p,i as m,n as h,o as g,r as _,t as v}from"./CheckBox.stories-CLL1W22k.js";function y(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(s,{of:v,parameters:{docs:{toc:!0}}}),`
1
+ import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-Ctjgxy8H.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-Cyh_k-EZ.js";import{a as p,i as m,n as h,o as g,r as _,t as v}from"./CheckBox.stories-m5AGRWTh.js";function y(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(s,{of:v,parameters:{docs:{toc:!0}}}),`
2
2
  `,(0,x.jsx)(u,{children:`CheckBox`}),`
3
3
  `,(0,x.jsx)(o,{children:`Флажок для булевых полей с общими UI-схемами tone и appearance`}),`
4
4
  `,(0,x.jsx)(t.p,{children:`CheckBox уже имеет живые stories, а эта страница собирает их в структурированную документацию с краткими рекомендациями, примерами подключения и API.
@@ -1,4 +1,4 @@
1
- import{n as e,r as t}from"./rolldown-runtime-DkW27tQK.js";import{t as n}from"./react-BZJXY1be.js";import{n as r,t as i}from"./CheckBox-C88r1nU9.js";import{n as a}from"./iframe-CB9pifff.js";import{n as o,t as s}from"./createControlledStoryRender-BouhvX-R.js";var c=t({Controlled:()=>p,Disabled:()=>g,Sizes:()=>h,Tones:()=>m,__namedExportsOrder:()=>_,default:()=>f}),l,u,d,f,p,m,h,g,_;function v(){return(v=e((()=>{l=n(),o(),r(),u=a(),d=s((e,t)=>(0,u.jsx)(i,{...e,value:e.value??!1,onChange:n=>{e.onChange?.(n),t({value:n})}})),f={title:`UI/CheckBox`,component:i,args:{value:!1,onChange:()=>{}},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{label:{description:`Текст основной подписи чекбокса.`,control:`text`},description:{description:`Дополнительное описание под элементом.`,control:`text`},placeholder:{description:"Текст подписи, если `label` не задан.",control:`text`},value:{description:`Текущее состояние чекбокса.`,control:`boolean`},onChange:{description:`Вызывается при изменении состояния.`,control:!1},disabled:{description:`Блокирует взаимодействие с элементом.`,control:`boolean`},size:{description:`Размер визуального контрола и текста.`,control:`select`,options:[`xs`,`sm`,`md`,`lg`,`xl`]},tone:{description:`Цветовой тон чекбокса.`,control:`inline-radio`,options:[`neutral`,`brand`,`error`,`warning`,`success`,`info`]},noWrap:{description:`Не переносит текст подписи на новую строку.`,control:`boolean`},indeterminate:{description:'Показывает частично выбранное состояние с `aria-checked="mixed"`.',control:`boolean`}}},p={render:d,args:{label:`Принимать условия`,description:`Подтверждение условий использования сервиса.`,value:!1,size:`md`,disabled:!1,tone:`neutral`}},m={render:()=>{let[e,t]=(0,l.useState)({neutral:!0,info:!0,success:!0,warning:!0,error:!0});return(0,u.jsx)(`div`,{style:{display:`grid`,gap:12},children:[`neutral`,`info`,`success`,`warning`,`error`].map(n=>(0,u.jsx)(i,{tone:n,label:`Тон ${n}`,value:e[n],onChange:e=>t(t=>({...t,[n]:e}))},n))})}},h={render:()=>{let[e,t]=(0,l.useState)({xs:!1,sm:!0,md:!1,lg:!0,xl:!1});return(0,u.jsx)(`div`,{style:{display:`grid`,gap:12},children:[`xs`,`sm`,`md`,`lg`,`xl`].map(n=>(0,u.jsx)(i,{size:n,label:`Размер ${n}`,value:e[n],onChange:e=>t(t=>({...t,[n]:e}))},n))})}},g={render:d,args:{label:`Недоступный чекбокс`,description:`Изменение недоступно из-за прав доступа.`,value:!0,disabled:!0,tone:`neutral`}},p.parameters={...p.parameters,docs:{...p.parameters?.docs,source:{originalSource:`{
1
+ import{n as e,r as t}from"./rolldown-runtime-DkW27tQK.js";import{t as n}from"./react-BZJXY1be.js";import{n as r,t as i}from"./CheckBox-CLhfwAlH.js";import{n as a}from"./iframe-Ctjgxy8H.js";import{n as o,t as s}from"./createControlledStoryRender-BouhvX-R.js";var c=t({Controlled:()=>p,Disabled:()=>g,Sizes:()=>h,Tones:()=>m,__namedExportsOrder:()=>_,default:()=>f}),l,u,d,f,p,m,h,g,_;function v(){return(v=e((()=>{l=n(),o(),r(),u=a(),d=s((e,t)=>(0,u.jsx)(i,{...e,value:e.value??!1,onChange:n=>{e.onChange?.(n),t({value:n})}})),f={title:`UI/CheckBox`,component:i,args:{value:!1,onChange:()=>{}},parameters:{atomicCanvas:!0,layout:`padded`},argTypes:{label:{description:`Текст основной подписи чекбокса.`,control:`text`},description:{description:`Дополнительное описание под элементом.`,control:`text`},placeholder:{description:"Текст подписи, если `label` не задан.",control:`text`},value:{description:`Текущее состояние чекбокса.`,control:`boolean`},onChange:{description:`Вызывается при изменении состояния.`,control:!1},disabled:{description:`Блокирует взаимодействие с элементом.`,control:`boolean`},size:{description:`Размер визуального контрола и текста.`,control:`select`,options:[`xs`,`sm`,`md`,`lg`,`xl`]},tone:{description:`Цветовой тон чекбокса.`,control:`inline-radio`,options:[`neutral`,`brand`,`error`,`warning`,`success`,`info`]},noWrap:{description:`Не переносит текст подписи на новую строку.`,control:`boolean`},indeterminate:{description:'Показывает частично выбранное состояние с `aria-checked="mixed"`.',control:`boolean`}}},p={render:d,args:{label:`Принимать условия`,description:`Подтверждение условий использования сервиса.`,value:!1,size:`md`,disabled:!1,tone:`neutral`}},m={render:()=>{let[e,t]=(0,l.useState)({neutral:!0,info:!0,success:!0,warning:!0,error:!0});return(0,u.jsx)(`div`,{style:{display:`grid`,gap:12},children:[`neutral`,`info`,`success`,`warning`,`error`].map(n=>(0,u.jsx)(i,{tone:n,label:`Тон ${n}`,value:e[n],onChange:e=>t(t=>({...t,[n]:e}))},n))})}},h={render:()=>{let[e,t]=(0,l.useState)({xs:!1,sm:!0,md:!1,lg:!0,xl:!1});return(0,u.jsx)(`div`,{style:{display:`grid`,gap:12},children:[`xs`,`sm`,`md`,`lg`,`xl`].map(n=>(0,u.jsx)(i,{size:n,label:`Размер ${n}`,value:e[n],onChange:e=>t(t=>({...t,[n]:e}))},n))})}},g={render:d,args:{label:`Недоступный чекбокс`,description:`Изменение недоступно из-за прав доступа.`,value:!0,disabled:!0,tone:`neutral`}},p.parameters={...p.parameters,docs:{...p.parameters?.docs,source:{originalSource:`{
2
2
  render: renderCheckBoxStory,
3
3
  args: {
4
4
  label: "Принимать условия",