@ryuzaki13/react-foundation-ui 3.9.0 → 3.10.1

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 (376) hide show
  1. package/dist/badge/index.js +1 -1
  2. package/dist/barcode-scanner/index.js +1 -1
  3. package/dist/base-table/index.js +1 -1
  4. package/dist/base-table/ui/BaseTable.d.ts +9 -1
  5. package/dist/base-table/ui/BaseTable.d.ts.map +1 -1
  6. package/dist/chunks/{TextEditorLexicalClient-BQH41FFT.js → TextEditorLexicalClient-Cj6yjCGm.js} +3 -3
  7. package/dist/chunks/{TextEditorLexicalClient-BQH41FFT.js.map → TextEditorLexicalClient-Cj6yjCGm.js.map} +1 -1
  8. package/dist/chunks/{base-table-9H5YuVvB.js → base-table-CoVXG2FT.js} +132 -114
  9. package/dist/chunks/base-table-CoVXG2FT.js.map +1 -0
  10. package/dist/chunks/{context-menu-BV8636Ou.js → context-menu-BlLesqpZ.js} +2 -2
  11. package/dist/chunks/{context-menu-BV8636Ou.js.map → context-menu-BlLesqpZ.js.map} +1 -1
  12. package/dist/chunks/flex-BhrQCH4I.js +401 -0
  13. package/dist/chunks/flex-BhrQCH4I.js.map +1 -0
  14. package/dist/chunks/grid-D6wPRCjx.js +394 -0
  15. package/dist/chunks/grid-D6wPRCjx.js.map +1 -0
  16. package/dist/chunks/{misc-BjdDK6mm.js → misc-Dcr24uDY.js} +2 -2
  17. package/dist/chunks/{misc-BjdDK6mm.js.map → misc-Dcr24uDY.js.map} +1 -1
  18. package/dist/chunks/{modal-CBGNsqrq.js → modal-DeABSKrb.js} +4 -4
  19. package/dist/chunks/{modal-CBGNsqrq.js.map → modal-DeABSKrb.js.map} +1 -1
  20. package/dist/chunks/{picker-DagDe9OH.js → picker-CWx7vPE8.js} +2 -2
  21. package/dist/chunks/{picker-DagDe9OH.js.map → picker-CWx7vPE8.js.map} +1 -1
  22. package/dist/chunks/responsiveLayout-D2mtCDdh.js +28 -0
  23. package/dist/chunks/responsiveLayout-D2mtCDdh.js.map +1 -0
  24. package/dist/chunks/{select-C-1U-ujV.js → select-CHBBo5fn.js} +2 -2
  25. package/dist/chunks/{select-C-1U-ujV.js.map → select-CHBBo5fn.js.map} +1 -1
  26. package/dist/chunks/table-Cm9NhT9K.js +154 -0
  27. package/dist/chunks/table-Cm9NhT9K.js.map +1 -0
  28. package/dist/context-menu/index.js +1 -1
  29. package/dist/disclosure/index.js +1 -1
  30. package/dist/errors/index.js +1 -1
  31. package/dist/expandable-action-panel/index.js +1 -1
  32. package/dist/flex/FlexContainer.d.ts +1 -1
  33. package/dist/flex/FlexContainer.d.ts.map +1 -1
  34. package/dist/flex/FlexItem.d.ts +1 -1
  35. package/dist/flex/FlexItem.d.ts.map +1 -1
  36. package/dist/flex/PredefinedFlex.d.ts +1 -1
  37. package/dist/flex/PredefinedFlex.d.ts.map +1 -1
  38. package/dist/flex/getFlexClasses.d.ts +5 -0
  39. package/dist/flex/getFlexClasses.d.ts.map +1 -0
  40. package/dist/flex/index.js +1 -1
  41. package/dist/grid/GridContainer.d.ts.map +1 -1
  42. package/dist/grid/GridItem.d.ts.map +1 -1
  43. package/dist/grid/getGridClasses.d.ts +12 -0
  44. package/dist/grid/getGridClasses.d.ts.map +1 -0
  45. package/dist/grid/index.js +1 -1
  46. package/dist/image/index.js +2 -2
  47. package/dist/layout-picker/index.js +1 -1
  48. package/dist/list/index.js +2 -2
  49. package/dist/listbox/index.js +1 -1
  50. package/dist/misc/index.js +1 -1
  51. package/dist/modal/index.js +1 -1
  52. package/dist/multi-select/index.js +1 -1
  53. package/dist/notifications/index.js +1 -1
  54. package/dist/picker/index.js +1 -1
  55. package/dist/preset-range-date-input/index.js +1 -1
  56. package/dist/preset-select/index.js +1 -1
  57. package/dist/responsive-layout/responsiveLayout.d.ts +17 -0
  58. package/dist/responsive-layout/responsiveLayout.d.ts.map +1 -0
  59. package/dist/select/index.js +1 -1
  60. package/dist/simple-table/index.js +1 -1
  61. package/dist/slider/index.js +1 -1
  62. package/dist/state-select/index.js +1 -1
  63. package/dist/styles.css +1 -1
  64. package/dist/table/Table.d.ts +10 -1
  65. package/dist/table/Table.d.ts.map +1 -1
  66. package/dist/table/index.js +1 -1
  67. package/dist/table-sorting/index.js +1 -1
  68. package/dist/tabs/index.js +1 -1
  69. package/dist/text-editor/index.js +2 -2
  70. package/dist/toolbar/index.js +2 -2
  71. package/dist/tree-select/index.js +1 -1
  72. package/dist/tree-table/index.js +1 -1
  73. package/package.json +1 -1
  74. package/storybook-static/assets/{Badge-CL58JilM.js → Badge-7nsS5Yyj.js} +1 -1
  75. package/storybook-static/assets/{Badge.stories-CXFTvV3D.js → Badge.stories-BzQKeDqC.js} +1 -1
  76. package/storybook-static/assets/{BadgeList-DLssobfd.js → BadgeList-WzFV9MB1.js} +1 -1
  77. package/storybook-static/assets/{BarcodeScannerDialog.stories-CpMywpKq.js → BarcodeScannerDialog.stories-Ci8Mf9WX.js} +1 -1
  78. package/storybook-static/assets/{Button-CSbLv1K7.js → Button-6F3OVyTc.js} +1 -1
  79. package/storybook-static/assets/{Button-DMAPWgMI.js → Button-DqsSng-I.js} +1 -1
  80. package/storybook-static/assets/{Button.stories-CU1kYMvA.js → Button.stories-PNc3lIYB.js} +1 -1
  81. package/storybook-static/assets/{CalendarView-DuCLo_x5.js → CalendarView-BT9X9tky.js} +1 -1
  82. package/storybook-static/assets/{CheckBox-BBPasWSk.js → CheckBox-BJhTyl1K.js} +1 -1
  83. package/storybook-static/assets/{CheckBox-Bfcdvr2o.js → CheckBox-BasxUZYS.js} +1 -1
  84. package/storybook-static/assets/{CheckBox.stories-sGH6EuU4.js → CheckBox.stories-DLRA5q3H.js} +1 -1
  85. package/storybook-static/assets/{Color-6AOWCN3U-5NJhf8m9.js → Color-6AOWCN3U-C4R02nIA.js} +1 -1
  86. package/storybook-static/assets/{ContextMenu-CxuYkXjJ.js → ContextMenu-BckwURZg.js} +1 -1
  87. package/storybook-static/assets/{ContextMenu-z6NKmD0I.js → ContextMenu-OOsbvmOa.js} +1 -1
  88. package/storybook-static/assets/{ContextMenu.stories-CI5IW_KX.js → ContextMenu.stories-BD-wMDNw.js} +1 -1
  89. package/storybook-static/assets/{DateInput-BkCbK0M5.js → DateInput-B5MxQUHL.js} +1 -1
  90. package/storybook-static/assets/{DateInput-A8NURpCX.js → DateInput-DT6btAWU.js} +1 -1
  91. package/storybook-static/assets/{DateInput.stories-DnzeyBpg.js → DateInput.stories-BK2brwe_.js} +1 -1
  92. package/storybook-static/assets/{DateRangePresetSelect-Bh7qMFTr.js → DateRangePresetSelect-Dplr79Cm.js} +1 -1
  93. package/storybook-static/assets/{DateRangePresetSelect-CGZkf8Ty.js → DateRangePresetSelect-gRdIuTx9.js} +1 -1
  94. package/storybook-static/assets/{DateRangePresetSelect.stories-Drm2FCnJ.js → DateRangePresetSelect.stories-BRksGdxw.js} +1 -1
  95. package/storybook-static/assets/{DeprecatedMultiSelect-BebYsPmQ.js → DeprecatedMultiSelect-1MSPac-V.js} +1 -1
  96. package/storybook-static/assets/{DeprecatedMultiSelect-8TWWhsLi.js → DeprecatedMultiSelect-BOxmEW2D.js} +1 -1
  97. package/storybook-static/assets/{DeprecatedMultiSelect.stories-7iL6YOgh.js → DeprecatedMultiSelect.stories-Ax0zv6Kb.js} +1 -1
  98. package/storybook-static/assets/{Detail-BOZkPwOI.js → Detail-_5TyqOha.js} +1 -1
  99. package/storybook-static/assets/{Detail.stories-RZALoKmD.js → Detail.stories-CJbeEBiY.js} +1 -1
  100. package/storybook-static/assets/{Dialog-CeukIYpx.js → Dialog-BodfEiIi.js} +1 -1
  101. package/storybook-static/assets/{Dialog-BsslYClj.js → Dialog-HBOYhMQq.js} +1 -1
  102. package/storybook-static/assets/{Dialog.stories-y7MpdGQr.js → Dialog.stories-Ds4F0ZoJ.js} +1 -1
  103. package/storybook-static/assets/{Disclosure-CiTnWx5y.js → Disclosure-BbvtIOyN.js} +1 -1
  104. package/storybook-static/assets/{Disclosure.stories-UWW9oheF.js → Disclosure.stories-CnSK79hZ.js} +1 -1
  105. package/storybook-static/assets/{DisclosureGroup-CT3BdQXr.js → DisclosureGroup-Dd0BeL4o.js} +1 -1
  106. package/storybook-static/assets/{DocsRenderer-JROSPFPF-x50rjjKP.js → DocsRenderer-JROSPFPF-BX-ThlFg.js} +1 -1
  107. package/storybook-static/assets/{DropZone-gWSeoAx6.js → DropZone-CCkHaYAD.js} +1 -1
  108. package/storybook-static/assets/{DropZone-DUn9vW2w.js → DropZone-DPqYieZH.js} +1 -1
  109. package/storybook-static/assets/{DropZone.stories-CmaVl9to.js → DropZone.stories-lfKkNIIl.js} +1 -1
  110. package/storybook-static/assets/{DropdownMenu-DkeS8gOF.js → DropdownMenu-QWp-lSol.js} +1 -1
  111. package/storybook-static/assets/{ExpandableActionPanel-DdqWZDe2.js → ExpandableActionPanel-DxPp3zYd.js} +1 -1
  112. package/storybook-static/assets/{ExpandableActionPanel.stories-CA-dpb07.js → ExpandableActionPanel.stories-BiklI55p.js} +1 -1
  113. package/storybook-static/assets/Flex-S4mwRnc2.js +81 -0
  114. package/storybook-static/assets/Flex.stories-DRBLrgrW.js +454 -0
  115. package/storybook-static/assets/FlexContainer-4Ap7vbIt.js +1 -0
  116. package/storybook-static/assets/{FlexItem-DsoW-br3.js → FlexItem-Dwqi7KeT.js} +2 -2
  117. package/storybook-static/assets/{FloatingPopover-7MpESGU4.js → FloatingPopover-D8FScEoc.js} +1 -1
  118. package/storybook-static/assets/FormattedTableCell-BKSpyxnu.js +15 -0
  119. package/storybook-static/assets/{Grid-eqZxtRIA.js → Grid-CJ5RLrgv.js} +2 -2
  120. package/storybook-static/assets/Grid-DIYjEdUA.js +84 -0
  121. package/storybook-static/assets/Grid.stories-Bl35lMkU.js +657 -0
  122. package/storybook-static/assets/{GridContainer-B9JaLUGE.js → GridContainer-B2iAnXeB.js} +2 -2
  123. package/storybook-static/assets/GridContainer-DgBuOs_1.css +1 -0
  124. package/storybook-static/assets/{ImageCropper.stories-W76XOOMv.js → ImageCropper.stories--E79MUTS.js} +1 -1
  125. package/storybook-static/assets/{ImageRenderer-DYg7BkPO.js → ImageRenderer-D0stahXz.js} +1 -1
  126. package/storybook-static/assets/{ImageRenderer.stories-rgJV0OBp.js → ImageRenderer.stories-C_Ir6A3m.js} +1 -1
  127. package/storybook-static/assets/{ImageView.stories-D9h6sg3j.js → ImageView.stories-DbY7pwWs.js} +1 -1
  128. package/storybook-static/assets/{ImageViewer.stories-Bd0WJOp1.js → ImageViewer.stories-D2jfTzCV.js} +2 -2
  129. package/storybook-static/assets/{ImageViewerRuntime-DOjvjbv0.js → ImageViewerRuntime-DlvGnNv4.js} +1 -1
  130. package/storybook-static/assets/{Input-7N70tL0u.js → Input-CzvWPW0I.js} +1 -1
  131. package/storybook-static/assets/{Input-BxrxwNyD.js → Input-av5ktymr.js} +1 -1
  132. package/storybook-static/assets/{Input.stories-Df1j802b.js → Input.stories-CvLnu270.js} +1 -1
  133. package/storybook-static/assets/{InputDateTime-UdemHZXV.js → InputDateTime-D5bQuB9a.js} +1 -1
  134. package/storybook-static/assets/{InputDateTime.stories-yRwAe5_5.js → InputDateTime.stories-BD9Pt7vB.js} +1 -1
  135. package/storybook-static/assets/{InputFile-5LpFR1Fq.js → InputFile-C3nj3qsi.js} +1 -1
  136. package/storybook-static/assets/{InputFile-DDhf7A_J.js → InputFile-ulrG6ECh.js} +1 -1
  137. package/storybook-static/assets/{InputFile.stories-BVDT-BAx.js → InputFile.stories-CEewSWb_.js} +1 -1
  138. package/storybook-static/assets/{InputFiles-CgM2BwNO.js → InputFiles-DZ1nUYOE.js} +1 -1
  139. package/storybook-static/assets/{InputFiles-D3CPIXiK.js → InputFiles-lF7Ys1hh.js} +1 -1
  140. package/storybook-static/assets/{InputFiles.stories-XMHBA9Fn.js → InputFiles.stories-CCptKLDn.js} +1 -1
  141. package/storybook-static/assets/{InputFilesList-DSivq9iT.js → InputFilesList-DTJkMHNI.js} +1 -1
  142. package/storybook-static/assets/{InputImage-CY0A9Xz-.js → InputImage-CIPZL6uS.js} +1 -1
  143. package/storybook-static/assets/{InputImage-BG_QyAh3.js → InputImage-lDHbW_ac.js} +1 -1
  144. package/storybook-static/assets/{InputImage.stories-DiGXytZU.js → InputImage.stories-CQ2BBGf-.js} +1 -1
  145. package/storybook-static/assets/{InteractiveComponents-Bf9KitNR.js → InteractiveComponents-DD7TZeA4.js} +1 -1
  146. package/storybook-static/assets/{InteractiveComponents.stories-TwALUGGN.js → InteractiveComponents.stories-Bbo3l8WO.js} +1 -1
  147. package/storybook-static/assets/{LayoutPicker-BLrNe8g_.js → LayoutPicker-A7VlDbc0.js} +1 -1
  148. package/storybook-static/assets/{LayoutPicker-MhA9N4WI.js → LayoutPicker-uw1knHzA.js} +1 -1
  149. package/storybook-static/assets/{LayoutPicker.stories-BCME5Ogr.js → LayoutPicker.stories-DDR6oiSN.js} +1 -1
  150. package/storybook-static/assets/{Listbox-B8F2xWvs.js → Listbox-CO1BjyFs.js} +1 -1
  151. package/storybook-static/assets/{Listbox-y_3VijHU.js → Listbox-CmkI7dm_.js} +1 -1
  152. package/storybook-static/assets/{Listbox.stories-mp0p0NpO.js → Listbox.stories-BIPmBbuG.js} +1 -1
  153. package/storybook-static/assets/{Modal-qIsW7BkG.js → Modal-C3JdXj6Q.js} +1 -1
  154. package/storybook-static/assets/{Modal-DgEV0vBs.js → Modal-IXMZUaaw.js} +1 -1
  155. package/storybook-static/assets/{Modal.stories-CQ-Hn4GK.js → Modal.stories-BD-UnVeM.js} +1 -1
  156. package/storybook-static/assets/{ModalManagerProvider-DEoq4q_O.js → ModalManagerProvider-zJVg8-dg.js} +1 -1
  157. package/storybook-static/assets/{MultiSelect-D-6XHQUG.js → MultiSelect-CGoyA8-m.js} +1 -1
  158. package/storybook-static/assets/{MultiSelect-PGooEkAK.js → MultiSelect-DZKjK53B.js} +1 -1
  159. package/storybook-static/assets/{MultiSelect.stories-B0JzMViN.js → MultiSelect.stories-D65mpYYt.js} +1 -1
  160. package/storybook-static/assets/{MultiSelectCore-B0VbnEBc.js → MultiSelectCore-ih1pgvuq.js} +1 -1
  161. package/storybook-static/assets/{NoData-DCuuvSoD.js → NoData-32gM9qt4.js} +1 -1
  162. package/storybook-static/assets/{NotificationsHost-CWqG91Yh.js → NotificationsHost-pkEhxgz2.js} +1 -1
  163. package/storybook-static/assets/{NotificationsHost.stories-CEp-AppV.js → NotificationsHost.stories-BqIayryx.js} +1 -1
  164. package/storybook-static/assets/{ODataMultiSelect-CwVneYzi.js → ODataMultiSelect-D42gAcHg.js} +1 -1
  165. package/storybook-static/assets/{ODataMultiSelect.stories-BRnVOZsK.js → ODataMultiSelect.stories-DfAkKAsG.js} +1 -1
  166. package/storybook-static/assets/{ODataSelect-DyKTFqk7.js → ODataSelect-DPOMWPKO.js} +1 -1
  167. package/storybook-static/assets/{ODataSelect.stories-B-3GaeU4.js → ODataSelect.stories-DHs3wp7E.js} +1 -1
  168. package/storybook-static/assets/{ODataTreeMultiSelect-16xNi9qI.js → ODataTreeMultiSelect-CC8yuaVP.js} +1 -1
  169. package/storybook-static/assets/{ODataTreeMultiSelect.stories-DI9tH2qD.js → ODataTreeMultiSelect.stories-BtwLdGK6.js} +1 -1
  170. package/storybook-static/assets/{ODataTreeSelect-Dk262plK.js → ODataTreeSelect-qcitpYxj.js} +1 -1
  171. package/storybook-static/assets/{ODataTreeSelect.stories-DfaL0dci.js → ODataTreeSelect.stories-1r_tkUVi.js} +1 -1
  172. package/storybook-static/assets/{OneStepScroller-DI8qlm5c.js → OneStepScroller-wz4Qujpx.js} +1 -1
  173. package/storybook-static/assets/{Option-CG3bU2cY.js → Option-Beom2xTg.js} +1 -1
  174. package/storybook-static/assets/{OptionButton-DF0E8aU5.js → OptionButton-D_ZCVbsd.js} +1 -1
  175. package/storybook-static/assets/{OptionContent-BZ3FiJQ4.js → OptionContent-FZ-u9L1s.js} +1 -1
  176. package/storybook-static/assets/{OptionContentContainer-CyI5IfqU.js → OptionContentContainer-HVNOgpjm.js} +1 -1
  177. package/storybook-static/assets/{PeriodSelect-uR-Xk4vQ.js → PeriodSelect-DbdeznMQ.js} +1 -1
  178. package/storybook-static/assets/{PeriodSelect-_gAbt3E6.js → PeriodSelect-qevVtoSU.js} +1 -1
  179. package/storybook-static/assets/{PeriodSelect.stories-D-Lp7QtA.js → PeriodSelect.stories-BLi_6rpY.js} +1 -1
  180. package/storybook-static/assets/{PickerField-CByAoAAO.js → PickerField-BHSRcQY6.js} +1 -1
  181. package/storybook-static/assets/{PickerTriggerActions-CYM-UvRz.js → PickerTriggerActions-Cxk3YQGF.js} +1 -1
  182. package/storybook-static/assets/{Popover-CdnsB1ss.js → Popover-BosMVXTI.js} +1 -1
  183. package/storybook-static/assets/{Popover-CRcVoLur.js → Popover-De2fvkIB.js} +1 -1
  184. package/storybook-static/assets/{Popover.stories-Dxdt7Jc5.js → Popover.stories-DM-Plj05.js} +1 -1
  185. package/storybook-static/assets/{PresetRangeDateInput-BmAGj8ye.js → PresetRangeDateInput-CCQuBkJj.js} +1 -1
  186. package/storybook-static/assets/{PresetRangeDateInput-BQkK3Nmd.js → PresetRangeDateInput-jersOEYO.js} +1 -1
  187. package/storybook-static/assets/{PresetRangeDateInput.stories-CUIwCB6T.js → PresetRangeDateInput.stories-DwqDWXX9.js} +1 -1
  188. package/storybook-static/assets/{PresetSelect-C7HG9CjN.js → PresetSelect-BhwHbWmS.js} +1 -1
  189. package/storybook-static/assets/{README-BmwSZfOQ.js → README-1UUrJXjZ.js} +1 -1
  190. package/storybook-static/assets/{README-zlaX5PMG.js → README-29WDFTDH.js} +1 -1
  191. package/storybook-static/assets/{README-D-urpNSn.js → README-33qTnj5l.js} +1 -1
  192. package/storybook-static/assets/{README-BbUo3mGT.js → README-B5eMX8_9.js} +1 -1
  193. package/storybook-static/assets/{README-DfRan6KR.js → README-B5rmNIab.js} +1 -1
  194. package/storybook-static/assets/{README-KCmlmH_Z.js → README-BAlXRtAz.js} +1 -1
  195. package/storybook-static/assets/{README-CNnGqdkH.js → README-BCEKAY_J.js} +1 -1
  196. package/storybook-static/assets/{README-DyKegKG_.js → README-BD5f1if4.js} +1 -1
  197. package/storybook-static/assets/{README-DMZYAdN0.js → README-BIvHy4kr.js} +1 -1
  198. package/storybook-static/assets/{README-Dhptn6UE.js → README-BK8k_Q4m.js} +1 -1
  199. package/storybook-static/assets/{README-CoENtXo_.js → README-BKLeD4y3.js} +1 -1
  200. package/storybook-static/assets/{README-C41zKsq6.js → README-BNsU3Cqx.js} +1 -1
  201. package/storybook-static/assets/{README-BL0-uTlP.js → README-BPSG9KrB.js} +1 -1
  202. package/storybook-static/assets/{README-BEYMpavt.js → README-BQDFmWGi.js} +1 -1
  203. package/storybook-static/assets/{README-BR8bdUjV.js → README-B_tg7QVI.js} +1 -1
  204. package/storybook-static/assets/{README-DxTRj-9a.js → README-BfRKdJtw.js} +1 -1
  205. package/storybook-static/assets/{README-ByIhL9zr.js → README-BoJXfTe6.js} +1 -1
  206. package/storybook-static/assets/{README-C5-oc7fP.js → README-By0zyJQ-.js} +1 -1
  207. package/storybook-static/assets/{README-De3j71sQ.js → README-BzVVPLXk.js} +1 -1
  208. package/storybook-static/assets/{README-BquP2lux.js → README-CHllxFPj.js} +1 -1
  209. package/storybook-static/assets/{README-CTBkJ27k.js → README-CJ6rsYUk.js} +1 -1
  210. package/storybook-static/assets/{README-DY7lgi4q.js → README-CJFgcV8C.js} +1 -1
  211. package/storybook-static/assets/{README-j-Czw7ww.js → README-CPZBUXWs.js} +1 -1
  212. package/storybook-static/assets/{README-DCWk-Vga.js → README-CioPc-xb.js} +1 -1
  213. package/storybook-static/assets/{README-CTGZXXVP.js → README-CmzO6bzh.js} +1 -1
  214. package/storybook-static/assets/{README-B0iHgO_3.js → README-Cpk-Tr_W.js} +1 -1
  215. package/storybook-static/assets/{README-DTMZk60G.js → README-CrhHHw0i.js} +1 -1
  216. package/storybook-static/assets/{README-DAH3lVWd.js → README-CvReVgGJ.js} +1 -1
  217. package/storybook-static/assets/{README-DQ1aeQ_i.js → README-CvzdarfH.js} +1 -1
  218. package/storybook-static/assets/{README-BUnl1FiN.js → README-Cz14JUTC.js} +1 -1
  219. package/storybook-static/assets/{README-DevTRU4A.js → README-D09okhy9.js} +1 -1
  220. package/storybook-static/assets/{README-DaaS2c7L.js → README-D5YLxtgR.js} +1 -1
  221. package/storybook-static/assets/{README-_8pxMMC7.js → README-DK5aZdOt.js} +1 -1
  222. package/storybook-static/assets/{README-VNB_Dj5F.js → README-DKI2c8YJ.js} +1 -1
  223. package/storybook-static/assets/{README-BAjs7T_d.js → README-DNeDK1_H.js} +1 -1
  224. package/storybook-static/assets/{README-DNrPuueH.js → README-DQl_3tX1.js} +1 -1
  225. package/storybook-static/assets/{README-B1GSwjas.js → README-DS63ZnOT.js} +1 -1
  226. package/storybook-static/assets/{README-Bdir2bPK.js → README-DT96eoyc.js} +1 -1
  227. package/storybook-static/assets/{README-n4utUGcX.js → README-D_d6frx1.js} +1 -1
  228. package/storybook-static/assets/{README-CpJmZHQJ.js → README-Dc2qBccm.js} +1 -1
  229. package/storybook-static/assets/{README-CtZBJdo2.js → README-DeHGaTaW.js} +1 -1
  230. package/storybook-static/assets/{README-B-ihyEBx.js → README-Df8F75dr.js} +1 -1
  231. package/storybook-static/assets/{README-C7NhXX-n.js → README-DmJq-c8n.js} +1 -1
  232. package/storybook-static/assets/{README-9DTI05kd.js → README-DzASMBMv.js} +1 -1
  233. package/storybook-static/assets/{README-CUghXL33.js → README-DzrrH56m.js} +1 -1
  234. package/storybook-static/assets/{README-xrMkjHIm.js → README-ECCgQcGo.js} +1 -1
  235. package/storybook-static/assets/{README-BurB0dhj.js → README-LWfExOhc.js} +1 -1
  236. package/storybook-static/assets/{README-CiJ5wkhQ.js → README-NHHRscRF.js} +1 -1
  237. package/storybook-static/assets/{README-CvP9yRMR.js → README-O9BJmE-H.js} +1 -1
  238. package/storybook-static/assets/{README-ByT9u_7g.js → README-Rk3Krdys.js} +1 -1
  239. package/storybook-static/assets/{README-CQlujiXR.js → README-bWB0c7pN.js} +1 -1
  240. package/storybook-static/assets/{README-C8jcwgeL.js → README-o4PUljT6.js} +1 -1
  241. package/storybook-static/assets/{README-CoQeAVdv.js → README-sPm51M3K.js} +1 -1
  242. package/storybook-static/assets/{RadioButton-CDIyYuS9.js → RadioButton-BZiBFXe1.js} +1 -1
  243. package/storybook-static/assets/{RadioButton-DV8K96H6.js → RadioButton-CBLdgMz4.js} +1 -1
  244. package/storybook-static/assets/{RadioButton.stories-CRNqKsyz.js → RadioButton.stories-BP5yM5qg.js} +1 -1
  245. package/storybook-static/assets/{RadioGroup-BnYFRvmn.js → RadioGroup-DYRfZVGC.js} +1 -1
  246. package/storybook-static/assets/{RadioGroup-CIIw962S.js → RadioGroup-epjQdSZn.js} +1 -1
  247. package/storybook-static/assets/{RadioGroup.stories-K4AidbLa.js → RadioGroup.stories-UOjXIk6v.js} +1 -1
  248. package/storybook-static/assets/ResponsiveLayoutPreview-BHBxtn2W.js +1 -0
  249. package/storybook-static/assets/ResponsiveLayoutPreview-CyXawjCA.css +1 -0
  250. package/storybook-static/assets/{Scrollable-BI1k9ogH.js → Scrollable-BBYov1Hn.js} +1 -1
  251. package/storybook-static/assets/{Scrollable-DAghtYuE.js → Scrollable-DKQa75cf.js} +1 -1
  252. package/storybook-static/assets/{Scrollable.stories-B6Doakiv.js → Scrollable.stories-BH1-i6nI.js} +1 -1
  253. package/storybook-static/assets/{Select-BNHTGJqG.js → Select-DU6Eh0Lt.js} +1 -1
  254. package/storybook-static/assets/{Select-BlnKV8rc.js → Select-DYOCTPiv.js} +1 -1
  255. package/storybook-static/assets/{Select.stories-DZPAoL4J.js → Select.stories-BF3svbAH.js} +1 -1
  256. package/storybook-static/assets/{Separator-CiETy9yM.js → Separator-CxviJxG5.js} +1 -1
  257. package/storybook-static/assets/{Separator-BCUzEQRV.js → Separator-_gvt1sqm.js} +1 -1
  258. package/storybook-static/assets/{Separator.stories-DTzurpM_.js → Separator.stories-DN6hlZl5.js} +1 -1
  259. package/storybook-static/assets/{SerializableSelect-CnQurr7F.js → SerializableSelect-BVTOrYLs.js} +1 -1
  260. package/storybook-static/assets/{SerializableSelect.stories-qJaV_fjJ.js → SerializableSelect.stories-pcWq603M.js} +1 -1
  261. package/storybook-static/assets/{ShimmerText-I292TqXa.js → ShimmerText-BDDa_Wf7.js} +1 -1
  262. package/storybook-static/assets/{ShimmerText.stories-AKqXqp1k.js → ShimmerText.stories-DdZPIKwl.js} +1 -1
  263. package/storybook-static/assets/{SingleDateTimeInput-DSn0vaW-.js → SingleDateTimeInput-q-eu2xUU.js} +1 -1
  264. package/storybook-static/assets/{SingleDateTimeInput-BrNi93tH.js → SingleDateTimeInput-sGTkT8ZA.js} +1 -1
  265. package/storybook-static/assets/{SingleDateTimeInput.stories-C910kkYc.js → SingleDateTimeInput.stories-X7CMAFsq.js} +1 -1
  266. package/storybook-static/assets/{Slider-DO460-pY.js → Slider-CaKY8LIJ.js} +1 -1
  267. package/storybook-static/assets/{Slider-CXA5Zwku.js → Slider-CqNWljkT.js} +1 -1
  268. package/storybook-static/assets/{Slider.stories-B874XxeK.js → Slider.stories-CMxutCGM.js} +1 -1
  269. package/storybook-static/assets/{SliderInput-DTidinPI.js → SliderInput-HUUN5_IF.js} +1 -1
  270. package/storybook-static/assets/{SliderInput-DsV8o7Yy.js → SliderInput-scYwk-4g.js} +1 -1
  271. package/storybook-static/assets/{SliderInput.stories-CDWNO90y.js → SliderInput.stories-CDhgeql1.js} +1 -1
  272. package/storybook-static/assets/{Sortable-CML34YIF.js → Sortable-CaysnUNW.js} +1 -1
  273. package/storybook-static/assets/{Sortable.stories-C-_fvnHM.js → Sortable.stories-C4gHc5ka.js} +1 -1
  274. package/storybook-static/assets/{Splitter-BcuA2qce.js → Splitter-6cU1s7Qr.js} +1 -1
  275. package/storybook-static/assets/{Splitter.stories-CA0-L_Ja.js → Splitter.stories-CA9A-CZ-.js} +1 -1
  276. package/storybook-static/assets/{StateSelect-B23bb_PO.js → StateSelect-BAqjdi4g.js} +1 -1
  277. package/storybook-static/assets/{StateSelect--FDEb4-v.js → StateSelect-OHl6KWge.js} +1 -1
  278. package/storybook-static/assets/{StateSelect.stories-CEVPThtC.js → StateSelect.stories-xX3ujKGO.js} +1 -1
  279. package/storybook-static/assets/{StatusIndicator-BbTCS7Ku.js → StatusIndicator-C_7dWY2t.js} +1 -1
  280. package/storybook-static/assets/{StatusIndicator.stories-BIps_Ecm.js → StatusIndicator.stories-BRlVzKf7.js} +1 -1
  281. package/storybook-static/assets/{StringToggle.stories-vhOfzslq.js → StringToggle.stories-DFPLwtHW.js} +1 -1
  282. package/storybook-static/assets/{Switch-DibS4nSc.js → Switch-CrlrIm3t.js} +1 -1
  283. package/storybook-static/assets/{Switch-jJgwtWFK.js → Switch-DHcMczAC.js} +1 -1
  284. package/storybook-static/assets/{Switch.stories-Cvky3KQz.js → Switch.stories-LhTPX_R-.js} +1 -1
  285. package/storybook-static/assets/Table-Ct8iqJEY.js +219 -0
  286. package/storybook-static/assets/Table.stories-DO30v6VO.js +184 -0
  287. package/storybook-static/assets/{TableEditor.stories-Be9nCkds.js → TableEditor.stories-Qtqr_l4g.js} +1 -1
  288. package/storybook-static/assets/{Tabs-CTL4MnkZ.js → Tabs-CC0IIQwl.js} +1 -1
  289. package/storybook-static/assets/{Tabs.stories-CIVbz7kW.js → Tabs.stories-Bo_Y-dq8.js} +1 -1
  290. package/storybook-static/assets/{TabsBox-C9g1p4du.js → TabsBox-BMNvHsCH.js} +1 -1
  291. package/storybook-static/assets/{TagInput-DuJLeiyT.js → TagInput-BLwbzCit.js} +1 -1
  292. package/storybook-static/assets/{TagInput.stories-BLVFWr-T.js → TagInput.stories-DNcD4tn4.js} +1 -1
  293. package/storybook-static/assets/{Text-Cr_TUUgL.js → Text-Bih-aO3C.js} +1 -1
  294. package/storybook-static/assets/{Textarea-DGaanGLG.js → Textarea-D3os1biP.js} +1 -1
  295. package/storybook-static/assets/{Textarea-BImI6Q6v.js → Textarea-DCnLF4aj.js} +1 -1
  296. package/storybook-static/assets/{Textarea.stories-DvQ2dDNh.js → Textarea.stories-CIFzZQ5Z.js} +1 -1
  297. package/storybook-static/assets/{TimePanel-Cg2G5Hab.js → TimePanel-BcVGesht.js} +1 -1
  298. package/storybook-static/assets/{TimePanel.stories-qy5mb3YN.js → TimePanel.stories-C6_xVdCq.js} +1 -1
  299. package/storybook-static/assets/{Toggle-Dj8Ic_Ak.js → Toggle-BD0YAuO2.js} +1 -1
  300. package/storybook-static/assets/{Toggle-CroC7YOK.js → Toggle-CtABgcO5.js} +1 -1
  301. package/storybook-static/assets/{Toggle.stories-CmyyubM8.js → Toggle.stories-DnTnFcGB.js} +1 -1
  302. package/storybook-static/assets/{TreeMultiSelect-BHNmPW50.js → TreeMultiSelect-Bp_Akwgc.js} +1 -1
  303. package/storybook-static/assets/{TreeMultiSelect-DBQYLjnA.js → TreeMultiSelect-DHk_QP2h.js} +1 -1
  304. package/storybook-static/assets/{TreeMultiSelect.stories-BNsE1zgF.js → TreeMultiSelect.stories-CBVQbR1c.js} +1 -1
  305. package/storybook-static/assets/{TreePickerBase-ZEBy3EVT.js → TreePickerBase-BhWXyIoO.js} +1 -1
  306. package/storybook-static/assets/{TreeSelect-T7G2pkyK.js → TreeSelect-DleoF0hJ.js} +1 -1
  307. package/storybook-static/assets/{TreeSelect-aiPeW2uJ.js → TreeSelect-HNbghKYG.js} +1 -1
  308. package/storybook-static/assets/{TreeSelect.stories-E6ObkYJe.js → TreeSelect.stories-BigcPfEn.js} +1 -1
  309. package/storybook-static/assets/{TreeTable-C0ORe5Pe.js → TreeTable-BNkuyFKP.js} +1 -1
  310. package/storybook-static/assets/{TreeTable.stories-PtGT_1X5.js → TreeTable.stories-Bdx3y7Yb.js} +1 -1
  311. package/storybook-static/assets/{array-D-_yMMUK-DnJ_b27D.js → array-D-_yMMUK-BBmW5vUr.js} +1 -1
  312. package/storybook-static/assets/{blocks-DR4JL0hD.js → blocks-DGivDYe5.js} +3 -3
  313. package/storybook-static/assets/{check-PtABqMc1.js → check-DRMDOowi.js} +1 -1
  314. package/storybook-static/assets/{chevron-down-BaujB0G_.js → chevron-down-D0ohA4RZ.js} +1 -1
  315. package/storybook-static/assets/{chevron-left-C1SZ4PrE.js → chevron-left-CLqpYqDQ.js} +1 -1
  316. package/storybook-static/assets/{chevron-right-CfCjHN8b.js → chevron-right-CXryGzSx.js} +1 -1
  317. package/storybook-static/assets/{chunk-W22LQPXL-Cis7lFT9.js → chunk-W22LQPXL-CxLeSIMq.js} +1 -1
  318. package/storybook-static/assets/{circle-alert-Mymt-6wl.js → circle-alert-l6NwXGUY.js} +1 -1
  319. package/storybook-static/assets/{circle-check-DzqMvzJX.js → circle-check-B-r716dD.js} +1 -1
  320. package/storybook-static/assets/{components-Do91qDh3.js → components-Vmrwp1qC.js} +3 -3
  321. package/storybook-static/assets/{contextMenu-8NKKgKoy.js → contextMenu-Br4n839h.js} +1 -1
  322. package/storybook-static/assets/{download-Cn6H3Bnv.js → download-DqFSGBvN.js} +1 -1
  323. package/storybook-static/assets/{floating-ui.react-BFqa49jG.js → floating-ui.react-B-qFeMZZ.js} +1 -1
  324. package/storybook-static/assets/{formatMultiSelectOptionCount-xGq1uM2H.js → formatMultiSelectOptionCount-BxXwE0wd.js} +1 -1
  325. package/storybook-static/assets/{formatters-DVE1YVNQ-YIdRxgw-.js → formatters-DVE1YVNQ-CJCkXjuI.js} +1 -1
  326. package/storybook-static/assets/{foundationApi-CChPwNx-.js → foundationApi-DxO3oR-c.js} +1 -1
  327. package/storybook-static/assets/{foundationLib-ClEyfTpa.js → foundationLib-CTFFCQvn.js} +1 -1
  328. package/storybook-static/assets/getFlexClasses-BBvI2V8h.css +1 -0
  329. package/storybook-static/assets/getFlexClasses-DOf6NlyJ.js +1 -0
  330. package/storybook-static/assets/{hooks-DUKyfcb_.js → hooks-CAgVZJ-F.js} +1 -1
  331. package/storybook-static/assets/{iframe-1Nw_zWMi.js → iframe-E950Ehp0.js} +4 -4
  332. package/storybook-static/assets/iframe-dKozSQh6.js +1 -0
  333. package/storybook-static/assets/{info-DMI56qGy.js → info-Dp6XZGwP.js} +1 -1
  334. package/storybook-static/assets/{odata-D9M3xPIL.js → odata-DuJbgix6.js} +1 -1
  335. package/storybook-static/assets/{odataStoryFixtures-eHJgW7OK.js → odataStoryFixtures-CDArjyM7.js} +1 -1
  336. package/storybook-static/assets/{react-DidV4ORc.js → react-CGpO0FqR.js} +1 -1
  337. package/storybook-static/assets/{refresh-cw-B1ChlhvT.js → refresh-cw-dMgbnEda.js} +1 -1
  338. package/storybook-static/assets/responsiveLayout-B9XAp69M.js +1 -0
  339. package/storybook-static/assets/{settings-2-BxwqnB9r.js → settings-2-CmW1dpao.js} +1 -1
  340. package/storybook-static/assets/{sortable-DMBM69Jm.js → sortable-D7TAXZBK.js} +1 -1
  341. package/storybook-static/assets/{syntaxhighlighter-QEQV7K2Y-BJZNAUo-.js → syntaxhighlighter-QEQV7K2Y-ok7zY4QK.js} +1 -1
  342. package/storybook-static/assets/{trash-2-B768_PZU.js → trash-2-5v1tbQ2V.js} +1 -1
  343. package/storybook-static/assets/{triangle-alert-B8H-k2Bq.js → triangle-alert-CVLPpc5j.js} +1 -1
  344. package/storybook-static/assets/{useODataSelectBase-BKAZcf4R.js → useODataSelectBase-Bkht6gRs.js} +1 -1
  345. package/storybook-static/assets/{useODataTreeData-Bxlcmpg8.js → useODataTreeData-DTWPuC9Y.js} +1 -1
  346. package/storybook-static/assets/{usePickerDefaultFilter-ien2ZY7g.js → usePickerDefaultFilter-Djn1liy6.js} +1 -1
  347. package/storybook-static/assets/{usePickerQuery-DJj2HmX9.js → usePickerQuery-BmoBHlzm.js} +1 -1
  348. package/storybook-static/assets/{usePickerTriggerController-CiD33ccS.js → usePickerTriggerController-Dvt7LsFZ.js} +1 -1
  349. package/storybook-static/assets/{x-Dt9SO3SL.js → x-DZpfbNy0.js} +1 -1
  350. package/storybook-static/iframe.html +2 -2
  351. package/storybook-static/index.json +1 -1
  352. package/storybook-static/project.json +1 -1
  353. package/dist/chunks/base-table-9H5YuVvB.js.map +0 -1
  354. package/dist/chunks/flex-D86M_h-0.js +0 -222
  355. package/dist/chunks/flex-D86M_h-0.js.map +0 -1
  356. package/dist/chunks/grid-CFuzBigM.js +0 -186
  357. package/dist/chunks/grid-CFuzBigM.js.map +0 -1
  358. package/dist/chunks/table-BRC1OTyE.js +0 -141
  359. package/dist/chunks/table-BRC1OTyE.js.map +0 -1
  360. package/dist/flex/useFlexClasses.d.ts +0 -8
  361. package/dist/flex/useFlexClasses.d.ts.map +0 -1
  362. package/dist/grid/useGridClasses.d.ts +0 -10
  363. package/dist/grid/useGridClasses.d.ts.map +0 -1
  364. package/storybook-static/assets/Flex-DpQpF63N.js +0 -61
  365. package/storybook-static/assets/Flex.stories-DtlKiJno.js +0 -300
  366. package/storybook-static/assets/FlexContainer-C1d63I55.js +0 -1
  367. package/storybook-static/assets/FormattedTableCell-B4RRbSFK.js +0 -15
  368. package/storybook-static/assets/Grid-DsCUaz46.js +0 -61
  369. package/storybook-static/assets/Grid.stories-DAGg0GWi.js +0 -495
  370. package/storybook-static/assets/GridContainer-K9R_IHaw.css +0 -1
  371. package/storybook-static/assets/Table-DcNGLEI6.js +0 -197
  372. package/storybook-static/assets/Table.stories-DbEzudxD.js +0 -178
  373. package/storybook-static/assets/iframe-BgBwFMGW.js +0 -1
  374. package/storybook-static/assets/media-D9cE2tzi.js +0 -1
  375. package/storybook-static/assets/useFlexClasses-IXK2se1Y.css +0 -1
  376. package/storybook-static/assets/useFlexClasses-SgVG37Bb.js +0 -1
