@cube-dev/ui-kit 0.66.0 → 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 +16 -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 +60 -53
  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,21 @@
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
+
13
+ ## 0.66.1
14
+
15
+ ### Patch Changes
16
+
17
+ - [#722](https://github.com/cube-js/cube-ui-kit/pull/722) [`7eaf393`](https://github.com/cube-js/cube-ui-kit/commit/7eaf393cedb574237afee6579ab21b7abf57f83e) Thanks [@tenphi](https://github.com/tenphi)! - Fix a bug when CommandMenu is unable to be navigated via keys when the search input is filled with any value.
18
+
3
19
  ## 0.66.0
4
20
 
5
21
  ### Minor Changes
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.0
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.0
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.0
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.0
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.0
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.0
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.0
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.0
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.0
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.0
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.0
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.0
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.0
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.0
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.0
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.0
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.0
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.0
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.0
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.0
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.0
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.0
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.0
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.0
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.0
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -148,6 +148,7 @@ function CommandMenuBase(props, ref) {
148
148
  const hasSections = collectionItems.some((item) => item.type === 'section');
149
149
  // Track focused key for aria-activedescendant
150
150
  const [focusedKey, setFocusedKey] = React.useState(null);
151
+ const focusedKeyRef = useRef(null);
151
152
  // Apply filtering to collection items for rendering and empty state checks
152
153
  const filteredCollectionItems = useMemo(() => {
153
154
  const term = searchValue.trim();
@@ -272,28 +273,31 @@ function CommandMenuBase(props, ref) {
272
273
  return () => clearTimeout(timeoutId);
273
274
  }
274
275
  }, [autoFocus, contextProps.autoFocus]);
276
+ // Track the previous search value to only run auto-focus when search actually changes
277
+ const prevSearchValueRef = useRef('');
275
278
  // Auto-focus first item when search value changes (but not on initial render)
276
279
  React.useEffect(() => {
277
- // Only auto-focus when search value changes, not on initial mount
278
- if (searchValue.trim() !== '') {
280
+ const currentSearchValue = searchValue.trim();
281
+ const prevSearchValue = prevSearchValueRef.current;
282
+ // Only auto-focus when search value actually changes
283
+ if (currentSearchValue !== prevSearchValue && currentSearchValue !== '') {
279
284
  const firstSelectableKey = findFirstSelectableItem();
280
285
  if (firstSelectableKey && hasFilteredItems) {
281
286
  // Focus the first item in the selection manager
282
287
  treeState.selectionManager.setFocusedKey(firstSelectableKey);
283
288
  setFocusedKey(firstSelectableKey);
289
+ focusedKeyRef.current = firstSelectableKey;
284
290
  }
285
291
  else {
286
292
  // Clear focus if no items are available
287
293
  treeState.selectionManager.setFocusedKey(null);
288
294
  setFocusedKey(null);
295
+ focusedKeyRef.current = null;
289
296
  }
290
297
  }
291
- }, [
292
- searchValue,
293
- findFirstSelectableItem,
294
- hasFilteredItems,
295
- treeState.selectionManager,
296
- ]);
298
+ // Update the previous search value
299
+ prevSearchValueRef.current = currentSearchValue;
300
+ }, [searchValue, findFirstSelectableItem, hasFilteredItems]);
297
301
  // Extract styles
298
302
  const extractedStyles = useMemo(() => extractStyles(props, CONTAINER_STYLES), [props]);
299
303
  // Determine if we should show empty state based on actual filtered collection
@@ -327,74 +331,77 @@ function CommandMenuBase(props, ref) {
327
331
  if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {
328
332
  e.preventDefault();
329
333
  const isArrowDown = e.key === 'ArrowDown';
330
- const { selectionManager, collection } = treeState;
331
- const currentKey = selectionManager.focusedKey;
332
- // Helper function to find next selectable key in a direction
333
- const findNextSelectableKey = (startKey, direction) => {
334
- if (startKey == null) {
335
- return null;
336
- }
337
- // First check if the startKey itself is selectable
338
- const startNode = collection.getItem(startKey);
339
- if (startNode &&
340
- startNode.type === 'item' &&
341
- !selectionManager.isDisabled(startKey)) {
342
- return startKey;
343
- }
344
- // If startKey is not selectable, find the next selectable key
345
- let keys = [...collection.getKeys()];
346
- if (direction === 'backward') {
347
- keys = keys.reverse();
348
- }
349
- let startIndex = keys.indexOf(startKey);
350
- if (startIndex === -1) {
351
- return null;
334
+ const { selectionManager } = treeState;
335
+ // Use the ref to get the current focused key synchronously
336
+ const currentKey = focusedKeyRef.current || selectionManager.focusedKey;
337
+ // Helper function to get all visible item keys by applying filter to tree state collection
338
+ const getVisibleItemKeys = () => {
339
+ const keys = [];
340
+ const term = searchValue.trim();
341
+ // Use the tree state's collection and apply filter manually
342
+ for (const item of treeState.collection) {
343
+ if (item.type === 'item') {
344
+ const text = item.textValue ?? String(item.rendered ?? '');
345
+ if (enhancedFilter(text, term, item.props)) {
346
+ keys.push(item.key);
347
+ }
348
+ }
352
349
  }
353
- for (let i = startIndex + 1; i < keys.length; i++) {
354
- const key = keys[i];
355
- const node = collection.getItem(key);
356
- if (node &&
357
- node.type === 'item' &&
358
- !selectionManager.isDisabled(key)) {
350
+ return keys;
351
+ };
352
+ // Helper function to find next selectable key in a direction
353
+ const findNextSelectableKey = (currentIndex, direction, visibleKeys) => {
354
+ const increment = direction === 'forward' ? 1 : -1;
355
+ for (let i = currentIndex + increment; i >= 0 && i < visibleKeys.length; i += increment) {
356
+ const key = visibleKeys[i];
357
+ if (!selectionManager.isDisabled(key)) {
359
358
  return key;
360
359
  }
361
360
  }
362
361
  return null;
363
362
  };
364
363
  // Helper function to find first or last selectable key
365
- const findFirstLastSelectableKey = (direction) => {
366
- const keys = [...collection.getKeys()];
367
- const keysToCheck = direction === 'forward' ? keys : keys.reverse();
364
+ const findFirstLastSelectableKey = (direction, visibleKeys) => {
365
+ const keysToCheck = direction === 'forward'
366
+ ? visibleKeys
367
+ : [...visibleKeys].reverse();
368
368
  for (const key of keysToCheck) {
369
- const node = collection.getItem(key);
370
- if (node &&
371
- node.type === 'item' &&
372
- !selectionManager.isDisabled(key)) {
369
+ if (!selectionManager.isDisabled(key)) {
373
370
  return key;
374
371
  }
375
372
  }
376
373
  return null;
377
374
  };
375
+ const visibleKeys = getVisibleItemKeys();
376
+ if (visibleKeys.length === 0) {
377
+ return; // No visible items to navigate
378
+ }
378
379
  let nextKey;
379
380
  const direction = isArrowDown ? 'forward' : 'backward';
380
381
  if (currentKey == null) {
381
382
  // No current focus, start from the first/last item
382
- nextKey = findFirstLastSelectableKey(direction);
383
+ nextKey = findFirstLastSelectableKey(direction, visibleKeys);
383
384
  }
384
385
  else {
385
- // Find next selectable item from current position
386
- const candidateKey = direction === 'forward'
387
- ? collection.getKeyAfter(currentKey)
388
- : collection.getKeyBefore(currentKey);
389
- nextKey = findNextSelectableKey(candidateKey, direction);
390
- // If no next key found and focus wrapping is enabled, wrap to first/last selectable item
391
- if (nextKey == null) {
392
- nextKey = findFirstLastSelectableKey(direction);
386
+ // Find current position in visible keys
387
+ const currentIndex = visibleKeys.indexOf(currentKey);
388
+ if (currentIndex === -1) {
389
+ // Current key not in visible items, start from beginning/end
390
+ nextKey = findFirstLastSelectableKey(direction, visibleKeys);
391
+ }
392
+ else {
393
+ // Find next selectable item from current position
394
+ nextKey = findNextSelectableKey(currentIndex, direction, visibleKeys);
395
+ // If no next key found, wrap to first/last selectable item
396
+ if (nextKey == null) {
397
+ nextKey = findFirstLastSelectableKey(direction, visibleKeys);
398
+ }
393
399
  }
394
400
  }
395
401
  if (nextKey != null) {
396
402
  selectionManager.setFocusedKey(nextKey);
397
403
  setFocusedKey(nextKey);
404
+ focusedKeyRef.current = nextKey; // Update ref immediately
398
405
  }
399
406
  }
400
407
  else if (e.key === 'Enter' ||
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.66.0
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.0
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.0
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.0
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.0
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.0
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.0
4
+ * @cube-dev/ui-kit v0.67.0
5
5
  * Released under the MIT license.
6
6
  */
7
7