@cube-dev/ui-kit 0.206.3 → 0.208.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 (858) hide show
  1. package/dist/CHANGELOG.md +18 -0
  2. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  3. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  4. package/dist/_internal/hooks/use-event.js +1 -1
  5. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  6. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  7. package/dist/_internal/hooks/use-sync-ref.js.map +1 -1
  8. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  9. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  10. package/dist/_internal/hooks/use-warn.js +1 -1
  11. package/dist/components/Block.js +1 -1
  12. package/dist/components/CollectionItem.d.ts +0 -2
  13. package/dist/components/CollectionItem.js +1 -1
  14. package/dist/components/CollectionItem.js.map +1 -1
  15. package/dist/components/GlobalStyles.js +1 -1
  16. package/dist/components/GlobalStyles.js.map +1 -1
  17. package/dist/components/GridProvider.js +1 -1
  18. package/dist/components/GridProvider.js.map +1 -1
  19. package/dist/components/HiddenInput.js +1 -1
  20. package/dist/components/Root.js +3 -3
  21. package/dist/components/Root.js.map +1 -1
  22. package/dist/components/actions/Action/Action.js +1 -1
  23. package/dist/components/actions/Banner/Banner.js +1 -1
  24. package/dist/components/actions/Banner/Banner.js.map +1 -1
  25. package/dist/components/actions/Button/Button.d.ts +10 -1
  26. package/dist/components/actions/Button/Button.js +13 -8
  27. package/dist/components/actions/Button/Button.js.map +1 -1
  28. package/dist/components/actions/Button/index.d.ts +16 -1
  29. package/dist/components/actions/Button/index.js +13 -0
  30. package/dist/components/actions/Button/index.js.map +1 -0
  31. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  32. package/dist/components/actions/ButtonGroup/ButtonGroup.js.map +1 -1
  33. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  34. package/dist/components/actions/ButtonSplit/ButtonSplit.js.map +1 -1
  35. package/dist/components/actions/ButtonSplit/context.js +1 -1
  36. package/dist/components/actions/CommandMenu/CommandMenu.d.ts +1 -1
  37. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  38. package/dist/components/actions/CommandMenu/CommandMenu.js.map +1 -1
  39. package/dist/components/actions/CommandMenu/styled.js +1 -1
  40. package/dist/components/actions/ItemAction/ItemAction.js +2 -2
  41. package/dist/components/actions/ItemAction/ItemAction.js.map +1 -1
  42. package/dist/components/actions/ItemActionContext.js +1 -1
  43. package/dist/components/actions/ItemActionsWrapper.js +1 -1
  44. package/dist/components/actions/ItemButton/ItemButton.d.ts +0 -2
  45. package/dist/components/actions/ItemButton/ItemButton.js +2 -2
  46. package/dist/components/actions/ItemButton/ItemButton.js.map +1 -1
  47. package/dist/components/actions/Link/Link.js +1 -1
  48. package/dist/components/actions/Menu/Menu.d.ts +1 -1
  49. package/dist/components/actions/Menu/Menu.js +1 -1
  50. package/dist/components/actions/Menu/Menu.js.map +1 -1
  51. package/dist/components/actions/Menu/MenuCollectionItem.js +1 -1
  52. package/dist/components/actions/Menu/MenuItem.js +2 -2
  53. package/dist/components/actions/Menu/MenuItem.js.map +1 -1
  54. package/dist/components/actions/Menu/MenuSection.js +1 -1
  55. package/dist/components/actions/Menu/MenuTrigger.js +3 -3
  56. package/dist/components/actions/Menu/MenuTrigger.js.map +1 -1
  57. package/dist/components/actions/Menu/SubMenuTrigger.js +2 -2
  58. package/dist/components/actions/Menu/SubMenuTrigger.js.map +1 -1
  59. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  60. package/dist/components/actions/Menu/context.js +1 -1
  61. package/dist/components/actions/Menu/index.d.ts +1 -1
  62. package/dist/components/actions/Menu/styled.js +1 -1
  63. package/dist/components/actions/actions-run.js +1 -1
  64. package/dist/components/actions/index.d.ts +6 -18
  65. package/dist/components/actions/use-action.js +2 -2
  66. package/dist/components/actions/use-action.js.map +1 -1
  67. package/dist/components/actions/use-anchored-menu.d.ts +0 -1
  68. package/dist/components/actions/use-anchored-menu.js +2 -2
  69. package/dist/components/actions/use-anchored-menu.js.map +1 -1
  70. package/dist/components/actions/use-context-menu.d.ts +0 -1
  71. package/dist/components/actions/use-context-menu.js +2 -2
  72. package/dist/components/actions/use-context-menu.js.map +1 -1
  73. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  74. package/dist/components/content/ActiveZone/ActiveZone.js.map +1 -1
  75. package/dist/components/content/Alert/Alert.js +1 -1
  76. package/dist/components/content/Alert/use-alert.js +1 -1
  77. package/dist/components/content/Alert/use-alert.js.map +1 -1
  78. package/dist/components/content/Avatar/Avatar.js +1 -1
  79. package/dist/components/content/Badge/Badge.d.ts +0 -1
  80. package/dist/components/content/Badge/Badge.js +1 -1
  81. package/dist/components/content/Badge/Badge.js.map +1 -1
  82. package/dist/components/content/Card/Card.js +1 -1
  83. package/dist/components/content/Content.js +1 -1
  84. package/dist/components/content/Content.js.map +1 -1
  85. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +3 -3
  86. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js.map +1 -1
  87. package/dist/components/content/CopySnippet/CopySnippet.d.ts +2 -18
  88. package/dist/components/content/CopySnippet/CopySnippet.js +2 -2
  89. package/dist/components/content/CopySnippet/CopySnippet.js.map +1 -1
  90. package/dist/components/content/Disclosure/Disclosure.d.ts +0 -1
  91. package/dist/components/content/Disclosure/Disclosure.js +2 -2
  92. package/dist/components/content/Disclosure/Disclosure.js.map +1 -1
  93. package/dist/components/content/Divider/Divider.js +1 -1
  94. package/dist/components/content/Divider/Divider.js.map +1 -1
  95. package/dist/components/content/Footer.js +1 -1
  96. package/dist/components/content/Footer.js.map +1 -1
  97. package/dist/components/content/Header.js +1 -1
  98. package/dist/components/content/Header.js.map +1 -1
  99. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  100. package/dist/components/content/HotKeys/HotKeys.js.map +1 -1
  101. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  102. package/dist/components/content/InfoBadge/InfoBadge.js.map +1 -1
  103. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  104. package/dist/components/content/InlineInput/InlineInput.js.map +1 -1
  105. package/dist/components/content/Item/Item.d.ts +1 -2
  106. package/dist/components/content/Item/Item.js +4 -4
  107. package/dist/components/content/Item/Item.js.map +1 -1
  108. package/dist/components/content/Item/ItemWithNativeLinks.js +2 -2
  109. package/dist/components/content/Item/index.d.ts +1 -1
  110. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  111. package/dist/components/content/ItemBadge/index.d.ts +1 -2
  112. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  113. package/dist/components/content/Layout/GridLayout.js +1 -1
  114. package/dist/components/content/Layout/Layout.js +1 -1
  115. package/dist/components/content/Layout/Layout.js.map +1 -1
  116. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  117. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  118. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  119. package/dist/components/content/Layout/LayoutContainer.js.map +1 -1
  120. package/dist/components/content/Layout/LayoutContent.js +1 -1
  121. package/dist/components/content/Layout/LayoutContent.js.map +1 -1
  122. package/dist/components/content/Layout/LayoutContext.js +1 -1
  123. package/dist/components/content/Layout/LayoutContext.js.map +1 -1
  124. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  125. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  126. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  127. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  128. package/dist/components/content/Layout/LayoutHeader.js.map +1 -1
  129. package/dist/components/content/Layout/LayoutPane.js +2 -2
  130. package/dist/components/content/Layout/LayoutPane.js.map +1 -1
  131. package/dist/components/content/Layout/LayoutPanel.js +3 -3
  132. package/dist/components/content/Layout/LayoutPanel.js.map +1 -1
  133. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  134. package/dist/components/content/Layout/LayoutPanelHeader.js.map +1 -1
  135. package/dist/components/content/Layout/LayoutPanelTransition.js +1 -1
  136. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  137. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  138. package/dist/components/content/Layout/index.js +1 -1
  139. package/dist/components/content/Layout/utils.js +1 -1
  140. package/dist/components/content/Paragraph.js +1 -1
  141. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  142. package/dist/components/content/Placeholder/Placeholder.js.map +1 -1
  143. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  144. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  145. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  146. package/dist/components/content/Result/Result.js +2 -2
  147. package/dist/components/content/Result/Result.js.map +1 -1
  148. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  149. package/dist/components/content/Skeleton/Skeleton.js.map +1 -1
  150. package/dist/components/content/Tag/Tag.d.ts +0 -1
  151. package/dist/components/content/Tag/Tag.js +1 -1
  152. package/dist/components/content/Tag/Tag.js.map +1 -1
  153. package/dist/components/content/Text.js +1 -1
  154. package/dist/components/content/TextItem/TextItem.js +1 -1
  155. package/dist/components/content/Title.js +1 -1
  156. package/dist/components/content/Title.js.map +1 -1
  157. package/dist/components/content/Tree/Tree.js +1 -1
  158. package/dist/components/content/Tree/Tree.js.map +1 -1
  159. package/dist/components/content/Tree/TreeNode.js +5 -5
  160. package/dist/components/content/Tree/TreeNode.js.map +1 -1
  161. package/dist/components/content/Tree/checked-keys.js +1 -1
  162. package/dist/components/content/Tree/rowId.js +1 -1
  163. package/dist/components/content/Tree/styled.js +1 -1
  164. package/dist/components/content/Tree/styled.js.map +1 -1
  165. package/dist/components/content/Tree/tree-index.js +1 -1
  166. package/dist/components/content/Tree/types.d.ts +1 -1
  167. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  168. package/dist/components/content/Tree/use-checkbox-tree.js.map +1 -1
  169. package/dist/components/content/Tree/use-load-data.js +1 -1
  170. package/dist/components/content/Tree/use-load-data.js.map +1 -1
  171. package/dist/components/content/highlightText.js +1 -1
  172. package/dist/components/content/use-auto-tooltip.js +1 -1
  173. package/dist/components/data/DataTable/DataTable.js +1 -1
  174. package/dist/components/data/DataTable/DataTable.js.map +1 -1
  175. package/dist/components/data/ItemTable/ItemTable.js +1 -1
  176. package/dist/components/data/ItemTable/ItemTable.js.map +1 -1
  177. package/dist/components/data/ItemTable/ItemTableBulkBar.js +2 -2
  178. package/dist/components/data/ItemTable/ItemTableBulkBar.js.map +1 -1
  179. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  180. package/dist/components/data/ItemTable/ItemTableDragPreview.js.map +1 -1
  181. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  182. package/dist/components/data/ItemTable/ItemTableFooter.js.map +1 -1
  183. package/dist/components/data/ItemTable/ItemTableToolbar.js +2 -2
  184. package/dist/components/data/ItemTable/ItemTableToolbar.js.map +1 -1
  185. package/dist/components/data/ItemTable/item-table-sections.js +1 -1
  186. package/dist/components/data/ItemTable/use-item-table-column-widths.js +1 -1
  187. package/dist/components/data/ItemTable/use-item-table-drag-drop.js +1 -1
  188. package/dist/components/data/ItemTable/use-item-table-pagination.js +1 -1
  189. package/dist/components/data/ItemTable/use-item-table-selection.js +1 -1
  190. package/dist/components/data/ItemTable/use-item-table-sort.js +1 -1
  191. package/dist/components/data/ItemTable/use-item-table-tree-model.js +1 -1
  192. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  193. package/dist/components/data/TableBase/ColumnResizer.js.map +1 -1
  194. package/dist/components/data/TableBase/RowCollection.js +1 -1
  195. package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
  196. package/dist/components/data/TableBase/TableHeaderCell.js.map +1 -1
  197. package/dist/components/data/TableBase/TableRow.js +1 -1
  198. package/dist/components/data/TableBase/TableRow.js.map +1 -1
  199. package/dist/components/data/TableBase/TableRowLink.js +1 -1
  200. package/dist/components/data/TableBase/TableView.js +6 -6
  201. package/dist/components/data/TableBase/TableView.js.map +1 -1
  202. package/dist/components/data/TableBase/TreeGridTable.js +1 -1
  203. package/dist/components/data/TableBase/column-header.js +1 -1
  204. package/dist/components/data/TableBase/column-menu.js +1 -1
  205. package/dist/components/data/TableBase/column-menu.js.map +1 -1
  206. package/dist/components/data/TableBase/column-styles.js +1 -1
  207. package/dist/components/data/TableBase/column-tint.js +1 -1
  208. package/dist/components/data/TableBase/row-menu.js +1 -1
  209. package/dist/components/data/TableBase/styled.js +1 -1
  210. package/dist/components/data/TableBase/styled.js.map +1 -1
  211. package/dist/components/data/TableBase/table-body-sections.js +1 -1
  212. package/dist/components/data/TableBase/table-tree.js +1 -1
  213. package/dist/components/data/TableBase/types.js +1 -1
  214. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  215. package/dist/components/data/TableBase/use-cell-selection.js.map +1 -1
  216. package/dist/components/data/TableBase/use-column-menu.js +2 -2
  217. package/dist/components/data/TableBase/use-column-order.js +1 -1
  218. package/dist/components/data/TableBase/use-column-order.js.map +1 -1
  219. package/dist/components/data/TableBase/use-column-window.js +1 -1
  220. package/dist/components/data/TableBase/use-container-width.js +1 -1
  221. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  222. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  223. package/dist/components/data/TableBase/use-table-columns.js +1 -1
  224. package/dist/components/data/TableBase/use-table-search.js +1 -1
  225. package/dist/components/data/TableBase/use-table-selection.js +1 -1
  226. package/dist/components/data/TableBase/use-table-selection.js.map +1 -1
  227. package/dist/components/data/TableBase/use-table-sort.js +1 -1
  228. package/dist/components/data/TableBase/use-table-sort.js.map +1 -1
  229. package/dist/components/data/TableBase/use-table-sorts.js +1 -1
  230. package/dist/components/data/TableBase/use-table-sorts.js.map +1 -1
  231. package/dist/components/data/TableBase/use-table-storage.js +1 -1
  232. package/dist/components/data/TableBase/use-table-tooltip-refresh.js +1 -1
  233. package/dist/components/data/TableBase/use-table-tree-state.js +1 -1
  234. package/dist/components/data/TableBase/use-table-tree-state.js.map +1 -1
  235. package/dist/components/fields/Checkbox/Checkbox.d.ts +0 -1
  236. package/dist/components/fields/Checkbox/Checkbox.js +3 -3
  237. package/dist/components/fields/Checkbox/Checkbox.js.map +1 -1
  238. package/dist/components/fields/Checkbox/CheckboxGroup.d.ts +0 -1
  239. package/dist/components/fields/Checkbox/CheckboxGroup.js +3 -3
  240. package/dist/components/fields/Checkbox/CheckboxGroup.js.map +1 -1
  241. package/dist/components/fields/Checkbox/context.js +1 -1
  242. package/dist/components/fields/ColorInput/ColorInput.d.ts +0 -1
  243. package/dist/components/fields/ColorInput/ColorInput.js +1 -1
  244. package/dist/components/fields/ColorInput/ColorInput.js.map +1 -1
  245. package/dist/components/fields/ColorPicker/ColorPicker.d.ts +0 -3
  246. package/dist/components/fields/ColorPicker/ColorPicker.js +3 -3
  247. package/dist/components/fields/ColorPicker/ColorPicker.js.map +1 -1
  248. package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
  249. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.d.ts +0 -1
  250. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +2 -2
  251. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js.map +1 -1
  252. package/dist/components/fields/ComboBox/ComboBox.d.ts +0 -1
  253. package/dist/components/fields/ComboBox/ComboBox.js +6 -6
  254. package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
  255. package/dist/components/fields/ComboBox/comboBoxOptions.js +1 -1
  256. package/dist/components/fields/CommandTextArea/CommandTextArea.d.ts +1 -2
  257. package/dist/components/fields/CommandTextArea/CommandTextArea.js +2 -2
  258. package/dist/components/fields/CommandTextArea/CommandTextArea.js.map +1 -1
  259. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  260. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  261. package/dist/components/fields/DatePicker/CalendarPopover.js +1 -1
  262. package/dist/components/fields/DatePicker/DateInput.d.ts +0 -1
  263. package/dist/components/fields/DatePicker/DateInput.js +2 -2
  264. package/dist/components/fields/DatePicker/DateInput.js.map +1 -1
  265. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  266. package/dist/components/fields/DatePicker/DateInputBase.js.map +1 -1
  267. package/dist/components/fields/DatePicker/DatePicker.d.ts +0 -1
  268. package/dist/components/fields/DatePicker/DatePicker.js +2 -2
  269. package/dist/components/fields/DatePicker/DatePicker.js.map +1 -1
  270. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  271. package/dist/components/fields/DatePicker/DatePickerButton.js.map +1 -1
  272. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  273. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  274. package/dist/components/fields/DatePicker/DatePickerInput.js.map +1 -1
  275. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  276. package/dist/components/fields/DatePicker/DateRangePicker.d.ts +0 -1
  277. package/dist/components/fields/DatePicker/DateRangePicker.js +2 -2
  278. package/dist/components/fields/DatePicker/DateRangePicker.js.map +1 -1
  279. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.d.ts +0 -1
  280. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +2 -2
  281. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js.map +1 -1
  282. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  283. package/dist/components/fields/DatePicker/PeriodPicker.d.ts +0 -1
  284. package/dist/components/fields/DatePicker/PeriodPicker.js +2 -2
  285. package/dist/components/fields/DatePicker/PeriodPicker.js.map +1 -1
  286. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  287. package/dist/components/fields/DatePicker/TimeInput.d.ts +0 -1
  288. package/dist/components/fields/DatePicker/TimeInput.js +2 -2
  289. package/dist/components/fields/DatePicker/TimeInput.js.map +1 -1
  290. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  291. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  292. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  293. package/dist/components/fields/DatePicker/period.js +1 -1
  294. package/dist/components/fields/DatePicker/props.js +1 -1
  295. package/dist/components/fields/DatePicker/utils.js +1 -1
  296. package/dist/components/fields/FileInput/FileInput.d.ts +0 -1
  297. package/dist/components/fields/FileInput/FileInput.js +3 -3
  298. package/dist/components/fields/FileInput/FileInput.js.map +1 -1
  299. package/dist/components/fields/FilterListBox/FilterListBox.js +3 -3
  300. package/dist/components/fields/FilterListBox/FilterListBox.js.map +1 -1
  301. package/dist/components/fields/FilterListBox/styled.js +1 -1
  302. package/dist/components/fields/FilterPicker/FilterPicker.d.ts +0 -3
  303. package/dist/components/fields/FilterPicker/FilterPicker.js +8 -8
  304. package/dist/components/fields/FilterPicker/FilterPicker.js.map +1 -1
  305. package/dist/components/fields/FilterPicker/FilterTree.js +2 -2
  306. package/dist/components/fields/FilterPicker/FilterTree.js.map +1 -1
  307. package/dist/components/fields/Input/Input.d.ts +0 -1
  308. package/dist/components/fields/Input/Input.js +1 -1
  309. package/dist/components/fields/Input/Input.js.map +1 -1
  310. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  311. package/dist/components/fields/ListBox/ListBox.js +4 -4
  312. package/dist/components/fields/ListBox/ListBox.js.map +1 -1
  313. package/dist/components/fields/ListBox/optionId.js +1 -1
  314. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +2 -2
  315. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js.map +1 -1
  316. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  317. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  318. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js.map +1 -1
  319. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  320. package/dist/components/fields/NumberInput/NumberInput.js.map +1 -1
  321. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  322. package/dist/components/fields/PasswordInput/PasswordInput.js +2 -2
  323. package/dist/components/fields/PasswordInput/PasswordInput.js.map +1 -1
  324. package/dist/components/fields/Picker/Picker.d.ts +0 -2
  325. package/dist/components/fields/Picker/Picker.js +8 -8
  326. package/dist/components/fields/Picker/Picker.js.map +1 -1
  327. package/dist/components/fields/RadioGroup/Radio.d.ts +0 -1
  328. package/dist/components/fields/RadioGroup/Radio.js +2 -2
  329. package/dist/components/fields/RadioGroup/Radio.js.map +1 -1
  330. package/dist/components/fields/RadioGroup/RadioGroup.d.ts +0 -1
  331. package/dist/components/fields/RadioGroup/RadioGroup.js +3 -3
  332. package/dist/components/fields/RadioGroup/RadioGroup.js.map +1 -1
  333. package/dist/components/fields/RadioGroup/context.js +1 -1
  334. package/dist/components/fields/SearchComboBox/SearchComboBox.d.ts +0 -1
  335. package/dist/components/fields/SearchComboBox/SearchComboBox.js +6 -6
  336. package/dist/components/fields/SearchComboBox/SearchComboBox.js.map +1 -1
  337. package/dist/components/fields/SearchInput/SearchInput.js +2 -2
  338. package/dist/components/fields/SearchInput/SearchInput.js.map +1 -1
  339. package/dist/components/fields/Select/Select.d.ts +1 -2
  340. package/dist/components/fields/Select/Select.js +7 -7
  341. package/dist/components/fields/Select/Select.js.map +1 -1
  342. package/dist/components/fields/Slider/Gradation.js +1 -1
  343. package/dist/components/fields/Slider/HueSlider.js +1 -1
  344. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  345. package/dist/components/fields/Slider/Slider.js +1 -1
  346. package/dist/components/fields/Slider/Slider.js.map +1 -1
  347. package/dist/components/fields/Slider/SliderBase.js +2 -2
  348. package/dist/components/fields/Slider/SliderBase.js.map +1 -1
  349. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  350. package/dist/components/fields/Slider/SliderThumb.js.map +1 -1
  351. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  352. package/dist/components/fields/Slider/SliderTrack.js.map +1 -1
  353. package/dist/components/fields/Slider/elements.js +1 -1
  354. package/dist/components/fields/Slider/index.js +2 -2
  355. package/dist/components/fields/Slider/types.d.ts +0 -1
  356. package/dist/components/fields/Switch/Switch.d.ts +0 -1
  357. package/dist/components/fields/Switch/Switch.js +3 -3
  358. package/dist/components/fields/Switch/Switch.js.map +1 -1
  359. package/dist/components/fields/TagInput/TagInput.js +5 -5
  360. package/dist/components/fields/TagInput/TagInput.js.map +1 -1
  361. package/dist/components/fields/TagInput/TagList.js +1 -1
  362. package/dist/components/fields/TagInput/TagList.js.map +1 -1
  363. package/dist/components/fields/TagInput/useActiveOption.js +1 -1
  364. package/dist/components/fields/TagInput/useTagError.js +1 -1
  365. package/dist/components/fields/TextArea/TextArea.js +2 -2
  366. package/dist/components/fields/TextArea/TextArea.js.map +1 -1
  367. package/dist/components/fields/TextInput/TextInput.js +2 -2
  368. package/dist/components/fields/TextInput/TextInput.js.map +1 -1
  369. package/dist/components/fields/TextInput/TextInputBase.d.ts +0 -1
  370. package/dist/components/fields/TextInput/TextInputBase.js +3 -3
  371. package/dist/components/fields/TextInput/TextInputBase.js.map +1 -1
  372. package/dist/components/fields/TextInput/displayed-validation.js +1 -1
  373. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
  374. package/dist/components/fields/TextInput/useAutoSizeTextArea.js.map +1 -1
  375. package/dist/components/fields/TextInputMapper/TextInputMapper.d.ts +0 -1
  376. package/dist/components/fields/TextInputMapper/TextInputMapper.js +3 -3
  377. package/dist/components/fields/TextInputMapper/TextInputMapper.js.map +1 -1
  378. package/dist/components/fields/TriggerActions.js +1 -1
  379. package/dist/components/fields/color/ColorPanel.js +1 -1
  380. package/dist/components/fields/color/ColorPanel.js.map +1 -1
  381. package/dist/components/fields/color/channels.js +1 -1
  382. package/dist/components/fields/color/color.js +1 -1
  383. package/dist/components/fields/color/context.js +1 -1
  384. package/dist/components/fields/index.d.ts +2 -2
  385. package/dist/components/fields/option-origin-press.js +1 -1
  386. package/dist/components/form/FieldWrapper/FieldWrapper.js +2 -2
  387. package/dist/components/form/FieldWrapper/FieldWrapper.js.map +1 -1
  388. package/dist/components/form/FieldWrapper/field-description.js +1 -1
  389. package/dist/components/form/FieldWrapper/types.d.ts +0 -1
  390. package/dist/components/form/Form/Field.d.ts +0 -1
  391. package/dist/components/form/Form/Field.js +3 -3
  392. package/dist/components/form/Form/Field.js.map +1 -1
  393. package/dist/components/form/Form/Form.d.ts +1 -26
  394. package/dist/components/form/Form/Form.js +7 -116
  395. package/dist/components/form/Form/Form.js.map +1 -1
  396. package/dist/components/form/Form/FormContext.d.ts +30 -0
  397. package/dist/components/form/Form/FormContext.js +79 -0
  398. package/dist/components/form/Form/FormContext.js.map +1 -0
  399. package/dist/components/form/Form/FormElement.js +49 -0
  400. package/dist/components/form/Form/FormElement.js.map +1 -0
  401. package/dist/components/form/Form/ModernFormRoot.js +3 -2
  402. package/dist/components/form/Form/ModernFormRoot.js.map +1 -1
  403. package/dist/components/form/Form/ResetButton/ResetButton.js +2 -2
  404. package/dist/components/form/Form/ResetButton/ResetButton.js.map +1 -1
  405. package/dist/components/form/Form/SubmitButton/SubmitButton.js +2 -2
  406. package/dist/components/form/Form/SubmitButton/SubmitButton.js.map +1 -1
  407. package/dist/components/form/Form/SubmitError.d.ts +0 -1
  408. package/dist/components/form/Form/SubmitError.js +3 -3
  409. package/dist/components/form/Form/SubmitError.js.map +1 -1
  410. package/dist/components/form/Form/backend.js +1 -1
  411. package/dist/components/form/Form/index.d.ts +2 -1
  412. package/dist/components/form/Form/index.js +6 -5
  413. package/dist/components/form/Form/index.js.map +1 -1
  414. package/dist/components/form/Form/modern/actions.js +1 -1
  415. package/dist/components/form/Form/modern/context.js +1 -1
  416. package/dist/components/form/Form/modern/controller.js +1 -1
  417. package/dist/components/form/Form/modern/field-binding.js +1 -1
  418. package/dist/components/form/Form/modern/field.js +1 -1
  419. package/dist/components/form/Form/modern/react.js +1 -1
  420. package/dist/components/form/Form/modern/store.js +1 -1
  421. package/dist/components/form/Form/modern/validation.js +1 -1
  422. package/dist/components/form/Form/modern/values.js +1 -1
  423. package/dist/components/form/Form/reset-unbound-controls.js +1 -1
  424. package/dist/components/form/Form/use-field/types.d.ts +0 -1
  425. package/dist/components/form/Form/use-field/use-field-binding.js +2 -2
  426. package/dist/components/form/Form/use-field/use-field-props.js +4 -4
  427. package/dist/components/form/Form/use-field/use-field-props.js.map +1 -1
  428. package/dist/components/form/Form/use-field/use-field.d.ts +0 -1
  429. package/dist/components/form/Form/use-field/use-field.js +2 -2
  430. package/dist/components/form/Form/use-field/use-field.js.map +1 -1
  431. package/dist/components/form/Form/use-form.js +1 -1
  432. package/dist/components/form/Form/validation.js +1 -1
  433. package/dist/components/form/Label.d.ts +0 -1
  434. package/dist/components/form/Label.js +1 -1
  435. package/dist/components/form/Label.js.map +1 -1
  436. package/dist/components/form/field-chrome.js +1 -1
  437. package/dist/components/form/field-layout.js +1 -1
  438. package/dist/components/form/field-layout.js.map +1 -1
  439. package/dist/components/form/index.d.ts +2 -1
  440. package/dist/components/form/legacy-tooltip.js +1 -1
  441. package/dist/components/form/validation/ValidationIndicator.d.ts +0 -1
  442. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  443. package/dist/components/form/validation/ValidationIndicator.js.map +1 -1
  444. package/dist/components/form/validation/resolve-validation-props.d.ts +0 -1
  445. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  446. package/dist/components/form/validation/resolve-validation-props.js.map +1 -1
  447. package/dist/components/form/validation/use-validation-props.js +1 -1
  448. package/dist/components/form/validation/use-validation-props.js.map +1 -1
  449. package/dist/components/form/wrapper.d.ts +0 -1
  450. package/dist/components/form/wrapper.js +1 -1
  451. package/dist/components/form/wrapper.js.map +1 -1
  452. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  453. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  454. package/dist/components/layout/Flex.js +1 -1
  455. package/dist/components/layout/Flow.js +1 -1
  456. package/dist/components/layout/Grid.js +1 -1
  457. package/dist/components/layout/Panel.js +1 -1
  458. package/dist/components/layout/Prefix.js +1 -1
  459. package/dist/components/layout/Prefix.js.map +1 -1
  460. package/dist/components/layout/ResizablePanel.js +2 -2
  461. package/dist/components/layout/Space.js +1 -1
  462. package/dist/components/layout/Suffix.js +1 -1
  463. package/dist/components/layout/Suffix.js.map +1 -1
  464. package/dist/components/navigation/Pagination/Pagination.js +3 -3
  465. package/dist/components/navigation/Pagination/Pagination.js.map +1 -1
  466. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  467. package/dist/components/navigation/Pagination/use-pagination.js.map +1 -1
  468. package/dist/components/navigation/Tabs/BoardDragActiveProvider.js +1 -1
  469. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  470. package/dist/components/navigation/Tabs/TabButton.js +4 -4
  471. package/dist/components/navigation/Tabs/TabButton.js.map +1 -1
  472. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  473. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  474. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  475. package/dist/components/navigation/Tabs/TabPicker.js.map +1 -1
  476. package/dist/components/navigation/Tabs/Tabs.js +2 -2
  477. package/dist/components/navigation/Tabs/Tabs.js.map +1 -1
  478. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  479. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  480. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  481. package/dist/components/navigation/Tabs/segmented-styles.js +1 -1
  482. package/dist/components/navigation/Tabs/styled.js +1 -1
  483. package/dist/components/navigation/Tabs/styled.js.map +1 -1
  484. package/dist/components/navigation/Tabs/types.d.ts +2 -2
  485. package/dist/components/navigation/Tabs/types.js +1 -1
  486. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  487. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  488. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  489. package/dist/components/other/Calendar/Calendar.js +1 -1
  490. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  491. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  492. package/dist/components/other/Calendar/CalendarHeader.js +2 -2
  493. package/dist/components/other/Calendar/CalendarHeader.js.map +1 -1
  494. package/dist/components/other/Calendar/CalendarPanel.js +1 -1
  495. package/dist/components/other/Calendar/CalendarPanel.js.map +1 -1
  496. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  497. package/dist/components/other/Calendar/PeriodCalendar.js.map +1 -1
  498. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  499. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  500. package/dist/components/other/Calendar/styled.js +1 -1
  501. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  502. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  503. package/dist/components/overlays/AlertDialog/AlertDialog.js +2 -2
  504. package/dist/components/overlays/AlertDialog/AlertDialog.js.map +1 -1
  505. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  506. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  507. package/dist/components/overlays/AlertDialog/AlertDialogZone.js.map +1 -1
  508. package/dist/components/overlays/AlertDialog/types.d.ts +0 -1
  509. package/dist/components/overlays/Dialog/Dialog.js +2 -2
  510. package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
  511. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  512. package/dist/components/overlays/Dialog/DialogForm.js +2 -2
  513. package/dist/components/overlays/Dialog/DialogForm.js.map +1 -1
  514. package/dist/components/overlays/Dialog/DialogTrigger.d.ts +0 -1
  515. package/dist/components/overlays/Dialog/DialogTrigger.js +5 -5
  516. package/dist/components/overlays/Dialog/DialogTrigger.js.map +1 -1
  517. package/dist/components/overlays/Dialog/ModernDialogForm.js +2 -2
  518. package/dist/components/overlays/Dialog/ModernDialogForm.js.map +1 -1
  519. package/dist/components/overlays/Dialog/context.js +1 -1
  520. package/dist/components/overlays/Dialog/default-button-text.js +1 -1
  521. package/dist/components/overlays/Dialog/use-content-overflow.js +1 -1
  522. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  523. package/dist/components/overlays/Dialog/use-dialog-container.js.map +1 -1
  524. package/dist/components/overlays/Dialog/use-dialog-open-sync.js +1 -1
  525. package/dist/components/overlays/Dialog/use-dismiss-confirmation.js +1 -1
  526. package/dist/components/overlays/Dialog/use-dismiss-confirmation.js.map +1 -1
  527. package/dist/components/overlays/Dialog/use-retained-dialog-focus.js +1 -1
  528. package/dist/components/overlays/Modal/Modal.js +2 -2
  529. package/dist/components/overlays/Modal/Modal.js.map +1 -1
  530. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  531. package/dist/components/overlays/Modal/OpenTransitionContext.js.map +1 -1
  532. package/dist/components/overlays/Modal/Overlay.js +1 -1
  533. package/dist/components/overlays/Modal/Overlay.js.map +1 -1
  534. package/dist/components/overlays/Modal/Popover.js +2 -2
  535. package/dist/components/overlays/Modal/Popover.js.map +1 -1
  536. package/dist/components/overlays/Modal/Tray.js +2 -2
  537. package/dist/components/overlays/Modal/Tray.js.map +1 -1
  538. package/dist/components/overlays/Modal/Underlay.js +1 -1
  539. package/dist/components/overlays/Modal/modal-containment.js +1 -1
  540. package/dist/components/overlays/Notifications/Notification.js +1 -1
  541. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  542. package/dist/components/overlays/Notifications/NotificationAction.js.map +1 -1
  543. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  544. package/dist/components/overlays/Notifications/NotificationCard.js.map +1 -1
  545. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  546. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  547. package/dist/components/overlays/Notifications/NotificationItem.js.map +1 -1
  548. package/dist/components/overlays/Notifications/OverlayContainer.js +2 -2
  549. package/dist/components/overlays/Notifications/OverlayContainer.js.map +1 -1
  550. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  551. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  552. package/dist/components/overlays/Notifications/PersistentNotificationsList.js.map +1 -1
  553. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  554. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  555. package/dist/components/overlays/Notifications/index.js +1 -1
  556. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  557. package/dist/components/overlays/Notifications/use-notification-state.js.map +1 -1
  558. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  559. package/dist/components/overlays/Notifications/use-notifications.js.map +1 -1
  560. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  561. package/dist/components/overlays/Notifications/use-overlay-timers.js.map +1 -1
  562. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  563. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  564. package/dist/components/overlays/Notifications/use-persistent-state.js.map +1 -1
  565. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  566. package/dist/components/overlays/Notifications/use-toast-state.js.map +1 -1
  567. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  568. package/dist/components/overlays/Toast/index.js +2 -2
  569. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  570. package/dist/components/overlays/Toast/useProgressToast.js.map +1 -1
  571. package/dist/components/overlays/Toast/useToast.js +2 -2
  572. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  573. package/dist/components/overlays/Tooltip/Tooltip.js.map +1 -1
  574. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  575. package/dist/components/overlays/Tooltip/TooltipTrigger.js +3 -3
  576. package/dist/components/overlays/Tooltip/TooltipTrigger.js.map +1 -1
  577. package/dist/components/overlays/Tooltip/context.js +1 -1
  578. package/dist/components/overlays/Tooltip/context.js.map +1 -1
  579. package/dist/components/overlays/Tooltip/split-trigger-props.js +1 -1
  580. package/dist/components/portal/Portal.js +1 -1
  581. package/dist/components/portal/PortalProvider.js +1 -1
  582. package/dist/components/portal/usePortal.js +1 -1
  583. package/dist/components/shared/DraggableCollection.js +1 -1
  584. package/dist/components/shared/InvalidIcon.js +1 -1
  585. package/dist/components/shared/ValidIcon.js +1 -1
  586. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  587. package/dist/components/status/LoadingAnimation/LoadingAnimation.js.map +1 -1
  588. package/dist/components/status/Spin/Cube.js +1 -1
  589. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  590. package/dist/components/status/Spin/Spin.js +1 -1
  591. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  592. package/dist/data/item-themes.js +8 -32
  593. package/dist/data/item-themes.js.map +1 -1
  594. package/dist/data/themes.js +1 -1
  595. package/dist/eslint-plugin/defaults.generated.js +5 -1
  596. package/dist/eslint-plugin/defaults.generated.js.map +1 -1
  597. package/dist/eslint-plugin/index.js +1 -1
  598. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  599. package/dist/i18n/I18nProvider.js +1 -1
  600. package/dist/i18n/createFormatter.js +1 -1
  601. package/dist/i18n/index.js +4 -4
  602. package/dist/i18n/instance.js +3 -3
  603. package/dist/i18n/locales/de-DE/uikit.js +1 -1
  604. package/dist/i18n/locales/en-US/uikit.js +1 -1
  605. package/dist/i18n/locales/es-ES/uikit.js +1 -1
  606. package/dist/i18n/locales/es-MX/uikit.js +1 -1
  607. package/dist/i18n/locales/fr-FR/uikit.js +1 -1
  608. package/dist/i18n/locales/it-IT/uikit.js +1 -1
  609. package/dist/i18n/locales/ja-JP/uikit.js +1 -1
  610. package/dist/i18n/locales/nb-NO/uikit.js +1 -1
  611. package/dist/i18n/locales/pt-BR/uikit.js +1 -1
  612. package/dist/i18n/locales/pt-PT/uikit.js +1 -1
  613. package/dist/i18n/locales/sv-SE/uikit.js +1 -1
  614. package/dist/i18n/locales/vi-VN/uikit.js +1 -1
  615. package/dist/i18n/locales.js +1 -1
  616. package/dist/i18n/namespace.js +1 -1
  617. package/dist/i18n/useFormatter.js +1 -1
  618. package/dist/i18n/useI18n.js +1 -1
  619. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  620. package/dist/icons/AdjustmentsIcon.js +1 -1
  621. package/dist/icons/AiIcon.js +1 -1
  622. package/dist/icons/AreaChartIcon.js +1 -1
  623. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  624. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  625. package/dist/icons/BackwardIcon.js +1 -1
  626. package/dist/icons/BarChartIcon.js +1 -1
  627. package/dist/icons/BellFilledIcon.js +1 -1
  628. package/dist/icons/BellIcon.js +1 -1
  629. package/dist/icons/BooleanIcon.js +1 -1
  630. package/dist/icons/CalendarEditIcon.js +1 -1
  631. package/dist/icons/CalendarIcon.js +1 -1
  632. package/dist/icons/CaretDownIcon.js +1 -1
  633. package/dist/icons/CaretUpIcon.js +1 -1
  634. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  635. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  636. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  637. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  638. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  639. package/dist/icons/ChartBarLineIcon.js +1 -1
  640. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  641. package/dist/icons/ChartBarStackedIcon.js +1 -1
  642. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  643. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  644. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  645. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  646. package/dist/icons/ChartBubbleIcon.js +1 -1
  647. package/dist/icons/ChartDonut2Icon.js +1 -1
  648. package/dist/icons/ChartFunnelIcon.js +1 -1
  649. package/dist/icons/ChartHeatmapIcon.js +1 -1
  650. package/dist/icons/ChartKPIIcon.js +1 -1
  651. package/dist/icons/ChartPie2Icon.js +1 -1
  652. package/dist/icons/ChartScatterIcon.js +1 -1
  653. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  654. package/dist/icons/CheckCircleIcon.js +1 -1
  655. package/dist/icons/CheckIcon.js +1 -1
  656. package/dist/icons/CircleFilledIcon.js +1 -1
  657. package/dist/icons/ClearIcon.js +1 -1
  658. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  659. package/dist/icons/CloseCircleIcon.js +1 -1
  660. package/dist/icons/CloseIcon.js +1 -1
  661. package/dist/icons/CodeIcon.js +1 -1
  662. package/dist/icons/ColumnTotalIcon.js +1 -1
  663. package/dist/icons/CopyIcon.js +1 -1
  664. package/dist/icons/CountIcon.js +1 -1
  665. package/dist/icons/CubeIcon.js +1 -1
  666. package/dist/icons/CubePauseIcon.js +1 -1
  667. package/dist/icons/CubePlayIcon.js +1 -1
  668. package/dist/icons/CurrencyDollarIcon.js +1 -1
  669. package/dist/icons/DangerIcon.js +1 -1
  670. package/dist/icons/DashboardIcon.js +1 -1
  671. package/dist/icons/DatabaseIcon.js +1 -1
  672. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  673. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  674. package/dist/icons/DirectionIcon.js +1 -1
  675. package/dist/icons/DonutIcon.js +1 -1
  676. package/dist/icons/DownIcon.js +1 -1
  677. package/dist/icons/EditIcon.js +1 -1
  678. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  679. package/dist/icons/ExclamationCircleIcon.js +1 -1
  680. package/dist/icons/ExclamationIcon.js +1 -1
  681. package/dist/icons/EyeIcon.js +1 -1
  682. package/dist/icons/EyeInvisibleIcon.js +1 -1
  683. package/dist/icons/FilterIcon.js +1 -1
  684. package/dist/icons/FolderFilledIcon.js +1 -1
  685. package/dist/icons/FolderIcon.js +1 -1
  686. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  687. package/dist/icons/FolderOpenIcon.js +1 -1
  688. package/dist/icons/ForwardIcon.js +1 -1
  689. package/dist/icons/GripVerticalIcon.js +1 -1
  690. package/dist/icons/HierarchyIcon.js +1 -1
  691. package/dist/icons/HierarchyOpenIcon.js +1 -1
  692. package/dist/icons/Icon.js +1 -1
  693. package/dist/icons/InfoCircleIcon.js +1 -1
  694. package/dist/icons/InfoIcon.js +1 -1
  695. package/dist/icons/KeyIcon.js +1 -1
  696. package/dist/icons/LeftIcon.js +1 -1
  697. package/dist/icons/LineChartIcon.js +1 -1
  698. package/dist/icons/LoadingIcon.js +1 -1
  699. package/dist/icons/LockFilledIcon.js +1 -1
  700. package/dist/icons/LockIcon.js +1 -1
  701. package/dist/icons/MoreIcon.js +1 -1
  702. package/dist/icons/NotAllowedIcon.js +1 -1
  703. package/dist/icons/Number123Icon.js +1 -1
  704. package/dist/icons/NumberIcon.js +1 -1
  705. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  706. package/dist/icons/PauseCircleIcon.js +1 -1
  707. package/dist/icons/PauseIcon.js +1 -1
  708. package/dist/icons/PercentageIcon.js +1 -1
  709. package/dist/icons/PieChartIcon.js +1 -1
  710. package/dist/icons/PipetteIcon.js +1 -1
  711. package/dist/icons/PlayCircleIcon.js +1 -1
  712. package/dist/icons/PlayIcon.js +1 -1
  713. package/dist/icons/PlusIcon.js +1 -1
  714. package/dist/icons/ProgressBarIcon.js +1 -1
  715. package/dist/icons/ReloadIcon.js +1 -1
  716. package/dist/icons/ReportIcon.js +1 -1
  717. package/dist/icons/ReturnIcon.js +1 -1
  718. package/dist/icons/RightIcon.js +1 -1
  719. package/dist/icons/RowTotalsIcon.js +1 -1
  720. package/dist/icons/SchemeIcon.js +1 -1
  721. package/dist/icons/SearchIcon.js +1 -1
  722. package/dist/icons/SemanticQueryIcon.js +1 -1
  723. package/dist/icons/SettingsIcon.js +1 -1
  724. package/dist/icons/ShieldFilledIcon.js +1 -1
  725. package/dist/icons/ShieldIcon.js +1 -1
  726. package/dist/icons/SlashIcon.js +1 -1
  727. package/dist/icons/SparklesIcon.js +1 -1
  728. package/dist/icons/SqlIcon.js +1 -1
  729. package/dist/icons/StatsIcon.js +1 -1
  730. package/dist/icons/StopIcon.js +1 -1
  731. package/dist/icons/StringIcon.js +1 -1
  732. package/dist/icons/SubtotalsIcon.js +1 -1
  733. package/dist/icons/SwitchIcon.js +1 -1
  734. package/dist/icons/TableIcon.js +1 -1
  735. package/dist/icons/ThumbsDownIcon.js +1 -1
  736. package/dist/icons/ThumbsUpIcon.js +1 -1
  737. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  738. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  739. package/dist/icons/ThunderboltIcon.js +1 -1
  740. package/dist/icons/TimeIcon.js +1 -1
  741. package/dist/icons/TrashIcon.js +1 -1
  742. package/dist/icons/UnlockIcon.js +1 -1
  743. package/dist/icons/UpIcon.js +1 -1
  744. package/dist/icons/UserGroupIcon.js +1 -1
  745. package/dist/icons/UserIcon.js +1 -1
  746. package/dist/icons/UserLockIcon.js +1 -1
  747. package/dist/icons/ViewIcon.js +1 -1
  748. package/dist/icons/WarningFilledIcon.js +1 -1
  749. package/dist/icons/WarningIcon.js +1 -1
  750. package/dist/icons/wrap-icon.js +1 -1
  751. package/dist/index.d.ts +29 -27
  752. package/dist/index.js +69 -69
  753. package/dist/probe/canonicalize.js +1 -1
  754. package/dist/probe/css.js +1 -1
  755. package/dist/probe/index.js +1 -1
  756. package/dist/provider.js +2 -2
  757. package/dist/providers/TrackingProvider.js +1 -1
  758. package/dist/providers/navigation-url.js +1 -1
  759. package/dist/providers/navigationAdapter.default.js +1 -1
  760. package/dist/providers/use-navigation.js +1 -1
  761. package/dist/tokens/all-tokens.js +1 -1
  762. package/dist/tokens/base.js +1 -1
  763. package/dist/tokens/color-seed.js +1 -1
  764. package/dist/tokens/color-theme.js +1 -1
  765. package/dist/tokens/colors.js +1 -1
  766. package/dist/tokens/layout.js +1 -1
  767. package/dist/tokens/lazy-styles.js +1 -1
  768. package/dist/tokens/legacy-color.js +1 -1
  769. package/dist/tokens/palette-config.js +1 -1
  770. package/dist/tokens/palette.js +23 -11
  771. package/dist/tokens/palette.js.map +1 -1
  772. package/dist/tokens/resolve.js +2 -2
  773. package/dist/tokens/shadows.js +1 -1
  774. package/dist/tokens/sizes.js +1 -1
  775. package/dist/tokens/spacing.js +1 -1
  776. package/dist/tokens/typography.js +1 -1
  777. package/dist/utils/ResizeSensor.js +1 -1
  778. package/dist/utils/colors.js +1 -1
  779. package/dist/utils/dotize.js +1 -1
  780. package/dist/utils/index.d.ts +1 -1
  781. package/dist/utils/is-dev-env.js +1 -1
  782. package/dist/utils/modules.js +1 -1
  783. package/dist/utils/promise.js +1 -1
  784. package/dist/utils/raf.js +1 -1
  785. package/dist/utils/random.js +1 -1
  786. package/dist/utils/range.js +1 -1
  787. package/dist/utils/react/RenderCache.js +1 -1
  788. package/dist/utils/react/Slots.js +1 -1
  789. package/dist/utils/react/chain.js +1 -1
  790. package/dist/utils/react/disabledProps.js +1 -1
  791. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  792. package/dist/utils/react/index.d.ts +3 -3
  793. package/dist/utils/react/index.js +13 -13
  794. package/dist/utils/react/interactions.js +1 -1
  795. package/dist/utils/react/isTextOnly.js +1 -1
  796. package/dist/utils/react/mapProps.js +1 -1
  797. package/dist/utils/react/mergeProps.js +1 -1
  798. package/dist/utils/react/nullableValue.js +1 -1
  799. package/dist/utils/react/overlayKeyPropagation.js +1 -1
  800. package/dist/utils/react/programmaticFocus.js +1 -1
  801. package/dist/utils/react/resolveIcon.js +1 -1
  802. package/dist/utils/react/sharedStore.js +1 -1
  803. package/dist/utils/react/useBufferedValue.js +1 -1
  804. package/dist/utils/react/useCombinedRefs.js +1 -1
  805. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  806. package/dist/utils/react/useEventBus.js +1 -1
  807. package/dist/utils/react/useId.js +1 -1
  808. package/dist/utils/react/useIsDarwin.js +1 -1
  809. package/dist/utils/react/useKeySymbols.js +1 -1
  810. package/dist/utils/react/useLayoutEffect.js +1 -1
  811. package/dist/utils/react/useLocalStorage.js +1 -1
  812. package/dist/utils/react/useMergeStyles.js +1 -1
  813. package/dist/utils/react/useOverlayEscapeGuard.js +1 -1
  814. package/dist/utils/react/useOverlayEscapeGuard.js.map +1 -1
  815. package/dist/utils/react/usePopoverSync.js +1 -1
  816. package/dist/utils/react/useQaProps.js +1 -1
  817. package/dist/utils/react/useScheme.js +1 -1
  818. package/dist/utils/react/useViewportSize.js +1 -1
  819. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  820. package/dist/utils/selection.js +1 -1
  821. package/dist/utils/styles.js +1 -1
  822. package/dist/utils/tree.js +1 -1
  823. package/dist/utils/warnings.js +1 -1
  824. package/dist/version.js +2 -2
  825. package/docs/components/actions/Button.md +10 -0
  826. package/docs/components/actions/ButtonSplit.md +1 -1
  827. package/docs/glaze/contrast.mdx +751 -0
  828. package/docs/glaze/exporting.mdx +635 -0
  829. package/docs/glaze/getting-started.mdx +487 -0
  830. package/docs/glaze/hdr.mdx +523 -0
  831. package/docs/glaze/methodology.mdx +979 -0
  832. package/docs/glaze/migration.md +476 -285
  833. package/docs/glaze/mixes.mdx +348 -0
  834. package/docs/glaze/okhst.mdx +692 -0
  835. package/docs/glaze/reference/color-definitions.md +552 -0
  836. package/docs/glaze/reference/color-tokens.md +421 -0
  837. package/docs/glaze/reference/configuration.md +532 -0
  838. package/docs/glaze/reference/contrast.md +279 -0
  839. package/docs/glaze/reference/index.md +225 -0
  840. package/docs/glaze/reference/output.md +714 -0
  841. package/docs/glaze/reference/palette.md +435 -0
  842. package/docs/glaze/reference/theme.md +332 -0
  843. package/docs/glaze/reference/utilities.md +646 -0
  844. package/docs/glaze/schemes.mdx +644 -0
  845. package/docs/glaze/shadows-and-glows.mdx +550 -0
  846. package/package.json +4 -4
  847. package/dist/components/actions/index.js +0 -29
  848. package/dist/components/actions/index.js.map +0 -1
  849. package/dist/components/fields/ListBoxPopover/ListBoxPopover.d.ts +0 -4
  850. package/dist/components/fields/ListBoxPopover/index.d.ts +0 -5
  851. package/dist/components/overlays/Modal/Modal.d.ts +0 -3
  852. package/dist/components/overlays/Modal/Popover.d.ts +0 -7
  853. package/dist/components/overlays/Modal/Tray.d.ts +0 -5
  854. package/dist/components/overlays/Modal/Underlay.d.ts +0 -3
  855. package/dist/components/overlays/Modal/index.d.ts +0 -8
  856. package/docs/glaze/api.md +0 -2021
  857. package/docs/glaze/methodology.md +0 -686
  858. package/docs/glaze/okhst.md +0 -207