@@ -1,5 +1,5 @@
1
1
  import { t as e } from "./ui.module-oRwY3Zli.js";
2
- import { h as t } from "./picker-DagDe9OH.js";
2
+ import { h as t } from "./picker-CWx7vPE8.js";
3
3
  import { Option as n, OptionButton as r, OptionLink as i } from "../option/index.js";
4
4
  import { cn as a } from "@ryuzaki13/react-foundation-lib/utils";
5
5
  import { jsx as o, jsxs as s } from "react/jsx-runtime";
@@ -618,4 +618,4 @@ $.Trigger = Q, $.Content = U, $.Item = G, $.Separator = q, $.GroupLabel = W;
618
618
  //#endregion
619
619
  export { Z as n, $ as t };
620
620
 
621
- //# sourceMappingURL=context-menu-BV8636Ou.js.map
621
+ //# sourceMappingURL=context-menu-BlLesqpZ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context-menu-BV8636Ou.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, type CSSProperties, type KeyboardEvent, type MouseEvent, type RefObject, useContext } from \"react\";\n\nimport { type MenuOpenSource, type MenuPoint } from \"@ryuzaki13/react-foundation-lib/context-menu\";\nimport { createMissingContextError } from \"@ryuzaki13/react-foundation-lib/error\";\n\nexport type MenuTriggerMode = \"click\" | \"contextmenu\";\nexport type MenuInitialFocus = \"first\" | \"last\";\n\ninterface MenuContextValue {\n\tmode: MenuTriggerMode;\n\topen: boolean;\n\topenSource: MenuOpenSource | null;\n\tinitialFocus: MenuInitialFocus;\n\tmenuId: string;\n\ttriggerId: string;\n\tanchorPoint: MenuPoint | null;\n\tfloatingStyles: CSSProperties;\n\tfloatingRef: RefObject<HTMLElement | null>;\n\ttriggerRef: RefObject<HTMLElement | null>;\n\tsetFloating: (node: HTMLElement | null) => void;\n\tregisterTriggerElement: (node: HTMLElement | null) => void;\n\tonTriggerClick: (event: MouseEvent<HTMLElement>) => void;\n\tonTriggerContextMenu: (event: MouseEvent<HTMLElement>, triggerElement?: HTMLElement) => void;\n\tonTriggerKeyDown: (event: 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 { cloneElement, type HTMLAttributes, type KeyboardEvent, type MouseEvent, type ReactElement, type Ref } from \"react\";\n\nimport { assignRef } from \"./helpers\";\nimport { useMenuContext } from \"./MenuContext\";\n\nexport interface ContextMenuTriggerProps {\n\tchildren: ReactElement<HTMLAttributes<HTMLElement> & { ref?: Ref<HTMLElement> }>;\n\t/** Позволяет одному ContextMenu обслуживать множество вложенных целей без отдельного floating-ui runtime на каждую строку или ячейку. */\n\tresolveTrigger?: (eventTarget: EventTarget | null) => HTMLElement | null;\n}\n\nexport function ContextMenuTrigger({ children, resolveTrigger }: ContextMenuTriggerProps) {\n\tconst { mode, open, menuId, triggerId, 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\tid: children.props.id ?? triggerId,\n\t\tref: (node: HTMLElement | null) => {\n\t\t\tconst childRef = (children.props as { ref?: Ref<HTMLElement> }).ref;\n\t\t\tassignRef(childRef, node);\n\t\t\tregisterTriggerElement(node);\n\t\t},\n\t\ttabIndex: resolveTrigger ? children.props.tabIndex : (children.props.tabIndex ?? 0),\n\t\t\"aria-haspopup\": \"menu\",\n\t\t\"aria-controls\": open ? menuId : undefined,\n\t\t\"aria-keyshortcuts\": children.props[\"aria-keyshortcuts\"] ?? \"Shift+F10\",\n\t\tonContextMenu: (event: 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: 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\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(--accent-fill);\n\t\tcolor: var(--accent-text);\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(--accent-fill);\n\t\tcolor: var(--accent-text);\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 { type KeyboardEvent, type ReactNode, type RefObject, useCallback, useEffect } 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: ReactNode | ((ctx: { closeMenu: () => void }) => ReactNode);\n\tclassName?: string;\n\t\"aria-label\"?: string;\n\t\"aria-labelledby\"?: string;\n\tcloseOnOutside?: boolean;\n\tcloseOnEscape?: boolean;\n\tdisableOutsideClick?: boolean;\n\trestoreFocus?: boolean;\n}\n\nexport function MenuContent({\n\tchildren,\n\tclassName,\n\t\"aria-label\": ariaLabel,\n\t\"aria-labelledby\": ariaLabelledBy,\n\tcloseOnOutside = true,\n\tcloseOnEscape = true,\n\tdisableOutsideClick = false,\n\trestoreFocus = true\n}: MenuContentProps) {\n\tconst {\n\t\topen,\n\t\topenSource,\n\t\tinitialFocus,\n\t\tmenuId,\n\t\ttriggerId,\n\t\tanchorPoint,\n\t\tfloatingStyles,\n\t\tfloatingRef,\n\t\ttriggerRef,\n\t\tsetFloating,\n\t\tcloseMenu\n\t} = 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) => {\n\t\t\tconst items = getNavigableItems();\n\t\t\treturn (initialFocus === \"last\" ? items[items.length - 1] : items[0]) ?? container;\n\t\t},\n\t\trestoreFocus,\n\t\trestoreFocusTarget: () => triggerRef.current,\n\t\tcontainerRef: floatingRef\n\t});\n\n\tuseEffect(() => {\n\t\tif (!open || openSource !== \"contextmenu\" || !anchorPoint) return;\n\n\t\tconst rafId = window.requestAnimationFrame(() => {\n\t\t\tconst focusTarget = getNavigableItems()[0] ?? floatingRef.current;\n\t\t\tfocusTarget?.focus({ preventScroll: true });\n\t\t});\n\n\t\treturn () => window.cancelAnimationFrame(rafId);\n\t}, [open, openSource, 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 RefObject<HTMLElement>, triggerRef as RefObject<HTMLElement>], outsideClose);\n\n\tconst onMenuKeyDown = useCallback(\n\t\t(event: KeyboardEvent<HTMLElement>) => {\n\t\t\tif (event.key === \"Tab\") {\n\t\t\t\t// Возвращаем точку отсчёта в tab-порядок до browser default action:\n\t\t\t\t// так Tab и Shift+Tab продолжают обход относительно trigger, а не portal в конце body.\n\t\t\t\ttriggerRef.current?.focus({ preventScroll: true });\n\t\t\t\tcloseMenu();\n\t\t\t\treturn;\n\t\t\t}\n\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\treturn;\n\t\t\t}\n\n\t\t\tif (event.key.length === 1 && event.key !== \" \" && !event.altKey && !event.ctrlKey && !event.metaKey) {\n\t\t\t\tconst query = event.key.toLocaleLowerCase();\n\t\t\t\tconst nextItems = [...items.slice(currentIndex + 1), ...items.slice(0, currentIndex + 1)];\n\t\t\t\tconst match = nextItems.find((item) => item.textContent?.trim().toLocaleLowerCase().startsWith(query));\n\t\t\t\tif (match) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tmatch.focus();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[getNavigableItems, triggerRef, closeMenu]\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\tid={menuId}\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\taria-label={ariaLabel}\n\t\t\t\t\taria-labelledby={ariaLabel ? undefined : (ariaLabelledBy ?? triggerId)}\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 function MenuGroupLabel({ children, className }: MenuGroupLabelProps) {\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\tonKeyDown={(event) => {\n\t\t\t\t\t\tif (event.key !== \" \") return;\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tevent.currentTarget.click();\n\t\t\t\t\t}}\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 { type KeyboardEvent, type MouseEvent, type ReactNode, useCallback, useId, useMemo, useRef, useState } from \"react\";\n\nimport { autoUpdate, flip, offset, type 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, type MenuInitialFocus, type MenuTriggerMode } from \"./MenuContext\";\n\ninterface MenuRootProps {\n\tchildren: 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 generatedId = useId();\n\tconst menuId = `${generatedId}-menu`;\n\tconst defaultTriggerId = `${generatedId}-trigger`;\n\tconst [menuState, setMenuState] = useState(initialMenuState);\n\tconst [initialFocus, setInitialFocus] = useState<MenuInitialFocus>(\"first\");\n\tconst [triggerId, setTriggerId] = useState(defaultTriggerId);\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\", nextInitialFocus: MenuInitialFocus = \"first\") => {\n\t\t\trefs.setReference(element);\n\t\t\tsetInitialFocus(nextInitialFocus);\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\tsetInitialFocus(\"first\");\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\tif (node) {\n\t\t\t\tsetTriggerId(node.id || defaultTriggerId);\n\t\t\t}\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[defaultTriggerId, mode, refs]\n\t);\n\n\tconst onTriggerClick = useCallback(\n\t\t(event: 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: 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: KeyboardEvent<HTMLElement>, triggerElement = event.currentTarget) => {\n\t\t\tif (mode === \"click\" && (event.key === \"ArrowDown\" || event.key === \"ArrowUp\")) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\ttriggerElementRef.current = triggerElement;\n\t\t\t\topenAtElement(triggerElement, \"keyboard\", event.key === \"ArrowUp\" ? \"last\" : \"first\");\n\t\t\t\treturn;\n\t\t\t}\n\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\tinitialFocus,\n\t\t\tmenuId,\n\t\t\ttriggerId,\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\tinitialFocus,\n\t\t\tmenuId,\n\t\t\ttriggerId,\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 { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport uiStyles from \"../../ui.module.scss\";\n\nexport interface MenuSeparatorProps {\n\tclassName?: string;\n}\n\nexport function MenuSeparator({ className }: MenuSeparatorProps) {\n\treturn <div role=\"separator\" className={cn(uiStyles.uiPopupOptionSeparator, className)} />;\n}\n","import { Children, type CSSProperties, type KeyboardEvent, type ReactNode, type RefObject, 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: ReactNode | ((ctx: { closeMenu: () => void }) => ReactNode);\n\tclassName?: string;\n\t\"aria-label\"?: string;\n\t\"aria-labelledby\"?: 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 function RadialMenuContent({\n\tchildren,\n\tclassName,\n\t\"aria-label\": ariaLabel,\n\t\"aria-labelledby\": ariaLabelledBy,\n\tcloseOnOutside = true,\n\tcloseOnEscape = true,\n\tdisableOutsideClick = false,\n\trestoreFocus = true,\n\tradius = 76,\n\titemSize = 64,\n\tcloseLabel = \"Закрыть\"\n}: RadialMenuContentProps) {\n\tconst { open, menuId, triggerId, 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 RefObject<HTMLElement>, triggerRef as RefObject<HTMLElement>], outsideClose);\n\n\tconst onMenuKeyDown = useCallback(\n\t\t(event: KeyboardEvent<HTMLElement>) => {\n\t\t\tif (event.key === \"Tab\") {\n\t\t\t\t// Portal расположен в конце body, поэтому перед browser default action\n\t\t\t\t// продолжаем tab-порядок от исходного trigger.\n\t\t\t\ttriggerRef.current?.focus({ preventScroll: true });\n\t\t\t\tcloseMenu();\n\t\t\t\treturn;\n\t\t\t}\n\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\treturn;\n\t\t\t}\n\n\t\t\tif (event.key.length === 1 && event.key !== \" \" && !event.altKey && !event.ctrlKey && !event.metaKey) {\n\t\t\t\tconst query = event.key.toLocaleLowerCase();\n\t\t\t\tconst nextItems = [...items.slice(currentIndex + 1), ...items.slice(0, currentIndex + 1)];\n\t\t\t\tconst match = nextItems.find((item) => item.textContent?.trim().toLocaleLowerCase().startsWith(query));\n\t\t\t\tif (match) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tmatch.focus();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[getNavigableItems, triggerRef, closeMenu]\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\tid={menuId}\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 CSSProperties\n\t\t\t\t\t}\n\t\t\t\t\trole=\"menu\"\n\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\taria-labelledby={ariaLabel ? undefined : (ariaLabelledBy ?? triggerId)}\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\ttabIndex={-1}\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 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 function RadialMenuItem({ children, icon, className, disabled, closeOnSelect = true, onSelect }: RadialMenuItemProps) {\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","import 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\nexport function ContextMenu({ children, placement, open, defaultOpen, onOpenChange }: ContextMenuProps) {\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\nContextMenu.Trigger = ContextMenuTrigger;\nContextMenu.Content = MenuContent;\nContextMenu.RadialContent = RadialMenuContent;\nContextMenu.Item = MenuItem;\nContextMenu.RadialItem = RadialMenuItem;\nContextMenu.Separator = MenuSeparator;\nContextMenu.GroupLabel = MenuGroupLabel;\n","import { cloneElement, type HTMLAttributes, type ReactElement, type Ref } from \"react\";\n\nimport { assignRef, composeKeyboardHandlers, composeMouseHandlers } from \"./helpers\";\nimport { useMenuContext } from \"./MenuContext\";\n\nexport interface DropdownMenuTriggerProps {\n\tchildren: ReactElement<HTMLAttributes<HTMLElement> & { ref?: Ref<HTMLElement> }>;\n}\n\nexport function DropdownMenuTrigger({ children }: DropdownMenuTriggerProps) {\n\tconst { mode, open, menuId, triggerId, 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\tid: children.props.id ?? triggerId,\n\t\tref: (node: HTMLElement | null) => {\n\t\t\tconst childRef = (children.props as { ref?: 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\t\"aria-controls\": open ? menuId : undefined,\n\t\tonClick: composeMouseHandlers(children.props.onClick, onTriggerClick),\n\t\tonKeyDown: composeKeyboardHandlers(children.props.onKeyDown, onTriggerKeyDown)\n\t});\n}\n","import 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\nexport function DropdownMenu({ children, placement, open, defaultOpen, onOpenChange }: DropdownMenuProps) {\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\nDropdownMenu.Trigger = DropdownMenuTrigger;\nDropdownMenu.Content = MenuContent;\nDropdownMenu.Item = MenuItem;\nDropdownMenu.Separator = MenuSeparator;\nDropdownMenu.GroupLabel = MenuGroupLabel;\n"],"mappings":"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"}
1
+ {"version":3,"file":"context-menu-BlLesqpZ.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, type CSSProperties, type KeyboardEvent, type MouseEvent, type RefObject, useContext } from \"react\";\n\nimport { type MenuOpenSource, type MenuPoint } from \"@ryuzaki13/react-foundation-lib/context-menu\";\nimport { createMissingContextError } from \"@ryuzaki13/react-foundation-lib/error\";\n\nexport type MenuTriggerMode = \"click\" | \"contextmenu\";\nexport type MenuInitialFocus = \"first\" | \"last\";\n\ninterface MenuContextValue {\n\tmode: MenuTriggerMode;\n\topen: boolean;\n\topenSource: MenuOpenSource | null;\n\tinitialFocus: MenuInitialFocus;\n\tmenuId: string;\n\ttriggerId: string;\n\tanchorPoint: MenuPoint | null;\n\tfloatingStyles: CSSProperties;\n\tfloatingRef: RefObject<HTMLElement | null>;\n\ttriggerRef: RefObject<HTMLElement | null>;\n\tsetFloating: (node: HTMLElement | null) => void;\n\tregisterTriggerElement: (node: HTMLElement | null) => void;\n\tonTriggerClick: (event: MouseEvent<HTMLElement>) => void;\n\tonTriggerContextMenu: (event: MouseEvent<HTMLElement>, triggerElement?: HTMLElement) => void;\n\tonTriggerKeyDown: (event: 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 { cloneElement, type HTMLAttributes, type KeyboardEvent, type MouseEvent, type ReactElement, type Ref } from \"react\";\n\nimport { assignRef } from \"./helpers\";\nimport { useMenuContext } from \"./MenuContext\";\n\nexport interface ContextMenuTriggerProps {\n\tchildren: ReactElement<HTMLAttributes<HTMLElement> & { ref?: Ref<HTMLElement> }>;\n\t/** Позволяет одному ContextMenu обслуживать множество вложенных целей без отдельного floating-ui runtime на каждую строку или ячейку. */\n\tresolveTrigger?: (eventTarget: EventTarget | null) => HTMLElement | null;\n}\n\nexport function ContextMenuTrigger({ children, resolveTrigger }: ContextMenuTriggerProps) {\n\tconst { mode, open, menuId, triggerId, 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\tid: children.props.id ?? triggerId,\n\t\tref: (node: HTMLElement | null) => {\n\t\t\tconst childRef = (children.props as { ref?: Ref<HTMLElement> }).ref;\n\t\t\tassignRef(childRef, node);\n\t\t\tregisterTriggerElement(node);\n\t\t},\n\t\ttabIndex: resolveTrigger ? children.props.tabIndex : (children.props.tabIndex ?? 0),\n\t\t\"aria-haspopup\": \"menu\",\n\t\t\"aria-controls\": open ? menuId : undefined,\n\t\t\"aria-keyshortcuts\": children.props[\"aria-keyshortcuts\"] ?? \"Shift+F10\",\n\t\tonContextMenu: (event: 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: 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\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(--accent-fill);\n\t\tcolor: var(--accent-text);\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(--accent-fill);\n\t\tcolor: var(--accent-text);\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 { type KeyboardEvent, type ReactNode, type RefObject, useCallback, useEffect } 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: ReactNode | ((ctx: { closeMenu: () => void }) => ReactNode);\n\tclassName?: string;\n\t\"aria-label\"?: string;\n\t\"aria-labelledby\"?: string;\n\tcloseOnOutside?: boolean;\n\tcloseOnEscape?: boolean;\n\tdisableOutsideClick?: boolean;\n\trestoreFocus?: boolean;\n}\n\nexport function MenuContent({\n\tchildren,\n\tclassName,\n\t\"aria-label\": ariaLabel,\n\t\"aria-labelledby\": ariaLabelledBy,\n\tcloseOnOutside = true,\n\tcloseOnEscape = true,\n\tdisableOutsideClick = false,\n\trestoreFocus = true\n}: MenuContentProps) {\n\tconst {\n\t\topen,\n\t\topenSource,\n\t\tinitialFocus,\n\t\tmenuId,\n\t\ttriggerId,\n\t\tanchorPoint,\n\t\tfloatingStyles,\n\t\tfloatingRef,\n\t\ttriggerRef,\n\t\tsetFloating,\n\t\tcloseMenu\n\t} = 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) => {\n\t\t\tconst items = getNavigableItems();\n\t\t\treturn (initialFocus === \"last\" ? items[items.length - 1] : items[0]) ?? container;\n\t\t},\n\t\trestoreFocus,\n\t\trestoreFocusTarget: () => triggerRef.current,\n\t\tcontainerRef: floatingRef\n\t});\n\n\tuseEffect(() => {\n\t\tif (!open || openSource !== \"contextmenu\" || !anchorPoint) return;\n\n\t\tconst rafId = window.requestAnimationFrame(() => {\n\t\t\tconst focusTarget = getNavigableItems()[0] ?? floatingRef.current;\n\t\t\tfocusTarget?.focus({ preventScroll: true });\n\t\t});\n\n\t\treturn () => window.cancelAnimationFrame(rafId);\n\t}, [open, openSource, 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 RefObject<HTMLElement>, triggerRef as RefObject<HTMLElement>], outsideClose);\n\n\tconst onMenuKeyDown = useCallback(\n\t\t(event: KeyboardEvent<HTMLElement>) => {\n\t\t\tif (event.key === \"Tab\") {\n\t\t\t\t// Возвращаем точку отсчёта в tab-порядок до browser default action:\n\t\t\t\t// так Tab и Shift+Tab продолжают обход относительно trigger, а не portal в конце body.\n\t\t\t\ttriggerRef.current?.focus({ preventScroll: true });\n\t\t\t\tcloseMenu();\n\t\t\t\treturn;\n\t\t\t}\n\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\treturn;\n\t\t\t}\n\n\t\t\tif (event.key.length === 1 && event.key !== \" \" && !event.altKey && !event.ctrlKey && !event.metaKey) {\n\t\t\t\tconst query = event.key.toLocaleLowerCase();\n\t\t\t\tconst nextItems = [...items.slice(currentIndex + 1), ...items.slice(0, currentIndex + 1)];\n\t\t\t\tconst match = nextItems.find((item) => item.textContent?.trim().toLocaleLowerCase().startsWith(query));\n\t\t\t\tif (match) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tmatch.focus();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[getNavigableItems, triggerRef, closeMenu]\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\tid={menuId}\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\taria-label={ariaLabel}\n\t\t\t\t\taria-labelledby={ariaLabel ? undefined : (ariaLabelledBy ?? triggerId)}\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 function MenuGroupLabel({ children, className }: MenuGroupLabelProps) {\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\tonKeyDown={(event) => {\n\t\t\t\t\t\tif (event.key !== \" \") return;\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tevent.currentTarget.click();\n\t\t\t\t\t}}\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 { type KeyboardEvent, type MouseEvent, type ReactNode, useCallback, useId, useMemo, useRef, useState } from \"react\";\n\nimport { autoUpdate, flip, offset, type 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, type MenuInitialFocus, type MenuTriggerMode } from \"./MenuContext\";\n\ninterface MenuRootProps {\n\tchildren: 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 generatedId = useId();\n\tconst menuId = `${generatedId}-menu`;\n\tconst defaultTriggerId = `${generatedId}-trigger`;\n\tconst [menuState, setMenuState] = useState(initialMenuState);\n\tconst [initialFocus, setInitialFocus] = useState<MenuInitialFocus>(\"first\");\n\tconst [triggerId, setTriggerId] = useState(defaultTriggerId);\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\", nextInitialFocus: MenuInitialFocus = \"first\") => {\n\t\t\trefs.setReference(element);\n\t\t\tsetInitialFocus(nextInitialFocus);\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\tsetInitialFocus(\"first\");\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\tif (node) {\n\t\t\t\tsetTriggerId(node.id || defaultTriggerId);\n\t\t\t}\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[defaultTriggerId, mode, refs]\n\t);\n\n\tconst onTriggerClick = useCallback(\n\t\t(event: 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: 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: KeyboardEvent<HTMLElement>, triggerElement = event.currentTarget) => {\n\t\t\tif (mode === \"click\" && (event.key === \"ArrowDown\" || event.key === \"ArrowUp\")) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\ttriggerElementRef.current = triggerElement;\n\t\t\t\topenAtElement(triggerElement, \"keyboard\", event.key === \"ArrowUp\" ? \"last\" : \"first\");\n\t\t\t\treturn;\n\t\t\t}\n\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\tinitialFocus,\n\t\t\tmenuId,\n\t\t\ttriggerId,\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\tinitialFocus,\n\t\t\tmenuId,\n\t\t\ttriggerId,\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 { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\n\nimport uiStyles from \"../../ui.module.scss\";\n\nexport interface MenuSeparatorProps {\n\tclassName?: string;\n}\n\nexport function MenuSeparator({ className }: MenuSeparatorProps) {\n\treturn <div role=\"separator\" className={cn(uiStyles.uiPopupOptionSeparator, className)} />;\n}\n","import { Children, type CSSProperties, type KeyboardEvent, type ReactNode, type RefObject, 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: ReactNode | ((ctx: { closeMenu: () => void }) => ReactNode);\n\tclassName?: string;\n\t\"aria-label\"?: string;\n\t\"aria-labelledby\"?: 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 function RadialMenuContent({\n\tchildren,\n\tclassName,\n\t\"aria-label\": ariaLabel,\n\t\"aria-labelledby\": ariaLabelledBy,\n\tcloseOnOutside = true,\n\tcloseOnEscape = true,\n\tdisableOutsideClick = false,\n\trestoreFocus = true,\n\tradius = 76,\n\titemSize = 64,\n\tcloseLabel = \"Закрыть\"\n}: RadialMenuContentProps) {\n\tconst { open, menuId, triggerId, 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 RefObject<HTMLElement>, triggerRef as RefObject<HTMLElement>], outsideClose);\n\n\tconst onMenuKeyDown = useCallback(\n\t\t(event: KeyboardEvent<HTMLElement>) => {\n\t\t\tif (event.key === \"Tab\") {\n\t\t\t\t// Portal расположен в конце body, поэтому перед browser default action\n\t\t\t\t// продолжаем tab-порядок от исходного trigger.\n\t\t\t\ttriggerRef.current?.focus({ preventScroll: true });\n\t\t\t\tcloseMenu();\n\t\t\t\treturn;\n\t\t\t}\n\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\treturn;\n\t\t\t}\n\n\t\t\tif (event.key.length === 1 && event.key !== \" \" && !event.altKey && !event.ctrlKey && !event.metaKey) {\n\t\t\t\tconst query = event.key.toLocaleLowerCase();\n\t\t\t\tconst nextItems = [...items.slice(currentIndex + 1), ...items.slice(0, currentIndex + 1)];\n\t\t\t\tconst match = nextItems.find((item) => item.textContent?.trim().toLocaleLowerCase().startsWith(query));\n\t\t\t\tif (match) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tmatch.focus();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[getNavigableItems, triggerRef, closeMenu]\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\tid={menuId}\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 CSSProperties\n\t\t\t\t\t}\n\t\t\t\t\trole=\"menu\"\n\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\taria-labelledby={ariaLabel ? undefined : (ariaLabelledBy ?? triggerId)}\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\ttabIndex={-1}\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 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 function RadialMenuItem({ children, icon, className, disabled, closeOnSelect = true, onSelect }: RadialMenuItemProps) {\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","import 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\nexport function ContextMenu({ children, placement, open, defaultOpen, onOpenChange }: ContextMenuProps) {\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\nContextMenu.Trigger = ContextMenuTrigger;\nContextMenu.Content = MenuContent;\nContextMenu.RadialContent = RadialMenuContent;\nContextMenu.Item = MenuItem;\nContextMenu.RadialItem = RadialMenuItem;\nContextMenu.Separator = MenuSeparator;\nContextMenu.GroupLabel = MenuGroupLabel;\n","import { cloneElement, type HTMLAttributes, type ReactElement, type Ref } from \"react\";\n\nimport { assignRef, composeKeyboardHandlers, composeMouseHandlers } from \"./helpers\";\nimport { useMenuContext } from \"./MenuContext\";\n\nexport interface DropdownMenuTriggerProps {\n\tchildren: ReactElement<HTMLAttributes<HTMLElement> & { ref?: Ref<HTMLElement> }>;\n}\n\nexport function DropdownMenuTrigger({ children }: DropdownMenuTriggerProps) {\n\tconst { mode, open, menuId, triggerId, 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\tid: children.props.id ?? triggerId,\n\t\tref: (node: HTMLElement | null) => {\n\t\t\tconst childRef = (children.props as { ref?: 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\t\"aria-controls\": open ? menuId : undefined,\n\t\tonClick: composeMouseHandlers(children.props.onClick, onTriggerClick),\n\t\tonKeyDown: composeKeyboardHandlers(children.props.onKeyDown, onTriggerKeyDown)\n\t});\n}\n","import 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\nexport function DropdownMenu({ children, placement, open, defaultOpen, onOpenChange }: DropdownMenuProps) {\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\nDropdownMenu.Trigger = DropdownMenuTrigger;\nDropdownMenu.Content = MenuContent;\nDropdownMenu.Item = MenuItem;\nDropdownMenu.Separator = MenuSeparator;\nDropdownMenu.GroupLabel = MenuGroupLabel;\n"],"mappings":"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"}