@cube-dev/ui-kit 0.66.1 → 0.67.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (478) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/es/_internal/hooks/index.js +1 -1
  3. package/es/_internal/hooks/use-chained-callback.js +1 -1
  4. package/es/_internal/hooks/use-debounced-value.js +1 -1
  5. package/es/_internal/hooks/use-deprecation-warning.js +1 -1
  6. package/es/_internal/hooks/use-effect-once.js +1 -1
  7. package/es/_internal/hooks/use-event.js +1 -1
  8. package/es/_internal/hooks/use-is-first-render.js +1 -1
  9. package/es/_internal/hooks/use-sync-ref.js +1 -1
  10. package/es/_internal/hooks/use-timer/index.js +1 -1
  11. package/es/_internal/hooks/use-timer/timer.js +1 -1
  12. package/es/_internal/hooks/use-timer/use-timer.js +1 -1
  13. package/es/_internal/hooks/use-update-effect.js +1 -1
  14. package/es/_internal/hooks/use-warn.js +1 -1
  15. package/es/_internal/index.js +1 -1
  16. package/es/components/Block.js +1 -1
  17. package/es/components/GlobalStyles.js +1 -1
  18. package/es/components/GridProvider.js +1 -1
  19. package/es/components/HiddenInput.js +1 -1
  20. package/es/components/OpenTrasition.js +1 -1
  21. package/es/components/Root.js +3 -2
  22. package/es/components/actions/Action/Action.js +1 -1
  23. package/es/components/actions/Button/Button.js +1 -1
  24. package/es/components/actions/Button/index.js +1 -1
  25. package/es/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  26. package/es/components/actions/CommandMenu/CommandMenu.js +1 -1
  27. package/es/components/actions/CommandMenu/index.js +1 -1
  28. package/es/components/actions/CommandMenu/styled.js +1 -2
  29. package/es/components/actions/Menu/Menu.js +1 -1
  30. package/es/components/actions/Menu/MenuItem.js +1 -1
  31. package/es/components/actions/Menu/MenuSection.js +1 -1
  32. package/es/components/actions/Menu/MenuTrigger.js +48 -21
  33. package/es/components/actions/Menu/context.js +1 -1
  34. package/es/components/actions/Menu/index.js +1 -1
  35. package/es/components/actions/Menu/styled.js +1 -1
  36. package/es/components/actions/index.js +3 -1
  37. package/es/components/actions/use-action.js +1 -1
  38. package/es/components/actions/use-anchored-menu.js +98 -0
  39. package/es/components/actions/use-context-menu.js +206 -0
  40. package/es/components/content/ActiveZone/ActiveZone.js +1 -1
  41. package/es/components/content/Alert/Alert.js +1 -1
  42. package/es/components/content/Alert/index.js +1 -1
  43. package/es/components/content/Alert/types.js +1 -1
  44. package/es/components/content/Alert/use-alert.js +1 -1
  45. package/es/components/content/Avatar/Avatar.js +1 -1
  46. package/es/components/content/Badge/Badge.js +1 -1
  47. package/es/components/content/Card/Card.js +1 -1
  48. package/es/components/content/Content.js +1 -1
  49. package/es/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  50. package/es/components/content/CopyPasteBlock/index.js +1 -1
  51. package/es/components/content/CopySnippet/CopySnippet.js +1 -1
  52. package/es/components/content/CopySnippet/index.js +1 -1
  53. package/es/components/content/Divider.js +1 -1
  54. package/es/components/content/Footer.js +1 -1
  55. package/es/components/content/Header.js +1 -1
  56. package/es/components/content/HotKeys/HotKeys.js +1 -1
  57. package/es/components/content/HotKeys/index.js +1 -1
  58. package/es/components/content/Paragraph.js +1 -1
  59. package/es/components/content/Placeholder/Placeholder.js +1 -1
  60. package/es/components/content/PrismCode/PrismCode.js +1 -1
  61. package/es/components/content/PrismCode/prismSetup.js +1 -1
  62. package/es/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  63. package/es/components/content/Result/Result.js +1 -1
  64. package/es/components/content/Skeleton/Skeleton.js +1 -1
  65. package/es/components/content/Tag/Tag.js +1 -1
  66. package/es/components/content/Text.js +1 -1
  67. package/es/components/content/Title.js +1 -1
  68. package/es/components/fields/Checkbox/Checkbox.js +1 -1
  69. package/es/components/fields/Checkbox/CheckboxGroup.js +1 -1
  70. package/es/components/fields/Checkbox/context.js +1 -1
  71. package/es/components/fields/Checkbox/index.js +1 -1
  72. package/es/components/fields/ComboBox/ComboBox.js +25 -3
  73. package/es/components/fields/ComboBox/index.js +1 -1
  74. package/es/components/fields/DatePicker/DateInput.js +1 -1
  75. package/es/components/fields/DatePicker/DateInputBase.js +1 -1
  76. package/es/components/fields/DatePicker/DatePicker.js +1 -1
  77. package/es/components/fields/DatePicker/DatePickerButton.js +1 -1
  78. package/es/components/fields/DatePicker/DatePickerElement.js +1 -1
  79. package/es/components/fields/DatePicker/DatePickerInput.js +1 -1
  80. package/es/components/fields/DatePicker/DatePickerSegment.js +1 -1
  81. package/es/components/fields/DatePicker/DateRangePicker.js +1 -1
  82. package/es/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  83. package/es/components/fields/DatePicker/TimeInput.js +1 -1
  84. package/es/components/fields/DatePicker/index.js +1 -1
  85. package/es/components/fields/DatePicker/intl.js +1 -1
  86. package/es/components/fields/DatePicker/parseDate.js +1 -1
  87. package/es/components/fields/DatePicker/props.js +1 -1
  88. package/es/components/fields/DatePicker/types.js +1 -1
  89. package/es/components/fields/DatePicker/utils.js +1 -1
  90. package/es/components/fields/FileInput/FileInput.js +1 -1
  91. package/es/components/fields/Input/Input.js +1 -1
  92. package/es/components/fields/Input/index.js +1 -1
  93. package/es/components/fields/ListBox/ListBox.js +1 -1
  94. package/es/components/fields/ListBox/index.js +1 -1
  95. package/es/components/fields/NumberInput/NumberInput.js +1 -1
  96. package/es/components/fields/NumberInput/StepButton.js +1 -1
  97. package/es/components/fields/PasswordInput/PasswordInput.js +1 -1
  98. package/es/components/fields/RadioGroup/Radio.js +1 -1
  99. package/es/components/fields/RadioGroup/RadioGroup.js +1 -1
  100. package/es/components/fields/RadioGroup/context.js +1 -1
  101. package/es/components/fields/RadioGroup/index.js +1 -1
  102. package/es/components/fields/SearchInput/SearchInput.js +1 -1
  103. package/es/components/fields/SearchInput/index.js +1 -1
  104. package/es/components/fields/Select/Select.js +38 -5
  105. package/es/components/fields/Select/index.js +1 -1
  106. package/es/components/fields/Slider/Gradation.js +1 -1
  107. package/es/components/fields/Slider/Header.js +1 -1
  108. package/es/components/fields/Slider/RangeSlider.js +1 -1
  109. package/es/components/fields/Slider/Slider.js +1 -1
  110. package/es/components/fields/Slider/SliderBase.js +1 -1
  111. package/es/components/fields/Slider/SliderInput.js +1 -1
  112. package/es/components/fields/Slider/SliderThumb.js +1 -1
  113. package/es/components/fields/Slider/SliderTrack.js +1 -1
  114. package/es/components/fields/Slider/elements.js +1 -1
  115. package/es/components/fields/Slider/index.js +1 -1
  116. package/es/components/fields/Slider/types.js +1 -1
  117. package/es/components/fields/Switch/Switch.js +1 -1
  118. package/es/components/fields/Switch/index.js +1 -1
  119. package/es/components/fields/TextArea/TextArea.js +1 -1
  120. package/es/components/fields/TextArea/index.js +1 -1
  121. package/es/components/fields/TextInput/TextInput.js +1 -1
  122. package/es/components/fields/TextInput/TextInputBase.js +1 -1
  123. package/es/components/fields/TextInput/index.js +1 -1
  124. package/es/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  125. package/es/components/fields/TextInputMapper/index.js +1 -1
  126. package/es/components/fields/index.js +1 -1
  127. package/es/components/form/FieldWrapper/FieldWrapper.js +1 -1
  128. package/es/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
  129. package/es/components/form/FieldWrapper/index.js +1 -1
  130. package/es/components/form/FieldWrapper/types.js +1 -1
  131. package/es/components/form/Form/Field.js +1 -1
  132. package/es/components/form/Form/Form.js +1 -1
  133. package/es/components/form/Form/ResetButton/ResetButton.js +1 -1
  134. package/es/components/form/Form/ResetButton/index.js +1 -1
  135. package/es/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  136. package/es/components/form/Form/SubmitButton/index.js +1 -1
  137. package/es/components/form/Form/SubmitError.js +1 -1
  138. package/es/components/form/Form/index.js +1 -1
  139. package/es/components/form/Form/types.js +1 -1
  140. package/es/components/form/Form/use-field/index.js +1 -1
  141. package/es/components/form/Form/use-field/types.js +1 -1
  142. package/es/components/form/Form/use-field/use-field-props.js +1 -1
  143. package/es/components/form/Form/use-field/use-field.js +1 -1
  144. package/es/components/form/Form/use-form.js +1 -1
  145. package/es/components/form/Form/validation.js +1 -1
  146. package/es/components/form/Label.js +1 -1
  147. package/es/components/form/index.js +1 -1
  148. package/es/components/form/wrapper.js +1 -1
  149. package/es/components/layout/Flex.js +1 -1
  150. package/es/components/layout/Flow.js +1 -1
  151. package/es/components/layout/Grid.js +1 -1
  152. package/es/components/layout/Panel.js +1 -1
  153. package/es/components/layout/Prefix.js +1 -1
  154. package/es/components/layout/ResizablePanel.js +1 -1
  155. package/es/components/layout/Space.js +1 -1
  156. package/es/components/layout/Suffix.js +1 -1
  157. package/es/components/navigation/LegacyTabs/LegacyTabs.js +1 -1
  158. package/es/components/navigation/Link/Link.js +1 -1
  159. package/es/components/organisms/FileTabs/FileTabs.js +1 -1
  160. package/es/components/organisms/Modal/Modal.js +1 -1
  161. package/es/components/organisms/StatsCard/StatsCard.js +1 -1
  162. package/es/components/other/Base64Upload/Base64Upload.js +1 -1
  163. package/es/components/other/Calendar/Calendar.js +1 -1
  164. package/es/components/other/Calendar/CalendarCell.js +1 -1
  165. package/es/components/other/Calendar/CalendarGrid.js +1 -1
  166. package/es/components/other/Calendar/RangeCalendar.js +1 -1
  167. package/es/components/other/CloudLogo/CloudLogo.js +1 -1
  168. package/es/components/overlays/AlertDialog/AlertDialog.js +1 -1
  169. package/es/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  170. package/es/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  171. package/es/components/overlays/AlertDialog/index.js +1 -1
  172. package/es/components/overlays/AlertDialog/types.js +1 -1
  173. package/es/components/overlays/Dialog/Dialog.js +1 -1
  174. package/es/components/overlays/Dialog/DialogContainer.js +1 -1
  175. package/es/components/overlays/Dialog/DialogForm.js +1 -1
  176. package/es/components/overlays/Dialog/DialogTrigger.js +1 -1
  177. package/es/components/overlays/Dialog/context.js +1 -1
  178. package/es/components/overlays/Dialog/index.js +2 -2
  179. package/es/components/overlays/Dialog/{dialog-container.js → use-dialog-container.js} +3 -3
  180. package/es/components/overlays/Modal/Modal.js +1 -1
  181. package/es/components/overlays/Modal/OpenTransition.js +1 -1
  182. package/es/components/overlays/Modal/Overlay.js +1 -1
  183. package/es/components/overlays/Modal/Popover.js +1 -1
  184. package/es/components/overlays/Modal/Tray.js +1 -1
  185. package/es/components/overlays/Modal/Underlay.js +1 -1
  186. package/es/components/overlays/Modal/index.js +1 -1
  187. package/es/components/overlays/Modal/types.js +1 -1
  188. package/es/components/overlays/NewNotifications/Bar/FloatingNotification.js +1 -1
  189. package/es/components/overlays/NewNotifications/Bar/NotificationsBar.js +1 -1
  190. package/es/components/overlays/NewNotifications/Bar/TransitionComponent.js +1 -1
  191. package/es/components/overlays/NewNotifications/Bar/index.js +1 -1
  192. package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogTrigger.js +1 -1
  193. package/es/components/overlays/NewNotifications/Dialog/index.js +1 -1
  194. package/es/components/overlays/NewNotifications/Notification.js +1 -1
  195. package/es/components/overlays/NewNotifications/NotificationView/NotificationAction.js +1 -1
  196. package/es/components/overlays/NewNotifications/NotificationView/NotificationCloseButton.js +1 -1
  197. package/es/components/overlays/NewNotifications/NotificationView/NotificationDescription.js +1 -1
  198. package/es/components/overlays/NewNotifications/NotificationView/NotificationFooter.js +1 -1
  199. package/es/components/overlays/NewNotifications/NotificationView/NotificationHeader.js +1 -1
  200. package/es/components/overlays/NewNotifications/NotificationView/NotificationIcon.js +1 -1
  201. package/es/components/overlays/NewNotifications/NotificationView/NotificationProvider.js +1 -1
  202. package/es/components/overlays/NewNotifications/NotificationView/NotificationView.js +1 -1
  203. package/es/components/overlays/NewNotifications/NotificationView/index.js +1 -1
  204. package/es/components/overlays/NewNotifications/NotificationView/types.js +1 -1
  205. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsContext.js +1 -1
  206. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsProvider.js +1 -1
  207. package/es/components/overlays/NewNotifications/NotificationsContext/index.js +1 -1
  208. package/es/components/overlays/NewNotifications/NotificationsContext/use-notifications.js +1 -1
  209. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsList.js +1 -1
  210. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsListItem.js +1 -1
  211. package/es/components/overlays/NewNotifications/NotificationsList/index.js +1 -1
  212. package/es/components/overlays/NewNotifications/NotificationsList/types.js +1 -1
  213. package/es/components/overlays/NewNotifications/hooks/index.js +1 -1
  214. package/es/components/overlays/NewNotifications/hooks/types.js +1 -1
  215. package/es/components/overlays/NewNotifications/hooks/use-notification-list-item.js +1 -1
  216. package/es/components/overlays/NewNotifications/hooks/use-notifications-api.js +1 -1
  217. package/es/components/overlays/NewNotifications/hooks/use-notifications-list.js +1 -1
  218. package/es/components/overlays/NewNotifications/hooks/use-notifications-observer.js +1 -1
  219. package/es/components/overlays/NewNotifications/index.js +1 -1
  220. package/es/components/overlays/NewNotifications/types.js +1 -1
  221. package/es/components/overlays/Notification/Notification.js +1 -1
  222. package/es/components/overlays/OverlayWrapper.js +1 -1
  223. package/es/components/overlays/Toasts/Toast.js +1 -1
  224. package/es/components/overlays/Toasts/index.js +1 -1
  225. package/es/components/overlays/Toasts/types.js +1 -1
  226. package/es/components/overlays/Toasts/use-toasts-api.js +1 -1
  227. package/es/components/overlays/Tooltip/Tooltip.js +1 -1
  228. package/es/components/overlays/Tooltip/TooltipProvider.js +1 -1
  229. package/es/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  230. package/es/components/overlays/Tooltip/context.js +1 -1
  231. package/es/components/overlays/Tooltip/index.js +1 -1
  232. package/es/components/portal/Portal.js +1 -1
  233. package/es/components/portal/PortalProvider.js +1 -1
  234. package/es/components/portal/index.js +1 -1
  235. package/es/components/portal/storybook/templates/CustomRoot.js +1 -1
  236. package/es/components/portal/storybook/templates/PortalOrder.js +1 -1
  237. package/es/components/portal/storybook/templates/basic.js +1 -1
  238. package/es/components/portal/storybook/templates/index.js +1 -1
  239. package/es/components/portal/types.js +1 -1
  240. package/es/components/portal/usePortal.js +1 -1
  241. package/es/components/shared/InvalidIcon.js +1 -1
  242. package/es/components/shared/ValidIcon.js +1 -1
  243. package/es/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  244. package/es/components/status/LoadingAnimation/index.js +1 -1
  245. package/es/components/status/Spin/Cube.js +1 -1
  246. package/es/components/status/Spin/InternalSpinner.js +1 -1
  247. package/es/components/status/Spin/Spin.js +1 -1
  248. package/es/components/status/Spin/SpinsContainer.js +1 -1
  249. package/es/components/status/Spin/index.js +1 -1
  250. package/es/components/status/Spin/types.js +1 -1
  251. package/es/components/status/index.js +1 -1
  252. package/es/data/themes.js +1 -1
  253. package/es/icons/AdjustmentsHorizontalIcon.js +1 -1
  254. package/es/icons/AdjustmentsIcon.js +1 -1
  255. package/es/icons/AiIcon.js +1 -1
  256. package/es/icons/AreaChartIcon.js +1 -1
  257. package/es/icons/BackwardIcon.js +1 -1
  258. package/es/icons/BarChartIcon.js +1 -1
  259. package/es/icons/BellFilledIcon.js +1 -1
  260. package/es/icons/BellIcon.js +1 -1
  261. package/es/icons/BooleanIcon.js +1 -1
  262. package/es/icons/CalendarEditIcon.js +1 -1
  263. package/es/icons/CalendarIcon.js +1 -1
  264. package/es/icons/CaretDownIcon.js +1 -1
  265. package/es/icons/CaretUpIcon.js +1 -1
  266. package/es/icons/ChartAreaStackedIcon.js +1 -1
  267. package/es/icons/ChartAreaStackedPercentageIcon.js +1 -1
  268. package/es/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  269. package/es/icons/ChartBarGroupedIcon.js +1 -1
  270. package/es/icons/ChartBarHorizontalIcon.js +1 -1
  271. package/es/icons/ChartBarLineIcon.js +1 -1
  272. package/es/icons/ChartBarStackedHorizontalIcon.js +1 -1
  273. package/es/icons/ChartBarStackedIcon.js +1 -1
  274. package/es/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  275. package/es/icons/ChartBarStackedPercentageIcon.js +1 -1
  276. package/es/icons/ChartBoxPlot2Icon.js +1 -1
  277. package/es/icons/ChartBoxPlotIcon.js +1 -1
  278. package/es/icons/ChartBubbleIcon.js +1 -1
  279. package/es/icons/ChartDonut2Icon.js +1 -1
  280. package/es/icons/ChartFunnelIcon.js +1 -1
  281. package/es/icons/ChartPie2Icon.js +1 -1
  282. package/es/icons/ChartScatterIcon.js +1 -1
  283. package/es/icons/CheckCircleFilledIcon.js +1 -1
  284. package/es/icons/CheckCircleIcon.js +1 -1
  285. package/es/icons/CheckIcon.js +1 -1
  286. package/es/icons/CircleFilledIcon.js +1 -1
  287. package/es/icons/ClearIcon.js +1 -1
  288. package/es/icons/CloseCircleFilledIcon.js +1 -1
  289. package/es/icons/CloseCircleIcon.js +1 -1
  290. package/es/icons/CloseIcon.js +1 -1
  291. package/es/icons/CodeIcon.js +1 -1
  292. package/es/icons/CopyIcon.js +1 -1
  293. package/es/icons/CountIcon.js +1 -1
  294. package/es/icons/CubeIcon.js +1 -1
  295. package/es/icons/DangerIcon.js +1 -1
  296. package/es/icons/DashboardIcon.js +1 -1
  297. package/es/icons/DatabaseIcon.js +1 -1
  298. package/es/icons/DirectionIcon.js +1 -1
  299. package/es/icons/DonutIcon.js +1 -1
  300. package/es/icons/DownIcon.js +1 -1
  301. package/es/icons/EditIcon.js +1 -1
  302. package/es/icons/ExclamationCircleFilledIcon.js +1 -1
  303. package/es/icons/ExclamationCircleIcon.js +1 -1
  304. package/es/icons/ExclamationIcon.js +1 -1
  305. package/es/icons/EyeIcon.js +1 -1
  306. package/es/icons/EyeInvisibleIcon.js +1 -1
  307. package/es/icons/FilterIcon.js +1 -1
  308. package/es/icons/FolderFilledIcon.js +1 -1
  309. package/es/icons/FolderIcon.js +1 -1
  310. package/es/icons/FolderOpenFilledIcon.js +1 -1
  311. package/es/icons/FolderOpenIcon.js +1 -1
  312. package/es/icons/ForwardIcon.js +1 -1
  313. package/es/icons/HierarchyIcon.js +1 -1
  314. package/es/icons/Icon.js +1 -1
  315. package/es/icons/InfoCircleIcon.js +1 -1
  316. package/es/icons/InfoIcon.js +1 -1
  317. package/es/icons/KeyIcon.js +1 -1
  318. package/es/icons/LeftIcon.js +1 -1
  319. package/es/icons/LineChartIcon.js +1 -1
  320. package/es/icons/LoadingIcon.js +1 -1
  321. package/es/icons/LockFilledIcon.js +1 -1
  322. package/es/icons/LockIcon.js +1 -1
  323. package/es/icons/MoreIcon.js +1 -1
  324. package/es/icons/NotAllowedIcon.js +1 -1
  325. package/es/icons/NumberIcon.js +1 -1
  326. package/es/icons/PauseCircleFilledIcon.js +1 -1
  327. package/es/icons/PauseCircleIcon.js +1 -1
  328. package/es/icons/PauseIcon.js +1 -1
  329. package/es/icons/PieChartIcon.js +1 -1
  330. package/es/icons/PlayCircleIcon.js +1 -1
  331. package/es/icons/PlayIcon.js +1 -1
  332. package/es/icons/PlusIcon.js +1 -1
  333. package/es/icons/ReloadIcon.js +1 -1
  334. package/es/icons/ReportIcon.js +1 -1
  335. package/es/icons/ReturnIcon.js +1 -1
  336. package/es/icons/RightIcon.js +1 -1
  337. package/es/icons/SchemeIcon.js +1 -1
  338. package/es/icons/SearchIcon.js +1 -1
  339. package/es/icons/SettingsIcon.js +1 -1
  340. package/es/icons/ShieldFilledIcon.js +1 -1
  341. package/es/icons/ShieldIcon.js +1 -1
  342. package/es/icons/SlashIcon.js +1 -1
  343. package/es/icons/SparklesIcon.js +1 -1
  344. package/es/icons/SqlIcon.js +1 -1
  345. package/es/icons/StatsIcon.js +1 -1
  346. package/es/icons/StopIcon.js +1 -1
  347. package/es/icons/StringIcon.js +1 -1
  348. package/es/icons/SwitchIcon.js +1 -1
  349. package/es/icons/TableIcon.js +1 -1
  350. package/es/icons/ThumbsDownIcon.js +1 -1
  351. package/es/icons/ThumbsUpIcon.js +1 -1
  352. package/es/icons/ThunderboltCrossedIcon.js +1 -1
  353. package/es/icons/ThunderboltFilledIcon.js +1 -1
  354. package/es/icons/ThunderboltIcon.js +1 -1
  355. package/es/icons/TimeIcon.js +1 -1
  356. package/es/icons/UnlockIcon.js +1 -1
  357. package/es/icons/UpIcon.js +1 -1
  358. package/es/icons/UserGroupIcon.js +1 -1
  359. package/es/icons/UserIcon.js +1 -1
  360. package/es/icons/UserLockIcon.js +1 -1
  361. package/es/icons/ViewIcon.js +1 -1
  362. package/es/icons/WarningFilledIcon.js +1 -1
  363. package/es/icons/WarningIcon.js +1 -1
  364. package/es/icons/add-new-icon.js +1 -1
  365. package/es/icons/index.js +1 -1
  366. package/es/icons/wrap-icon.js +1 -1
  367. package/es/index.js +1 -1
  368. package/es/provider.js +4 -1
  369. package/es/providers/TrackingProvider.js +1 -1
  370. package/es/services/notification.js +1 -1
  371. package/es/shared/form.js +1 -1
  372. package/es/shared/index.js +1 -1
  373. package/es/stories/Form.legacy-stories.js +1 -1
  374. package/es/stories/FormFieldArgs.js +1 -1
  375. package/es/stories/Layout.stories.js +1 -1
  376. package/es/stories/Tasty.stories.js +1 -1
  377. package/es/stories/components/ConfirmDeletionDialogForm.js +1 -1
  378. package/es/stories/components/DialogFormApp.js +1 -1
  379. package/es/stories/components/StyledButton.js +1 -1
  380. package/es/stories/lists/baseProps.js +1 -1
  381. package/es/tasty/index.js +1 -1
  382. package/es/tasty/providers/BreakpointsProvider.js +1 -1
  383. package/es/tasty/styles/align.js +1 -1
  384. package/es/tasty/styles/border.js +1 -1
  385. package/es/tasty/styles/boxShadow.combinator.js +1 -1
  386. package/es/tasty/styles/color.js +1 -1
  387. package/es/tasty/styles/createStyle.js +1 -1
  388. package/es/tasty/styles/dimension.js +1 -1
  389. package/es/tasty/styles/display.js +1 -1
  390. package/es/tasty/styles/fade.js +1 -1
  391. package/es/tasty/styles/fill.js +1 -1
  392. package/es/tasty/styles/flow.js +1 -1
  393. package/es/tasty/styles/font.js +1 -1
  394. package/es/tasty/styles/fontStyle.js +1 -1
  395. package/es/tasty/styles/gap.js +1 -1
  396. package/es/tasty/styles/groupRadius.js +1 -1
  397. package/es/tasty/styles/height.js +1 -1
  398. package/es/tasty/styles/index.js +1 -1
  399. package/es/tasty/styles/inset.js +1 -1
  400. package/es/tasty/styles/justify.js +1 -1
  401. package/es/tasty/styles/list.js +1 -1
  402. package/es/tasty/styles/margin.js +1 -1
  403. package/es/tasty/styles/marginBlock.js +1 -1
  404. package/es/tasty/styles/marginInline.js +1 -1
  405. package/es/tasty/styles/outline.js +1 -1
  406. package/es/tasty/styles/padding.js +1 -1
  407. package/es/tasty/styles/paddingBlock.js +1 -1
  408. package/es/tasty/styles/paddingInline.js +1 -1
  409. package/es/tasty/styles/place.js +1 -1
  410. package/es/tasty/styles/predefined.js +1 -1
  411. package/es/tasty/styles/preset.js +1 -1
  412. package/es/tasty/styles/radius.js +1 -1
  413. package/es/tasty/styles/reset.js +1 -1
  414. package/es/tasty/styles/scrollbar.js +1 -1
  415. package/es/tasty/styles/shadow.js +1 -1
  416. package/es/tasty/styles/styledScrollbar.js +1 -1
  417. package/es/tasty/styles/transition.js +1 -1
  418. package/es/tasty/styles/types.js +1 -1
  419. package/es/tasty/styles/width.js +1 -1
  420. package/es/tasty/tasty.js +1 -1
  421. package/es/tasty/types.js +1 -1
  422. package/es/tasty/utils/cache-wrapper.js +1 -1
  423. package/es/tasty/utils/case-converter.js +1 -1
  424. package/es/tasty/utils/colors.js +1 -1
  425. package/es/tasty/utils/dotize.js +1 -1
  426. package/es/tasty/utils/filterBaseProps.js +1 -1
  427. package/es/tasty/utils/getDisplayName.js +1 -1
  428. package/es/tasty/utils/getModCombinations.js +1 -1
  429. package/es/tasty/utils/mergeStyles.js +1 -1
  430. package/es/tasty/utils/modAttrs.js +1 -1
  431. package/es/tasty/utils/renderStyles.js +1 -1
  432. package/es/tasty/utils/responsive.js +1 -1
  433. package/es/tasty/utils/string.js +1 -1
  434. package/es/tasty/utils/styles.js +1 -1
  435. package/es/tasty/utils/warnings.js +1 -1
  436. package/es/tokens.js +1 -1
  437. package/es/type-checks.js +1 -1
  438. package/es/utils/ResizeSensor.js +1 -1
  439. package/es/utils/modules.js +1 -1
  440. package/es/utils/promise.js +1 -1
  441. package/es/utils/random.js +7 -1
  442. package/es/utils/range.js +1 -1
  443. package/es/utils/react/Slots.js +1 -1
  444. package/es/utils/react/chain.js +1 -1
  445. package/es/utils/react/index.js +2 -1
  446. package/es/utils/react/interactions.js +1 -1
  447. package/es/utils/react/isTextOnly.js +1 -1
  448. package/es/utils/react/mapProps.js +1 -1
  449. package/es/utils/react/mergeProps.js +1 -1
  450. package/es/utils/react/nullableValue.js +1 -1
  451. package/es/utils/react/sharedStore.js +51 -0
  452. package/es/utils/react/useCombinedRefs.js +1 -1
  453. package/es/utils/react/useEventBus.js +124 -0
  454. package/es/utils/react/useId.js +1 -1
  455. package/es/utils/react/useIsDarwin.js +1 -1
  456. package/es/utils/react/useKeySymbols.js +1 -1
  457. package/es/utils/react/useLayoutEffect.js +1 -1
  458. package/es/utils/react/useQaProps.js +1 -1
  459. package/es/utils/react/useViewportSize.js +1 -1
  460. package/es/utils/react/wrapNodeIfPlain.js +1 -1
  461. package/es/utils/transitions.js +1 -1
  462. package/es/utils/tree.js +1 -1
  463. package/es/utils/warnings.js +1 -1
  464. package/es/version.js +2 -2
  465. package/package.json +1 -1
  466. package/types/components/actions/Menu/MenuTrigger.d.ts +2 -3
  467. package/types/components/actions/index.d.ts +2 -0
  468. package/types/components/actions/use-anchored-menu.d.ts +34 -0
  469. package/types/components/actions/use-context-menu.d.ts +42 -0
  470. package/types/components/content/Card/Card.d.ts +2 -2
  471. package/types/components/content/CopyPasteBlock/CopyPasteBlock.d.ts +1 -1
  472. package/types/components/fields/Select/Select.d.ts +2 -1
  473. package/types/components/overlays/Dialog/index.d.ts +1 -1
  474. package/types/utils/random.d.ts +4 -0
  475. package/types/utils/react/index.d.ts +2 -0
  476. package/types/utils/react/sharedStore.d.ts +11 -0
  477. package/types/utils/react/useEventBus.d.ts +74 -0
  478. /package/types/components/overlays/Dialog/{dialog-container.d.ts → use-dialog-container.d.ts} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # @cube-dev/ui-kit