@@ -1 +1 @@
1
- {"version":3,"file":"MenuTrigger.js","names":["PressResponder","useObjectRef","useIsMobileDevice","forwardRef","Fragment","MutableRefObject","ReactElement","Ref","RefObject","useEffect","useMemo","useRef","AriaMenuTriggerProps","DismissButton","FocusScope","Placement","PositionProps","useMenuTrigger","useOverlayPosition","MenuTriggerState","useMenuTriggerState","useEvent","generateRandomId","SlotProvider","usePopoverSync","Popover","Tray","isOwnActionsPress","MenuContext","MenuContextValue","CubeMenuTriggerProps","Omit","isDisabled","defaultOpen","onOpenChange","isOpen","targetRef","HTMLElement","children","state","closeOnSelect","isDummy","shouldRestoreFocus","popoverRef","HTMLDivElement","mobileType","MenuTrigger","props","ref","$","_c","internalPopoverRef","menuPopoverRef","trayRef","triggerRef","domRef","menuTriggerRef","menuRef","wasOpenRef","shouldFlip","t0","trigger","t1","t2","t3","undefined","t4","Symbol","for","menuId","Array","isArray","length","Error","menuTrigger","menu","t5","close","t6","t7","onClose","enabled","containerRef","t8","menuTriggerProps","menuProps","initialPlacement","placement","isMobileDevice","isTray","t9","t10","offset","t11","crossOffset","t12","containerPadding","overlayRef","scrollRef","overlayProps","positionProps","t13","activeElement","document","body","isConnected","overlay","current","contains","hasFocusMovedOutsideMenu","t14","t15","setTimeout","focus","t16","focusStrategy","t17","t18","popover","tray","t19","t20","autoFocus","mods","isClosing","menuContext","t21","t22","t23","contents","t24","el","menuTriggerEl","closest","shouldCloseOnInteractOutside","t25","t26","style","actionButton","holdAffordance","t27","t28","t29","overlay_0","t30","_MenuTrigger","displayName","_c","Tray","Popover"],"sources":["../../../../src/components/actions/Menu/MenuTrigger.tsx"],"sourcesContent":["import { PressResponder } from '@react-aria/interactions';\nimport { useObjectRef } from '@react-aria/utils';\nimport { useIsMobileDevice } from '@react-spectrum/utils';\nimport {\n forwardRef,\n Fragment,\n MutableRefObject,\n ReactElement,\n Ref,\n RefObject,\n useEffect,\n useMemo,\n useRef,\n} from 'react';\nimport {\n AriaMenuTriggerProps,\n DismissButton,\n FocusScope,\n Placement,\n PositionProps,\n useMenuTrigger,\n useOverlayPosition,\n} from 'react-aria';\nimport { MenuTriggerState, useMenuTriggerState } from 'react-stately';\n\nimport { useEvent } from '../../../_internal';\nimport { generateRandomId } from '../../../utils/random';\nimport { SlotProvider } from '../../../utils/react';\nimport { usePopoverSync } from '../../../utils/react/usePopoverSync';\nimport { Popover, Tray } from '../../overlays/Modal';\nimport { isOwnActionsPress } from '../actions-run';\n\nimport { MenuContext, MenuContextValue } from './context';\n\nexport type { AriaMenuTriggerProps };\n\nexport type CubeMenuTriggerProps = Omit<AriaMenuTriggerProps, 'children'> &\n PositionProps & {\n isDisabled?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (isOpen: boolean) => void;\n targetRef?: RefObject<HTMLElement | null>;\n children: [\n ReactElement | ((state: MenuTriggerState) => ReactElement),\n ReactElement,\n ];\n\n closeOnSelect?: boolean;\n isDummy?: boolean;\n /**\n * Whether focus returns to the trigger when the menu closes. Defaults to\n * `true`.\n *\n * The restore is skipped automatically whenever the action that closed the\n * menu has already moved focus somewhere else, so an item that opens a\n * panel/dialog/inline editor and focuses it needs nothing here. Pass\n * `false` for the remaining case: a surface that claims focus *later* than\n * the menu's own restore (after an async load, an entry animation, or a\n * `requestAnimationFrame`), where the trigger would otherwise take focus\n * first and produce a visible flash.\n */\n shouldRestoreFocus?: boolean;\n /**\n * External ref to the popover container element. When provided, it is\n * aliased to the internal `menuPopoverRef`, letting consumers (e.g.\n * `useAnchoredMenu` / `useContextMenu`) feed the popover container into\n * their own `usePopoverSync` so the nested-popover guard can recognize\n * submenus opened inside this menu. Optional.\n */\n popoverRef?: MutableRefObject<HTMLDivElement | null>;\n /**\n * Overlay variant to use on mobile screens. Defaults to `'popover'`, which\n * keeps the desktop overlay even on small viewports. Pass `'tray'` to opt\n * into the bottom-sheet `Tray` overlay on mobile (the previous implicit\n * default). Mirrors the `mobileType` API on `DialogTrigger`.\n */\n mobileType?: 'popover' | 'tray';\n };\n\nfunction MenuTrigger(props: CubeMenuTriggerProps, ref: Ref<HTMLElement>) {\n const internalPopoverRef = useRef<HTMLDivElement>(null);\n const menuPopoverRef = props.popoverRef ?? internalPopoverRef;\n const trayRef = useRef<HTMLElement>(null);\n const triggerRef = useRef<HTMLElement>(null);\n const domRef = useObjectRef(ref);\n const menuTriggerRef = props.targetRef || domRef || triggerRef;\n const menuRef = useRef<HTMLUListElement>(null);\n const wasOpenRef = useRef(false);\n const {\n children,\n shouldFlip = true,\n closeOnSelect,\n trigger = 'press',\n isDisabled,\n isDummy,\n mobileType = 'popover',\n shouldRestoreFocus = true,\n } = props;\n\n // Generate a unique ID for this menu instance\n const menuId = useMemo(() => generateRandomId(), []);\n\n if (!Array.isArray(children) || children.length > 2) {\n throw new Error('MenuTrigger must have exactly 2 children');\n }\n\n let [menuTrigger, menu] = children;\n const state: MenuTriggerState = useMenuTriggerState(props);\n\n usePopoverSync({\n menuId,\n isOpen: state.isOpen,\n onClose: () => state.close(),\n enabled: !isDummy,\n triggerRef: menuTriggerRef,\n containerRef: menuPopoverRef,\n });\n\n if (typeof menuTrigger === 'function') {\n menuTrigger = menuTrigger(state);\n }\n\n const { menuTriggerProps, menuProps } = useMenuTrigger(\n { isDisabled },\n state,\n menuTriggerRef,\n );\n\n let initialPlacement: Placement = props.placement ?? 'bottom start';\n\n // Tray rendering is now opt-in via `mobileType=\"tray\"` (matches DialogTrigger).\n // Without that opt-in, MenuTrigger always renders a Popover so that environments\n // like jsdom (where `window.screen.width === 0` makes useIsMobileDevice() true)\n // don't accidentally swap in the tray overlay.\n const isMobileDevice = useIsMobileDevice();\n const isTray = mobileType === 'tray' && isMobileDevice;\n const { overlayProps: positionProps, placement } = useOverlayPosition({\n targetRef: menuTriggerRef,\n overlayRef: menuPopoverRef,\n scrollRef: menuRef,\n placement: initialPlacement,\n shouldFlip: shouldFlip,\n isOpen: state.isOpen && !isTray,\n onClose: state.close,\n containerPadding: props.containerPadding,\n offset: props.offset ?? 8,\n crossOffset: props.crossOffset ?? 0,\n });\n\n // Whether focus has been claimed by something outside the closing menu —\n // the signal that a menu action handed focus off and the trigger must not\n // take it back.\n //\n // Focus still inside the menu overlay means nobody claimed it: the pressed\n // item keeps focus while the popover plays its ~350ms exit animation. Focus\n // on `<body>` (or on a detached element) means the focused node went away\n // with the menu. Both are cases where the trigger is where focus belongs.\n const hasFocusMovedOutsideMenu = useEvent(() => {\n const activeElement = document.activeElement;\n\n if (!activeElement || activeElement === document.body) return false;\n if (!activeElement.isConnected) return false;\n\n // `menuPopoverRef` is only wired to the `Popover` branch, so the overlay\n // container is `trayRef` when `mobileType=\"tray\"` is in effect.\n const overlay = isTray ? trayRef.current : menuPopoverRef.current;\n\n return !(\n overlay?.contains(activeElement) ||\n menuRef.current?.contains(activeElement) ||\n menuTriggerRef.current?.contains(activeElement)\n );\n });\n\n // Restore focus manually when the menu closes\n useEffect(() => {\n if (!state.isOpen && wasOpenRef.current && !isDummy) {\n wasOpenRef.current = false;\n\n if (!shouldRestoreFocus) return;\n\n // Use setTimeout to ensure focus restoration happens after any animations\n setTimeout(() => {\n // An action that opened a panel, a dialog or an inline editor has\n // already focused it by now — taking focus back to the trigger would\n // undo the hand-off, which consumers previously had to out-race by\n // re-focusing on every animation frame (CUB-3962).\n if (hasFocusMovedOutsideMenu()) return;\n\n menuTriggerRef.current?.focus();\n }, 0);\n } else if (state.isOpen) {\n wasOpenRef.current = true;\n }\n }, [\n state.isOpen,\n menuTriggerRef,\n isDummy,\n shouldRestoreFocus,\n hasFocusMovedOutsideMenu,\n ]);\n\n const menuContext = {\n ...menuProps,\n ref: menuRef,\n onClose: state.close,\n closeOnSelect,\n autoFocus: (state.focusStrategy as any) ?? 'first',\n mods: {\n popover: !isTray,\n tray: isTray,\n },\n isClosing: !state.isOpen,\n } as MenuContextValue;\n\n // Wrap in a FocusScope so the menu popover registers as a child of any\n // outer contained FocusScope (e.g. a parent Dialog/Popover). Without this,\n // when the menu opens inside an outer contained FocusScope, the outer\n // scope rejects focus moving into the menu items (which live in a portal\n // and would otherwise belong to no scope) and yanks focus back to the\n // menu trigger.\n //\n // `restoreFocus` follows `shouldRestoreFocus`, so opting out silences the\n // scope's own unmount restore too. Scope registration (and therefore the\n // guarantee above) is unaffected — `FocusScope` joins the tree and tracks\n // the active scope regardless of `restoreFocus`.\n const contents = (\n <FocusScope restoreFocus={shouldRestoreFocus}>\n <DismissButton onDismiss={state.close} />\n {menu}\n <DismissButton onDismiss={state.close} />\n </FocusScope>\n );\n\n // Shared between the Popover and Tray branches so both react-aria\n // `useOverlay` calls see the same predicate. Without this, the Tray branch\n // falls back to unconditional dismiss-on-outside-interaction, which\n // `useOverlay` translates into stopPropagation/preventDefault in the\n // capture phase — that swallows clicks on sibling triggers (see Menu\n // rapid-open test).\n //\n // `useEvent` gives us a single stable callback reference for the lifetime\n // of the component while always reading the latest closure values. This\n // matters because `useMenuTriggerState` returns a fresh `state` object on\n // every render, so a vanilla `useCallback([..., state])` would produce a\n // new function every render and defeat any stability guarantees consumers\n // rely on.\n const shouldCloseOnInteractOutside = useEvent((el: Element) => {\n // While `Popover` is animating out, `useInteractOutside`'s capture-phase\n // listener is still attached (jsdom 29+ uses pointerdown/click capture).\n // The animation lasts ~350ms; without this guard, clicks on a sibling\n // trigger during the exit window get stopPropagation()'d and the\n // sibling's `onClick` never runs — breaking rapid-open and \"open menu\n // again with new props\" flows. Reading `state.isOpen` directly is safe\n // because `useEvent` always sees the latest closure.\n if (!state.isOpen) return false;\n\n // A press on our OWN trigger's actions run — an `ItemButton` row's\n // `actions` — is not a press outside. The run is rendered as a sibling of\n // the trigger (see `ItemActionsWrapper`), so the checks below cannot\n // recognise it and we closed instead, which cost the action its press: the\n // first press on it while the menu was open only closed the menu.\n if (isOwnActionsPress(el, menuTriggerRef.current)) return false;\n\n const menuTriggerEl = el.closest('[data-popover-trigger]');\n if (!menuTriggerEl) {\n if (el.closest('[data-popover-keep]')) return false;\n // Plain interactive controls (Button, ItemButton) opt in via\n // `data-popover-dismiss`. We schedule the close via setTimeout(0) so\n // it lands AFTER the click event finishes — the button's onPress\n // fires first, then the popover closes. Without this, useOverlay\n // would stopPropagation() the click and the user would need a second\n // click to actually press the button.\n if (el.closest('[data-popover-dismiss]')) {\n setTimeout(() => state.close(), 0);\n return false;\n }\n return true;\n }\n if (\n isDummy &&\n (menuTriggerEl === menuTriggerRef.current ||\n menuTriggerRef.current?.contains(el))\n ) {\n return true;\n }\n if (menuTriggerEl === menuTriggerRef.current) return true;\n return false;\n });\n\n let overlay;\n if (isTray) {\n overlay = (\n <Tray\n ref={trayRef}\n isOpen={state.isOpen}\n shouldCloseOnInteractOutside={shouldCloseOnInteractOutside}\n onClose={state.close}\n >\n {contents}\n </Tray>\n );\n } else {\n overlay = (\n <Popover\n ref={menuPopoverRef}\n hideArrow\n isNonModal\n isOpen={state.isOpen}\n // oxlint-disable-next-line tasty/no-style-prop -- React Aria's overlay positioning computes these coordinates\n style={positionProps.style}\n placement={placement ?? undefined}\n shouldCloseOnInteractOutside={shouldCloseOnInteractOutside}\n onClose={state.close}\n >\n {contents}\n </Popover>\n );\n }\n\n return (\n <Fragment>\n <SlotProvider\n slots={{ actionButton: { holdAffordance: trigger === 'longPress' } }}\n >\n {!isDummy ? (\n <PressResponder\n {...menuTriggerProps}\n ref={menuTriggerRef}\n data-popover-trigger\n isPressed={state.isOpen}\n >\n {menuTrigger}\n </PressResponder>\n ) : null}\n </SlotProvider>\n <MenuContext.Provider value={menuContext}>{overlay}</MenuContext.Provider>\n </Fragment>\n );\n}\n\n/**\n * The MenuTrigger serves as a wrapper around a Menu and its associated trigger,\n * linking the Menu's open state with the trigger's press state.\n */\nlet _MenuTrigger = forwardRef(MenuTrigger);\n\n_MenuTrigger.displayName = 'MenuTrigger';\n\nexport { _MenuTrigger as MenuTrigger };\n"],"mappings":"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"}
1
+ {"version":3,"file":"MenuTrigger.js","names":["PressResponder","useObjectRef","useIsMobileDevice","forwardRef","Fragment","MutableRefObject","ReactElement","Ref","RefObject","useEffect","useMemo","useRef","AriaMenuTriggerProps","DismissButton","FocusScope","Placement","PositionProps","useMenuTrigger","useOverlayPosition","MenuTriggerState","useMenuTriggerState","useEvent","generateRandomId","SlotProvider","usePopoverSync","Popover","Tray","isOwnActionsPress","MenuContext","MenuContextValue","CubeMenuTriggerProps","Omit","isDisabled","defaultOpen","onOpenChange","isOpen","targetRef","HTMLElement","children","state","closeOnSelect","isDummy","shouldRestoreFocus","popoverRef","HTMLDivElement","mobileType","MenuTrigger","props","ref","$","_c","internalPopoverRef","menuPopoverRef","trayRef","triggerRef","domRef","menuTriggerRef","menuRef","wasOpenRef","shouldFlip","t0","trigger","t1","t2","t3","undefined","t4","Symbol","for","menuId","Array","isArray","length","Error","menuTrigger","menu","t5","close","t6","t7","onClose","enabled","containerRef","t8","menuTriggerProps","menuProps","initialPlacement","placement","isMobileDevice","isTray","t9","t10","offset","t11","crossOffset","t12","containerPadding","overlayRef","scrollRef","overlayProps","positionProps","t13","activeElement","document","body","isConnected","overlay","current","contains","hasFocusMovedOutsideMenu","t14","t15","setTimeout","focus","t16","focusStrategy","t17","t18","popover","tray","t19","t20","autoFocus","mods","isClosing","menuContext","t21","t22","t23","contents","t24","el","menuTriggerEl","closest","shouldCloseOnInteractOutside","t25","t26","style","actionButton","holdAffordance","t27","t28","t29","overlay_0","t30","_MenuTrigger","displayName","_c","Tray","Popover"],"sources":["../../../../src/components/actions/Menu/MenuTrigger.tsx"],"sourcesContent":["import { PressResponder } from '@react-aria/interactions';\nimport { useObjectRef } from '@react-aria/utils';\nimport { useIsMobileDevice } from '@react-spectrum/utils';\nimport {\n forwardRef,\n Fragment,\n MutableRefObject,\n ReactElement,\n Ref,\n RefObject,\n useEffect,\n useMemo,\n useRef,\n} from 'react';\nimport {\n AriaMenuTriggerProps,\n DismissButton,\n FocusScope,\n Placement,\n PositionProps,\n useMenuTrigger,\n useOverlayPosition,\n} from 'react-aria';\nimport { MenuTriggerState, useMenuTriggerState } from 'react-stately';\n\nimport { useEvent } from '../../../_internal/hooks/use-event';\nimport { generateRandomId } from '../../../utils/random';\nimport { SlotProvider } from '../../../utils/react/Slots';\nimport { usePopoverSync } from '../../../utils/react/usePopoverSync';\nimport { Popover } from '../../overlays/Modal/Popover';\nimport { Tray } from '../../overlays/Modal/Tray';\nimport { isOwnActionsPress } from '../actions-run';\n\nimport { MenuContext, MenuContextValue } from './context';\n\nexport type { AriaMenuTriggerProps };\n\nexport type CubeMenuTriggerProps = Omit<AriaMenuTriggerProps, 'children'> &\n PositionProps & {\n isDisabled?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (isOpen: boolean) => void;\n targetRef?: RefObject<HTMLElement | null>;\n children: [\n ReactElement | ((state: MenuTriggerState) => ReactElement),\n ReactElement,\n ];\n\n closeOnSelect?: boolean;\n isDummy?: boolean;\n /**\n * Whether focus returns to the trigger when the menu closes. Defaults to\n * `true`.\n *\n * The restore is skipped automatically whenever the action that closed the\n * menu has already moved focus somewhere else, so an item that opens a\n * panel/dialog/inline editor and focuses it needs nothing here. Pass\n * `false` for the remaining case: a surface that claims focus *later* than\n * the menu's own restore (after an async load, an entry animation, or a\n * `requestAnimationFrame`), where the trigger would otherwise take focus\n * first and produce a visible flash.\n */\n shouldRestoreFocus?: boolean;\n /**\n * External ref to the popover container element. When provided, it is\n * aliased to the internal `menuPopoverRef`, letting consumers (e.g.\n * `useAnchoredMenu` / `useContextMenu`) feed the popover container into\n * their own `usePopoverSync` so the nested-popover guard can recognize\n * submenus opened inside this menu. Optional.\n */\n popoverRef?: MutableRefObject<HTMLDivElement | null>;\n /**\n * Overlay variant to use on mobile screens. Defaults to `'popover'`, which\n * keeps the desktop overlay even on small viewports. Pass `'tray'` to opt\n * into the bottom-sheet `Tray` overlay on mobile (the previous implicit\n * default). Mirrors the `mobileType` API on `DialogTrigger`.\n */\n mobileType?: 'popover' | 'tray';\n };\n\nfunction MenuTrigger(props: CubeMenuTriggerProps, ref: Ref<HTMLElement>) {\n const internalPopoverRef = useRef<HTMLDivElement>(null);\n const menuPopoverRef = props.popoverRef ?? internalPopoverRef;\n const trayRef = useRef<HTMLElement>(null);\n const triggerRef = useRef<HTMLElement>(null);\n const domRef = useObjectRef(ref);\n const menuTriggerRef = props.targetRef || domRef || triggerRef;\n const menuRef = useRef<HTMLUListElement>(null);\n const wasOpenRef = useRef(false);\n const {\n children,\n shouldFlip = true,\n closeOnSelect,\n trigger = 'press',\n isDisabled,\n isDummy,\n mobileType = 'popover',\n shouldRestoreFocus = true,\n } = props;\n\n // Generate a unique ID for this menu instance\n const menuId = useMemo(() => generateRandomId(), []);\n\n if (!Array.isArray(children) || children.length > 2) {\n throw new Error('MenuTrigger must have exactly 2 children');\n }\n\n let [menuTrigger, menu] = children;\n const state: MenuTriggerState = useMenuTriggerState(props);\n\n usePopoverSync({\n menuId,\n isOpen: state.isOpen,\n onClose: () => state.close(),\n enabled: !isDummy,\n triggerRef: menuTriggerRef,\n containerRef: menuPopoverRef,\n });\n\n if (typeof menuTrigger === 'function') {\n menuTrigger = menuTrigger(state);\n }\n\n const { menuTriggerProps, menuProps } = useMenuTrigger(\n { isDisabled },\n state,\n menuTriggerRef,\n );\n\n let initialPlacement: Placement = props.placement ?? 'bottom start';\n\n // Tray rendering is now opt-in via `mobileType=\"tray\"` (matches DialogTrigger).\n // Without that opt-in, MenuTrigger always renders a Popover so that environments\n // like jsdom (where `window.screen.width === 0` makes useIsMobileDevice() true)\n // don't accidentally swap in the tray overlay.\n const isMobileDevice = useIsMobileDevice();\n const isTray = mobileType === 'tray' && isMobileDevice;\n const { overlayProps: positionProps, placement } = useOverlayPosition({\n targetRef: menuTriggerRef,\n overlayRef: menuPopoverRef,\n scrollRef: menuRef,\n placement: initialPlacement,\n shouldFlip: shouldFlip,\n isOpen: state.isOpen && !isTray,\n onClose: state.close,\n containerPadding: props.containerPadding,\n offset: props.offset ?? 8,\n crossOffset: props.crossOffset ?? 0,\n });\n\n // Whether focus has been claimed by something outside the closing menu —\n // the signal that a menu action handed focus off and the trigger must not\n // take it back.\n //\n // Focus still inside the menu overlay means nobody claimed it: the pressed\n // item keeps focus while the popover plays its ~350ms exit animation. Focus\n // on `<body>` (or on a detached element) means the focused node went away\n // with the menu. Both are cases where the trigger is where focus belongs.\n const hasFocusMovedOutsideMenu = useEvent(() => {\n const activeElement = document.activeElement;\n\n if (!activeElement || activeElement === document.body) return false;\n if (!activeElement.isConnected) return false;\n\n // `menuPopoverRef` is only wired to the `Popover` branch, so the overlay\n // container is `trayRef` when `mobileType=\"tray\"` is in effect.\n const overlay = isTray ? trayRef.current : menuPopoverRef.current;\n\n return !(\n overlay?.contains(activeElement) ||\n menuRef.current?.contains(activeElement) ||\n menuTriggerRef.current?.contains(activeElement)\n );\n });\n\n // Restore focus manually when the menu closes\n useEffect(() => {\n if (!state.isOpen && wasOpenRef.current && !isDummy) {\n wasOpenRef.current = false;\n\n if (!shouldRestoreFocus) return;\n\n // Use setTimeout to ensure focus restoration happens after any animations\n setTimeout(() => {\n // An action that opened a panel, a dialog or an inline editor has\n // already focused it by now — taking focus back to the trigger would\n // undo the hand-off, which consumers previously had to out-race by\n // re-focusing on every animation frame (CUB-3962).\n if (hasFocusMovedOutsideMenu()) return;\n\n menuTriggerRef.current?.focus();\n }, 0);\n } else if (state.isOpen) {\n wasOpenRef.current = true;\n }\n }, [\n state.isOpen,\n menuTriggerRef,\n isDummy,\n shouldRestoreFocus,\n hasFocusMovedOutsideMenu,\n ]);\n\n const menuContext = {\n ...menuProps,\n ref: menuRef,\n onClose: state.close,\n closeOnSelect,\n autoFocus: (state.focusStrategy as any) ?? 'first',\n mods: {\n popover: !isTray,\n tray: isTray,\n },\n isClosing: !state.isOpen,\n } as MenuContextValue;\n\n // Wrap in a FocusScope so the menu popover registers as a child of any\n // outer contained FocusScope (e.g. a parent Dialog/Popover). Without this,\n // when the menu opens inside an outer contained FocusScope, the outer\n // scope rejects focus moving into the menu items (which live in a portal\n // and would otherwise belong to no scope) and yanks focus back to the\n // menu trigger.\n //\n // `restoreFocus` follows `shouldRestoreFocus`, so opting out silences the\n // scope's own unmount restore too. Scope registration (and therefore the\n // guarantee above) is unaffected — `FocusScope` joins the tree and tracks\n // the active scope regardless of `restoreFocus`.\n const contents = (\n <FocusScope restoreFocus={shouldRestoreFocus}>\n <DismissButton onDismiss={state.close} />\n {menu}\n <DismissButton onDismiss={state.close} />\n </FocusScope>\n );\n\n // Shared between the Popover and Tray branches so both react-aria\n // `useOverlay` calls see the same predicate. Without this, the Tray branch\n // falls back to unconditional dismiss-on-outside-interaction, which\n // `useOverlay` translates into stopPropagation/preventDefault in the\n // capture phase — that swallows clicks on sibling triggers (see Menu\n // rapid-open test).\n //\n // `useEvent` gives us a single stable callback reference for the lifetime\n // of the component while always reading the latest closure values. This\n // matters because `useMenuTriggerState` returns a fresh `state` object on\n // every render, so a vanilla `useCallback([..., state])` would produce a\n // new function every render and defeat any stability guarantees consumers\n // rely on.\n const shouldCloseOnInteractOutside = useEvent((el: Element) => {\n // While `Popover` is animating out, `useInteractOutside`'s capture-phase\n // listener is still attached (jsdom 29+ uses pointerdown/click capture).\n // The animation lasts ~350ms; without this guard, clicks on a sibling\n // trigger during the exit window get stopPropagation()'d and the\n // sibling's `onClick` never runs — breaking rapid-open and \"open menu\n // again with new props\" flows. Reading `state.isOpen` directly is safe\n // because `useEvent` always sees the latest closure.\n if (!state.isOpen) return false;\n\n // A press on our OWN trigger's actions run — an `ItemButton` row's\n // `actions` — is not a press outside. The run is rendered as a sibling of\n // the trigger (see `ItemActionsWrapper`), so the checks below cannot\n // recognise it and we closed instead, which cost the action its press: the\n // first press on it while the menu was open only closed the menu.\n if (isOwnActionsPress(el, menuTriggerRef.current)) return false;\n\n const menuTriggerEl = el.closest('[data-popover-trigger]');\n if (!menuTriggerEl) {\n if (el.closest('[data-popover-keep]')) return false;\n // Plain interactive controls (Button, ItemButton) opt in via\n // `data-popover-dismiss`. We schedule the close via setTimeout(0) so\n // it lands AFTER the click event finishes — the button's onPress\n // fires first, then the popover closes. Without this, useOverlay\n // would stopPropagation() the click and the user would need a second\n // click to actually press the button.\n if (el.closest('[data-popover-dismiss]')) {\n setTimeout(() => state.close(), 0);\n return false;\n }\n return true;\n }\n if (\n isDummy &&\n (menuTriggerEl === menuTriggerRef.current ||\n menuTriggerRef.current?.contains(el))\n ) {\n return true;\n }\n if (menuTriggerEl === menuTriggerRef.current) return true;\n return false;\n });\n\n let overlay;\n if (isTray) {\n overlay = (\n <Tray\n ref={trayRef}\n isOpen={state.isOpen}\n shouldCloseOnInteractOutside={shouldCloseOnInteractOutside}\n onClose={state.close}\n >\n {contents}\n </Tray>\n );\n } else {\n overlay = (\n <Popover\n ref={menuPopoverRef}\n hideArrow\n isNonModal\n isOpen={state.isOpen}\n // oxlint-disable-next-line tasty/no-style-prop -- React Aria's overlay positioning computes these coordinates\n style={positionProps.style}\n placement={placement ?? undefined}\n shouldCloseOnInteractOutside={shouldCloseOnInteractOutside}\n onClose={state.close}\n >\n {contents}\n </Popover>\n );\n }\n\n return (\n <Fragment>\n <SlotProvider\n slots={{ actionButton: { holdAffordance: trigger === 'longPress' } }}\n >\n {!isDummy ? (\n <PressResponder\n {...menuTriggerProps}\n ref={menuTriggerRef}\n data-popover-trigger\n isPressed={state.isOpen}\n >\n {menuTrigger}\n </PressResponder>\n ) : null}\n </SlotProvider>\n <MenuContext.Provider value={menuContext}>{overlay}</MenuContext.Provider>\n </Fragment>\n );\n}\n\n/**\n * The MenuTrigger serves as a wrapper around a Menu and its associated trigger,\n * linking the Menu's open state with the trigger's press state.\n */\nlet _MenuTrigger = forwardRef(MenuTrigger);\n\n_MenuTrigger.displayName = 'MenuTrigger';\n\nexport { _MenuTrigger as MenuTrigger };\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.206.3 | Cube Dev Team */
2
- import { usePopoverSync } from "../../../utils/react/usePopoverSync.js";
1
+ /** @license MIT | @cube-dev/ui-kit v0.208.0 | Cube Dev Team */
3
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
+ import { usePopoverSync } from "../../../utils/react/usePopoverSync.js";
4
4
  import { MenuContext, useMenuContext } from "./context.js";
5
5
  import { SubmenuTriggerContext } from "./SubmenuTriggerContext.js";
6
6
  import { generateRandomId } from "../../../utils/random.js";
@@ -1 +1 @@
1
- {"version":3,"file":"SubMenuTrigger.js","names":["useSyncRef","tasty","React","Key","ReactElement","ReactNode","useEffect","useMemo","useRef","useState","AriaMenuTriggerProps","DismissButton","Placement","useMenuTrigger","useOverlayPosition","useMenuTriggerState","useEvent","generateRandomId","usePopoverSync","Popover","MenuContext","MenuContextValue","useMenuContext","SubmenuTriggerContext","DEFAULT_PLACEMENT","DEFAULT_OFFSET","DEFAULT_CROSS_OFFSET","PointerAreaElement","styles","display","CubeSubMenuTriggerProps","placement","offset","crossOffset","shouldFlip","containerPadding","children","isDisabled","onAction","key","autoFocus","InternalSubMenuTriggerProps","targetKey","InternalSubMenuTrigger","props","overlayProps","menuTrigger","menu","Children","toArray","state","submenuId","domTriggerRef","HTMLElement","popoverRef","HTMLDivElement","menuRef","HTMLUListElement","menuId","isOpen","onClose","close","triggerRef","containerRef","menuTriggerProps","rawTriggerProps","menuProps","type","parentContext","onKeyDown","_mtOnKeyDown","onPress","_mtOnPress","onPressStart","_mtOnPressStart","onKeyUp","_mtOnKeyUp","positionProps","resolvedPlacement","targetRef","overlayRef","scrollRef","nestedMenuContext","ctx","ref","closeOnSelect","mods","popover","isClosing","hoverOpenTimerRef","current","clearTimeout","hoverCloseTimerRef","isHoveringRef","isHoveringSubmenuRef","handleKeyDown","e","KeyboardEvent","preventDefault","stopPropagation","open","nativeEvent","stopImmediatePropagation","ReturnType","setTimeout","checkShouldClose","handleMouseEnter","handleMouseLeave","handlePopoverMouseEnter","handlePopoverMouseLeave","mergeHandler","handler1","handler2","args","shouldCloseOnInteractOutside","el","Element","menuTriggerEl","closest","triggerContextValue","triggerProps","onMouseEnter","onMouseLeave","undefined","style","cloneElement","querySelector","focus","SubMenuTrigger","getCollectionNode","trigger","element","wrapper","displayName","Popover"],"sources":["../../../../src/components/actions/Menu/SubMenuTrigger.tsx"],"sourcesContent":["import { useSyncRef } from '@react-aria/utils';\nimport { tasty } from '@tenphi/tasty';\nimport React, {\n Key,\n ReactElement,\n ReactNode,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n AriaMenuTriggerProps,\n DismissButton,\n Placement,\n useMenuTrigger,\n useOverlayPosition,\n} from 'react-aria';\nimport { useMenuTriggerState } from 'react-stately';\n\nimport { useEvent } from '../../../_internal';\nimport { generateRandomId } from '../../../utils/random';\nimport { usePopoverSync } from '../../../utils/react/usePopoverSync';\nimport { Popover } from '../../overlays/Modal';\n\nimport { MenuContext, MenuContextValue, useMenuContext } from './context';\nimport { SubmenuTriggerContext } from './SubmenuTriggerContext';\n\n// Default placement & offset for sub-menus (matches Spectrum / Aria)\nconst DEFAULT_PLACEMENT: Placement = 'right top';\nconst DEFAULT_OFFSET = 4;\nconst DEFAULT_CROSS_OFFSET = -5;\n\n// Takes no box of its own: it only listens for the pointer entering and\n// leaving the sub-menu.\nconst PointerAreaElement = tasty({ styles: { display: 'contents' } });\n\nexport interface CubeSubMenuTriggerProps extends AriaMenuTriggerProps {\n /** The preferred placement of the sub-menu relative to the trigger */\n placement?: Placement;\n\n /** Distance in pixels between the trigger and sub-menu */\n offset?: number;\n\n /** Distance in pixels along the cross axis from the default alignment */\n crossOffset?: number;\n\n /** Whether the sub-menu should flip to the opposite side when it would overflow */\n shouldFlip?: boolean;\n\n /** Minimum padding in pixels between the sub-menu and viewport edges */\n containerPadding?: number;\n\n /**\n * Sub-menu trigger and the sub-menu itself. Must be exactly two React nodes.\n *\n * 1) Trigger – a `Menu.Item` with its semantic menuitem inside a list row.\n * 2) Sub-menu – a `<Menu>` element.\n */\n children: [ReactNode, ReactElement];\n\n /** Whether the trigger is disabled and cannot be activated */\n isDisabled?: boolean;\n\n /**\n * Callback fired when an action is selected from the sub-menu.\n * Bubbles the `onAction` event from the sub-menu to parent components.\n */\n onAction?: (key: Key) => void;\n\n /**\n * Controls focus behavior when the sub-menu opens.\n * - `true` or `'first'`: Focus the first item\n * - `'last'`: Focus the last item\n * - `false`: Don't auto-focus any item\n * @default 'first'\n */\n autoFocus?: boolean | 'first' | 'last';\n}\n\ninterface InternalSubMenuTriggerProps extends CubeSubMenuTriggerProps {\n targetKey?: Key;\n}\n\n/**\n * Internal SubMenuTrigger that receives the already-rendered trigger element\n * from the collection system and wraps it with submenu behavior.\n */\nfunction InternalSubMenuTrigger(props: InternalSubMenuTriggerProps) {\n const {\n children,\n placement = DEFAULT_PLACEMENT,\n offset = DEFAULT_OFFSET,\n crossOffset = DEFAULT_CROSS_OFFSET,\n shouldFlip = true,\n isDisabled,\n autoFocus = 'first',\n onAction,\n targetKey,\n ...overlayProps\n } = props;\n\n // Children: [menuTrigger (already rendered MenuItem), menu (Menu component)]\n const [menuTrigger, menu] = React.Children.toArray(children) as [\n ReactElement,\n ReactElement,\n ];\n\n const state = useMenuTriggerState(props as AriaMenuTriggerProps);\n\n // Generate a unique ID for this submenu instance\n const submenuId = useMemo(() => generateRandomId(), []);\n\n // Refs – trigger (MenuItem <li>) and overlay (<div> from Popover)\n const domTriggerRef = useRef<HTMLElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLUListElement>(null);\n\n usePopoverSync({\n menuId: submenuId,\n isOpen: state.isOpen,\n onClose: () => state.close(),\n triggerRef: domTriggerRef,\n containerRef: popoverRef,\n });\n\n // Strip keyboard/press handlers that we will implement ourselves\n const { menuTriggerProps: rawTriggerProps, menuProps } = useMenuTrigger(\n { type: 'menu', isDisabled },\n state,\n domTriggerRef,\n );\n\n // Get parent context to check if parent menu is closing\n const parentContext = useMenuContext();\n\n // Remove default onKeyDown/onPress handlers from trigger props – we implement custom ones\n const {\n onKeyDown: _mtOnKeyDown,\n onPress: _mtOnPress,\n onPressStart: _mtOnPressStart,\n onKeyUp: _mtOnKeyUp,\n ...menuTriggerProps\n } = rawTriggerProps;\n\n const { overlayProps: positionProps, placement: resolvedPlacement } =\n useOverlayPosition({\n targetRef: domTriggerRef,\n overlayRef: popoverRef,\n scrollRef: menuRef,\n placement,\n offset: offset as number,\n crossOffset: crossOffset as number,\n shouldFlip,\n isOpen: state.isOpen,\n onClose: state.close,\n });\n\n /**\n * Build a MenuContext for the nested menu so it behaves just like a regular\n * popover-based Menu (selection handling, focus management, etc.).\n */\n const nestedMenuContext = useMemo(() => {\n const ctx: MenuContextValue = {\n ...menuProps,\n ref: menuRef,\n // Pass the parent's onClose to close the entire menu hierarchy\n onClose: () => {\n // Close this submenu state immediately\n state.close();\n\n // Then close the parent menu\n if (parentContext.onClose) {\n parentContext.onClose();\n }\n },\n closeOnSelect: true,\n autoFocus,\n mods: {\n popover: true,\n },\n // Propagate closing state from parent\n isClosing: parentContext.isClosing || !state.isOpen,\n };\n\n return ctx;\n }, [\n menuProps,\n autoFocus,\n state,\n parentContext.onClose,\n parentContext.isClosing,\n ]);\n\n // Sync the parent selection manager focus with DOM ref (for virtual focus scenarios)\n useSyncRef(parentContext, domTriggerRef);\n\n // Cleanup hover timers and reset refs on unmount\n useEffect(() => {\n return () => {\n if (hoverOpenTimerRef.current) {\n clearTimeout(hoverOpenTimerRef.current);\n }\n if (hoverCloseTimerRef.current) {\n clearTimeout(hoverCloseTimerRef.current);\n }\n isHoveringRef.current = false;\n isHoveringSubmenuRef.current = false;\n };\n }, []);\n\n // ----- Render -----\n\n // Handle keyboard navigation\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (isDisabled) return;\n\n // Arrow right opens submenu\n if (e.key === 'ArrowRight') {\n e.preventDefault();\n e.stopPropagation();\n state.open();\n }\n // Enter or Space opens submenu. Preventing the default keeps `MenuItem`\n // from passing the key on to React Aria's item handler, which would click\n // the item and run its action as well.\n else if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n // Stop immediate propagation to prevent React Aria's handlers from running\n e.nativeEvent.stopImmediatePropagation();\n state.open();\n }\n // Arrow left closes submenu if open\n else if (e.key === 'ArrowLeft' && state.isOpen) {\n e.preventDefault();\n e.stopPropagation();\n state.close();\n }\n };\n\n // Use refs to store timer IDs\n const hoverOpenTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const hoverCloseTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Track if mouse is over trigger or submenu\n const isHoveringRef = useRef(false);\n const isHoveringSubmenuRef = useRef(false);\n\n const checkShouldClose = () => {\n // Only close if mouse is not over trigger OR submenu\n if (!isHoveringRef.current && !isHoveringSubmenuRef.current) {\n hoverCloseTimerRef.current = setTimeout(() => {\n // Double check before closing\n if (!isHoveringRef.current && !isHoveringSubmenuRef.current) {\n state.close();\n }\n }, 300);\n }\n };\n\n // Handle mouse interactions on trigger\n const handleMouseEnter = () => {\n if (isDisabled) return;\n\n isHoveringRef.current = true;\n\n // Clear any pending close timer\n if (hoverCloseTimerRef.current) {\n clearTimeout(hoverCloseTimerRef.current);\n hoverCloseTimerRef.current = null;\n }\n\n // Use a small delay to prevent accidental opens\n if (!state.isOpen) {\n hoverOpenTimerRef.current = setTimeout(() => {\n if (isHoveringRef.current) {\n state.open();\n }\n }, 200);\n }\n };\n\n const handleMouseLeave = () => {\n isHoveringRef.current = false;\n\n // Clear open timer if it exists\n if (hoverOpenTimerRef.current) {\n clearTimeout(hoverOpenTimerRef.current);\n hoverOpenTimerRef.current = null;\n }\n\n // Check if we should close\n checkShouldClose();\n };\n\n // Handle mouse events on the submenu popover\n const handlePopoverMouseEnter = () => {\n isHoveringSubmenuRef.current = true;\n\n // Clear any pending close timer when entering submenu\n if (hoverCloseTimerRef.current) {\n clearTimeout(hoverCloseTimerRef.current);\n hoverCloseTimerRef.current = null;\n }\n };\n\n const handlePopoverMouseLeave = () => {\n isHoveringSubmenuRef.current = false;\n\n // Check if we should close\n checkShouldClose();\n };\n\n // Merge event handlers\n const mergeHandler = (handler1: any, handler2: any) => {\n return (...args: any[]) => {\n handler1?.(...args);\n handler2?.(...args);\n };\n };\n\n // Outside-click handling for the nested submenu Popover.\n //\n // React Aria's `useOverlay` keeps a module-level `visibleOverlays` stack and\n // only invokes `onClose` for the topmost overlay (`onHide` gates on the\n // stack tail). With root + N nested submenus open, a single outside click\n // would otherwise only close the deepest submenu. Scheduling\n // `parentContext.onClose()` here propagates the close upward; the existing\n // `parentContext.isClosing` cascade (see `nestedMenuContext.isClosing` and\n // the Popover's `isOpen={!parentContext.isClosing}`) collapses every\n // intermediate submenu visually.\n //\n // Mirrors `MenuTrigger`'s predicate so clicks on `[data-popover-trigger]`\n // and `[data-popover-dismiss]` elements behave consistently across nesting\n // levels.\n const shouldCloseOnInteractOutside = useEvent((el: Element) => {\n if (!state.isOpen) return false;\n\n const menuTriggerEl = el.closest('[data-popover-trigger]');\n if (!menuTriggerEl) {\n if (el.closest('[data-popover-keep]')) return false;\n if (el.closest('[data-popover-dismiss]')) {\n // Let the button's onPress fire first, then collapse the chain.\n setTimeout(() => parentContext.onClose?.(), 0);\n return false;\n }\n // True outside click: schedule parent close so the entire hierarchy\n // cascades. `useOverlay`'s own `onHide` will close this submenu via the\n // topmost-overlay rule.\n setTimeout(() => parentContext.onClose?.(), 0);\n return true;\n }\n // Click landed on a popover trigger (parent menu item, sibling submenu\n // trigger, or a different menu's button). Don't close ourselves here —\n // either the trigger handles it or `usePopoverSync` closes us via\n // `popover:open`.\n return false;\n });\n\n // Provide context to the trigger element (already rendered MenuItem)\n const triggerContextValue = useMemo(\n () => ({\n triggerRef: domTriggerRef,\n triggerProps: menuTriggerProps,\n isOpen: state.isOpen,\n isDisabled,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n onKeyDown: handleKeyDown,\n onAction: isDisabled\n ? undefined\n : () => {\n // A pointer press: Enter and Space open the submenu in\n // `handleKeyDown` and never reach the item's action.\n state.open();\n },\n }),\n [\n state,\n isDisabled,\n handleMouseEnter,\n handleMouseLeave,\n handleKeyDown,\n menuTriggerProps,\n ],\n );\n\n return (\n <>\n <SubmenuTriggerContext.Provider value={triggerContextValue}>\n {menuTrigger}\n </SubmenuTriggerContext.Provider>\n {state.isOpen && (\n <Popover\n ref={popoverRef}\n hideArrow\n isNonModal\n isOpen={!parentContext.isClosing}\n // oxlint-disable-next-line tasty/no-style-prop -- React Aria's overlay positioning computes these coordinates\n style={positionProps.style}\n placement={resolvedPlacement ?? undefined}\n shouldCloseOnInteractOutside={shouldCloseOnInteractOutside}\n onClose={state.close}\n // Spread any additional overlay props\n {...overlayProps}\n >\n {/* Wrap content in a div to capture mouse events */}\n <PointerAreaElement\n onMouseEnter={handlePopoverMouseEnter}\n onMouseLeave={handlePopoverMouseLeave}\n >\n {/* Dismiss buttons for screen reader / keyboard support */}\n <DismissButton onDismiss={state.close} />\n {/* Provide updated menu context so nested menu behaves correctly */}\n <MenuContext.Provider value={nestedMenuContext}>\n {/* Clone nested menu to inject required props */}\n {React.cloneElement(menu, {\n ...(menu.props as any),\n autoFocus,\n onAction: (key: Key) => {\n // Call original menu onAction first\n (menu.props as any).onAction?.(key);\n onAction?.(key);\n // Don't close here - MenuItem will handle it via context.onClose\n },\n onKeyDown: (e: React.KeyboardEvent) => {\n // Handle keyboard navigation for closing submenu\n if (e.key === 'ArrowLeft' || e.key === 'Escape') {\n e.preventDefault();\n e.stopPropagation();\n state.close();\n // Return focus to trigger\n (\n domTriggerRef.current?.querySelector<HTMLElement>(\n '[data-menu-native-primary]',\n ) ?? domTriggerRef.current\n )?.focus();\n }\n // Call original handler if exists\n (menu.props as any).onKeyDown?.(e);\n },\n ref: menuRef,\n })}\n </MenuContext.Provider>\n <DismissButton onDismiss={state.close} />\n </PointerAreaElement>\n </Popover>\n )}\n </>\n );\n}\n\n/**\n * Public SubMenuTrigger component that users interact with.\n * It just provides the getCollectionNode for the collection system.\n */\nexport function SubMenuTrigger(props: CubeSubMenuTriggerProps) {\n // This component is never actually rendered directly.\n // The collection system uses getCollectionNode to build the menu.\n return null;\n}\n\n// Allow React Stately collection builder to treat SubMenuTrigger as an Item\n(SubMenuTrigger as any).getCollectionNode = function* (\n props: CubeSubMenuTriggerProps,\n) {\n const [trigger, menu] = React.Children.toArray(\n props.children,\n ) as ReactElement[];\n\n // Yield a collection node that tells the Menu to wrap this item with InternalSubMenuTrigger\n yield {\n element: trigger,\n wrapper: (element: ReactElement) => (\n <InternalSubMenuTrigger\n key={element.key || undefined}\n targetKey={element.key || undefined}\n {...props}\n >\n {element}\n {menu}\n </InternalSubMenuTrigger>\n ),\n };\n};\n\nSubMenuTrigger.displayName = 'SubMenuTrigger';\n"],"mappings":"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"}
1
+ {"version":3,"file":"SubMenuTrigger.js","names":["useSyncRef","tasty","React","Key","ReactElement","ReactNode","useEffect","useMemo","useRef","useState","AriaMenuTriggerProps","DismissButton","Placement","useMenuTrigger","useOverlayPosition","useMenuTriggerState","useEvent","generateRandomId","usePopoverSync","Popover","MenuContext","MenuContextValue","useMenuContext","SubmenuTriggerContext","DEFAULT_PLACEMENT","DEFAULT_OFFSET","DEFAULT_CROSS_OFFSET","PointerAreaElement","styles","display","CubeSubMenuTriggerProps","placement","offset","crossOffset","shouldFlip","containerPadding","children","isDisabled","onAction","key","autoFocus","InternalSubMenuTriggerProps","targetKey","InternalSubMenuTrigger","props","overlayProps","menuTrigger","menu","Children","toArray","state","submenuId","domTriggerRef","HTMLElement","popoverRef","HTMLDivElement","menuRef","HTMLUListElement","menuId","isOpen","onClose","close","triggerRef","containerRef","menuTriggerProps","rawTriggerProps","menuProps","type","parentContext","onKeyDown","_mtOnKeyDown","onPress","_mtOnPress","onPressStart","_mtOnPressStart","onKeyUp","_mtOnKeyUp","positionProps","resolvedPlacement","targetRef","overlayRef","scrollRef","nestedMenuContext","ctx","ref","closeOnSelect","mods","popover","isClosing","hoverOpenTimerRef","current","clearTimeout","hoverCloseTimerRef","isHoveringRef","isHoveringSubmenuRef","handleKeyDown","e","KeyboardEvent","preventDefault","stopPropagation","open","nativeEvent","stopImmediatePropagation","ReturnType","setTimeout","checkShouldClose","handleMouseEnter","handleMouseLeave","handlePopoverMouseEnter","handlePopoverMouseLeave","mergeHandler","handler1","handler2","args","shouldCloseOnInteractOutside","el","Element","menuTriggerEl","closest","triggerContextValue","triggerProps","onMouseEnter","onMouseLeave","undefined","style","cloneElement","querySelector","focus","SubMenuTrigger","getCollectionNode","trigger","element","wrapper","displayName","Popover"],"sources":["../../../../src/components/actions/Menu/SubMenuTrigger.tsx"],"sourcesContent":["import { useSyncRef } from '@react-aria/utils';\nimport { tasty } from '@tenphi/tasty';\nimport React, {\n Key,\n ReactElement,\n ReactNode,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n AriaMenuTriggerProps,\n DismissButton,\n Placement,\n useMenuTrigger,\n useOverlayPosition,\n} from 'react-aria';\nimport { useMenuTriggerState } from 'react-stately';\n\nimport { useEvent } from '../../../_internal/hooks/use-event';\nimport { generateRandomId } from '../../../utils/random';\nimport { usePopoverSync } from '../../../utils/react/usePopoverSync';\nimport { Popover } from '../../overlays/Modal/Popover';\n\nimport { MenuContext, MenuContextValue, useMenuContext } from './context';\nimport { SubmenuTriggerContext } from './SubmenuTriggerContext';\n\n// Default placement & offset for sub-menus (matches Spectrum / Aria)\nconst DEFAULT_PLACEMENT: Placement = 'right top';\nconst DEFAULT_OFFSET = 4;\nconst DEFAULT_CROSS_OFFSET = -5;\n\n// Takes no box of its own: it only listens for the pointer entering and\n// leaving the sub-menu.\nconst PointerAreaElement = tasty({ styles: { display: 'contents' } });\n\nexport interface CubeSubMenuTriggerProps extends AriaMenuTriggerProps {\n /** The preferred placement of the sub-menu relative to the trigger */\n placement?: Placement;\n\n /** Distance in pixels between the trigger and sub-menu */\n offset?: number;\n\n /** Distance in pixels along the cross axis from the default alignment */\n crossOffset?: number;\n\n /** Whether the sub-menu should flip to the opposite side when it would overflow */\n shouldFlip?: boolean;\n\n /** Minimum padding in pixels between the sub-menu and viewport edges */\n containerPadding?: number;\n\n /**\n * Sub-menu trigger and the sub-menu itself. Must be exactly two React nodes.\n *\n * 1) Trigger – a `Menu.Item` with its semantic menuitem inside a list row.\n * 2) Sub-menu – a `<Menu>` element.\n */\n children: [ReactNode, ReactElement];\n\n /** Whether the trigger is disabled and cannot be activated */\n isDisabled?: boolean;\n\n /**\n * Callback fired when an action is selected from the sub-menu.\n * Bubbles the `onAction` event from the sub-menu to parent components.\n */\n onAction?: (key: Key) => void;\n\n /**\n * Controls focus behavior when the sub-menu opens.\n * - `true` or `'first'`: Focus the first item\n * - `'last'`: Focus the last item\n * - `false`: Don't auto-focus any item\n * @default 'first'\n */\n autoFocus?: boolean | 'first' | 'last';\n}\n\ninterface InternalSubMenuTriggerProps extends CubeSubMenuTriggerProps {\n targetKey?: Key;\n}\n\n/**\n * Internal SubMenuTrigger that receives the already-rendered trigger element\n * from the collection system and wraps it with submenu behavior.\n */\nfunction InternalSubMenuTrigger(props: InternalSubMenuTriggerProps) {\n const {\n children,\n placement = DEFAULT_PLACEMENT,\n offset = DEFAULT_OFFSET,\n crossOffset = DEFAULT_CROSS_OFFSET,\n shouldFlip = true,\n isDisabled,\n autoFocus = 'first',\n onAction,\n targetKey,\n ...overlayProps\n } = props;\n\n // Children: [menuTrigger (already rendered MenuItem), menu (Menu component)]\n const [menuTrigger, menu] = React.Children.toArray(children) as [\n ReactElement,\n ReactElement,\n ];\n\n const state = useMenuTriggerState(props as AriaMenuTriggerProps);\n\n // Generate a unique ID for this submenu instance\n const submenuId = useMemo(() => generateRandomId(), []);\n\n // Refs – trigger (MenuItem <li>) and overlay (<div> from Popover)\n const domTriggerRef = useRef<HTMLElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLUListElement>(null);\n\n usePopoverSync({\n menuId: submenuId,\n isOpen: state.isOpen,\n onClose: () => state.close(),\n triggerRef: domTriggerRef,\n containerRef: popoverRef,\n });\n\n // Strip keyboard/press handlers that we will implement ourselves\n const { menuTriggerProps: rawTriggerProps, menuProps } = useMenuTrigger(\n { type: 'menu', isDisabled },\n state,\n domTriggerRef,\n );\n\n // Get parent context to check if parent menu is closing\n const parentContext = useMenuContext();\n\n // Remove default onKeyDown/onPress handlers from trigger props – we implement custom ones\n const {\n onKeyDown: _mtOnKeyDown,\n onPress: _mtOnPress,\n onPressStart: _mtOnPressStart,\n onKeyUp: _mtOnKeyUp,\n ...menuTriggerProps\n } = rawTriggerProps;\n\n const { overlayProps: positionProps, placement: resolvedPlacement } =\n useOverlayPosition({\n targetRef: domTriggerRef,\n overlayRef: popoverRef,\n scrollRef: menuRef,\n placement,\n offset: offset as number,\n crossOffset: crossOffset as number,\n shouldFlip,\n isOpen: state.isOpen,\n onClose: state.close,\n });\n\n /**\n * Build a MenuContext for the nested menu so it behaves just like a regular\n * popover-based Menu (selection handling, focus management, etc.).\n */\n const nestedMenuContext = useMemo(() => {\n const ctx: MenuContextValue = {\n ...menuProps,\n ref: menuRef,\n // Pass the parent's onClose to close the entire menu hierarchy\n onClose: () => {\n // Close this submenu state immediately\n state.close();\n\n // Then close the parent menu\n if (parentContext.onClose) {\n parentContext.onClose();\n }\n },\n closeOnSelect: true,\n autoFocus,\n mods: {\n popover: true,\n },\n // Propagate closing state from parent\n isClosing: parentContext.isClosing || !state.isOpen,\n };\n\n return ctx;\n }, [\n menuProps,\n autoFocus,\n state,\n parentContext.onClose,\n parentContext.isClosing,\n ]);\n\n // Sync the parent selection manager focus with DOM ref (for virtual focus scenarios)\n useSyncRef(parentContext, domTriggerRef);\n\n // Cleanup hover timers and reset refs on unmount\n useEffect(() => {\n return () => {\n if (hoverOpenTimerRef.current) {\n clearTimeout(hoverOpenTimerRef.current);\n }\n if (hoverCloseTimerRef.current) {\n clearTimeout(hoverCloseTimerRef.current);\n }\n isHoveringRef.current = false;\n isHoveringSubmenuRef.current = false;\n };\n }, []);\n\n // ----- Render -----\n\n // Handle keyboard navigation\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (isDisabled) return;\n\n // Arrow right opens submenu\n if (e.key === 'ArrowRight') {\n e.preventDefault();\n e.stopPropagation();\n state.open();\n }\n // Enter or Space opens submenu. Preventing the default keeps `MenuItem`\n // from passing the key on to React Aria's item handler, which would click\n // the item and run its action as well.\n else if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n // Stop immediate propagation to prevent React Aria's handlers from running\n e.nativeEvent.stopImmediatePropagation();\n state.open();\n }\n // Arrow left closes submenu if open\n else if (e.key === 'ArrowLeft' && state.isOpen) {\n e.preventDefault();\n e.stopPropagation();\n state.close();\n }\n };\n\n // Use refs to store timer IDs\n const hoverOpenTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const hoverCloseTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Track if mouse is over trigger or submenu\n const isHoveringRef = useRef(false);\n const isHoveringSubmenuRef = useRef(false);\n\n const checkShouldClose = () => {\n // Only close if mouse is not over trigger OR submenu\n if (!isHoveringRef.current && !isHoveringSubmenuRef.current) {\n hoverCloseTimerRef.current = setTimeout(() => {\n // Double check before closing\n if (!isHoveringRef.current && !isHoveringSubmenuRef.current) {\n state.close();\n }\n }, 300);\n }\n };\n\n // Handle mouse interactions on trigger\n const handleMouseEnter = () => {\n if (isDisabled) return;\n\n isHoveringRef.current = true;\n\n // Clear any pending close timer\n if (hoverCloseTimerRef.current) {\n clearTimeout(hoverCloseTimerRef.current);\n hoverCloseTimerRef.current = null;\n }\n\n // Use a small delay to prevent accidental opens\n if (!state.isOpen) {\n hoverOpenTimerRef.current = setTimeout(() => {\n if (isHoveringRef.current) {\n state.open();\n }\n }, 200);\n }\n };\n\n const handleMouseLeave = () => {\n isHoveringRef.current = false;\n\n // Clear open timer if it exists\n if (hoverOpenTimerRef.current) {\n clearTimeout(hoverOpenTimerRef.current);\n hoverOpenTimerRef.current = null;\n }\n\n // Check if we should close\n checkShouldClose();\n };\n\n // Handle mouse events on the submenu popover\n const handlePopoverMouseEnter = () => {\n isHoveringSubmenuRef.current = true;\n\n // Clear any pending close timer when entering submenu\n if (hoverCloseTimerRef.current) {\n clearTimeout(hoverCloseTimerRef.current);\n hoverCloseTimerRef.current = null;\n }\n };\n\n const handlePopoverMouseLeave = () => {\n isHoveringSubmenuRef.current = false;\n\n // Check if we should close\n checkShouldClose();\n };\n\n // Merge event handlers\n const mergeHandler = (handler1: any, handler2: any) => {\n return (...args: any[]) => {\n handler1?.(...args);\n handler2?.(...args);\n };\n };\n\n // Outside-click handling for the nested submenu Popover.\n //\n // React Aria's `useOverlay` keeps a module-level `visibleOverlays` stack and\n // only invokes `onClose` for the topmost overlay (`onHide` gates on the\n // stack tail). With root + N nested submenus open, a single outside click\n // would otherwise only close the deepest submenu. Scheduling\n // `parentContext.onClose()` here propagates the close upward; the existing\n // `parentContext.isClosing` cascade (see `nestedMenuContext.isClosing` and\n // the Popover's `isOpen={!parentContext.isClosing}`) collapses every\n // intermediate submenu visually.\n //\n // Mirrors `MenuTrigger`'s predicate so clicks on `[data-popover-trigger]`\n // and `[data-popover-dismiss]` elements behave consistently across nesting\n // levels.\n const shouldCloseOnInteractOutside = useEvent((el: Element) => {\n if (!state.isOpen) return false;\n\n const menuTriggerEl = el.closest('[data-popover-trigger]');\n if (!menuTriggerEl) {\n if (el.closest('[data-popover-keep]')) return false;\n if (el.closest('[data-popover-dismiss]')) {\n // Let the button's onPress fire first, then collapse the chain.\n setTimeout(() => parentContext.onClose?.(), 0);\n return false;\n }\n // True outside click: schedule parent close so the entire hierarchy\n // cascades. `useOverlay`'s own `onHide` will close this submenu via the\n // topmost-overlay rule.\n setTimeout(() => parentContext.onClose?.(), 0);\n return true;\n }\n // Click landed on a popover trigger (parent menu item, sibling submenu\n // trigger, or a different menu's button). Don't close ourselves here —\n // either the trigger handles it or `usePopoverSync` closes us via\n // `popover:open`.\n return false;\n });\n\n // Provide context to the trigger element (already rendered MenuItem)\n const triggerContextValue = useMemo(\n () => ({\n triggerRef: domTriggerRef,\n triggerProps: menuTriggerProps,\n isOpen: state.isOpen,\n isDisabled,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n onKeyDown: handleKeyDown,\n onAction: isDisabled\n ? undefined\n : () => {\n // A pointer press: Enter and Space open the submenu in\n // `handleKeyDown` and never reach the item's action.\n state.open();\n },\n }),\n [\n state,\n isDisabled,\n handleMouseEnter,\n handleMouseLeave,\n handleKeyDown,\n menuTriggerProps,\n ],\n );\n\n return (\n <>\n <SubmenuTriggerContext.Provider value={triggerContextValue}>\n {menuTrigger}\n </SubmenuTriggerContext.Provider>\n {state.isOpen && (\n <Popover\n ref={popoverRef}\n hideArrow\n isNonModal\n isOpen={!parentContext.isClosing}\n // oxlint-disable-next-line tasty/no-style-prop -- React Aria's overlay positioning computes these coordinates\n style={positionProps.style}\n placement={resolvedPlacement ?? undefined}\n shouldCloseOnInteractOutside={shouldCloseOnInteractOutside}\n onClose={state.close}\n // Spread any additional overlay props\n {...overlayProps}\n >\n {/* Wrap content in a div to capture mouse events */}\n <PointerAreaElement\n onMouseEnter={handlePopoverMouseEnter}\n onMouseLeave={handlePopoverMouseLeave}\n >\n {/* Dismiss buttons for screen reader / keyboard support */}\n <DismissButton onDismiss={state.close} />\n {/* Provide updated menu context so nested menu behaves correctly */}\n <MenuContext.Provider value={nestedMenuContext}>\n {/* Clone nested menu to inject required props */}\n {React.cloneElement(menu, {\n ...(menu.props as any),\n autoFocus,\n onAction: (key: Key) => {\n // Call original menu onAction first\n (menu.props as any).onAction?.(key);\n onAction?.(key);\n // Don't close here - MenuItem will handle it via context.onClose\n },\n onKeyDown: (e: React.KeyboardEvent) => {\n // Handle keyboard navigation for closing submenu\n if (e.key === 'ArrowLeft' || e.key === 'Escape') {\n e.preventDefault();\n e.stopPropagation();\n state.close();\n // Return focus to trigger\n (\n domTriggerRef.current?.querySelector<HTMLElement>(\n '[data-menu-native-primary]',\n ) ?? domTriggerRef.current\n )?.focus();\n }\n // Call original handler if exists\n (menu.props as any).onKeyDown?.(e);\n },\n ref: menuRef,\n })}\n </MenuContext.Provider>\n <DismissButton onDismiss={state.close} />\n </PointerAreaElement>\n </Popover>\n )}\n </>\n );\n}\n\n/**\n * Public SubMenuTrigger component that users interact with.\n * It just provides the getCollectionNode for the collection system.\n */\nexport function SubMenuTrigger(props: CubeSubMenuTriggerProps) {\n // This component is never actually rendered directly.\n // The collection system uses getCollectionNode to build the menu.\n return null;\n}\n\n// Allow React Stately collection builder to treat SubMenuTrigger as an Item\n(SubMenuTrigger as any).getCollectionNode = function* (\n props: CubeSubMenuTriggerProps,\n) {\n const [trigger, menu] = React.Children.toArray(\n props.children,\n ) as ReactElement[];\n\n // Yield a collection node that tells the Menu to wrap this item with InternalSubMenuTrigger\n yield {\n element: trigger,\n wrapper: (element: ReactElement) => (\n <InternalSubMenuTrigger\n key={element.key || undefined}\n targetKey={element.key || undefined}\n {...props}\n >\n {element}\n {menu}\n </InternalSubMenuTrigger>\n ),\n };\n};\n\nSubMenuTrigger.displayName = 'SubMenuTrigger';\n"],"mappings":";;;;;;;;;;;;;;AA6BA,MAAMwB,oBAA+B;AACrC,MAAMC,iBAAiB;AACvB,MAAMC,uBAAuB;AAI7B,MAAMC,qBAAqB1B,MAAM,EAAE2B,QAAQ,EAAEC,SAAS,WAAW,EAAE,CAAC;;;;;AAqDpE,SAASc,uBAAuBC,OAAoC;CAClE,MAAM,EACJR,UACAL,YAAYP,mBACZQ,SAASP,gBACTQ,cAAcP,sBACdQ,aAAa,MACbG,YACAG,YAAY,SACZF,UACAI,WACA,GAAGG,iBACDD;CAGJ,MAAM,CAACE,aAAaC,QAAQ7C,MAAM8C,SAASC,QAAQb,QAAQ;CAK3D,MAAMc,QAAQnC,oBAAoB6B,KAA6B;CAG/D,MAAMO,YAAY5C,cAAcU,iBAAiB,GAAG,CAAA,CAAE;CAGtD,MAAMmC,gBAAgB5C,OAAoB,IAAI;CAC9C,MAAM8C,aAAa9C,OAAuB,IAAI;CAC9C,MAAMgD,UAAUhD,OAAyB,IAAI;CAE7CU,eAAe;EACbwC,QAAQP;EACRQ,QAAQT,MAAMS;EACdC,eAAeV,MAAMW,MAAM;EAC3BC,YAAYV;EACZW,cAAcT;CAChB,CAAC;CAGD,MAAM,EAAEU,kBAAkBC,iBAAiBC,cAAcrD,eACvD;EAAEsD,MAAM;EAAQ9B;CAAW,GAC3Ba,OACAE,aACF;CAGA,MAAMgB,gBAAgB9C,eAAe;CAGrC,MAAM,EACJ+C,WAAWC,cACXC,SAASC,YACTC,cAAcC,iBACdC,SAASC,YACT,GAAGZ,qBACDC;CAEJ,MAAM,EAAEpB,cAAcgC,eAAe9C,WAAW+C,sBAC9ChE,mBAAmB;EACjBiE,WAAW3B;EACX4B,YAAY1B;EACZ2B,WAAWzB;EACXzB;EACQC;EACKC;EACbC;EACAyB,QAAQT,MAAMS;EACdC,SAASV,MAAMW;CACjB,CAAC;;;;;CAMH,MAAMqB,oBAAoB3E,cAAc;EAuBtC,OAAO4E;GArBL,GAAGjB;GACHkB,KAAK5B;GAELI,eAAe;IAEbV,MAAMW,MAAM;IAGZ,IAAIO,cAAcR,SAChBQ,cAAcR,QAAQ;GAE1B;GACAyB,eAAe;GACf7C;GACA8C,MAAM,EACJC,SAAS,KACX;GAEAC,WAAWpB,cAAcoB,aAAa,CAACtC,MAAMS;EAGxCwB;CACT,GAAG;EACDjB;EACA1B;EACAU;EACAkB,cAAcR;EACdQ,cAAcoB;CAAS,CACxB;CAGDxF,WAAWoE,eAAehB,aAAa;CAGvC9C,gBAAgB;EACd,aAAa;GACX,IAAImF,kBAAkBC,SACpBC,aAAaF,kBAAkBC,OAAO;GAExC,IAAIE,mBAAmBF,SACrBC,aAAaC,mBAAmBF,OAAO;GAEzCG,cAAcH,UAAU;GACxBI,qBAAqBJ,UAAU;EACjC;CACF,GAAG,CAAA,CAAE;CAKL,MAAMK,iBAAiBC,MAA2B;EAChD,IAAI3D,YAAY;EAGhB,IAAI2D,EAAEzD,QAAQ,cAAc;GAC1ByD,EAAEE,eAAe;GACjBF,EAAEG,gBAAgB;GAClBjD,MAAMkD,KAAK;EACb,OAIK,IAAIJ,EAAEzD,QAAQ,WAAWyD,EAAEzD,QAAQ,KAAK;GAC3CyD,EAAEE,eAAe;GACjBF,EAAEG,gBAAgB;GAElBH,EAAEK,YAAYC,yBAAyB;GACvCpD,MAAMkD,KAAK;EACb,OAEK,IAAIJ,EAAEzD,QAAQ,eAAeW,MAAMS,QAAQ;GAC9CqC,EAAEE,eAAe;GACjBF,EAAEG,gBAAgB;GAClBjD,MAAMW,MAAM;EACd;CACF;CAGA,MAAM4B,oBAAoBjF,OAA6C,IAAI;CAC3E,MAAMoF,qBAAqBpF,OAA6C,IAAI;CAG5E,MAAMqF,gBAAgBrF,OAAO,KAAK;CAClC,MAAMsF,uBAAuBtF,OAAO,KAAK;CAEzC,MAAMiG,yBAAyB;EAE7B,IAAI,CAACZ,cAAcH,WAAW,CAACI,qBAAqBJ,SAClDE,mBAAmBF,UAAUc,iBAAiB;GAE5C,IAAI,CAACX,cAAcH,WAAW,CAACI,qBAAqBJ,SAClDxC,MAAMW,MAAM;EAEhB,GAAG,GAAG;CAEV;CAGA,MAAM6C,yBAAyB;EAC7B,IAAIrE,YAAY;EAEhBwD,cAAcH,UAAU;EAGxB,IAAIE,mBAAmBF,SAAS;GAC9BC,aAAaC,mBAAmBF,OAAO;GACvCE,mBAAmBF,UAAU;EAC/B;EAGA,IAAI,CAACxC,MAAMS,QACT8B,kBAAkBC,UAAUc,iBAAiB;GAC3C,IAAIX,cAAcH,SAChBxC,MAAMkD,KAAK;EAEf,GAAG,GAAG;CAEV;CAEA,MAAMO,yBAAyB;EAC7Bd,cAAcH,UAAU;EAGxB,IAAID,kBAAkBC,SAAS;GAC7BC,aAAaF,kBAAkBC,OAAO;GACtCD,kBAAkBC,UAAU;EAC9B;EAGAe,iBAAiB;CACnB;CAGA,MAAMG,gCAAgC;EACpCd,qBAAqBJ,UAAU;EAG/B,IAAIE,mBAAmBF,SAAS;GAC9BC,aAAaC,mBAAmBF,OAAO;GACvCE,mBAAmBF,UAAU;EAC/B;CACF;CAEA,MAAMmB,gCAAgC;EACpCf,qBAAqBJ,UAAU;EAG/Be,iBAAiB;CACnB;CAwBA,MAAMS,+BAA+BlG,UAAUmG,OAAgB;EAC7D,IAAI,CAACjE,MAAMS,QAAQ,OAAO;EAG1B,IAAI,CADkBwD,GAAGG,QAAQ,wBAC5BD,GAAe;GAClB,IAAIF,GAAGG,QAAQ,qBAAqB,GAAG,OAAO;GAC9C,IAAIH,GAAGG,QAAQ,wBAAwB,GAAG;IAExCd,iBAAiBpC,cAAcR,UAAU,GAAG,CAAC;IAC7C,OAAO;GACT;GAIA4C,iBAAiBpC,cAAcR,UAAU,GAAG,CAAC;GAC7C,OAAO;EACT;EAKA,OAAO;CACT,CAAC;CAGD,MAAM2D,sBAAsBhH,eACnB;EACLuD,YAAYV;EACZoE,cAAcxD;EACdL,QAAQT,MAAMS;EACdtB;EACAoF,cAAcf;EACdgB,cAAcf;EACdtC,WAAW0B;EACXzD,UAAUD,aACNsF,KAAAA,UACM;GAGJzE,MAAMkD,KAAK;EACb;CACN,IACA;EACElD;EACAb;EACAqE;EACAC;EACAZ;EACA/B;CAAgB,CAEpB;CAEA,OACE,qBAAA,YAAA,EAAA,UAAA,CACE,oBAAC,sBAAsB,UAAvB;EAAgC,OAAOuD;EACpCzE,UAAAA;CAC6B,CAAA,GAC/BI,MAAMS,UACL,oBAAC2E,UAAD;EACE,KAAKhF;EACL,WAAA;EACA,YAAA;EACA,QAAQ,CAACc,cAAcoB;EAEvB,OAAOX,cAAc+C;EACrB,WAAW9C,qBAAqB6C,KAAAA;EACFT;EAC9B,SAAShE,MAAMW;EAEf,GAAIhB;EAGJ,UAAA,qBAAC,oBAAD;GACE,cAAc+D;GACd,cAAcC;GAFhB,UAAA;IAKE,oBAAC,eAAD,EAAe,WAAW3D,MAAMW,MAAM,CAAA;IAEtC,oBAAC,YAAY,UAAb;KAAsB,OAAOqB;KAE1BhF,UAAAA,MAAM2H,aAAa9E,MAAM;MACxB,GAAIA,KAAKH;MACTJ;MACAF,WAAWC,QAAa;OAEtB,KAAMK,MAAcN,WAAWC,GAAG;OAClCD,WAAWC,GAAG;MAEhB;MACA8B,YAAY2B,QAA2B;OAErC,IAAIA,IAAEzD,QAAQ,eAAeyD,IAAEzD,QAAQ,UAAU;QAC/CyD,IAAEE,eAAe;QACjBF,IAAEG,gBAAgB;QAClBjD,MAAMW,MAAM;QAEZ,CACET,cAAcsC,SAASoC,cACrB,4BACF,KAAK1E,cAAcsC,QAAAA,EAClBqC,MAAM;OACX;OAEA,KAAMnF,MAAcyB,YAAY2B,GAAC;MACnC;MACAZ,KAAK5B;KACP,CAAC;IACmB,CAAA;IACtB,oBAAC,eAAD,EAAe,WAAWN,MAAMW,MAAM,CAAA;GACpB;;CACb,CAAA,CAEb,EAAA,CAAA;AAEJ;;;;;AAMA,SAAgBmE,eAAepF,OAAgC;CAG7D,OAAO;AACT;AAGA,eAAwBqF,oBAAoB,WAC1CrF,OACA;CACA,MAAM,CAACsF,SAASnF,QAAQ7C,MAAM8C,SAASC,QACrCL,MAAMR,QACR;CAGA,MAAM;EACJ+F,SAASD;EACTE,UAAUD,YACR,qBAAC,wBAAD;GAEE,WAAWA,QAAQ5F,OAAOoF,KAAAA;GAC1B,GAAI/E;GAHN,UAAA,CAKGuF,SACApF,IACqB;EANjBoF,GAAAA,QAAQ5F,OAAOoF,KAAAA,CAME;CAE5B;AACF;AAEAK,eAAeK,cAAc"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.206.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.208.0 | Cube Dev Team */
2
2
  import React from "react";
3
3
  //#region src/components/actions/Menu/SubmenuTriggerContext.tsx
4
4
  const SubmenuTriggerContext = React.createContext(null);
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.206.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.208.0 | Cube Dev Team */
2
2
  import React, { useContext } from "react";
3
3
  //#region src/components/actions/Menu/context.ts
4
4
  const MenuContext = React.createContext({});
@@ -6,4 +6,4 @@ import { CubeMenuProps, Menu as __Menu } from "./Menu.js";
6
6
  import { MenuItem, MenuItemProps, MenuSelectionType } from "./MenuItem.js";
7
7
  import { CubeMenuSectionProps, MenuSection } from "./MenuSection.js";
8
8
  import { MenuContext, MenuContextValue, useMenuContext } from "./context.js";
9
- export { type AriaMenuTriggerProps, type CubeMenuItemProps, CubeMenuProps, CubeMenuSectionProps, CubeMenuTriggerProps, CubeSubMenuTriggerProps, MenuContext, MenuContextValue, MenuItem, MenuItemProps, MenuSection, MenuSelectionType, _MenuTrigger as MenuTrigger, useMenuContext };
9
+ export { type AriaMenuTriggerProps, type CubeMenuItemProps, CubeMenuProps, CubeMenuSectionProps, CubeMenuTriggerProps, CubeSubMenuTriggerProps, MenuContext, MenuContextValue, MenuItem, MenuItemProps, MenuSection, MenuSelectionType, useMenuContext };
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.206.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.208.0 | Cube Dev Team */
2
2
  import { DEFAULT_CLEAR_STYLES } from "../../../data/item-themes.js";
3
3
  import { Space } from "../../layout/Space.js";
4
4
  import { DEFAULT_BUTTON_STYLES } from "../Button/Button.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.206.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.208.0 | Cube Dev Team */
2
2
  //#region src/components/actions/actions-run.ts
3
3
  /**
4
4
  * Whether `element` — the node react-aria hands an overlay's dismiss predicate
@@ -2,21 +2,20 @@
2
2
  import { NavigateArg, NavigateLike, NavigateOptions, Path, RelativeRoutingType, To } from "../../providers/navigation.types.js";
3
3
  import { CubeUseActionProps, openLink, parseTo, performClickHandler, useAction } from "./use-action.js";
4
4
  import { CubeItemActionProps, ItemAction } from "./ItemAction/ItemAction.js";
5
- import "./ItemAction/index.js";
6
5
  import { Action, CubeActionProps } from "./Action/Action.js";
7
6
  import { ButtonMods, ButtonVariant, CubeButtonProps, DEFAULT_BUTTON_STYLES } from "./Button/Button.js";
8
- import "./Button/index.js";
7
+ import { Banner, BannerAction, BannerActionProps, BannerLink, BannerLinkProps, BannerProps, BannerTheme } from "./Banner/Banner.js";
8
+ import "./Banner/index.js";
9
+ import { ButtonGroup } from "./ButtonGroup/ButtonGroup.js";
9
10
  import { CubeMenuItemProps } from "./Menu/MenuCollectionItem.js";
10
11
  import { AriaMenuTriggerProps, CubeMenuTriggerProps, MenuTrigger as _MenuTrigger } from "./Menu/MenuTrigger.js";
11
12
  import { CubeSubMenuTriggerProps, SubMenuTrigger } from "./Menu/SubMenuTrigger.js";
12
13
  import { CubeMenuProps, Menu as __Menu } from "./Menu/Menu.js";
13
14
  import { ButtonSplit, ButtonSplitAction, CubeButtonSplitProps } from "./ButtonSplit/ButtonSplit.js";
15
+ import { Button } from "./Button/index.js";
14
16
  import { ButtonSplitContext, ButtonSplitContextValue, useButtonSplitContext } from "./ButtonSplit/context.js";
15
17
  import "./ButtonSplit/index.js";
16
- import { CubeSpaceProps } from "../layout/Space.js";
17
- import { ButtonGroup } from "./ButtonGroup/ButtonGroup.js";
18
- import { Banner, BannerAction, BannerActionProps, BannerLink, BannerLinkProps, BannerProps, BannerTheme } from "./Banner/Banner.js";
19
- import "./Banner/index.js";
18
+ import "./ItemAction/index.js";
20
19
  import { ItemActionProvider, ItemActionProviderProps, useItemActionContext } from "./ItemActionContext.js";
21
20
  import { CubeItemButtonProps, ItemButton as _ItemButton } from "./ItemButton/ItemButton.js";
22
21
  import "./ItemButton/index.js";
@@ -28,15 +27,4 @@ import { CommandMenu as __CommandMenu, CommandMenuItem, CubeCommandMenuProps } f
28
27
  import "./CommandMenu/index.js";
29
28
  import { UseAnchoredMenuReturn, useAnchoredMenu } from "./use-anchored-menu.js";
30
29
  import { UseContextMenuReturn, useContextMenu } from "./use-context-menu.js";
31
- import "../../index.js";
32
- //#region src/components/actions/index.d.ts
33
- declare const Button: import("react").ForwardRefExoticComponent<CubeButtonProps & import("react").RefAttributes<import("@react-types/shared").FocusableRefValue<HTMLElement, HTMLElement>>> & {
34
- Group: typeof ButtonGroup;
35
- Split: typeof ButtonSplit;
36
- } & {
37
- Group: import("react").ForwardRefExoticComponent<CubeSpaceProps & import("react").RefAttributes<unknown>>;
38
- Split: import("react").ForwardRefExoticComponent<CubeButtonSplitProps & import("react").RefAttributes<HTMLDivElement>>;
39
- };
40
- //#endregion
41
- export { Action, type AriaMenuTriggerProps, Banner, BannerAction, type BannerActionProps, BannerLink, type BannerLinkProps, type BannerProps, type BannerTheme, Button, ButtonGroup, ButtonMods, ButtonSplit, ButtonSplitAction, ButtonSplitContext, ButtonSplitContextValue, ButtonVariant, __CommandMenu as CommandMenu, type CommandMenuItem, CubeActionProps, CubeButtonProps, CubeButtonSplitProps, type CubeCommandMenuProps, type CubeItemActionProps, CubeItemButtonProps, type CubeItemButtonProps as ItemButtonProps, type CubeMenuItemProps, CubeMenuProps, CubeMenuSectionProps, CubeMenuTriggerProps, CubeSubMenuTriggerProps, CubeUseActionProps, DEFAULT_BUTTON_STYLES, ItemAction, type CubeItemActionProps as ItemActionProps, ItemActionProvider, ItemActionProviderProps, _ItemButton as ItemButton, MenuContext, MenuContextValue, MenuItem, MenuItemProps, MenuSection, MenuSelectionType, _MenuTrigger as MenuTrigger, type NavigateArg, UseAnchoredMenuReturn, UseContextMenuReturn, openLink, parseTo, performClickHandler, useAction, useAnchoredMenu, useButtonSplitContext, useContextMenu, useItemActionContext, useMenuContext };
42
- //# sourceMappingURL=index.d.ts.map
30
+ export { Action, type AriaMenuTriggerProps, Banner, BannerAction, type BannerActionProps, BannerLink, type BannerLinkProps, type BannerProps, type BannerTheme, Button, ButtonGroup, ButtonMods, ButtonSplit, ButtonSplitAction, ButtonSplitContext, ButtonSplitContextValue, ButtonVariant, __CommandMenu as CommandMenu, type CommandMenuItem, CubeActionProps, CubeButtonProps, CubeButtonSplitProps, type CubeCommandMenuProps, type CubeItemActionProps, CubeItemButtonProps, type CubeItemButtonProps as ItemButtonProps, type CubeMenuItemProps, CubeMenuProps, CubeMenuSectionProps, CubeMenuTriggerProps, CubeSubMenuTriggerProps, CubeUseActionProps, DEFAULT_BUTTON_STYLES, ItemAction, type CubeItemActionProps as ItemActionProps, ItemActionProvider, ItemActionProviderProps, _ItemButton as ItemButton, MenuContext, MenuContextValue, MenuItem, MenuItemProps, MenuSection, MenuSelectionType, type NavigateArg, UseAnchoredMenuReturn, UseContextMenuReturn, openLink, parseTo, performClickHandler, useAction, useAnchoredMenu, useButtonSplitContext, useContextMenu, useItemActionContext, useMenuContext };
@@ -1,8 +1,8 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.206.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.208.0 | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../utils/react/mergeProps.js";
3
3
  import { useEvent } from "../../_internal/hooks/use-event.js";
4
- import { useWarn } from "../../_internal/hooks/use-warn.js";
5
4
  import { useFocus as useFocus$1 } from "../../utils/react/interactions.js";
5
+ import { useWarn } from "../../_internal/hooks/use-warn.js";
6
6
  import { isExternalUrl, normalizeNavigationUrl } from "../../providers/navigation-url.js";
7
7
  import { useTracking } from "../../providers/TrackingProvider.js";
8
8
  import { useNavigation } from "../../providers/use-navigation.js";
@@ -1 +1 @@
1
- {"version":3,"file":"use-action.js","names":["useFocusableRef","FocusableRef","PressEvent","AllBaseProps","filterBaseProps","TagName","AriaButtonProps","useButton","useHover","useEvent","useWarn","isExternalUrl","normalizeNavigationUrl","useTracking","useNavigation","mergeProps","useFocus","NavigateArg","NavigateOptions","Path","To","LINK_PRESS_EVENT","BUTTON_PRESS_EVENT","NavigateLike","RelativeRoutingType","CubeUseActionProps","T","Omit","to","label","htmlType","navigationOptions","FILTER_OPTIONS","propNames","Set","openLink","href","target","link","document","createElement","rel","body","appendChild","click","removeChild","parseTo","newTab","nativeRoute","cleanTo","isHistoryNavigation","historyDelta","isHashNavigation","isExternal","undefined","value","startsWith","slice","SanitizedPressEvent","type","pointerType","shiftKey","metaKey","ctrlKey","altKey","key","sanitizePressEvent","evt","safeEvt","Object","defineProperty","enumerable","configurable","e","performClickHandler","navigate","resolvedHref","onPress","tracking","element","qa","getAttribute","event","delta","id","targetElement","getElementById","scrollIntoView","behavior","block","inline","window","location","reload","assign","useAction","t0","ref","$","_c","as","mods","props","t1","Symbol","for","args","isDisabled","t2","domRef","mergedNavigationOptions","t3","customOnPress","buttonProps","isPressed","hoverProps","isHovered","focusProps","isFocused","customProps","onClick","evt_0","preventDefault","t4","autoFocus","actionProps","hovered","pressed","focused","disabled","_c","useFocus","mergeProps"],"sources":["../../../src/components/actions/use-action.ts"],"sourcesContent":["import { useFocusableRef } from '@react-spectrum/utils';\nimport { FocusableRef, PressEvent } from '@react-types/shared';\nimport { AllBaseProps, filterBaseProps, TagName } from '@tenphi/tasty';\nimport { AriaButtonProps, useButton, useHover } from 'react-aria';\n\nimport { useEvent, useWarn } from '../../_internal';\nimport {\n isExternalUrl,\n normalizeNavigationUrl,\n} from '../../providers/navigation-url';\nimport { useTracking } from '../../providers/TrackingProvider';\nimport { useNavigation } from '../../providers/use-navigation';\nimport { mergeProps } from '../../utils/react';\nimport { useFocus } from '../../utils/react/interactions';\n\n// Import specific types for internal usage\nimport type {\n NavigateArg,\n NavigateOptions,\n Path,\n To,\n} from '../../providers/navigation.types';\n\nconst LINK_PRESS_EVENT = 'Link Press';\nconst BUTTON_PRESS_EVENT = 'Button Press';\n\n// Re-export types for convenience\nexport type {\n NavigateLike,\n Path,\n To,\n NavigateArg,\n NavigateOptions,\n RelativeRoutingType,\n} from '../../providers/navigation.types';\n\nexport interface CubeUseActionProps<\n T extends TagName = 'a' | 'button' | 'span' | 'div',\n>\n extends\n AllBaseProps<T>,\n Omit<AriaButtonProps, keyof AllBaseProps<T> | 'type'> {\n to?: NavigateArg;\n /**\n * @deprecated Use `aria-label` for the accessible name, and `children` for\n * visible text. Not every action honours it: `ItemAction` ignores it.\n */\n label?: string;\n htmlType?: 'button' | 'submit' | 'reset' | undefined;\n navigationOptions?: NavigateOptions;\n}\n\nconst FILTER_OPTIONS = { propNames: new Set(['onMouseEnter', 'onMouseLeave']) };\n\n/**\n * Helper to open link.\n * @param {String} href\n * @param {String|Boolean} [target]\n */\nexport function openLink(href, target?) {\n const link = document.createElement('a');\n\n link.href = href;\n\n if (target) {\n link.target = target === true ? '_blank' : target;\n // Prevent reverse tabnabbing when opening in a new tab\n link.rel = 'noopener noreferrer';\n }\n\n document.body.appendChild(link);\n\n link.click();\n\n document.body.removeChild(link);\n}\n\nexport function parseTo(to: NavigateArg | undefined): {\n newTab: boolean;\n nativeRoute: boolean;\n cleanTo: To | undefined;\n isHistoryNavigation: boolean;\n historyDelta?: number;\n isHashNavigation: boolean;\n isExternal: boolean;\n} {\n // Handle number (history navigation)\n if (typeof to === 'number') {\n return {\n newTab: false,\n nativeRoute: false,\n cleanTo: undefined,\n isHistoryNavigation: true,\n historyDelta: to,\n isHashNavigation: false,\n isExternal: false,\n };\n }\n\n // Handle object path\n if (to && typeof to === 'object') {\n return {\n newTab: false,\n nativeRoute: false,\n cleanTo: to,\n isHistoryNavigation: false,\n isHashNavigation: false,\n isExternal: false,\n };\n }\n\n // Handle string. Clean it first, as the URL parser does, so ` !https://…`\n // still opens a tab and a blank value counts as no destination.\n const value = typeof to === 'string' ? normalizeNavigationUrl(to) : '';\n\n if (!value) {\n return {\n newTab: false,\n nativeRoute: false,\n cleanTo: undefined,\n isHistoryNavigation: false,\n isHashNavigation: false,\n isExternal: false,\n };\n }\n\n const newTab = value.startsWith('!');\n const nativeRoute = value.startsWith('@');\n const isHashNavigation = value.startsWith('#');\n const cleanTo =\n newTab || nativeRoute ? normalizeNavigationUrl(value.slice(1)) : value;\n const isExternal = isExternalUrl(cleanTo);\n\n return {\n newTab,\n nativeRoute,\n cleanTo,\n isHistoryNavigation: false,\n isHashNavigation,\n isExternal,\n };\n}\n\ninterface SanitizedPressEvent {\n type?: string;\n pointerType?: string;\n shiftKey: boolean;\n metaKey: boolean;\n ctrlKey: boolean;\n altKey: boolean;\n // target is defined as a non-enumerable property below\n [key: string]: unknown; // allow non-enumerable 'target'\n}\n\nfunction sanitizePressEvent(evt: PressEvent): SanitizedPressEvent {\n const safeEvt: SanitizedPressEvent = {\n type: 'type' in evt ? evt.type : undefined,\n pointerType:\n 'pointerType' in evt\n ? (evt as { pointerType?: string }).pointerType\n : undefined,\n shiftKey:\n 'shiftKey' in evt ? !!(evt as { shiftKey?: boolean }).shiftKey : false,\n metaKey:\n 'metaKey' in evt ? !!(evt as { metaKey?: boolean }).metaKey : false,\n ctrlKey:\n 'ctrlKey' in evt ? !!(evt as { ctrlKey?: boolean }).ctrlKey : false,\n altKey: 'altKey' in evt ? !!(evt as { altKey?: boolean }).altKey : false,\n };\n try {\n Object.defineProperty(safeEvt, 'target', {\n value: 'target' in evt ? (evt as { target?: unknown }).target : undefined,\n enumerable: false,\n configurable: true,\n });\n } catch (e) {\n // Failed to define target property - continue without it\n }\n return safeEvt;\n}\n\nexport function performClickHandler(\n evt,\n { navigate, resolvedHref, to, onPress, tracking, navigationOptions },\n) {\n const {\n newTab,\n nativeRoute,\n cleanTo,\n isHistoryNavigation,\n historyDelta,\n isHashNavigation,\n isExternal,\n } = parseTo(to);\n const element = evt.target;\n const qa = element?.getAttribute('data-qa');\n\n onPress?.(sanitizePressEvent(evt));\n\n if (to == null) {\n // Allow 0 as valid navigation (go to current page)\n tracking.event(BUTTON_PRESS_EVENT, { qa }, element);\n return;\n }\n\n // Handle history navigation (back/forward)\n if (isHistoryNavigation && typeof historyDelta === 'number') {\n tracking.event(\n LINK_PRESS_EVENT,\n { qa, delta: historyDelta, type: 'router-history' },\n element,\n );\n navigate(historyDelta);\n return;\n }\n\n // Handle hash navigation (smooth scroll)\n if (isHashNavigation && typeof cleanTo === 'string') {\n const id = cleanTo.slice(1);\n const targetElement = document.getElementById(id);\n\n tracking.event(\n LINK_PRESS_EVENT,\n { qa, href: cleanTo, type: 'hash', target: id },\n element,\n );\n\n if (targetElement) {\n targetElement.scrollIntoView({\n behavior: 'smooth',\n block: 'start',\n inline: 'nearest',\n });\n }\n return;\n }\n\n // Handle new tab (via ! prefix or user modifiers)\n if (evt.shiftKey || evt.metaKey || (evt as any).ctrlKey || newTab) {\n openLink(resolvedHref, true);\n tracking.event(\n LINK_PRESS_EVENT,\n { qa, href: resolvedHref, type: 'tab' },\n element,\n );\n return;\n }\n\n // Handle @ prefix (native navigation)\n if (nativeRoute) {\n if (cleanTo === '' || cleanTo === undefined) {\n // @'' or @ -> reload current page\n tracking.event(LINK_PRESS_EVENT, { qa, type: 'native' }, element);\n window.location.reload();\n } else {\n // @path -> navigate to resolved path natively\n tracking.event(\n LINK_PRESS_EVENT,\n { qa, href: resolvedHref, type: 'native' },\n element,\n );\n window.location.assign(resolvedHref);\n }\n return;\n }\n\n // Handle external URLs (always native)\n if (isExternal && typeof cleanTo === 'string') {\n tracking.event(\n LINK_PRESS_EVENT,\n { qa, href: cleanTo, type: 'native' },\n element,\n );\n window.location.assign(cleanTo);\n return;\n }\n\n // Handle router navigation\n if (cleanTo !== undefined) {\n tracking.event(\n LINK_PRESS_EVENT,\n { qa, href: resolvedHref, type: 'router' },\n element,\n );\n navigate(cleanTo, navigationOptions);\n }\n}\n\nexport const useAction = function useAction(\n {\n to,\n as,\n htmlType,\n label,\n mods,\n onPress,\n navigationOptions,\n ...props\n }: CubeUseActionProps,\n ref: FocusableRef<HTMLElement>,\n) {\n useWarn(label !== undefined, {\n key: 'action-label-deprecated',\n args: [\n 'The \"label\" property of Button, ItemButton, ItemAction and Action is deprecated. Use \"aria-label\" for the accessible name and \"children\" for visible text.',\n ],\n });\n\n const tracking = useTracking();\n const isDisabled = props.isDisabled;\n\n const {\n newTab,\n nativeRoute,\n cleanTo,\n isHistoryNavigation,\n isHashNavigation,\n isExternal,\n } = parseTo(to);\n\n // Resolve the path with its `!` / `@` prefix stripped, and only that. Also\n // resolving the raw `to` put `!https://…` through the router as a route,\n // which a HashRouter warned about on every render.\n const { navigate, resolvedHref } = useNavigation(cleanTo || '.');\n\n // Determine element type: 'a' for navigation, 'button' for actions\n as = cleanTo !== undefined ? 'a' : as || 'button';\n\n // Compute target (prefixes override explicit target prop per spec)\n const target = newTab ? '_blank' : props.target;\n\n // Compute href for anchor elements\n let href: string | undefined;\n if (as === 'a' && cleanTo !== undefined) {\n if (newTab || nativeRoute) {\n // For ! and @ prefixes, resolve the clean path\n href =\n typeof cleanTo === 'string' && isExternal\n ? cleanTo // External URLs as-is\n : resolvedHref;\n } else {\n // Regular navigation\n href = resolvedHref;\n }\n }\n\n const domRef = useFocusableRef(ref);\n\n // Use navigation options directly\n const mergedNavigationOptions = navigationOptions;\n\n const customOnPress = useEvent((evt: PressEvent) => {\n performClickHandler(evt, {\n navigate,\n resolvedHref: href || resolvedHref,\n to,\n onPress,\n tracking,\n navigationOptions: mergedNavigationOptions,\n });\n });\n\n // Native DOM props keep their HTML event targets and value types. Aria\n // handles the same element and forwards value without changing it.\n let { buttonProps, isPressed } = useButton(\n {\n 'aria-label': label, // deprecated, see `CubeUseActionProps.label`\n ...props,\n onPress: customOnPress,\n type: htmlType ?? 'button',\n } as AriaButtonProps,\n domRef,\n );\n let { hoverProps, isHovered } = useHover({ isDisabled });\n let { focusProps, isFocused } = useFocus(true);\n\n const customProps =\n cleanTo !== undefined\n ? {\n onClick(evt) {\n evt.preventDefault();\n },\n }\n : {};\n\n return {\n isPressed,\n actionProps: {\n mods: {\n hovered: isHovered && !isDisabled,\n pressed: isPressed && !isDisabled,\n // A disabled action that keeps focus (`aria-disabled`, see\n // `getDisabledElementProps`) still shows where focus is.\n focused: isFocused,\n disabled: isDisabled,\n ...mods,\n },\n ...(mergeProps(\n buttonProps,\n hoverProps,\n focusProps,\n customProps,\n filterBaseProps(props, FILTER_OPTIONS),\n ) as object),\n ref: domRef,\n type: htmlType || 'button',\n // `autoFocus` acts when the action mounts, and a dialog kept mounted\n // while closed (`hideOnClose`) mounts hidden: it focuses the marked\n // control on every open instead.\n ...(props.autoFocus ? { 'data-autofocus': '' } : undefined),\n rel: as === 'a' && newTab ? 'noopener noreferrer' : undefined,\n as,\n isDisabled,\n target,\n href,\n },\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-action.js","names":["useFocusableRef","FocusableRef","PressEvent","AllBaseProps","filterBaseProps","TagName","AriaButtonProps","useButton","useHover","useEvent","useWarn","isExternalUrl","normalizeNavigationUrl","useTracking","useNavigation","useFocus","mergeProps","NavigateArg","NavigateOptions","Path","To","LINK_PRESS_EVENT","BUTTON_PRESS_EVENT","NavigateLike","RelativeRoutingType","CubeUseActionProps","T","Omit","to","label","htmlType","navigationOptions","FILTER_OPTIONS","propNames","Set","openLink","href","target","link","document","createElement","rel","body","appendChild","click","removeChild","parseTo","newTab","nativeRoute","cleanTo","isHistoryNavigation","historyDelta","isHashNavigation","isExternal","undefined","value","startsWith","slice","SanitizedPressEvent","type","pointerType","shiftKey","metaKey","ctrlKey","altKey","key","sanitizePressEvent","evt","safeEvt","Object","defineProperty","enumerable","configurable","e","performClickHandler","navigate","resolvedHref","onPress","tracking","element","qa","getAttribute","event","delta","id","targetElement","getElementById","scrollIntoView","behavior","block","inline","window","location","reload","assign","useAction","t0","ref","$","_c","as","mods","props","t1","Symbol","for","args","isDisabled","t2","domRef","mergedNavigationOptions","t3","customOnPress","buttonProps","isPressed","hoverProps","isHovered","focusProps","isFocused","customProps","onClick","evt_0","preventDefault","t4","autoFocus","actionProps","hovered","pressed","focused","disabled","_c","useFocus","mergeProps"],"sources":["../../../src/components/actions/use-action.ts"],"sourcesContent":["import { useFocusableRef } from '@react-spectrum/utils';\nimport { FocusableRef, PressEvent } from '@react-types/shared';\nimport { AllBaseProps, filterBaseProps, TagName } from '@tenphi/tasty';\nimport { AriaButtonProps, useButton, useHover } from 'react-aria';\n\nimport { useEvent } from '../../_internal/hooks/use-event';\nimport { useWarn } from '../../_internal/hooks/use-warn';\nimport {\n isExternalUrl,\n normalizeNavigationUrl,\n} from '../../providers/navigation-url';\nimport { useTracking } from '../../providers/TrackingProvider';\nimport { useNavigation } from '../../providers/use-navigation';\nimport { useFocus } from '../../utils/react/interactions';\nimport { mergeProps } from '../../utils/react/mergeProps';\n\n// Import specific types for internal usage\nimport type {\n NavigateArg,\n NavigateOptions,\n Path,\n To,\n} from '../../providers/navigation.types';\n\nconst LINK_PRESS_EVENT = 'Link Press';\nconst BUTTON_PRESS_EVENT = 'Button Press';\n\n// Re-export types for convenience\nexport type {\n NavigateLike,\n Path,\n To,\n NavigateArg,\n NavigateOptions,\n RelativeRoutingType,\n} from '../../providers/navigation.types';\n\nexport interface CubeUseActionProps<\n T extends TagName = 'a' | 'button' | 'span' | 'div',\n>\n extends\n AllBaseProps<T>,\n Omit<AriaButtonProps, keyof AllBaseProps<T> | 'type'> {\n to?: NavigateArg;\n /**\n * @deprecated Use `aria-label` for the accessible name, and `children` for\n * visible text. Not every action honours it: `ItemAction` ignores it.\n */\n label?: string;\n htmlType?: 'button' | 'submit' | 'reset' | undefined;\n navigationOptions?: NavigateOptions;\n}\n\nconst FILTER_OPTIONS = { propNames: new Set(['onMouseEnter', 'onMouseLeave']) };\n\n/**\n * Helper to open link.\n * @param {String} href\n * @param {String|Boolean} [target]\n */\nexport function openLink(href, target?) {\n const link = document.createElement('a');\n\n link.href = href;\n\n if (target) {\n link.target = target === true ? '_blank' : target;\n // Prevent reverse tabnabbing when opening in a new tab\n link.rel = 'noopener noreferrer';\n }\n\n document.body.appendChild(link);\n\n link.click();\n\n document.body.removeChild(link);\n}\n\nexport function parseTo(to: NavigateArg | undefined): {\n newTab: boolean;\n nativeRoute: boolean;\n cleanTo: To | undefined;\n isHistoryNavigation: boolean;\n historyDelta?: number;\n isHashNavigation: boolean;\n isExternal: boolean;\n} {\n // Handle number (history navigation)\n if (typeof to === 'number') {\n return {\n newTab: false,\n nativeRoute: false,\n cleanTo: undefined,\n isHistoryNavigation: true,\n historyDelta: to,\n isHashNavigation: false,\n isExternal: false,\n };\n }\n\n // Handle object path\n if (to && typeof to === 'object') {\n return {\n newTab: false,\n nativeRoute: false,\n cleanTo: to,\n isHistoryNavigation: false,\n isHashNavigation: false,\n isExternal: false,\n };\n }\n\n // Handle string. Clean it first, as the URL parser does, so ` !https://…`\n // still opens a tab and a blank value counts as no destination.\n const value = typeof to === 'string' ? normalizeNavigationUrl(to) : '';\n\n if (!value) {\n return {\n newTab: false,\n nativeRoute: false,\n cleanTo: undefined,\n isHistoryNavigation: false,\n isHashNavigation: false,\n isExternal: false,\n };\n }\n\n const newTab = value.startsWith('!');\n const nativeRoute = value.startsWith('@');\n const isHashNavigation = value.startsWith('#');\n const cleanTo =\n newTab || nativeRoute ? normalizeNavigationUrl(value.slice(1)) : value;\n const isExternal = isExternalUrl(cleanTo);\n\n return {\n newTab,\n nativeRoute,\n cleanTo,\n isHistoryNavigation: false,\n isHashNavigation,\n isExternal,\n };\n}\n\ninterface SanitizedPressEvent {\n type?: string;\n pointerType?: string;\n shiftKey: boolean;\n metaKey: boolean;\n ctrlKey: boolean;\n altKey: boolean;\n // target is defined as a non-enumerable property below\n [key: string]: unknown; // allow non-enumerable 'target'\n}\n\nfunction sanitizePressEvent(evt: PressEvent): SanitizedPressEvent {\n const safeEvt: SanitizedPressEvent = {\n type: 'type' in evt ? evt.type : undefined,\n pointerType:\n 'pointerType' in evt\n ? (evt as { pointerType?: string }).pointerType\n : undefined,\n shiftKey:\n 'shiftKey' in evt ? !!(evt as { shiftKey?: boolean }).shiftKey : false,\n metaKey:\n 'metaKey' in evt ? !!(evt as { metaKey?: boolean }).metaKey : false,\n ctrlKey:\n 'ctrlKey' in evt ? !!(evt as { ctrlKey?: boolean }).ctrlKey : false,\n altKey: 'altKey' in evt ? !!(evt as { altKey?: boolean }).altKey : false,\n };\n try {\n Object.defineProperty(safeEvt, 'target', {\n value: 'target' in evt ? (evt as { target?: unknown }).target : undefined,\n enumerable: false,\n configurable: true,\n });\n } catch (e) {\n // Failed to define target property - continue without it\n }\n return safeEvt;\n}\n\nexport function performClickHandler(\n evt,\n { navigate, resolvedHref, to, onPress, tracking, navigationOptions },\n) {\n const {\n newTab,\n nativeRoute,\n cleanTo,\n isHistoryNavigation,\n historyDelta,\n isHashNavigation,\n isExternal,\n } = parseTo(to);\n const element = evt.target;\n const qa = element?.getAttribute('data-qa');\n\n onPress?.(sanitizePressEvent(evt));\n\n if (to == null) {\n // Allow 0 as valid navigation (go to current page)\n tracking.event(BUTTON_PRESS_EVENT, { qa }, element);\n return;\n }\n\n // Handle history navigation (back/forward)\n if (isHistoryNavigation && typeof historyDelta === 'number') {\n tracking.event(\n LINK_PRESS_EVENT,\n { qa, delta: historyDelta, type: 'router-history' },\n element,\n );\n navigate(historyDelta);\n return;\n }\n\n // Handle hash navigation (smooth scroll)\n if (isHashNavigation && typeof cleanTo === 'string') {\n const id = cleanTo.slice(1);\n const targetElement = document.getElementById(id);\n\n tracking.event(\n LINK_PRESS_EVENT,\n { qa, href: cleanTo, type: 'hash', target: id },\n element,\n );\n\n if (targetElement) {\n targetElement.scrollIntoView({\n behavior: 'smooth',\n block: 'start',\n inline: 'nearest',\n });\n }\n return;\n }\n\n // Handle new tab (via ! prefix or user modifiers)\n if (evt.shiftKey || evt.metaKey || (evt as any).ctrlKey || newTab) {\n openLink(resolvedHref, true);\n tracking.event(\n LINK_PRESS_EVENT,\n { qa, href: resolvedHref, type: 'tab' },\n element,\n );\n return;\n }\n\n // Handle @ prefix (native navigation)\n if (nativeRoute) {\n if (cleanTo === '' || cleanTo === undefined) {\n // @'' or @ -> reload current page\n tracking.event(LINK_PRESS_EVENT, { qa, type: 'native' }, element);\n window.location.reload();\n } else {\n // @path -> navigate to resolved path natively\n tracking.event(\n LINK_PRESS_EVENT,\n { qa, href: resolvedHref, type: 'native' },\n element,\n );\n window.location.assign(resolvedHref);\n }\n return;\n }\n\n // Handle external URLs (always native)\n if (isExternal && typeof cleanTo === 'string') {\n tracking.event(\n LINK_PRESS_EVENT,\n { qa, href: cleanTo, type: 'native' },\n element,\n );\n window.location.assign(cleanTo);\n return;\n }\n\n // Handle router navigation\n if (cleanTo !== undefined) {\n tracking.event(\n LINK_PRESS_EVENT,\n { qa, href: resolvedHref, type: 'router' },\n element,\n );\n navigate(cleanTo, navigationOptions);\n }\n}\n\nexport const useAction = function useAction(\n {\n to,\n as,\n htmlType,\n label,\n mods,\n onPress,\n navigationOptions,\n ...props\n }: CubeUseActionProps,\n ref: FocusableRef<HTMLElement>,\n) {\n useWarn(label !== undefined, {\n key: 'action-label-deprecated',\n args: [\n 'The \"label\" property of Button, ItemButton, ItemAction and Action is deprecated. Use \"aria-label\" for the accessible name and \"children\" for visible text.',\n ],\n });\n\n const tracking = useTracking();\n const isDisabled = props.isDisabled;\n\n const {\n newTab,\n nativeRoute,\n cleanTo,\n isHistoryNavigation,\n isHashNavigation,\n isExternal,\n } = parseTo(to);\n\n // Resolve the path with its `!` / `@` prefix stripped, and only that. Also\n // resolving the raw `to` put `!https://…` through the router as a route,\n // which a HashRouter warned about on every render.\n const { navigate, resolvedHref } = useNavigation(cleanTo || '.');\n\n // Determine element type: 'a' for navigation, 'button' for actions\n as = cleanTo !== undefined ? 'a' : as || 'button';\n\n // Compute target (prefixes override explicit target prop per spec)\n const target = newTab ? '_blank' : props.target;\n\n // Compute href for anchor elements\n let href: string | undefined;\n if (as === 'a' && cleanTo !== undefined) {\n if (newTab || nativeRoute) {\n // For ! and @ prefixes, resolve the clean path\n href =\n typeof cleanTo === 'string' && isExternal\n ? cleanTo // External URLs as-is\n : resolvedHref;\n } else {\n // Regular navigation\n href = resolvedHref;\n }\n }\n\n const domRef = useFocusableRef(ref);\n\n // Use navigation options directly\n const mergedNavigationOptions = navigationOptions;\n\n const customOnPress = useEvent((evt: PressEvent) => {\n performClickHandler(evt, {\n navigate,\n resolvedHref: href || resolvedHref,\n to,\n onPress,\n tracking,\n navigationOptions: mergedNavigationOptions,\n });\n });\n\n // Native DOM props keep their HTML event targets and value types. Aria\n // handles the same element and forwards value without changing it.\n let { buttonProps, isPressed } = useButton(\n {\n 'aria-label': label, // deprecated, see `CubeUseActionProps.label`\n ...props,\n onPress: customOnPress,\n type: htmlType ?? 'button',\n } as AriaButtonProps,\n domRef,\n );\n let { hoverProps, isHovered } = useHover({ isDisabled });\n let { focusProps, isFocused } = useFocus(true);\n\n const customProps =\n cleanTo !== undefined\n ? {\n onClick(evt) {\n evt.preventDefault();\n },\n }\n : {};\n\n return {\n isPressed,\n actionProps: {\n mods: {\n hovered: isHovered && !isDisabled,\n pressed: isPressed && !isDisabled,\n // A disabled action that keeps focus (`aria-disabled`, see\n // `getDisabledElementProps`) still shows where focus is.\n focused: isFocused,\n disabled: isDisabled,\n ...mods,\n },\n ...(mergeProps(\n buttonProps,\n hoverProps,\n focusProps,\n customProps,\n filterBaseProps(props, FILTER_OPTIONS),\n ) as object),\n ref: domRef,\n type: htmlType || 'button',\n // `autoFocus` acts when the action mounts, and a dialog kept mounted\n // while closed (`hideOnClose`) mounts hidden: it focuses the marked\n // control on every open instead.\n ...(props.autoFocus ? { 'data-autofocus': '' } : undefined),\n rel: as === 'a' && newTab ? 'noopener noreferrer' : undefined,\n as,\n isDisabled,\n target,\n href,\n },\n };\n};\n"],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
 
2
2
  import { MenuTrigger as _MenuTrigger } from "./Menu/MenuTrigger.js";
3
- import "./Menu/index.js";
4
3
  import { ComponentProps, ComponentType, ReactElement, RefObject } from "react";
5
4
  //#region src/components/actions/use-anchored-menu.d.ts
6
5
  export interface UseAnchoredMenuReturn<P, T> {
@@ -1,8 +1,8 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.206.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.208.0 | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../utils/react/mergeProps.js";
3
- import { usePopoverSync } from "../../utils/react/usePopoverSync.js";
4
3
  import { useEvent } from "../../_internal/hooks/use-event.js";
5
4
  import { useI18n } from "../../i18n/useI18n.js";
5
+ import { usePopoverSync } from "../../utils/react/usePopoverSync.js";
6
6
  import { generateRandomId } from "../../utils/random.js";
7
7
  import { MenuTrigger as _MenuTrigger } from "./Menu/MenuTrigger.js";
8
8
  import { useEffect, useMemo, useRef, useState } from "react";
@@ -1 +1 @@
1
- {"version":3,"file":"use-anchored-menu.js","names":["Pressable","ComponentProps","ComponentType","ReactElement","RefObject","useEffect","useMemo","useRef","useState","VisuallyHidden","useEvent","useI18n","generateRandomId","mergeProps","usePopoverSync","MenuTrigger","UseAnchoredMenuReturn","anchorRef","HTMLElement","open","props","P","triggerProps","T","update","close","isOpen","rendered","useAnchoredMenu","Component","defaultTriggerProps","Omit","defaultMenuProps","t","setIsOpen","runtimeProps","setRuntimeProps","setTriggerProps","popoverRef","HTMLDivElement","setupRef","el","current","dataset","popoverTrigger","menuId","onClose","triggerRef","containerRef","setupCheck","Error","renderedMenu","componentProps","undefined","MenuTrigger","mergeProps"],"sources":["../../../src/components/actions/use-anchored-menu.tsx"],"sourcesContent":["import { Pressable } from '@react-aria/interactions';\nimport {\n ComponentProps,\n ComponentType,\n ReactElement,\n RefObject,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { VisuallyHidden } from 'react-aria';\n\nimport { useEvent } from '../../_internal';\nimport { useI18n } from '../../i18n';\nimport { generateRandomId } from '../../utils/random';\nimport { mergeProps } from '../../utils/react';\nimport { usePopoverSync } from '../../utils/react/usePopoverSync';\n\nimport { MenuTrigger } from './Menu';\n\nexport interface UseAnchoredMenuReturn<P, T> {\n /** Ref to attach to the anchor element for positioning the menu. */\n anchorRef: RefObject<HTMLElement | null>;\n\n /**\n * Programmatically opens the menu with the provided props. They are merged\n * over the CURRENT `defaultMenuProps` on every render, so defaults that change\n * while the menu is open reach it without an `update()` call.\n *\n * @param props - Props to pass to the menu component\n * @param triggerProps - Additional props for MenuTrigger (merged with defaultTriggerProps)\n */\n open(props?: P, triggerProps?: T): void;\n\n /**\n * Updates the RUNTIME props of the currently open menu. Props are merged over\n * the current `defaultMenuProps`. Only needed for props the caller owns —\n * `defaultMenuProps` is re-read on every render.\n */\n update(props: P, triggerProps?: T): void;\n\n /** Closes the menu programmatically. */\n close(): void;\n\n /** Current open/closed state of the menu. */\n isOpen: boolean;\n\n /**\n * JSX element that must be rendered in your component tree.\n * Contains the MenuTrigger and positioning logic.\n */\n get rendered(): ReactElement | null;\n}\n\n/**\n * Generic hook to manage an anchored menu component.\n *\n * @param Component - A React component that represents the menu content (Menu or CommandMenu).\n * @param defaultTriggerProps - Default props to pass to the MenuTrigger.\n * @param defaultMenuProps - Default props to pass to the Menu component.\n * @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.\n */\nexport function useAnchoredMenu<P, T = ComponentProps<typeof MenuTrigger>>(\n Component: ComponentType<P>,\n defaultTriggerProps?: Omit<\n ComponentProps<typeof MenuTrigger>,\n 'children' | 'isOpen' | 'onOpenChange' | 'targetRef'\n >,\n defaultMenuProps?: P,\n): UseAnchoredMenuReturn<P, T> {\n const { t } = useI18n();\n const [isOpen, setIsOpen] = useState(false);\n /**\n * The props the CALLER passed to `open()`/`update()`, on their own — never\n * pre-merged with `defaultMenuProps`. Merging at open time snapshotted the\n * defaults, which froze the content of a menu whose items live in those\n * defaults; merging on render keeps them current. Runtime props still win.\n */\n const [runtimeProps, setRuntimeProps] = useState<P | null>(null);\n const [triggerProps, setTriggerProps] = useState<T | null>(null);\n const anchorRef = useRef<HTMLElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n const setupRef = useRef(false);\n\n useEffect(() => {\n const el = anchorRef.current;\n if (el) {\n el.dataset.popoverTrigger = '';\n return () => {\n delete el.dataset.popoverTrigger;\n };\n }\n }, []);\n\n // Generate a unique ID for this menu instance\n const menuId = useMemo(() => generateRandomId(), []);\n\n // Feed both the anchor (`triggerRef`) and the popover container\n // (`containerRef`) into the sync. The container ref is shared with the\n // rendered `MenuTrigger` via its `popoverRef` prop — the dummy `MenuTrigger`\n // opts out of `usePopoverSync` (`enabled: !isDummy`), so without this the\n // nested-popover guard would have no container to match against and a\n // `SubMenuTrigger` opened inside this menu would close the whole menu.\n usePopoverSync({\n menuId,\n isOpen,\n onClose: () => setIsOpen(false),\n triggerRef: anchorRef,\n containerRef: popoverRef,\n });\n\n function setupCheck() {\n if (!setupRef.current) {\n throw new Error(\n 'useAnchoredMenu: MenuTrigger must be rendered. Use `rendered` property to include it in your component tree.',\n );\n }\n }\n\n // 'open' accepts props required by the Component and opens the menu\n const open = useEvent((props: P = {} as P, triggerProps?: T) => {\n setupCheck();\n\n // Overrides only — `defaultMenuProps` is merged in on render.\n setRuntimeProps(props);\n setTriggerProps(triggerProps ?? null);\n setIsOpen(true);\n });\n\n const update = useEvent((props: P, triggerProps?: T) => {\n setupCheck();\n\n setRuntimeProps(props);\n setTriggerProps(triggerProps ?? null);\n });\n\n const close = useEvent(() => {\n setIsOpen(false);\n });\n\n // Render the menu only when it has been opened at least once\n const renderedMenu = useMemo(() => {\n if (!runtimeProps) return null;\n\n // Merged here rather than at open time, so the defaults an open menu\n // renders are the CURRENT ones. Runtime props still take precedence.\n const componentProps = defaultMenuProps\n ? { ...defaultMenuProps, ...runtimeProps }\n : runtimeProps;\n\n return (\n <MenuTrigger\n {...mergeProps(defaultTriggerProps, triggerProps || undefined)}\n isDummy\n isOpen={isOpen}\n targetRef={anchorRef}\n popoverRef={popoverRef}\n onOpenChange={setIsOpen}\n >\n <VisuallyHidden>\n <Pressable>\n <button aria-label={t('contextMenu.contextMenu', 'context-menu')} />\n </Pressable>\n </VisuallyHidden>\n <Component {...componentProps} />\n </MenuTrigger>\n );\n }, [\n runtimeProps,\n defaultMenuProps,\n triggerProps,\n isOpen,\n defaultTriggerProps,\n t,\n ]);\n\n return {\n anchorRef,\n open,\n update,\n close,\n isOpen,\n get rendered() {\n setupRef.current = true;\n\n return renderedMenu;\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA+DA,SAAgB4B,gBACdC,WACAC,qBAIAE,kBAC6B;CAC7B,MAAM,EAAEC,MAAMtB,QAAQ;CACtB,MAAM,CAACe,QAAQQ,aAAa1B,SAAS,KAAK;;;;;;;CAO1C,MAAM,CAAC2B,cAAcC,mBAAmB5B,SAAmB,IAAI;CAC/D,MAAM,CAACc,cAAce,mBAAmB7B,SAAmB,IAAI;CAC/D,MAAMS,YAAYV,OAAoB,IAAI;CAC1C,MAAM+B,aAAa/B,OAAuB,IAAI;CAC9C,MAAMiC,WAAWjC,OAAO,KAAK;CAE7BF,gBAAgB;EACd,MAAMoC,KAAKxB,UAAUyB;EACrB,IAAID,IAAI;GACNA,GAAGE,QAAQC,iBAAiB;GAC5B,aAAa;IACX,OAAOH,GAAGE,QAAQC;GACpB;EACF;CACF,GAAG,CAAA,CAAE;CAGL,MAAMC,SAASvC,cAAcM,iBAAiB,GAAG,CAAA,CAAE;CAQnDE,eAAe;EACb+B;EACAnB;EACAoB,eAAeZ,UAAU,KAAK;EAC9Ba,YAAY9B;EACZ+B,cAAcV;CAChB,CAAC;CAED,SAASW,aAAa;EACpB,IAAI,CAACT,SAASE,SACZ,MAAM,IAAIQ,MACR,8GACF;CAEJ;CAGA,MAAM/B,OAAOT,UAAUU,QAAW,CAAC,GAAQE,mBAAqB;EAC9D2B,WAAW;EAGXb,gBAAgBhB,KAAK;EACrBiB,gBAAgBf,kBAAgB,IAAI;EACpCY,UAAU,IAAI;CAChB,CAAC;CAED,MAAMV,SAASd,UAAUU,SAAUE,mBAAqB;EACtD2B,WAAW;EAEXb,gBAAgBhB,OAAK;EACrBiB,gBAAgBf,kBAAgB,IAAI;CACtC,CAAC;CAED,MAAMG,QAAQf,eAAe;EAC3BwB,UAAU,KAAK;CACjB,CAAC;CAGD,MAAMiB,eAAe7C,cAAc;EACjC,IAAI,CAAC6B,cAAc,OAAO;EAI1B,MAAMiB,iBAAiBpB,mBACnB;GAAE,GAAGA;GAAkB,GAAGG;EAAa,IACvCA;EAEJ,OACE,qBAACmB,cAAD;GACE,GAAIzC,aAAWiB,qBAAqBR,gBAAgB+B,KAAAA,CAAS;GAC7D,SAAA;GACQ3B;GACR,WAAWT;GACCqB;GACZ,cAAcJ;GANhB,UAAA,CAQE,oBAAC,gBAAD,EAAA,UACE,oBAAC,WAAD,EAAA,UACE,oBAAC,UAAD,EAAQ,cAAYD,EAAE,2BAA2B,cAAc,EAAE,CAAA,EACxD,CAAA,EACG,CAAA,GAChB,oBAAC,WAAD,EAAW,GAAImB,eAAe,CAAA,CACnB;;CAEjB,GAAG;EACDjB;EACAH;EACAV;EACAI;EACAI;EACAG;CAAC,CACF;CAED,OAAO;EACLhB;EACAE;EACAK;EACAC;EACAC;EACA,IAAIC,WAAW;GACba,SAASE,UAAU;GAEnB,OAAOS;EACT;CACF;AACF"}
1
+ {"version":3,"file":"use-anchored-menu.js","names":["Pressable","ComponentProps","ComponentType","ReactElement","RefObject","useEffect","useMemo","useRef","useState","VisuallyHidden","useEvent","useI18n","generateRandomId","mergeProps","usePopoverSync","MenuTrigger","UseAnchoredMenuReturn","anchorRef","HTMLElement","open","props","P","triggerProps","T","update","close","isOpen","rendered","useAnchoredMenu","Component","defaultTriggerProps","Omit","defaultMenuProps","t","setIsOpen","runtimeProps","setRuntimeProps","setTriggerProps","popoverRef","HTMLDivElement","setupRef","el","current","dataset","popoverTrigger","menuId","onClose","triggerRef","containerRef","setupCheck","Error","renderedMenu","componentProps","undefined","MenuTrigger","mergeProps"],"sources":["../../../src/components/actions/use-anchored-menu.tsx"],"sourcesContent":["import { Pressable } from '@react-aria/interactions';\nimport {\n ComponentProps,\n ComponentType,\n ReactElement,\n RefObject,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { VisuallyHidden } from 'react-aria';\n\nimport { useEvent } from '../../_internal/hooks/use-event';\nimport { useI18n } from '../../i18n/useI18n';\nimport { generateRandomId } from '../../utils/random';\nimport { mergeProps } from '../../utils/react/mergeProps';\nimport { usePopoverSync } from '../../utils/react/usePopoverSync';\n\nimport { MenuTrigger } from './Menu/MenuTrigger';\n\nexport interface UseAnchoredMenuReturn<P, T> {\n /** Ref to attach to the anchor element for positioning the menu. */\n anchorRef: RefObject<HTMLElement | null>;\n\n /**\n * Programmatically opens the menu with the provided props. They are merged\n * over the CURRENT `defaultMenuProps` on every render, so defaults that change\n * while the menu is open reach it without an `update()` call.\n *\n * @param props - Props to pass to the menu component\n * @param triggerProps - Additional props for MenuTrigger (merged with defaultTriggerProps)\n */\n open(props?: P, triggerProps?: T): void;\n\n /**\n * Updates the RUNTIME props of the currently open menu. Props are merged over\n * the current `defaultMenuProps`. Only needed for props the caller owns —\n * `defaultMenuProps` is re-read on every render.\n */\n update(props: P, triggerProps?: T): void;\n\n /** Closes the menu programmatically. */\n close(): void;\n\n /** Current open/closed state of the menu. */\n isOpen: boolean;\n\n /**\n * JSX element that must be rendered in your component tree.\n * Contains the MenuTrigger and positioning logic.\n */\n get rendered(): ReactElement | null;\n}\n\n/**\n * Generic hook to manage an anchored menu component.\n *\n * @param Component - A React component that represents the menu content (Menu or CommandMenu).\n * @param defaultTriggerProps - Default props to pass to the MenuTrigger.\n * @param defaultMenuProps - Default props to pass to the Menu component.\n * @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.\n */\nexport function useAnchoredMenu<P, T = ComponentProps<typeof MenuTrigger>>(\n Component: ComponentType<P>,\n defaultTriggerProps?: Omit<\n ComponentProps<typeof MenuTrigger>,\n 'children' | 'isOpen' | 'onOpenChange' | 'targetRef'\n >,\n defaultMenuProps?: P,\n): UseAnchoredMenuReturn<P, T> {\n const { t } = useI18n();\n const [isOpen, setIsOpen] = useState(false);\n /**\n * The props the CALLER passed to `open()`/`update()`, on their own — never\n * pre-merged with `defaultMenuProps`. Merging at open time snapshotted the\n * defaults, which froze the content of a menu whose items live in those\n * defaults; merging on render keeps them current. Runtime props still win.\n */\n const [runtimeProps, setRuntimeProps] = useState<P | null>(null);\n const [triggerProps, setTriggerProps] = useState<T | null>(null);\n const anchorRef = useRef<HTMLElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n const setupRef = useRef(false);\n\n useEffect(() => {\n const el = anchorRef.current;\n if (el) {\n el.dataset.popoverTrigger = '';\n return () => {\n delete el.dataset.popoverTrigger;\n };\n }\n }, []);\n\n // Generate a unique ID for this menu instance\n const menuId = useMemo(() => generateRandomId(), []);\n\n // Feed both the anchor (`triggerRef`) and the popover container\n // (`containerRef`) into the sync. The container ref is shared with the\n // rendered `MenuTrigger` via its `popoverRef` prop — the dummy `MenuTrigger`\n // opts out of `usePopoverSync` (`enabled: !isDummy`), so without this the\n // nested-popover guard would have no container to match against and a\n // `SubMenuTrigger` opened inside this menu would close the whole menu.\n usePopoverSync({\n menuId,\n isOpen,\n onClose: () => setIsOpen(false),\n triggerRef: anchorRef,\n containerRef: popoverRef,\n });\n\n function setupCheck() {\n if (!setupRef.current) {\n throw new Error(\n 'useAnchoredMenu: MenuTrigger must be rendered. Use `rendered` property to include it in your component tree.',\n );\n }\n }\n\n // 'open' accepts props required by the Component and opens the menu\n const open = useEvent((props: P = {} as P, triggerProps?: T) => {\n setupCheck();\n\n // Overrides only — `defaultMenuProps` is merged in on render.\n setRuntimeProps(props);\n setTriggerProps(triggerProps ?? null);\n setIsOpen(true);\n });\n\n const update = useEvent((props: P, triggerProps?: T) => {\n setupCheck();\n\n setRuntimeProps(props);\n setTriggerProps(triggerProps ?? null);\n });\n\n const close = useEvent(() => {\n setIsOpen(false);\n });\n\n // Render the menu only when it has been opened at least once\n const renderedMenu = useMemo(() => {\n if (!runtimeProps) return null;\n\n // Merged here rather than at open time, so the defaults an open menu\n // renders are the CURRENT ones. Runtime props still take precedence.\n const componentProps = defaultMenuProps\n ? { ...defaultMenuProps, ...runtimeProps }\n : runtimeProps;\n\n return (\n <MenuTrigger\n {...mergeProps(defaultTriggerProps, triggerProps || undefined)}\n isDummy\n isOpen={isOpen}\n targetRef={anchorRef}\n popoverRef={popoverRef}\n onOpenChange={setIsOpen}\n >\n <VisuallyHidden>\n <Pressable>\n <button aria-label={t('contextMenu.contextMenu', 'context-menu')} />\n </Pressable>\n </VisuallyHidden>\n <Component {...componentProps} />\n </MenuTrigger>\n );\n }, [\n runtimeProps,\n defaultMenuProps,\n triggerProps,\n isOpen,\n defaultTriggerProps,\n t,\n ]);\n\n return {\n anchorRef,\n open,\n update,\n close,\n isOpen,\n get rendered() {\n setupRef.current = true;\n\n return renderedMenu;\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA+DA,SAAgB4B,gBACdC,WACAC,qBAIAE,kBAC6B;CAC7B,MAAM,EAAEC,MAAMtB,QAAQ;CACtB,MAAM,CAACe,QAAQQ,aAAa1B,SAAS,KAAK;;;;;;;CAO1C,MAAM,CAAC2B,cAAcC,mBAAmB5B,SAAmB,IAAI;CAC/D,MAAM,CAACc,cAAce,mBAAmB7B,SAAmB,IAAI;CAC/D,MAAMS,YAAYV,OAAoB,IAAI;CAC1C,MAAM+B,aAAa/B,OAAuB,IAAI;CAC9C,MAAMiC,WAAWjC,OAAO,KAAK;CAE7BF,gBAAgB;EACd,MAAMoC,KAAKxB,UAAUyB;EACrB,IAAID,IAAI;GACNA,GAAGE,QAAQC,iBAAiB;GAC5B,aAAa;IACX,OAAOH,GAAGE,QAAQC;GACpB;EACF;CACF,GAAG,CAAA,CAAE;CAGL,MAAMC,SAASvC,cAAcM,iBAAiB,GAAG,CAAA,CAAE;CAQnDE,eAAe;EACb+B;EACAnB;EACAoB,eAAeZ,UAAU,KAAK;EAC9Ba,YAAY9B;EACZ+B,cAAcV;CAChB,CAAC;CAED,SAASW,aAAa;EACpB,IAAI,CAACT,SAASE,SACZ,MAAM,IAAIQ,MACR,8GACF;CAEJ;CAGA,MAAM/B,OAAOT,UAAUU,QAAW,CAAC,GAAQE,mBAAqB;EAC9D2B,WAAW;EAGXb,gBAAgBhB,KAAK;EACrBiB,gBAAgBf,kBAAgB,IAAI;EACpCY,UAAU,IAAI;CAChB,CAAC;CAED,MAAMV,SAASd,UAAUU,SAAUE,mBAAqB;EACtD2B,WAAW;EAEXb,gBAAgBhB,OAAK;EACrBiB,gBAAgBf,kBAAgB,IAAI;CACtC,CAAC;CAED,MAAMG,QAAQf,eAAe;EAC3BwB,UAAU,KAAK;CACjB,CAAC;CAGD,MAAMiB,eAAe7C,cAAc;EACjC,IAAI,CAAC6B,cAAc,OAAO;EAI1B,MAAMiB,iBAAiBpB,mBACnB;GAAE,GAAGA;GAAkB,GAAGG;EAAa,IACvCA;EAEJ,OACE,qBAACmB,cAAD;GACE,GAAIzC,aAAWiB,qBAAqBR,gBAAgB+B,KAAAA,CAAS;GAC7D,SAAA;GACQ3B;GACR,WAAWT;GACCqB;GACZ,cAAcJ;GANhB,UAAA,CAQE,oBAAC,gBAAD,EAAA,UACE,oBAAC,WAAD,EAAA,UACE,oBAAC,UAAD,EAAQ,cAAYD,EAAE,2BAA2B,cAAc,EAAE,CAAA,EACxD,CAAA,EACG,CAAA,GAChB,oBAAC,WAAD,EAAW,GAAImB,eAAe,CAAA,CACnB;;CAEjB,GAAG;EACDjB;EACAH;EACAV;EACAI;EACAI;EACAG;CAAC,CACF;CAED,OAAO;EACLhB;EACAE;EACAK;EACAC;EACAC;EACA,IAAIC,WAAW;GACba,SAASE,UAAU;GAEnB,OAAOS;EACT;CACF;AACF"}
@@ -1,6 +1,5 @@
1
1
 
2
2
  import { MenuTrigger as _MenuTrigger } from "./Menu/MenuTrigger.js";
3
- import "./Menu/index.js";
4
3
  import { ComponentProps, ComponentType, MouseEvent, PointerEvent, ReactElement, RefObject } from "react";
5
4
  //#region src/components/actions/use-context-menu.d.ts
6
5
  type NativeMouseEvent = globalThis.MouseEvent;
@@ -1,8 +1,8 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.206.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.208.0 | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../utils/react/mergeProps.js";
3
- import { usePopoverSync } from "../../utils/react/usePopoverSync.js";
4
3
  import { useEvent } from "../../_internal/hooks/use-event.js";
5
4
  import { useI18n } from "../../i18n/useI18n.js";
5
+ import { usePopoverSync } from "../../utils/react/usePopoverSync.js";
6
6
  import { generateRandomId } from "../../utils/random.js";
7
7
  import { MenuTrigger as _MenuTrigger } from "./Menu/MenuTrigger.js";
8
8
  import { tasty } from "@tenphi/tasty";