2
2
 
3
+ ## 0.67.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#725](https://github.com/cube-js/cube-ui-kit/pull/725) [`4b789d2b`](https://github.com/cube-js/cube-ui-kit/commit/4b789d2bddc3bee1c91194c2d76b1c5946cc9cbc) Thanks [@tenphi](https://github.com/tenphi)! - Add useEventBus hook to emit global events and subscribe to them.
8
+
9
+ - [#725](https://github.com/cube-js/cube-ui-kit/pull/725) [`4b789d2b`](https://github.com/cube-js/cube-ui-kit/commit/4b789d2bddc3bee1c91194c2d76b1c5946cc9cbc) Thanks [@tenphi](https://github.com/tenphi)! - Add useContextMenu hook to invoke a context menu in the exact place of the click.
10
+
11
+ - [#725](https://github.com/cube-js/cube-ui-kit/pull/725) [`4b789d2b`](https://github.com/cube-js/cube-ui-kit/commit/4b789d2bddc3bee1c91194c2d76b1c5946cc9cbc) Thanks [@tenphi](https://github.com/tenphi)! - Add useAnchoredMenu hook to programmatically invoke a menu anchored to the specific element.
12
+
3
13
  ## 0.66.1
4
14
 
5
15
  ### Patch Changes
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -14,6 +14,7 @@ import { TrackingProvider } from '../providers/TrackingProvider';
14
14
  import { BASE_STYLES, BLOCK_STYLES, extractStyles, filterBaseProps, tasty, } from '../tasty';
15
15
  import { TOKENS } from '../tokens';
16
16
  import { useViewportSize } from '../utils/react';
17
+ import { EventBusProvider } from '../utils/react/useEventBus';
17
18
  import { GlobalStyles } from './GlobalStyles';
18
19
  import { AlertDialogApiProvider } from './overlays/AlertDialog';
19
20
  import { NotificationsProvider } from './overlays/NewNotifications/NotificationsContext/NotificationsProvider';
@@ -83,7 +84,7 @@ export function Root(allProps) {
83
84
  ? height + 'px'
84
85
  : '100dvh',
85
86
  ...style,
86
- }, children: [_jsx(GlobalStyles, { bodyStyles: bodyStyles, applyLegacyTokens: applyLegacyTokens, publicUrl: publicUrl, fonts: fonts, font: font, monospaceFont: monospaceFont, fontDisplay: fontDisplay }), _jsx(ModalProvider, { children: _jsx(PortalProvider, { value: ref, children: _jsx(NotificationsProvider, { rootRef: ref, children: _jsx(AlertDialogApiProvider, { children: children }) }) }) })] }) }) }) }));
87
+ }, children: [_jsx(GlobalStyles, { bodyStyles: bodyStyles, applyLegacyTokens: applyLegacyTokens, publicUrl: publicUrl, fonts: fonts, font: font, monospaceFont: monospaceFont, fontDisplay: fontDisplay }), _jsx(ModalProvider, { children: _jsx(PortalProvider, { value: ref, children: _jsx(EventBusProvider, { children: _jsx(NotificationsProvider, { rootRef: ref, children: _jsx(AlertDialogApiProvider, { children: children }) }) }) }) })] }) }) }) }));
87
88
  }
88
89
 
89
90
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -28,7 +28,6 @@ export const StyledCommandMenu = tasty({
28
28
  'popover | tray': '0px 5px 15px #dark.05',
29
29
  },
30
30
  overflow: 'hidden',
31
- width: '20x 50x',
32
31
  height: {
33
32
  '': 'initial',
34
33
  popover: 'initial max-content (50vh - 4x)',
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,48 +1,58 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
8
8
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
9
9
  import { PressResponder } from '@react-aria/interactions';
10
10
  import { useDOMRef, useIsMobileDevice } from '@react-spectrum/utils';
11
- import { forwardRef, Fragment, useRef } from 'react';
11
+ import { forwardRef, Fragment, useEffect, useMemo, useRef, } from 'react';
12
12
  import { DismissButton, useMenuTrigger, useOverlayPosition, } from 'react-aria';
13
13
  import { useMenuTriggerState } from 'react-stately';
14
+ import { generateRandomId } from '../../../utils/random';
14
15
  import { SlotProvider } from '../../../utils/react';
16
+ import { useEventBus } from '../../../utils/react/useEventBus';
15
17
  import { Popover, Tray } from '../../overlays/Modal';
16
18
  import { MenuContext } from './context';
17
19
  function MenuTrigger(props, ref) {
18
20
  const menuPopoverRef = useRef(null);
19
21
  const triggerRef = useRef();
20
22
  const domRef = useDOMRef(ref);
21
- const menuTriggerRef = domRef || triggerRef;
23
+ const menuTriggerRef = props.targetRef || domRef || triggerRef;
22
24
  const menuRef = useRef(null);
23
- const { children, align = 'start', shouldFlip = true, direction = 'bottom', closeOnSelect, trigger = 'press', isDisabled, } = props;
25
+ const { children, shouldFlip = true, closeOnSelect, trigger = 'press', isDisabled, isDummy, } = props;
26
+ // Generate a unique ID for this menu instance
27
+ const menuId = useMemo(() => generateRandomId(), []);
28
+ // Get event bus for menu synchronization
29
+ const { emit, on } = useEventBus();
24
30
  if (!Array.isArray(children) || children.length > 2) {
25
31
  throw new Error('MenuTrigger must have exactly 2 children');
26
32
  }
27
33
  let [menuTrigger, menu] = children;
28
34
  const state = useMenuTriggerState(props);
35
+ // Listen for other menus opening and close this one if needed
36
+ useEffect(() => {
37
+ const unsubscribe = on('menu:open', (data) => {
38
+ // If another menu is opening and this menu is open, close this one
39
+ if (data.menuId !== menuId && state.isOpen && !isDummy) {
40
+ state.close();
41
+ }
42
+ });
43
+ return unsubscribe;
44
+ }, [on, menuId, state]);
45
+ // Emit event when this menu opens
46
+ useEffect(() => {
47
+ if (state.isOpen && !isDummy) {
48
+ emit('menu:open', { menuId });
49
+ }
50
+ }, [state.isOpen, emit, menuId, isDummy]);
29
51
  if (typeof menuTrigger === 'function') {
30
52
  menuTrigger = menuTrigger(state);
31
53
  }
32
54
  const { menuTriggerProps, menuProps } = useMenuTrigger({ isDisabled }, state, menuTriggerRef);
33
- let initialPlacement;
34
- switch (direction) {
35
- case 'left':
36
- case 'right':
37
- case 'start':
38
- case 'end':
39
- initialPlacement = `${direction} ${align === 'end' ? 'bottom' : 'top'}`;
40
- break;
41
- case 'bottom':
42
- case 'top':
43
- default:
44
- initialPlacement = `${direction} ${align}`;
45
- }
55
+ let initialPlacement = props.placement ?? 'bottom start';
46
56
  const isMobile = useIsMobileDevice();
47
57
  const { overlayProps: positionProps, placement } = useOverlayPosition({
48
58
  targetRef: menuTriggerRef,
@@ -53,8 +63,8 @@ function MenuTrigger(props, ref) {
53
63
  isOpen: state.isOpen && !isMobile,
54
64
  onClose: state.close,
55
65
  containerPadding: props.containerPadding,
56
- offset: props.offset || 8,
57
- crossOffset: props.crossOffset,
66
+ offset: props.offset ?? 8,
67
+ crossOffset: props.crossOffset ?? 0,
58
68
  });
59
69
  const menuContext = {
60
70
  ...menuProps,
@@ -80,9 +90,26 @@ function MenuTrigger(props, ref) {
80
90
  overlay = (_jsx(Tray, { isOpen: state.isOpen, onClose: state.close, children: contents }));
81
91
  }
82
92
  else {
83
- overlay = (_jsx(Popover, { ref: menuPopoverRef, hideArrow: true, isNonModal: true, isOpen: state.isOpen, style: positionProps.style, placement: placement, onClose: state.close, children: contents }));
93
+ overlay = (_jsx(Popover, { ref: menuPopoverRef, hideArrow: true, isNonModal: true, isOpen: state.isOpen, style: positionProps.style, placement: placement, shouldCloseOnInteractOutside: (el) => {
94
+ const menuTriggerEl = el.closest('[data-menu-trigger]');
95
+ // If no menu trigger was clicked, allow closing
96
+ if (!menuTriggerEl)
97
+ return true;
98
+ // For dummy triggers (like useAnchoredMenu), check if the clicked element
99
+ // is the target element or its descendant
100
+ if (isDummy &&
101
+ (menuTriggerEl === menuTriggerRef.current ||
102
+ menuTriggerRef.current?.contains(el))) {
103
+ return true;
104
+ }
105
+ // If the same trigger that opened this menu was clicked, allow closing
106
+ if (menuTriggerEl === menuTriggerRef.current)
107
+ return true;
108
+ // Otherwise, don't close (let event mechanism handle it)
109
+ return false;
110
+ }, onClose: state.close, children: contents }));
84
111
  }
85
- return (_jsxs(Fragment, { children: [_jsx(SlotProvider, { slots: { actionButton: { holdAffordance: trigger === 'longPress' } }, children: _jsx(PressResponder, { ...menuTriggerProps, ref: menuTriggerRef, isPressed: state.isOpen, children: menuTrigger }) }), _jsx(MenuContext.Provider, { value: menuContext, children: overlay })] }));
112
+ return (_jsxs(Fragment, { children: [_jsx(SlotProvider, { slots: { actionButton: { holdAffordance: trigger === 'longPress' } }, children: !isDummy ? (_jsx(PressResponder, { ...menuTriggerProps, ref: menuTriggerRef, "data-menu-trigger": true, isPressed: state.isOpen, children: menuTrigger })) : null }), _jsx(MenuContext.Provider, { value: menuContext, children: overlay })] }));
86
113
  }
87
114
  /**
88
115
  * The MenuTrigger serves as a wrapper around a Menu and its associated trigger,
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -13,6 +13,8 @@ export * from './Action/Action';
13
13
  export * from './Menu';
14
14
  export * from './CommandMenu';
15
15
  export * from './use-action';
16
+ export * from './use-anchored-menu';
17
+ export * from './use-context-menu';
16
18
  export { Button, ButtonGroup };
17
19
 
18
20
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.1
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -0,0 +1,98 @@
1
+ /**
2
+ * @license MIT
3
+ * author: Cube Dev Team
4
+ * @cube-dev/ui-kit v0.67.0
5
+ * Released under the MIT license.
6
+ */
7
+
8
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
+ import { Pressable } from '@react-aria/interactions';
10
+ import { useEffect, useMemo, useRef, useState, } from 'react';
11
+ import { VisuallyHidden } from 'react-aria';
12
+ import { useEvent } from '../../_internal';
13
+ import { generateRandomId } from '../../utils/random';
14
+ import { mergeProps } from '../../utils/react';
15
+ import { useEventBus } from '../../utils/react/useEventBus';
16
+ import { MenuTrigger } from './Menu';
17
+ /**
18
+ * Generic hook to manage an anchored menu component.
19
+ *
20
+ * @param Component - A React component that represents the menu content (Menu or CommandMenu).
21
+ * @param defaultTriggerProps - Default props to pass to the MenuTrigger.
22
+ * @returns An object with `anchorRef` to position the menu, `open` function to open the menu with provided props, `close` function to close the menu, and `rendered` JSX element to include in your component tree.
23
+ */
24
+ export function useAnchoredMenu(Component, defaultTriggerProps) {
25
+ const [isOpen, setIsOpen] = useState(false);
26
+ const [componentProps, setComponentProps] = useState(null);
27
+ const [triggerProps, setTriggerProps] = useState(null);
28
+ const anchorRef = useRef(null);
29
+ const setupRef = useRef(false);
30
+ useEffect(() => {
31
+ const el = anchorRef.current;
32
+ if (el) {
33
+ el.dataset.menuTrigger = '';
34
+ return () => {
35
+ delete el.dataset.menuTrigger;
36
+ };
37
+ }
38
+ }, []);
39
+ // Generate a unique ID for this menu instance
40
+ const menuId = useMemo(() => generateRandomId(), []);
41
+ // Get event bus for menu synchronization
42
+ const { emit, on } = useEventBus();
43
+ // Listen for other menus opening and close this one if needed
44
+ useEffect(() => {
45
+ const unsubscribe = on('menu:open', (data) => {
46
+ // If another menu is opening and this menu is open, close this one
47
+ if (data.menuId !== menuId && isOpen) {
48
+ setIsOpen(false);
49
+ }
50
+ });
51
+ return unsubscribe;
52
+ }, [on, menuId, isOpen]);
53
+ // Emit event when this menu opens
54
+ useEffect(() => {
55
+ if (isOpen) {
56
+ emit('menu:open', { menuId });
57
+ }
58
+ }, [isOpen, emit, menuId]);
59
+ function setupCheck() {
60
+ if (!setupRef.current) {
61
+ throw new Error('useAnchoredMenu: MenuTrigger must be rendered. Use `rendered` property to include it in your component tree.');
62
+ }
63
+ }
64
+ // 'open' accepts props required by the Component and opens the menu
65
+ const open = useEvent((props, triggerProps) => {
66
+ setupCheck();
67
+ setComponentProps(props);
68
+ setTriggerProps(triggerProps ?? null);
69
+ setIsOpen(true);
70
+ });
71
+ const update = useEvent((props, triggerProps) => {
72
+ setupCheck();
73
+ setComponentProps(props);
74
+ setTriggerProps(triggerProps ?? null);
75
+ });
76
+ const close = useEvent(() => {
77
+ setIsOpen(false);
78
+ });
79
+ // Render the menu only when componentProps is set
80
+ const renderedMenu = useMemo(() => {
81
+ if (!componentProps)
82
+ return null;
83
+ return (_jsxs(MenuTrigger, { isDummy: true, isOpen: isOpen, targetRef: anchorRef, placement: "bottom start", onOpenChange: setIsOpen, ...mergeProps(defaultTriggerProps, triggerProps || undefined), children: [_jsx(VisuallyHidden, { children: _jsx(Pressable, { children: _jsx("button", { "aria-label": "context-menu" }) }) }), _jsx(Component, { ...componentProps })] }));
84
+ }, [componentProps, triggerProps, isOpen, defaultTriggerProps]);
85
+ return {
86
+ anchorRef,
87
+ open,
88
+ update,
89
+ close,
90
+ isOpen,
91
+ get rendered() {
92
+ setupRef.current = true;
93
+ return renderedMenu;
94
+ },
95
+ };
96
+ }
97
+
98
+