@cube-dev/ui-kit 0.190.6 → 0.190.8

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 (735) hide show
  1. package/dist/CHANGELOG.md +24 -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-timer/timer.js +1 -1
  8. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  9. package/dist/_internal/hooks/use-warn.js +1 -1
  10. package/dist/components/Block.js +1 -1
  11. package/dist/components/CollectionItem.d.ts +1 -1
  12. package/dist/components/CollectionItem.js +1 -1
  13. package/dist/components/GlobalStyles.js +1 -1
  14. package/dist/components/GridProvider.js +1 -1
  15. package/dist/components/HiddenInput.js +1 -1
  16. package/dist/components/Root.js +1 -1
  17. package/dist/components/actions/Action/Action.d.ts +2 -2
  18. package/dist/components/actions/Action/Action.js +1 -1
  19. package/dist/components/actions/Action/Action.js.map +1 -1
  20. package/dist/components/actions/Banner/Banner.js +1 -1
  21. package/dist/components/actions/Button/Button.d.ts +2 -2
  22. package/dist/components/actions/Button/Button.js +1 -1
  23. package/dist/components/actions/Button/Button.js.map +1 -1
  24. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  25. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  26. package/dist/components/actions/ButtonSplit/context.js +1 -1
  27. package/dist/components/actions/CommandMenu/CommandMenu.d.ts +18 -5
  28. package/dist/components/actions/CommandMenu/CommandMenu.js +207 -197
  29. package/dist/components/actions/CommandMenu/CommandMenu.js.map +1 -1
  30. package/dist/components/actions/CommandMenu/styled.js +1 -1
  31. package/dist/components/actions/ItemAction/ItemAction.d.ts +2 -1
  32. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  33. package/dist/components/actions/ItemAction/ItemAction.js.map +1 -1
  34. package/dist/components/actions/ItemActionContext.js +1 -1
  35. package/dist/components/actions/ItemActionsWrapper.js +1 -1
  36. package/dist/components/actions/ItemButton/ItemButton.d.ts +3 -3
  37. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  38. package/dist/components/actions/ItemButton/ItemButton.js.map +1 -1
  39. package/dist/components/actions/Link/Link.d.ts +1 -1
  40. package/dist/components/actions/Link/Link.js +1 -1
  41. package/dist/components/actions/Menu/Menu.d.ts +20 -5
  42. package/dist/components/actions/Menu/Menu.js +51 -41
  43. package/dist/components/actions/Menu/Menu.js.map +1 -1
  44. package/dist/components/actions/Menu/MenuItem.js +1 -1
  45. package/dist/components/actions/Menu/MenuItem.js.map +1 -1
  46. package/dist/components/actions/Menu/MenuSection.js +2 -3
  47. package/dist/components/actions/Menu/MenuSection.js.map +1 -1
  48. package/dist/components/actions/Menu/MenuTrigger.d.ts +42 -3
  49. package/dist/components/actions/Menu/MenuTrigger.js +22 -22
  50. package/dist/components/actions/Menu/MenuTrigger.js.map +1 -1
  51. package/dist/components/actions/Menu/SubMenuTrigger.js +4 -4
  52. package/dist/components/actions/Menu/SubMenuTrigger.js.map +1 -1
  53. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  54. package/dist/components/actions/Menu/context.d.ts +2 -2
  55. package/dist/components/actions/Menu/context.js +1 -1
  56. package/dist/components/actions/Menu/context.js.map +1 -1
  57. package/dist/components/actions/Menu/styled.js +1 -1
  58. package/dist/components/actions/Menu/styled.js.map +1 -1
  59. package/dist/components/actions/actions-run.js +1 -1
  60. package/dist/components/actions/index.d.ts +1 -1
  61. package/dist/components/actions/index.js +1 -1
  62. package/dist/components/actions/use-action.d.ts +4 -5
  63. package/dist/components/actions/use-action.js +3 -2
  64. package/dist/components/actions/use-action.js.map +1 -1
  65. package/dist/components/actions/use-anchored-menu.js +1 -1
  66. package/dist/components/actions/use-context-menu.js +4 -3
  67. package/dist/components/actions/use-context-menu.js.map +1 -1
  68. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  69. package/dist/components/content/Alert/Alert.js +1 -1
  70. package/dist/components/content/Alert/use-alert.js +1 -1
  71. package/dist/components/content/Avatar/Avatar.js +1 -1
  72. package/dist/components/content/Badge/Badge.js +1 -1
  73. package/dist/components/content/Card/Card.js +1 -1
  74. package/dist/components/content/Content.js +1 -1
  75. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +2 -2
  76. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js.map +1 -1
  77. package/dist/components/content/CopySnippet/CopySnippet.d.ts +964 -6
  78. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  79. package/dist/components/content/Disclosure/Disclosure.d.ts +1 -1
  80. package/dist/components/content/Disclosure/Disclosure.js +69 -67
  81. package/dist/components/content/Disclosure/Disclosure.js.map +1 -1
  82. package/dist/components/content/Divider.js +1 -1
  83. package/dist/components/content/Footer.js +1 -1
  84. package/dist/components/content/Header.js +1 -1
  85. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  86. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  87. package/dist/components/content/InlineInput/InlineInput.d.ts +2 -2
  88. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  89. package/dist/components/content/InlineInput/InlineInput.js.map +1 -1
  90. package/dist/components/content/Item/Item.d.ts +3 -3
  91. package/dist/components/content/Item/Item.js +10 -3
  92. package/dist/components/content/Item/Item.js.map +1 -1
  93. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  94. package/dist/components/content/ItemCard/ItemCard.d.ts +1 -1
  95. package/dist/components/content/ItemCard/ItemCard.js +34 -12
  96. package/dist/components/content/ItemCard/ItemCard.js.map +1 -1
  97. package/dist/components/content/Layout/GridLayout.js +1 -1
  98. package/dist/components/content/Layout/Layout.js +1 -1
  99. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  100. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  101. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  102. package/dist/components/content/Layout/LayoutContent.js +1 -1
  103. package/dist/components/content/Layout/LayoutContext.js +1 -1
  104. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  105. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  106. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  107. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  108. package/dist/components/content/Layout/LayoutPane.js +1 -1
  109. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  110. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  111. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  112. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  113. package/dist/components/content/Layout/index.js +1 -1
  114. package/dist/components/content/Layout/utils.js +1 -1
  115. package/dist/components/content/Paragraph.js +1 -1
  116. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  117. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  118. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  119. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  120. package/dist/components/content/Result/Result.d.ts +2 -2
  121. package/dist/components/content/Result/Result.js +1 -1
  122. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  123. package/dist/components/content/Tag/Tag.js +1 -1
  124. package/dist/components/content/Text.js +1 -1
  125. package/dist/components/content/TextItem/TextItem.d.ts +2 -2
  126. package/dist/components/content/TextItem/TextItem.js +1 -1
  127. package/dist/components/content/TextItem/TextItem.js.map +1 -1
  128. package/dist/components/content/Title.js +1 -1
  129. package/dist/components/content/Tree/Tree.js +1 -1
  130. package/dist/components/content/Tree/TreeNode.js +1 -1
  131. package/dist/components/content/Tree/TreeNode.js.map +1 -1
  132. package/dist/components/content/Tree/styled.js +1 -1
  133. package/dist/components/content/Tree/tree-index.js +1 -1
  134. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  135. package/dist/components/content/Tree/use-load-data.js +1 -1
  136. package/dist/components/content/highlightText.js +1 -1
  137. package/dist/components/content/use-auto-tooltip.d.ts +1 -1
  138. package/dist/components/content/use-auto-tooltip.js +1 -1
  139. package/dist/components/content/use-auto-tooltip.js.map +1 -1
  140. package/dist/components/data/DataTable/DataTable.js +1 -1
  141. package/dist/components/data/ItemTable/ItemTable.js +1 -1
  142. package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
  143. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  144. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  145. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  146. package/dist/components/data/ItemTable/use-item-table-column-widths.js +1 -1
  147. package/dist/components/data/ItemTable/use-item-table-drag-drop.js +1 -1
  148. package/dist/components/data/ItemTable/use-item-table-pagination.js +1 -1
  149. package/dist/components/data/ItemTable/use-item-table-selection.js +1 -1
  150. package/dist/components/data/ItemTable/use-item-table-sort.js +1 -1
  151. package/dist/components/data/ItemTable/use-item-table-tree-model.js +1 -1
  152. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  153. package/dist/components/data/TableBase/RowCollection.js +1 -1
  154. package/dist/components/data/TableBase/TableHeaderCell.js +3 -2
  155. package/dist/components/data/TableBase/TableHeaderCell.js.map +1 -1
  156. package/dist/components/data/TableBase/TableRow.js +2 -2
  157. package/dist/components/data/TableBase/TableRow.js.map +1 -1
  158. package/dist/components/data/TableBase/TableView.js +1 -1
  159. package/dist/components/data/TableBase/TreeGridTable.js +1 -1
  160. package/dist/components/data/TableBase/column-header.js +1 -1
  161. package/dist/components/data/TableBase/column-menu.d.ts +2 -1
  162. package/dist/components/data/TableBase/column-menu.js +1 -1
  163. package/dist/components/data/TableBase/column-menu.js.map +1 -1
  164. package/dist/components/data/TableBase/column-styles.js +1 -1
  165. package/dist/components/data/TableBase/column-tint.js +1 -1
  166. package/dist/components/data/TableBase/row-menu.js +1 -1
  167. package/dist/components/data/TableBase/styled.d.ts +3 -1
  168. package/dist/components/data/TableBase/styled.js +1 -1
  169. package/dist/components/data/TableBase/table-tree.js +1 -1
  170. package/dist/components/data/TableBase/types.js +1 -1
  171. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  172. package/dist/components/data/TableBase/use-column-menu.js +1 -1
  173. package/dist/components/data/TableBase/use-column-order.js +1 -1
  174. package/dist/components/data/TableBase/use-container-width.js +1 -1
  175. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  176. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  177. package/dist/components/data/TableBase/use-table-columns.js +1 -1
  178. package/dist/components/data/TableBase/use-table-search.js +1 -1
  179. package/dist/components/data/TableBase/use-table-selection.js +1 -1
  180. package/dist/components/data/TableBase/use-table-sort.js +1 -1
  181. package/dist/components/data/TableBase/use-table-sorts.js +1 -1
  182. package/dist/components/data/TableBase/use-table-storage.js +1 -1
  183. package/dist/components/data/TableBase/use-table-tree-state.js +1 -1
  184. package/dist/components/fields/Checkbox/Checkbox.d.ts +7 -14
  185. package/dist/components/fields/Checkbox/Checkbox.js +34 -36
  186. package/dist/components/fields/Checkbox/Checkbox.js.map +1 -1
  187. package/dist/components/fields/Checkbox/CheckboxGroup.d.ts +4 -2
  188. package/dist/components/fields/Checkbox/CheckboxGroup.js +7 -7
  189. package/dist/components/fields/Checkbox/CheckboxGroup.js.map +1 -1
  190. package/dist/components/fields/Checkbox/context.js +1 -1
  191. package/dist/components/fields/ColorInput/ColorInput.js +34 -29
  192. package/dist/components/fields/ColorInput/ColorInput.js.map +1 -1
  193. package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
  194. package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
  195. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
  196. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  197. package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
  198. package/dist/components/fields/CommandTextArea/CommandTextArea.d.ts +10 -5
  199. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  200. package/dist/components/fields/CommandTextArea/CommandTextArea.js.map +1 -1
  201. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  202. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  203. package/dist/components/fields/DatePicker/DateInput.js +3 -3
  204. package/dist/components/fields/DatePicker/DateInput.js.map +1 -1
  205. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  206. package/dist/components/fields/DatePicker/DatePicker.d.ts +2 -2
  207. package/dist/components/fields/DatePicker/DatePicker.js +4 -4
  208. package/dist/components/fields/DatePicker/DatePicker.js.map +1 -1
  209. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  210. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  211. package/dist/components/fields/DatePicker/DatePickerInput.js +8 -5
  212. package/dist/components/fields/DatePicker/DatePickerInput.js.map +1 -1
  213. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  214. package/dist/components/fields/DatePicker/DateRangePicker.d.ts +1 -1
  215. package/dist/components/fields/DatePicker/DateRangePicker.js +76 -72
  216. package/dist/components/fields/DatePicker/DateRangePicker.js.map +1 -1
  217. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.d.ts +1 -1
  218. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +357 -323
  219. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js.map +1 -1
  220. package/dist/components/fields/DatePicker/MonthPicker.d.ts +1 -1
  221. package/dist/components/fields/DatePicker/MonthPicker.js +3 -3
  222. package/dist/components/fields/DatePicker/PeriodPicker.d.ts +6 -5
  223. package/dist/components/fields/DatePicker/PeriodPicker.js +6 -5
  224. package/dist/components/fields/DatePicker/PeriodPicker.js.map +1 -1
  225. package/dist/components/fields/DatePicker/QuarterPicker.d.ts +1 -1
  226. package/dist/components/fields/DatePicker/QuarterPicker.js +3 -3
  227. package/dist/components/fields/DatePicker/TimeInput.d.ts +3 -3
  228. package/dist/components/fields/DatePicker/TimeInput.js +10 -5
  229. package/dist/components/fields/DatePicker/TimeInput.js.map +1 -1
  230. package/dist/components/fields/DatePicker/WeekPicker.d.ts +1 -1
  231. package/dist/components/fields/DatePicker/WeekPicker.js +3 -3
  232. package/dist/components/fields/DatePicker/YearPicker.d.ts +1 -1
  233. package/dist/components/fields/DatePicker/YearPicker.js +3 -3
  234. package/dist/components/fields/DatePicker/index.d.ts +1 -1
  235. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  236. package/dist/components/fields/DatePicker/period.js +1 -1
  237. package/dist/components/fields/DatePicker/props.js +1 -1
  238. package/dist/components/fields/DatePicker/props.js.map +1 -1
  239. package/dist/components/fields/DatePicker/utils.js +1 -1
  240. package/dist/components/fields/FileInput/FileInput.d.ts +2 -6
  241. package/dist/components/fields/FileInput/FileInput.js +1 -1
  242. package/dist/components/fields/FileInput/FileInput.js.map +1 -1
  243. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  244. package/dist/components/fields/FilterListBox/FilterListBox.js.map +1 -1
  245. package/dist/components/fields/FilterPicker/FilterPicker.d.ts +2 -0
  246. package/dist/components/fields/FilterPicker/FilterPicker.js +4 -4
  247. package/dist/components/fields/FilterPicker/FilterPicker.js.map +1 -1
  248. package/dist/components/fields/Input/Input.js +1 -1
  249. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  250. package/dist/components/fields/ListBox/ListBox.d.ts +1 -1
  251. package/dist/components/fields/ListBox/ListBox.js +5 -10
  252. package/dist/components/fields/ListBox/ListBox.js.map +1 -1
  253. package/dist/components/fields/ListBox/optionId.js +1 -1
  254. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +125 -93
  255. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js.map +1 -1
  256. package/dist/components/fields/ListBoxPopover/index.d.ts +1 -1
  257. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  258. package/dist/components/fields/ListBoxPopover/useCompositeFocus.d.ts +48 -1
  259. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  260. package/dist/components/fields/NumberInput/NumberInput.d.ts +6 -3
  261. package/dist/components/fields/NumberInput/NumberInput.js +98 -59
  262. package/dist/components/fields/NumberInput/NumberInput.js.map +1 -1
  263. package/dist/components/fields/NumberInput/StepButton.js +1 -3
  264. package/dist/components/fields/NumberInput/StepButton.js.map +1 -1
  265. package/dist/components/fields/PasswordInput/PasswordInput.d.ts +5 -2
  266. package/dist/components/fields/PasswordInput/PasswordInput.js +7 -7
  267. package/dist/components/fields/PasswordInput/PasswordInput.js.map +1 -1
  268. package/dist/components/fields/Picker/Picker.d.ts +2 -0
  269. package/dist/components/fields/Picker/Picker.js +4 -4
  270. package/dist/components/fields/Picker/Picker.js.map +1 -1
  271. package/dist/components/fields/RadioGroup/Radio.d.ts +596 -17
  272. package/dist/components/fields/RadioGroup/Radio.js +114 -111
  273. package/dist/components/fields/RadioGroup/Radio.js.map +1 -1
  274. package/dist/components/fields/RadioGroup/RadioGroup.d.ts +5 -3
  275. package/dist/components/fields/RadioGroup/RadioGroup.js +8 -8
  276. package/dist/components/fields/RadioGroup/RadioGroup.js.map +1 -1
  277. package/dist/components/fields/RadioGroup/context.js +1 -1
  278. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  279. package/dist/components/fields/SearchInput/SearchInput.d.ts +5 -3
  280. package/dist/components/fields/SearchInput/SearchInput.js +2 -2
  281. package/dist/components/fields/SearchInput/SearchInput.js.map +1 -1
  282. package/dist/components/fields/Select/Select.d.ts +5 -4
  283. package/dist/components/fields/Select/Select.js +3 -3
  284. package/dist/components/fields/Select/Select.js.map +1 -1
  285. package/dist/components/fields/Slider/Gradation.js +1 -1
  286. package/dist/components/fields/Slider/HueSlider.d.ts +1 -1
  287. package/dist/components/fields/Slider/HueSlider.js +1 -1
  288. package/dist/components/fields/Slider/RangeSlider.d.ts +1 -1
  289. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  290. package/dist/components/fields/Slider/Slider.d.ts +1 -1
  291. package/dist/components/fields/Slider/Slider.js +1 -1
  292. package/dist/components/fields/Slider/SliderBase.js +1 -1
  293. package/dist/components/fields/Slider/SliderBase.js.map +1 -1
  294. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  295. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  296. package/dist/components/fields/Slider/elements.js +1 -1
  297. package/dist/components/fields/Slider/index.js +1 -1
  298. package/dist/components/fields/Switch/Switch.d.ts +3 -7
  299. package/dist/components/fields/Switch/Switch.js +79 -81
  300. package/dist/components/fields/Switch/Switch.js.map +1 -1
  301. package/dist/components/fields/TagInput/TagInput.js +2 -2
  302. package/dist/components/fields/TagInput/TagInput.js.map +1 -1
  303. package/dist/components/fields/TagInput/TagList.js +1 -1
  304. package/dist/components/fields/TagInput/useActiveOption.js +1 -1
  305. package/dist/components/fields/TagInput/useTagError.js +1 -1
  306. package/dist/components/fields/TextArea/TextArea.d.ts +11 -3
  307. package/dist/components/fields/TextArea/TextArea.js +7 -8
  308. package/dist/components/fields/TextArea/TextArea.js.map +1 -1
  309. package/dist/components/fields/TextInput/TextInput.d.ts +10 -3
  310. package/dist/components/fields/TextInput/TextInput.js +7 -8
  311. package/dist/components/fields/TextInput/TextInput.js.map +1 -1
  312. package/dist/components/fields/TextInput/TextInputBase.d.ts +7 -5
  313. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  314. package/dist/components/fields/TextInput/TextInputBase.js.map +1 -1
  315. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
  316. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  317. package/dist/components/fields/TriggerActions.js +1 -1
  318. package/dist/components/fields/color/ColorPanel.js +1 -1
  319. package/dist/components/fields/color/channels.js +1 -1
  320. package/dist/components/fields/color/color.js +1 -1
  321. package/dist/components/fields/color/context.js +1 -1
  322. package/dist/components/fields/index.d.ts +1 -1
  323. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  324. package/dist/components/form/Form/Field.js +1 -1
  325. package/dist/components/form/Form/Form.js +1 -1
  326. package/dist/components/form/Form/ModernFormRoot.js +1 -1
  327. package/dist/components/form/Form/ResetButton/ResetButton.d.ts +2 -2
  328. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  329. package/dist/components/form/Form/ResetButton/ResetButton.js.map +1 -1
  330. package/dist/components/form/Form/SubmitButton/SubmitButton.d.ts +2 -2
  331. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  332. package/dist/components/form/Form/SubmitButton/SubmitButton.js.map +1 -1
  333. package/dist/components/form/Form/SubmitError.js +1 -1
  334. package/dist/components/form/Form/backend.js +1 -1
  335. package/dist/components/form/Form/index.d.ts +2 -2
  336. package/dist/components/form/Form/index.js +1 -1
  337. package/dist/components/form/Form/modern/actions.js +1 -1
  338. package/dist/components/form/Form/modern/context.js +1 -1
  339. package/dist/components/form/Form/modern/controller.js +1 -1
  340. package/dist/components/form/Form/modern/field-binding.js +1 -1
  341. package/dist/components/form/Form/modern/field.js +1 -1
  342. package/dist/components/form/Form/modern/react.js +1 -1
  343. package/dist/components/form/Form/modern/store.js +1 -1
  344. package/dist/components/form/Form/modern/validation.js +1 -1
  345. package/dist/components/form/Form/modern/values.js +1 -1
  346. package/dist/components/form/Form/reset-unbound-controls.js +1 -1
  347. package/dist/components/form/Form/use-field/use-field-binding.js +1 -1
  348. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  349. package/dist/components/form/Form/use-field/use-field.js +1 -1
  350. package/dist/components/form/Form/use-form.js +1 -1
  351. package/dist/components/form/Form/validation.js +1 -1
  352. package/dist/components/form/Label.js +1 -1
  353. package/dist/components/form/legacy-tooltip.js +1 -1
  354. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  355. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  356. package/dist/components/form/validation/use-validation-props.js +1 -1
  357. package/dist/components/form/wrapper.js +1 -1
  358. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +8 -2
  359. package/dist/components/helpers/DisplayTransition/DisplayTransition.js.map +1 -1
  360. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  361. package/dist/components/layout/Board/Board.js +1 -1
  362. package/dist/components/layout/Board/BoardProvider.js +1 -1
  363. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  364. package/dist/components/layout/Board/Widget.js +1 -1
  365. package/dist/components/layout/Board/WidgetHost.js +1 -1
  366. package/dist/components/layout/Board/board-context.js +1 -1
  367. package/dist/components/layout/Board/board-store.js +1 -1
  368. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  369. package/dist/components/layout/Board/grid-core/collision-modes.js +1 -1
  370. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  371. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  372. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  373. package/dist/components/layout/Board/grid-core/group-move.js +1 -1
  374. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  375. package/dist/components/layout/Board/grid-core/placement.js +1 -1
  376. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  377. package/dist/components/layout/Board/index.js +1 -1
  378. package/dist/components/layout/Board/responsive-utils.js +1 -1
  379. package/dist/components/layout/Board/use-board-layout.js +1 -1
  380. package/dist/components/layout/Board/use-board-registry.js +1 -1
  381. package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
  382. package/dist/components/layout/Board/use-board-selection.js +1 -1
  383. package/dist/components/layout/Flex.js +1 -1
  384. package/dist/components/layout/Flow.js +1 -1
  385. package/dist/components/layout/Grid.js +1 -1
  386. package/dist/components/layout/Panel.js +1 -1
  387. package/dist/components/layout/Prefix.js +1 -1
  388. package/dist/components/layout/ResizablePanel.js +1 -1
  389. package/dist/components/layout/Space.js +1 -1
  390. package/dist/components/layout/Suffix.js +1 -1
  391. package/dist/components/navigation/Pagination/Pagination.js +1 -1
  392. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  393. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  394. package/dist/components/navigation/Tabs/TabButton.js +387 -379
  395. package/dist/components/navigation/Tabs/TabButton.js.map +1 -1
  396. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  397. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  398. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  399. package/dist/components/navigation/Tabs/Tabs.d.ts +2 -2
  400. package/dist/components/navigation/Tabs/Tabs.js +2 -2
  401. package/dist/components/navigation/Tabs/Tabs.js.map +1 -1
  402. package/dist/components/navigation/Tabs/TabsAction.d.ts +1 -1
  403. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  404. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  405. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  406. package/dist/components/navigation/Tabs/styled.js +1 -1
  407. package/dist/components/navigation/Tabs/types.js +1 -1
  408. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  409. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  410. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  411. package/dist/components/other/Calendar/Calendar.js +1 -1
  412. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  413. package/dist/components/other/Calendar/CalendarGrid.js +50 -45
  414. package/dist/components/other/Calendar/CalendarGrid.js.map +1 -1
  415. package/dist/components/other/Calendar/CalendarHeader.js +2 -2
  416. package/dist/components/other/Calendar/CalendarHeader.js.map +1 -1
  417. package/dist/components/other/Calendar/CalendarPanel.js +1 -1
  418. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  419. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  420. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  421. package/dist/components/other/Calendar/RangeCalendar.js.map +1 -1
  422. package/dist/components/other/Calendar/styled.js +1 -1
  423. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  424. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  425. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  426. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  427. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  428. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  429. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  430. package/dist/components/overlays/Dialog/DialogForm.d.ts +1 -1
  431. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  432. package/dist/components/overlays/Dialog/DialogForm.js.map +1 -1
  433. package/dist/components/overlays/Dialog/DialogTrigger.d.ts +1 -1
  434. package/dist/components/overlays/Dialog/DialogTrigger.js +25 -24
  435. package/dist/components/overlays/Dialog/DialogTrigger.js.map +1 -1
  436. package/dist/components/overlays/Dialog/ModernDialogForm.js +1 -1
  437. package/dist/components/overlays/Dialog/context.js +1 -1
  438. package/dist/components/overlays/Dialog/default-button-text.js +1 -1
  439. package/dist/components/overlays/Dialog/use-content-overflow.js +1 -1
  440. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  441. package/dist/components/overlays/Modal/Modal.js +1 -1
  442. package/dist/components/overlays/Modal/Modal.js.map +1 -1
  443. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  444. package/dist/components/overlays/Modal/Overlay.d.ts +1 -2
  445. package/dist/components/overlays/Modal/Overlay.js +1 -1
  446. package/dist/components/overlays/Modal/Overlay.js.map +1 -1
  447. package/dist/components/overlays/Modal/Popover.d.ts +2 -1
  448. package/dist/components/overlays/Modal/Popover.js +1 -1
  449. package/dist/components/overlays/Modal/Popover.js.map +1 -1
  450. package/dist/components/overlays/Modal/Tray.d.ts +2 -2
  451. package/dist/components/overlays/Modal/Tray.js +1 -1
  452. package/dist/components/overlays/Modal/Tray.js.map +1 -1
  453. package/dist/components/overlays/Modal/Underlay.js +1 -1
  454. package/dist/components/overlays/Modal/index.d.ts +1 -1
  455. package/dist/components/overlays/Modal/types.d.ts +2 -1
  456. package/dist/components/overlays/Notifications/Notification.js +1 -1
  457. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  458. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  459. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  460. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  461. package/dist/components/overlays/Notifications/OverlayContainer.js +116 -91
  462. package/dist/components/overlays/Notifications/OverlayContainer.js.map +1 -1
  463. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  464. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  465. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  466. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  467. package/dist/components/overlays/Notifications/index.js +1 -1
  468. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  469. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  470. package/dist/components/overlays/Notifications/use-overlay-timers.js +17 -12
  471. package/dist/components/overlays/Notifications/use-overlay-timers.js.map +1 -1
  472. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  473. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  474. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  475. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  476. package/dist/components/overlays/Toast/index.js +1 -1
  477. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  478. package/dist/components/overlays/Toast/useToast.js +1 -1
  479. package/dist/components/overlays/Tooltip/Tooltip.js +2 -5
  480. package/dist/components/overlays/Tooltip/Tooltip.js.map +1 -1
  481. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  482. package/dist/components/overlays/Tooltip/TooltipTrigger.js +2 -5
  483. package/dist/components/overlays/Tooltip/TooltipTrigger.js.map +1 -1
  484. package/dist/components/overlays/Tooltip/context.js +1 -1
  485. package/dist/components/overlays/Tooltip/context.js.map +1 -1
  486. package/dist/components/overlays/Tooltip/split-trigger-props.js +1 -1
  487. package/dist/components/portal/Portal.js +1 -1
  488. package/dist/components/portal/PortalProvider.js +1 -1
  489. package/dist/components/portal/usePortal.js +1 -1
  490. package/dist/components/shared/DraggableCollection.js +11 -6
  491. package/dist/components/shared/DraggableCollection.js.map +1 -1
  492. package/dist/components/shared/InvalidIcon.js +1 -1
  493. package/dist/components/shared/ValidIcon.js +1 -1
  494. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  495. package/dist/components/status/Spin/Cube.js +1 -1
  496. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  497. package/dist/components/status/Spin/Spin.js +1 -1
  498. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  499. package/dist/data/item-themes.js +1 -1
  500. package/dist/data/themes.js +1 -1
  501. package/dist/eslint-plugin/defaults.generated.js +5 -1
  502. package/dist/eslint-plugin/defaults.generated.js.map +1 -1
  503. package/dist/eslint-plugin/index.js +1 -1
  504. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  505. package/dist/i18n/I18nProvider.js +1 -1
  506. package/dist/i18n/createFormatter.js +1 -1
  507. package/dist/i18n/index.js +1 -1
  508. package/dist/i18n/instance.js +1 -1
  509. package/dist/i18n/locales/de-DE/uikit.js +1 -1
  510. package/dist/i18n/locales/en-US/uikit.js +1 -1
  511. package/dist/i18n/locales/es-ES/uikit.js +1 -1
  512. package/dist/i18n/locales/es-MX/uikit.js +1 -1
  513. package/dist/i18n/locales/fr-FR/uikit.js +1 -1
  514. package/dist/i18n/locales/it-IT/uikit.js +1 -1
  515. package/dist/i18n/locales/ja-JP/uikit.js +1 -1
  516. package/dist/i18n/locales/nb-NO/uikit.js +1 -1
  517. package/dist/i18n/locales/pt-BR/uikit.js +1 -1
  518. package/dist/i18n/locales/pt-PT/uikit.js +1 -1
  519. package/dist/i18n/locales/sv-SE/uikit.js +1 -1
  520. package/dist/i18n/locales/vi-VN/uikit.js +1 -1
  521. package/dist/i18n/locales.js +1 -1
  522. package/dist/i18n/useFormatter.js +1 -1
  523. package/dist/i18n/useI18n.js +1 -1
  524. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  525. package/dist/icons/AdjustmentsIcon.js +1 -1
  526. package/dist/icons/AiIcon.js +1 -1
  527. package/dist/icons/AreaChartIcon.js +1 -1
  528. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  529. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  530. package/dist/icons/BackwardIcon.js +1 -1
  531. package/dist/icons/BarChartIcon.js +1 -1
  532. package/dist/icons/BellFilledIcon.js +1 -1
  533. package/dist/icons/BellIcon.js +1 -1
  534. package/dist/icons/BooleanIcon.js +1 -1
  535. package/dist/icons/CalendarEditIcon.js +1 -1
  536. package/dist/icons/CalendarIcon.js +1 -1
  537. package/dist/icons/CaretDownIcon.js +1 -1
  538. package/dist/icons/CaretUpIcon.js +1 -1
  539. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  540. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  541. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  542. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  543. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  544. package/dist/icons/ChartBarLineIcon.js +1 -1
  545. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  546. package/dist/icons/ChartBarStackedIcon.js +1 -1
  547. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  548. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  549. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  550. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  551. package/dist/icons/ChartBubbleIcon.js +1 -1
  552. package/dist/icons/ChartDonut2Icon.js +1 -1
  553. package/dist/icons/ChartFunnelIcon.js +1 -1
  554. package/dist/icons/ChartHeatmapIcon.js +1 -1
  555. package/dist/icons/ChartKPIIcon.js +1 -1
  556. package/dist/icons/ChartPie2Icon.js +1 -1
  557. package/dist/icons/ChartScatterIcon.js +1 -1
  558. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  559. package/dist/icons/CheckCircleIcon.js +1 -1
  560. package/dist/icons/CheckIcon.js +1 -1
  561. package/dist/icons/CircleFilledIcon.js +1 -1
  562. package/dist/icons/ClearIcon.js +1 -1
  563. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  564. package/dist/icons/CloseCircleIcon.js +1 -1
  565. package/dist/icons/CloseIcon.js +1 -1
  566. package/dist/icons/CodeIcon.js +1 -1
  567. package/dist/icons/ColumnTotalIcon.js +1 -1
  568. package/dist/icons/CopyIcon.js +1 -1
  569. package/dist/icons/CountIcon.js +1 -1
  570. package/dist/icons/CubeIcon.js +1 -1
  571. package/dist/icons/CubePauseIcon.js +1 -1
  572. package/dist/icons/CubePlayIcon.js +1 -1
  573. package/dist/icons/CurrencyDollarIcon.js +1 -1
  574. package/dist/icons/DangerIcon.js +1 -1
  575. package/dist/icons/DashboardIcon.js +1 -1
  576. package/dist/icons/DatabaseIcon.js +1 -1
  577. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  578. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  579. package/dist/icons/DirectionIcon.js +1 -1
  580. package/dist/icons/DonutIcon.js +1 -1
  581. package/dist/icons/DownIcon.js +1 -1
  582. package/dist/icons/EditIcon.js +1 -1
  583. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  584. package/dist/icons/ExclamationCircleIcon.js +1 -1
  585. package/dist/icons/ExclamationIcon.js +1 -1
  586. package/dist/icons/EyeIcon.js +1 -1
  587. package/dist/icons/EyeInvisibleIcon.js +1 -1
  588. package/dist/icons/FilterIcon.js +1 -1
  589. package/dist/icons/FolderFilledIcon.js +1 -1
  590. package/dist/icons/FolderIcon.js +1 -1
  591. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  592. package/dist/icons/FolderOpenIcon.js +1 -1
  593. package/dist/icons/ForwardIcon.js +1 -1
  594. package/dist/icons/GripVerticalIcon.js +1 -1
  595. package/dist/icons/HierarchyIcon.js +1 -1
  596. package/dist/icons/HierarchyOpenIcon.js +1 -1
  597. package/dist/icons/Icon.js +1 -1
  598. package/dist/icons/InfoCircleIcon.js +1 -1
  599. package/dist/icons/InfoIcon.js +1 -1
  600. package/dist/icons/KeyIcon.js +1 -1
  601. package/dist/icons/LeftIcon.js +1 -1
  602. package/dist/icons/LineChartIcon.js +1 -1
  603. package/dist/icons/LoadingIcon.js +1 -1
  604. package/dist/icons/LockFilledIcon.js +1 -1
  605. package/dist/icons/LockIcon.js +1 -1
  606. package/dist/icons/MoreIcon.js +1 -1
  607. package/dist/icons/NotAllowedIcon.js +1 -1
  608. package/dist/icons/Number123Icon.js +1 -1
  609. package/dist/icons/NumberIcon.js +1 -1
  610. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  611. package/dist/icons/PauseCircleIcon.js +1 -1
  612. package/dist/icons/PauseIcon.js +1 -1
  613. package/dist/icons/PercentageIcon.js +1 -1
  614. package/dist/icons/PieChartIcon.js +1 -1
  615. package/dist/icons/PipetteIcon.js +1 -1
  616. package/dist/icons/PlayCircleIcon.js +1 -1
  617. package/dist/icons/PlayIcon.js +1 -1
  618. package/dist/icons/PlusIcon.js +1 -1
  619. package/dist/icons/ProgressBarIcon.js +1 -1
  620. package/dist/icons/ReloadIcon.js +1 -1
  621. package/dist/icons/ReportIcon.js +1 -1
  622. package/dist/icons/ReturnIcon.js +1 -1
  623. package/dist/icons/RightIcon.js +1 -1
  624. package/dist/icons/RowTotalsIcon.js +1 -1
  625. package/dist/icons/SchemeIcon.js +1 -1
  626. package/dist/icons/SearchIcon.js +1 -1
  627. package/dist/icons/SemanticQueryIcon.js +1 -1
  628. package/dist/icons/SettingsIcon.js +1 -1
  629. package/dist/icons/ShieldFilledIcon.js +1 -1
  630. package/dist/icons/ShieldIcon.js +1 -1
  631. package/dist/icons/SlashIcon.js +1 -1
  632. package/dist/icons/SparklesIcon.js +1 -1
  633. package/dist/icons/SqlIcon.js +1 -1
  634. package/dist/icons/StatsIcon.js +1 -1
  635. package/dist/icons/StopIcon.js +1 -1
  636. package/dist/icons/StringIcon.js +1 -1
  637. package/dist/icons/SubtotalsIcon.js +1 -1
  638. package/dist/icons/SwitchIcon.js +1 -1
  639. package/dist/icons/TableIcon.js +1 -1
  640. package/dist/icons/ThumbsDownIcon.js +1 -1
  641. package/dist/icons/ThumbsUpIcon.js +1 -1
  642. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  643. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  644. package/dist/icons/ThunderboltIcon.js +1 -1
  645. package/dist/icons/TimeIcon.js +1 -1
  646. package/dist/icons/TrashIcon.js +1 -1
  647. package/dist/icons/UnlockIcon.js +1 -1
  648. package/dist/icons/UpIcon.js +1 -1
  649. package/dist/icons/UserGroupIcon.js +1 -1
  650. package/dist/icons/UserIcon.js +1 -1
  651. package/dist/icons/UserLockIcon.js +1 -1
  652. package/dist/icons/ViewIcon.js +1 -1
  653. package/dist/icons/WarningFilledIcon.js +1 -1
  654. package/dist/icons/WarningIcon.js +1 -1
  655. package/dist/icons/wrap-icon.js +1 -1
  656. package/dist/index.d.ts +18 -18
  657. package/dist/index.js +3 -3
  658. package/dist/probe/canonicalize.js +1 -1
  659. package/dist/probe/css.js +1 -1
  660. package/dist/probe/index.js +1 -1
  661. package/dist/provider.js +1 -1
  662. package/dist/providers/TrackingProvider.js +1 -1
  663. package/dist/providers/navigationAdapter.default.js +1 -1
  664. package/dist/shared/form.d.ts +4 -21
  665. package/dist/tokens/all-tokens.js +1 -1
  666. package/dist/tokens/base.js +1 -1
  667. package/dist/tokens/color-seed.js +1 -1
  668. package/dist/tokens/color-theme.js +1 -1
  669. package/dist/tokens/colors.js +1 -1
  670. package/dist/tokens/layout.js +1 -1
  671. package/dist/tokens/lazy-styles.js +1 -1
  672. package/dist/tokens/legacy-color.js +1 -1
  673. package/dist/tokens/palette-config.js +1 -1
  674. package/dist/tokens/palette.js +1 -1
  675. package/dist/tokens/resolve.js +1 -1
  676. package/dist/tokens/shadows.js +1 -1
  677. package/dist/tokens/sizes.js +1 -1
  678. package/dist/tokens/spacing.js +1 -1
  679. package/dist/tokens/typography.js +1 -1
  680. package/dist/utils/ResizeSensor.js +1 -1
  681. package/dist/utils/colors.js +1 -1
  682. package/dist/utils/dotize.js +1 -1
  683. package/dist/utils/is-dev-env.js +1 -1
  684. package/dist/utils/modules.js +1 -1
  685. package/dist/utils/promise.js +1 -1
  686. package/dist/utils/raf.js +1 -1
  687. package/dist/utils/random.js +1 -1
  688. package/dist/utils/range.js +1 -1
  689. package/dist/utils/react/RenderCache.js +1 -1
  690. package/dist/utils/react/Slots.js +1 -1
  691. package/dist/utils/react/chain.js +1 -1
  692. package/dist/utils/react/disabledProps.js +1 -1
  693. package/dist/utils/react/escapePropagation.js +1 -1
  694. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  695. package/dist/utils/react/index.js +1 -1
  696. package/dist/utils/react/interactions.js +1 -1
  697. package/dist/utils/react/isTextOnly.js +1 -1
  698. package/dist/utils/react/mapProps.js +1 -1
  699. package/dist/utils/react/mapProps.js.map +1 -1
  700. package/dist/utils/react/mergeProps.js +1 -1
  701. package/dist/utils/react/nullableValue.d.ts +2 -2
  702. package/dist/utils/react/nullableValue.js +1 -1
  703. package/dist/utils/react/nullableValue.js.map +1 -1
  704. package/dist/utils/react/programmaticFocus.js +1 -1
  705. package/dist/utils/react/resolveIcon.js +1 -1
  706. package/dist/utils/react/sharedStore.js +1 -1
  707. package/dist/utils/react/useBufferedValue.js +1 -1
  708. package/dist/utils/react/useCombinedRefs.js +1 -1
  709. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  710. package/dist/utils/react/useEventBus.js +1 -1
  711. package/dist/utils/react/useId.js +1 -1
  712. package/dist/utils/react/useIsDarwin.js +1 -1
  713. package/dist/utils/react/useKeySymbols.js +1 -1
  714. package/dist/utils/react/useLayoutEffect.js +1 -1
  715. package/dist/utils/react/useLocalStorage.js +1 -1
  716. package/dist/utils/react/useMergeStyles.js +1 -1
  717. package/dist/utils/react/useOverlayEscapeGuard.js +12 -1
  718. package/dist/utils/react/useOverlayEscapeGuard.js.map +1 -1
  719. package/dist/utils/react/usePopoverSync.js +1 -1
  720. package/dist/utils/react/useQaProps.js +1 -1
  721. package/dist/utils/react/useScheme.js +1 -1
  722. package/dist/utils/react/useViewportSize.js +1 -1
  723. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  724. package/dist/utils/selection.js +1 -1
  725. package/dist/utils/styles.js +1 -1
  726. package/dist/utils/tree.js +1 -1
  727. package/dist/utils/warnings.js +1 -1
  728. package/dist/version.js +2 -2
  729. package/docs/components/content/ItemCard.md +77 -18
  730. package/docs/components/fields/Checkbox.md +2 -0
  731. package/docs/components/fields/Switch.md +2 -0
  732. package/docs/components/overlays/Notifications.md +1 -1
  733. package/docs/components/overlays/Toast.md +3 -2
  734. package/package.json +16 -16
  735. package/tasty.config.ts +2 -0
@@ -1 +1 @@
1
- {"version":3,"file":"SubMenuTrigger.js","names":["useSyncRef","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","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","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","display","cloneElement","focus","SubMenuTrigger","getCollectionNode","trigger","element","wrapper","displayName"],"sources":["../../../../src/components/actions/Menu/SubMenuTrigger.tsx"],"sourcesContent":["import { useSyncRef } from '@react-aria/utils';\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\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 – **must render `<li role=\"menuitem\">`** (usually `Menu.Item`).\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: 'submenu', 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 } = 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 style={positionProps.style}\n placement={placement as Placement}\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 <div\n style={{ display: 'contents' }}\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 domTriggerRef.current?.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 </div>\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","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","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","display","cloneElement","focus","SubMenuTrigger","getCollectionNode","trigger","element","wrapper","displayName"],"sources":["../../../../src/components/actions/Menu/SubMenuTrigger.tsx"],"sourcesContent":["import { useSyncRef } from '@react-aria/utils';\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\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 – **must render `<li role=\"menuitem\">`** (usually `Menu.Item`).\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 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 <div\n style={{ display: 'contents' }}\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 domTriggerRef.current?.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 </div>\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,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.190.6 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.190.8 | Cube Dev Team */
2
2
  import React from "react";
3
3
 
4
4
  //#region src/components/actions/Menu/SubmenuTriggerContext.tsx
@@ -1,5 +1,5 @@
1
1
 
2
- import React, { HTMLAttributes, MutableRefObject } from "react";
2
+ import React, { HTMLAttributes, RefObject } from "react";
3
3
  import { FocusStrategy } from "@react-types/shared";
4
4
 
5
5
  //#region src/components/actions/Menu/context.d.ts
@@ -8,7 +8,7 @@ interface MenuContextValue extends Omit<HTMLAttributes<HTMLElement>, 'autoFocus'
8
8
  closeOnSelect?: boolean;
9
9
  shouldFocusWrap?: boolean;
10
10
  autoFocus?: boolean | FocusStrategy;
11
- ref?: MutableRefObject<HTMLUListElement>;
11
+ ref?: RefObject<HTMLUListElement | null>;
12
12
  mods?: {
13
13
  popover?: boolean;
14
14
  tray?: boolean;
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.190.6 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.190.8 | Cube Dev Team */
2
2
  import React, { useContext } from "react";
3
3
 
4
4
  //#region src/components/actions/Menu/context.ts
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","names":["FocusStrategy","React","HTMLAttributes","MutableRefObject","useContext","MenuContextValue","Omit","HTMLElement","onClose","closeOnSelect","shouldFocusWrap","autoFocus","ref","HTMLUListElement","mods","popover","tray","isClosing","MenuContext","createContext","useMenuContext"],"sources":["../../../../src/components/actions/Menu/context.ts"],"sourcesContent":["import { FocusStrategy } from '@react-types/shared';\nimport React, { HTMLAttributes, MutableRefObject, useContext } from 'react';\n\nexport interface MenuContextValue\n extends Omit<HTMLAttributes<HTMLElement>, 'autoFocus'> {\n onClose?: () => void;\n closeOnSelect?: boolean;\n shouldFocusWrap?: boolean;\n autoFocus?: boolean | FocusStrategy;\n ref?: MutableRefObject<HTMLUListElement>;\n mods?: {\n popover?: boolean;\n tray?: boolean;\n };\n isClosing?: boolean;\n}\n\nexport const MenuContext = React.createContext<MenuContextValue>({});\n\nexport function useMenuContext(): MenuContextValue {\n return useContext(MenuContext);\n}\n"],"mappings":";;;;AAiBA,MAAakB,cAAcjB,MAAMkB,cAAgC,EAAE,CAAC;AAEpE,SAAOC,iBAAA;AAAA,QACEhB,WAAWc,YAAY"}
1
+ {"version":3,"file":"context.js","names":["FocusStrategy","React","HTMLAttributes","RefObject","useContext","MenuContextValue","Omit","HTMLElement","onClose","closeOnSelect","shouldFocusWrap","autoFocus","ref","HTMLUListElement","mods","popover","tray","isClosing","MenuContext","createContext","useMenuContext"],"sources":["../../../../src/components/actions/Menu/context.ts"],"sourcesContent":["import { FocusStrategy } from '@react-types/shared';\nimport React, { HTMLAttributes, RefObject, useContext } from 'react';\n\nexport interface MenuContextValue\n extends Omit<HTMLAttributes<HTMLElement>, 'autoFocus'> {\n onClose?: () => void;\n closeOnSelect?: boolean;\n shouldFocusWrap?: boolean;\n autoFocus?: boolean | FocusStrategy;\n ref?: RefObject<HTMLUListElement | null>;\n mods?: {\n popover?: boolean;\n tray?: boolean;\n };\n isClosing?: boolean;\n}\n\nexport const MenuContext = React.createContext<MenuContextValue>({});\n\nexport function useMenuContext(): MenuContextValue {\n return useContext(MenuContext);\n}\n"],"mappings":";;;;AAiBA,MAAakB,cAAcjB,MAAMkB,cAAgC,EAAE,CAAC;AAEpE,SAAOC,iBAAA;AAAA,QACEhB,WAAWc,YAAY"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.190.6 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.190.8 | 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 +1 @@
1
- {"version":3,"file":"styled.js","names":["mergeStyles","tasty","DEFAULT_CLEAR_STYLES","Space","DEFAULT_BUTTON_STYLES","StyledMenuWrapper","qa","styles","display","gridRows","fill","margin","padding","border","radius","width","popover","shadow","height","tray","boxSizing","StyledMenu","as","flow","gap","sections","section","overflow","scrollbar","StyledDivider","listStyle","flexShrink","StyledHeader","role","color","preset","placeContent","placeItems","whiteSpace","$size","StyledFooter","StyledSection","StyledItem","justifyContent","focused","selected","pressed","disabled","cursor","outline","Description","StyledSectionHeading","prefix"],"sources":["../../../../src/components/actions/Menu/styled.tsx"],"sourcesContent":["import { mergeStyles, tasty } from '@tenphi/tasty';\n\nimport { DEFAULT_CLEAR_STYLES } from '../../../data/item-themes';\nimport { Space } from '../../layout/Space';\nimport { DEFAULT_BUTTON_STYLES } from '../Button/Button';\n\nexport const StyledMenuWrapper = tasty({\n qa: 'Menu',\n styles: {\n display: 'grid',\n gridRows: 'max-content 1sf max-content',\n fill: '#surface',\n margin: 0,\n padding: 0,\n border: true,\n radius: '(1cr + 1bw)',\n width: {\n '': 'auto',\n popover: 'max-content',\n },\n shadow: {\n '': '',\n // Use the design-system `$shadow` token (resolves to\n // `0 .5x 2x #shadow-md`) so the popover shadow follows the\n // scheme-aware Glaze `#shadow-md` color. The previous literal\n // `0px 5px 15px #dark.05` baked in `#dark` (now aliased to the\n // adaptive `#surface-text`) which inverts to a *light* shadow on\n // dark surfaces.\n 'popover | tray': '$shadow',\n },\n height: {\n '': 'initial',\n popover: 'initial max-content (50vh - 4x)',\n tray: 'initial max-content (100vh - 4x)',\n },\n boxSizing: 'border-box',\n },\n});\n\nexport const StyledMenu = tasty({\n as: 'ul',\n qa: 'MenuList',\n styles: {\n display: 'flex',\n flow: 'column',\n gap: {\n '': '1bw',\n sections: false,\n },\n boxSizing: 'border-box',\n margin: 0,\n padding: {\n '': '0.5x',\n section: 0, // section menu\n },\n overflow: {\n '': 'auto',\n section: '',\n },\n scrollbar: 'styled',\n },\n});\n\nexport const StyledDivider = tasty({\n qa: 'Divider',\n as: 'li',\n styles: {\n display: 'flex',\n flow: 'column',\n margin: '.5x',\n listStyle: 'none',\n fill: '#border',\n height: '1bw',\n flexShrink: 0,\n },\n});\n\nexport const StyledHeader = tasty(Space, {\n qa: 'Header',\n as: 'div',\n role: 'heading',\n 'aria-level': 3,\n styles: {\n color: '#dark-02',\n preset: 't3',\n placeContent: 'space-between',\n placeItems: 'center',\n whiteSpace: 'nowrap',\n padding: '.5x 1.5x',\n height: 'min $size',\n boxSizing: 'border-box',\n border: 'bottom',\n radius: '1cr top',\n\n $size: {\n '': '$size-md',\n 'size=small': '$size-sm',\n 'size=medium': '$size-md',\n 'size=large': '$size-lg',\n },\n },\n});\n\nexport const StyledFooter = tasty(Space, {\n qa: 'Footer',\n as: 'div',\n role: 'footer',\n styles: {\n color: '#dark-02',\n preset: 't3',\n placeContent: 'space-between',\n placeItems: 'center',\n whiteSpace: 'nowrap',\n padding: '.5x 1.5x',\n height: {\n '': 'min $size-md',\n 'size=large': 'min $size-lg',\n },\n boxSizing: 'border-box',\n border: 'top',\n radius: '1cr bottom',\n },\n});\n\nexport const StyledSection = tasty({\n qa: 'Section',\n as: 'li',\n styles: {\n display: 'flex',\n flow: 'column',\n margin: '0',\n padding: '0',\n listStyle: 'none',\n fill: '#surface',\n },\n});\n\nexport const StyledItem = tasty({\n qa: 'Item',\n as: 'li',\n // Button's defaults with its `default.clear` theme, merged the way Button\n // applies that variant, then the menu-specific overrides.\n styles: mergeStyles(DEFAULT_BUTTON_STYLES, DEFAULT_CLEAR_STYLES, {\n // Override specifics for menu context\n display: 'flex',\n flow: 'row',\n justifyContent: 'stretch',\n listStyle: 'none',\n flexShrink: 0,\n height: {\n '': 'min $size-md',\n 'size=large': 'min $size-lg',\n },\n border: false,\n boxSizing: 'border-box',\n fill: {\n '': '#clear',\n focused: '#dark.03',\n selected: '#dark.09',\n 'selected & focused': '#dark.12',\n pressed: '#dark.09',\n disabled: '#clear',\n },\n color: {\n '': '#dark-02',\n 'selected | pressed': '#dark',\n disabled: '#disabled-surface-text',\n },\n cursor: {\n '': 'default',\n disabled: 'not-allowed',\n },\n shadow: '#clear',\n padding: {\n '': '.5x 1x',\n 'selectionIcon & selectable & !selected': '.5x 1x .5x (1x + 3x)',\n },\n gap: '.75x',\n outline: false,\n\n Description: {\n preset: 't4',\n color: '#dark-03',\n },\n }),\n});\n\nexport const StyledSectionHeading = tasty(Space, {\n qa: 'SectionHeading',\n as: 'div',\n styles: {\n color: '#dark-04',\n preset: 'c2',\n height: '3x',\n placeContent: 'center space-between',\n padding: {\n '': '.5x .75x',\n prefix: '0 .75x 0 .5x',\n },\n\n $size: {\n '': '$size-md',\n 'size=small': '$size-sm',\n 'size=medium': '$size-md',\n 'size=large': '$size-lg',\n },\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"styled.js","names":["mergeStyles","tasty","DEFAULT_CLEAR_STYLES","CubeSpaceProps","Space","DEFAULT_BUTTON_STYLES","StyledMenuWrapper","qa","styles","display","gridRows","fill","margin","padding","border","radius","width","popover","shadow","height","tray","boxSizing","StyledMenu","as","flow","gap","sections","section","overflow","scrollbar","StyledDivider","listStyle","flexShrink","StyledHeader","role","color","preset","placeContent","placeItems","whiteSpace","$size","StyledFooter","StyledSection","StyledItem","justifyContent","focused","selected","pressed","disabled","cursor","outline","Description","StyledSectionHeading","size","prefix"],"sources":["../../../../src/components/actions/Menu/styled.tsx"],"sourcesContent":["import { mergeStyles, tasty } from '@tenphi/tasty';\n\nimport { DEFAULT_CLEAR_STYLES } from '../../../data/item-themes';\nimport { CubeSpaceProps, Space } from '../../layout/Space';\nimport { DEFAULT_BUTTON_STYLES } from '../Button/Button';\n\nexport const StyledMenuWrapper = tasty({\n qa: 'Menu',\n styles: {\n display: 'grid',\n gridRows: 'max-content 1sf max-content',\n fill: '#surface',\n margin: 0,\n padding: 0,\n border: true,\n radius: '(1cr + 1bw)',\n width: {\n '': 'auto',\n popover: 'max-content',\n },\n shadow: {\n '': '',\n // Use the design-system `$shadow` token (resolves to\n // `0 .5x 2x #shadow-md`) so the popover shadow follows the\n // scheme-aware Glaze `#shadow-md` color. The previous literal\n // `0px 5px 15px #dark.05` baked in `#dark` (now aliased to the\n // adaptive `#surface-text`) which inverts to a *light* shadow on\n // dark surfaces.\n 'popover | tray': '$shadow',\n },\n height: {\n '': 'initial',\n popover: 'initial max-content (50vh - 4x)',\n tray: 'initial max-content (100vh - 4x)',\n },\n boxSizing: 'border-box',\n },\n});\n\nexport const StyledMenu = tasty({\n as: 'ul',\n qa: 'MenuList',\n styles: {\n display: 'flex',\n flow: 'column',\n gap: {\n '': '1bw',\n sections: false,\n },\n boxSizing: 'border-box',\n margin: 0,\n padding: {\n '': '0.5x',\n section: 0, // section menu\n },\n overflow: {\n '': 'auto',\n section: '',\n },\n scrollbar: 'styled',\n },\n});\n\nexport const StyledDivider = tasty({\n qa: 'Divider',\n as: 'li',\n styles: {\n display: 'flex',\n flow: 'column',\n margin: '.5x',\n listStyle: 'none',\n fill: '#border',\n height: '1bw',\n flexShrink: 0,\n },\n});\n\nexport const StyledHeader = tasty(Space, {\n qa: 'Header',\n as: 'div',\n role: 'heading',\n 'aria-level': 3,\n styles: {\n color: '#dark-02',\n preset: 't3',\n placeContent: 'space-between',\n placeItems: 'center',\n whiteSpace: 'nowrap',\n padding: '.5x 1.5x',\n height: 'min $size',\n boxSizing: 'border-box',\n border: 'bottom',\n radius: '1cr top',\n\n $size: {\n '': '$size-md',\n 'size=small': '$size-sm',\n 'size=medium': '$size-md',\n 'size=large': '$size-lg',\n },\n },\n});\n\nexport const StyledFooter = tasty(Space, {\n qa: 'Footer',\n as: 'div',\n role: 'footer',\n styles: {\n color: '#dark-02',\n preset: 't3',\n placeContent: 'space-between',\n placeItems: 'center',\n whiteSpace: 'nowrap',\n padding: '.5x 1.5x',\n height: {\n '': 'min $size-md',\n 'size=large': 'min $size-lg',\n },\n boxSizing: 'border-box',\n border: 'top',\n radius: '1cr bottom',\n },\n});\n\nexport const StyledSection = tasty({\n qa: 'Section',\n as: 'li',\n styles: {\n display: 'flex',\n flow: 'column',\n margin: '0',\n padding: '0',\n listStyle: 'none',\n fill: '#surface',\n },\n});\n\nexport const StyledItem = tasty({\n qa: 'Item',\n as: 'li',\n // Button's defaults with its `default.clear` theme, merged the way Button\n // applies that variant, then the menu-specific overrides.\n styles: mergeStyles(DEFAULT_BUTTON_STYLES, DEFAULT_CLEAR_STYLES, {\n // Override specifics for menu context\n display: 'flex',\n flow: 'row',\n justifyContent: 'stretch',\n listStyle: 'none',\n flexShrink: 0,\n height: {\n '': 'min $size-md',\n 'size=large': 'min $size-lg',\n },\n border: false,\n boxSizing: 'border-box',\n fill: {\n '': '#clear',\n focused: '#dark.03',\n selected: '#dark.09',\n 'selected & focused': '#dark.12',\n pressed: '#dark.09',\n disabled: '#clear',\n },\n color: {\n '': '#dark-02',\n 'selected | pressed': '#dark',\n disabled: '#disabled-surface-text',\n },\n cursor: {\n '': 'default',\n disabled: 'not-allowed',\n },\n shadow: '#clear',\n padding: {\n '': '.5x 1x',\n 'selectionIcon & selectable & !selected': '.5x 1x .5x (1x + 3x)',\n },\n gap: '.75x',\n outline: false,\n\n Description: {\n preset: 't4',\n color: '#dark-03',\n },\n }),\n});\n\nexport const StyledSectionHeading = tasty<\n CubeSpaceProps & { size?: 'small' | 'medium' | (string & {}) }\n>(Space, {\n qa: 'SectionHeading',\n as: 'div',\n styles: {\n color: '#dark-04',\n preset: 'c2',\n height: '3x',\n placeContent: 'center space-between',\n padding: {\n '': '.5x .75x',\n prefix: '0 .75x 0 .5x',\n },\n\n $size: {\n '': '$size-md',\n 'size=small': '$size-sm',\n 'size=medium': '$size-md',\n 'size=large': '$size-lg',\n },\n },\n});\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.190.6 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.190.8 | 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
@@ -32,7 +32,7 @@ import * as react from "react";
32
32
  import * as _react_types_shared0 from "@react-types/shared";
33
33
 
34
34
  //#region src/components/actions/index.d.ts
35
- declare const Button: react.ForwardRefExoticComponent<Omit<CubeButtonProps, "ref"> & react.RefAttributes<_react_types_shared0.FocusableRefValue<HTMLElement, HTMLElement>>> & {
35
+ declare const Button: react.ForwardRefExoticComponent<CubeButtonProps & react.RefAttributes<_react_types_shared0.FocusableRefValue<HTMLElement, HTMLElement>>> & {
36
36
  Group: typeof ButtonGroup;
37
37
  Split: typeof ButtonSplit;
38
38
  } & {
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.190.6 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.190.8 | Cube Dev Team */
2
2
  import { ItemActionProvider, useItemActionContext } from "./ItemActionContext.js";
3
3
  import { openLink, parseTo, performClickHandler, useAction } from "./use-action.js";
4
4
  import { ItemAction } from "./ItemAction/ItemAction.js";
@@ -3,11 +3,10 @@ import { NavigateArg, NavigateLike, NavigateOptions, Path, RelativeRoutingType,
3
3
  import { AllBaseProps, TagName } from "@tenphi/tasty";
4
4
  import * as react from "react";
5
5
  import { AriaButtonProps } from "react-aria";
6
- import * as _react_types_shared0 from "@react-types/shared";
7
6
  import { FocusableRef } from "@react-types/shared";
8
7
 
9
8
  //#region src/components/actions/use-action.d.ts
10
- interface CubeUseActionProps<T extends TagName = 'a' | 'button' | 'span' | 'div'> extends AllBaseProps<T>, Omit<AriaButtonProps, 'type'> {
9
+ interface CubeUseActionProps<T extends TagName = 'a' | 'button' | 'span' | 'div'> extends AllBaseProps<T>, Omit<AriaButtonProps, keyof AllBaseProps<T> | 'type'> {
11
10
  to?: NavigateArg;
12
11
  /**
13
12
  * @deprecated Use `aria-label` for the accessible name, and `children` for
@@ -57,9 +56,9 @@ declare const useAction: ({
57
56
  navigationOptions,
58
57
  ...props
59
58
  }: CubeUseActionProps, ref: FocusableRef<HTMLElement>) => {
60
- isPressed: any;
59
+ isPressed: boolean;
61
60
  actionProps: {
62
- ref: _react_types_shared0.RefObject<HTMLElement | null>;
61
+ ref: any;
63
62
  type: "button" | "submit" | "reset";
64
63
  rel: string | undefined;
65
64
  as: "a" | "button" | "div" | "span" | react.ComponentType<any>;
@@ -68,7 +67,7 @@ declare const useAction: ({
68
67
  href: string | undefined;
69
68
  mods: {
70
69
  hovered: boolean;
71
- pressed: any;
70
+ pressed: boolean;
72
71
  focused: boolean;
73
72
  disabled: boolean | undefined;
74
73
  };
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.190.6 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.190.8 | 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
4
  import { useWarn } from "../../_internal/hooks/use-warn.js";
@@ -205,7 +205,8 @@ const useAction = function useAction({ to, as, htmlType, label, mods, onPress, n
205
205
  let { buttonProps, isPressed } = useButton({
206
206
  "aria-label": label,
207
207
  ...props,
208
- onPress: customOnPress
208
+ onPress: customOnPress,
209
+ type: htmlType ?? "button"
209
210
  }, domRef);
210
211
  let { hoverProps, isHovered } = useHover({ isDisabled });
211
212
  let { focusProps, isFocused } = useFocus$1(true);
@@ -1 +1 @@
1
- {"version":3,"file":"use-action.js","names":["useFocusableRef","FocusableRef","PressEvent","AllBaseProps","filterBaseProps","TagName","useContext","AriaButtonProps","useButton","useHover","useEvent","useWarn","UIKitContext","useTracking","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","URL_SCHEME","isExternalUrl","url","test","startsWith","parseTo","newTab","nativeRoute","cleanTo","isHistoryNavigation","historyDelta","isHashNavigation","isExternal","undefined","slice","SanitizedPressEvent","type","pointerType","shiftKey","metaKey","ctrlKey","altKey","key","sanitizePressEvent","evt","safeEvt","Object","defineProperty","value","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","as","mods","props","ref","HTMLElement","args","navigation","isDisabled","useNavigate","useHref","domRef","mergedNavigationOptions","customOnPress","buttonProps","isPressed","hoverProps","isHovered","focusProps","isFocused","customProps","onClick","preventDefault","actionProps","hovered","pressed","focused","disabled"],"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 { useContext } from 'react';\nimport { AriaButtonProps, useButton, useHover } from 'react-aria';\n\nimport { useEvent, useWarn } from '../../_internal';\nimport { UIKitContext } from '../../provider';\nimport { useTracking } from '../../providers/TrackingProvider';\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> extends AllBaseProps<T>,\n Omit<AriaButtonProps, '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\nconst URL_SCHEME = /^[a-z][a-z\\d+.-]*:/i;\n\n/**\n * Checks if a URL is external: it starts with a URL scheme (`https:`,\n * `mailto:`) or is protocol-relative (`//host`). A colon later in a path or\n * query (`/models/cube:orders`, `..?thread=a:b`) stays router navigation.\n */\nfunction isExternalUrl(url: string): boolean {\n return URL_SCHEME.test(url) || url.startsWith('//');\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\n if (!to || typeof to !== 'string') {\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 = to.startsWith('!');\n const nativeRoute = to.startsWith('@');\n const isHashNavigation = to.startsWith('#');\n const cleanTo = newTab || nativeRoute ? to.slice(1) : to;\n const isExternal = typeof cleanTo === 'string' && 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 to === 'string') {\n const id = to.slice(1);\n const targetElement = document.getElementById(id);\n\n tracking.event(\n LINK_PRESS_EVENT,\n { qa, href: to, 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 navigation = useContext(UIKitContext).navigation;\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 const navigate = navigation.useNavigate();\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 resolvedHref = navigation.useHref(cleanTo || '.');\n\n // Determine element type: 'a' for navigation, 'button' for actions\n as = to && !isHistoryNavigation ? '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 let { buttonProps, isPressed } = useButton(\n {\n 'aria-label': label, // deprecated, see `CubeUseActionProps.label`\n ...props,\n onPress: customOnPress,\n },\n domRef,\n );\n let { hoverProps, isHovered } = useHover({ isDisabled });\n let { focusProps, isFocused } = useFocus(true);\n\n const customProps =\n to && !isHistoryNavigation\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 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","useContext","AriaButtonProps","useButton","useHover","useEvent","useWarn","UIKitContext","useTracking","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","URL_SCHEME","isExternalUrl","url","test","startsWith","parseTo","newTab","nativeRoute","cleanTo","isHistoryNavigation","historyDelta","isHashNavigation","isExternal","undefined","slice","SanitizedPressEvent","type","pointerType","shiftKey","metaKey","ctrlKey","altKey","key","sanitizePressEvent","evt","safeEvt","Object","defineProperty","value","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","as","mods","props","ref","HTMLElement","args","navigation","isDisabled","useNavigate","useHref","domRef","mergedNavigationOptions","customOnPress","buttonProps","isPressed","hoverProps","isHovered","focusProps","isFocused","customProps","onClick","preventDefault","actionProps","hovered","pressed","focused","disabled"],"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 { useContext } from 'react';\nimport { AriaButtonProps, useButton, useHover } from 'react-aria';\n\nimport { useEvent, useWarn } from '../../_internal';\nimport { UIKitContext } from '../../provider';\nimport { useTracking } from '../../providers/TrackingProvider';\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> extends 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\nconst URL_SCHEME = /^[a-z][a-z\\d+.-]*:/i;\n\n/**\n * Checks if a URL is external: it starts with a URL scheme (`https:`,\n * `mailto:`) or is protocol-relative (`//host`). A colon later in a path or\n * query (`/models/cube:orders`, `..?thread=a:b`) stays router navigation.\n */\nfunction isExternalUrl(url: string): boolean {\n return URL_SCHEME.test(url) || url.startsWith('//');\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\n if (!to || typeof to !== 'string') {\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 = to.startsWith('!');\n const nativeRoute = to.startsWith('@');\n const isHashNavigation = to.startsWith('#');\n const cleanTo = newTab || nativeRoute ? to.slice(1) : to;\n const isExternal = typeof cleanTo === 'string' && 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 to === 'string') {\n const id = to.slice(1);\n const targetElement = document.getElementById(id);\n\n tracking.event(\n LINK_PRESS_EVENT,\n { qa, href: to, 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 navigation = useContext(UIKitContext).navigation;\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 const navigate = navigation.useNavigate();\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 resolvedHref = navigation.useHref(cleanTo || '.');\n\n // Determine element type: 'a' for navigation, 'button' for actions\n as = to && !isHistoryNavigation ? '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 to && !isHistoryNavigation\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 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,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.190.6 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.190.8 | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../utils/react/mergeProps.js";
3
3
  import { usePopoverSync } from "../../utils/react/usePopoverSync.js";
4
4
  import { useEvent } from "../../_internal/hooks/use-event.js";
@@ -1,11 +1,11 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.190.6 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.190.8 | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../utils/react/mergeProps.js";
3
3
  import { usePopoverSync } from "../../utils/react/usePopoverSync.js";
4
4
  import { useEvent } from "../../_internal/hooks/use-event.js";
5
5
  import { useI18n } from "../../i18n/useI18n.js";
6
6
  import { generateRandomId } from "../../utils/random.js";
7
7
  import { _MenuTrigger } from "./Menu/MenuTrigger.js";
8
- import { useEffect, useMemo, useRef, useState } from "react";
8
+ import { createRef, useEffect, useMemo, useRef, useState } from "react";
9
9
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
10
10
  import { VisuallyHidden } from "react-aria";
11
11
  import { createPortal } from "react-dom";
@@ -40,7 +40,7 @@ function useContextMenu(Component, defaultTriggerProps, defaultMenuProps) {
40
40
  const [triggerProps, setTriggerProps] = useState(null);
41
41
  const [anchorPosition, setAnchorPosition] = useState(null);
42
42
  const targetRef = useRef(null);
43
- const invisibleAnchorRef = useRef(null);
43
+ const invisibleAnchorRef = useMemo(() => createRef(), [anchorPosition]);
44
44
  const popoverRef = useRef(null);
45
45
  const setupRef = useRef(false);
46
46
  useEffect(() => {
@@ -176,6 +176,7 @@ function useContextMenu(Component, defaultTriggerProps, defaultMenuProps) {
176
176
  isOpen,
177
177
  defaultTriggerProps,
178
178
  anchorPosition,
179
+ invisibleAnchorRef,
179
180
  t
180
181
  ]);
181
182
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"use-context-menu.js","names":["Pressable","ComponentProps","ComponentType","MouseEvent","PointerEvent","ReactElement","RefObject","useEffect","useMemo","useRef","useState","VisuallyHidden","createPortal","useEvent","useI18n","generateRandomId","mergeProps","usePopoverSync","MenuTrigger","NativeMouseEvent","globalThis","NativePointerEvent","UseContextMenuReturn","HTMLElement","targetRef","E","open","props","P","triggerProps","T","event","update","close","isOpen","rendered","useContextMenu","Component","defaultTriggerProps","Omit","defaultMenuProps","t","setIsOpen","runtimeProps","setRuntimeProps","setTriggerProps","anchorPosition","setAnchorPosition","x","y","invisibleAnchorRef","HTMLSpanElement","popoverRef","HTMLDivElement","setupRef","el","current","dataset","popoverTrigger","menuId","onClose","triggerRef","containerRef","setupCheck","Error","calculatePosition","clientX","clientY","container","rect","getBoundingClientRect","left","width","top","height","computedStyle","window","getComputedStyle","position","style","preventDefault","onContextMenu","pos","undefined","element","addEventListener","removeEventListener","renderedMenu","componentProps","lineHeight","pointerEvents","visibility","document","body","placement"],"sources":["../../../src/components/actions/use-context-menu.tsx"],"sourcesContent":["import { Pressable } from '@react-aria/interactions';\nimport {\n ComponentProps,\n ComponentType,\n MouseEvent,\n PointerEvent,\n ReactElement,\n RefObject,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { VisuallyHidden } from 'react-aria';\nimport { createPortal } from 'react-dom';\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\ntype NativeMouseEvent = globalThis.MouseEvent;\ntype NativePointerEvent = globalThis.PointerEvent;\n\nexport interface UseContextMenuReturn<\n E extends HTMLElement = HTMLElement,\n P extends object = {},\n T = ComponentProps<typeof MenuTrigger>,\n> {\n /** Container element that receives context menu events. Attach this ref to your target element. */\n targetRef: RefObject<E | null>;\n\n /**\n * Programmatically opens the menu at the specified coordinates or element center.\n * Runtime props are merged with the CURRENT `defaultMenuProps` on every render\n * (runtime props take precedence), so defaults that change while the menu is\n * open reach it without an `update()` call.\n *\n * @param props - Props to pass to the menu component (optional, defaults to defaultMenuProps)\n * @param triggerProps - Additional props for MenuTrigger (merged with defaultTriggerProps)\n * @param event - The pointer/mouse event containing coordinates for positioning (optional, centers on element if not provided)\n */\n open(\n props?: P,\n triggerProps?: T,\n event?: NativeMouseEvent | NativePointerEvent | MouseEvent | PointerEvent,\n ): void;\n\n /**\n * Updates the RUNTIME props of the currently open menu without repositioning.\n * Props are merged over the current `defaultMenuProps`. Only needed for props\n * the caller owns — `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 * IMPORTANT: Must be placed directly inside the target container (the element with targetRef).\n */\n get rendered(): ReactElement | null;\n}\n\n/**\n * Generic hook to manage a context menu component that opens at pointer coordinates.\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 `targetRef` to attach to the container element, `open` function to open the menu at event coordinates, `close` function to close the menu, and `rendered` JSX element to include in your component tree.\n */\nexport function useContextMenu<\n E extends HTMLElement = HTMLElement,\n P extends object = {},\n T = ComponentProps<typeof MenuTrigger>,\n>(\n Component: ComponentType<P>,\n defaultTriggerProps?: Omit<\n ComponentProps<typeof MenuTrigger>,\n 'children' | 'isOpen' | 'onOpenChange' | 'targetRef'\n >,\n defaultMenuProps?: P,\n): UseContextMenuReturn<E, 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`.\n *\n * Merging at open time snapshotted the defaults, so a consumer that keeps its\n * menu content IN the defaults (`Tree`'s row menu does: `children` is part of\n * the third argument) had a menu that was frozen the moment it opened. Items\n * appearing, disappearing or flipping `isDisabled` while it was open stayed\n * invisible until it was closed and reopened, and the only workaround was to\n * mirror every render into an `update()` call. Keeping the overrides alone\n * lets the merge happen at RENDER time, against the current defaults, while\n * runtime props still win.\n */\n const [runtimeProps, setRuntimeProps] = useState<P | null>(null);\n const [triggerProps, setTriggerProps] = useState<T | null>(null);\n const [anchorPosition, setAnchorPosition] = useState<{\n x: number;\n y: number;\n } | null>(null);\n const targetRef = useRef<E>(null);\n const invisibleAnchorRef = useRef<HTMLSpanElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n const setupRef = useRef(false);\n\n // Mark the container as a popover trigger so that other open menus' close-on-\n // outside predicates treat clicks inside it (including programmatic\n // open buttons rendered alongside a context-menu target) as a legitimate\n // trigger interaction instead of a generic outside click. This mirrors the\n // pattern in `useAnchoredMenu`.\n useEffect(() => {\n const el = targetRef.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 context-menu target (`triggerRef`) and the popover\n // container (`containerRef`) into the sync. The container ref is shared with\n // the rendered `MenuTrigger` via its `popoverRef` prop — the dummy\n // `MenuTrigger` opts out of `usePopoverSync` (`enabled: !isDummy`), so\n // without this the nested-popover guard would have no container to match\n // against and a `SubMenuTrigger` opened inside this menu would close the\n // whole menu.\n usePopoverSync({\n menuId,\n isOpen,\n onClose: () => {\n setIsOpen(false);\n setAnchorPosition(null);\n },\n triggerRef: targetRef as RefObject<HTMLElement | null>,\n containerRef: popoverRef,\n });\n\n function setupCheck() {\n if (!setupRef.current) {\n throw new Error(\n 'useContextMenu: MenuTrigger must be rendered. Use `rendered` property to include it in your component tree.',\n );\n }\n }\n\n /**\n * Where to put the invisible anchor, in **viewport** coordinates.\n *\n * Viewport rather than container-relative on purpose. The anchor is rendered\n * into a fixed-position host pinned to the viewport origin (see\n * `renderedMenu`), so the two agree by construction. Computing coordinates\n * against the target element while the anchor's containing block was\n * whichever positioned ancestor happened to enclose `rendered` is what used\n * to open the menu one ancestor-origin away from the pointer.\n */\n const calculatePosition = (\n event?: NativeMouseEvent | NativePointerEvent | MouseEvent | PointerEvent,\n ) => {\n if (event) {\n const { clientX = 0, clientY = 0 } = event;\n\n return { x: clientX, y: clientY };\n }\n\n // No event — a keyboard opening, which has no coordinates. Anchor on the\n // target element's centre instead.\n const container = targetRef.current;\n\n if (!container) return { x: 0, y: 0 };\n\n const rect = container.getBoundingClientRect();\n\n return { x: rect.left + rect.width / 2, y: rect.top + rect.height / 2 };\n };\n\n // 'open' accepts props, trigger props, and optional event for positioning, then opens the menu\n const open = useEvent(\n (\n props: P = {} as P,\n triggerProps?: T,\n event?: NativeMouseEvent | NativePointerEvent | MouseEvent | PointerEvent,\n ) => {\n setupCheck();\n\n // Ensure the target element can serve as a positioning context for the\n // invisible target element. If the consumer hasn't explicitly set\n // `position: relative | absolute | fixed | sticky` we switch it to\n // `relative` so that absolutely-positioned children are laid out correctly.\n if (targetRef.current) {\n const computedStyle = window.getComputedStyle(targetRef.current);\n\n if (computedStyle.position === 'static') {\n targetRef.current.style.position = 'relative';\n }\n }\n\n // Prevent default context menu if it's a context menu event\n if (\n event &&\n 'preventDefault' in event &&\n typeof event.preventDefault === 'function'\n ) {\n event.preventDefault();\n }\n\n const { x, y } = calculatePosition(event);\n setAnchorPosition({ x, y });\n\n // Overrides only — `defaultMenuProps` is merged in on render.\n setRuntimeProps(props);\n setTriggerProps(triggerProps ?? null);\n setIsOpen(true);\n },\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 setAnchorPosition(null);\n });\n\n // Context menu event handler\n const onContextMenu = useEvent(\n (event: MouseEvent | PointerEvent | MouseEvent | PointerEvent) => {\n event.preventDefault();\n if (isOpen) {\n const pos = calculatePosition(event);\n setAnchorPosition(pos);\n } else {\n // No overrides: the defaults are merged in on every render, so\n // passing them here would freeze the version this right-click saw.\n open(undefined, undefined, event);\n }\n },\n );\n\n // Bind the onContextMenu event to targetRef\n useEffect(() => {\n const element = targetRef.current;\n if (!element) return;\n\n element.addEventListener('contextmenu', onContextMenu as any);\n\n return () => {\n element.removeEventListener('contextmenu', onContextMenu as any);\n };\n }, [onContextMenu]);\n\n // Render the menu only when it has been opened at least once\n const renderedMenu = useMemo(() => {\n if (!runtimeProps || !anchorPosition) 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 <>\n {/*\n Invisible anchor at the click coordinates.\n\n Two things make those coordinates mean what they say:\n\n 1. A `fixed` host, so the containing block's origin is the viewport\n rather than whichever positioned ancestor encloses `rendered` — the\n table root, the tree row — which is what used to open the menu one\n ancestor-origin away from the pointer.\n 2. A portal to `body`, because `position: fixed` is captured by any\n ancestor carrying a transform, filter or `will-change`. A\n virtualized row is usually translated, so the `fixed` host alone\n would still be anchored to the row.\n */}\n {createPortal(\n <div\n style={{\n position: 'fixed',\n left: 0,\n top: 0,\n width: 0,\n height: 0,\n }}\n >\n <span\n ref={invisibleAnchorRef}\n style={{\n position: 'absolute',\n left: `${anchorPosition.x}px`,\n top: `${anchorPosition.y}px`,\n width: '0px',\n height: '0px',\n lineHeight: '0',\n pointerEvents: 'none',\n visibility: 'hidden',\n }}\n />\n </div>,\n document.body,\n )}\n <MenuTrigger\n offset={0}\n placement={\n (triggerProps as ComponentProps<typeof MenuTrigger>)?.placement ||\n defaultTriggerProps?.placement ||\n 'bottom start'\n }\n {...mergeProps(defaultTriggerProps, triggerProps || undefined)}\n isDummy\n isOpen={isOpen}\n targetRef={invisibleAnchorRef}\n popoverRef={popoverRef}\n onOpenChange={setIsOpen}\n >\n <VisuallyHidden>\n <Pressable>\n <button\n aria-label={t(\n 'contextMenu.openContextMenu',\n 'Open context menu',\n )}\n />\n </Pressable>\n </VisuallyHidden>\n <Component {...componentProps} />\n </MenuTrigger>\n </>\n );\n }, [\n runtimeProps,\n defaultMenuProps,\n triggerProps,\n isOpen,\n defaultTriggerProps,\n anchorPosition,\n t,\n ]);\n\n return {\n targetRef,\n open,\n update,\n close,\n isOpen,\n get rendered() {\n setupRef.current = true;\n\n return renderedMenu;\n },\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-context-menu.js","names":["Pressable","ComponentProps","ComponentType","createRef","MouseEvent","PointerEvent","ReactElement","RefObject","useEffect","useMemo","useRef","useState","VisuallyHidden","createPortal","useEvent","useI18n","generateRandomId","mergeProps","usePopoverSync","MenuTrigger","NativeMouseEvent","globalThis","NativePointerEvent","UseContextMenuReturn","HTMLElement","targetRef","E","open","props","P","triggerProps","T","event","update","close","isOpen","rendered","useContextMenu","Component","defaultTriggerProps","Omit","defaultMenuProps","t","setIsOpen","runtimeProps","setRuntimeProps","setTriggerProps","anchorPosition","setAnchorPosition","x","y","invisibleAnchorRef","HTMLSpanElement","popoverRef","HTMLDivElement","setupRef","el","current","dataset","popoverTrigger","menuId","onClose","triggerRef","containerRef","setupCheck","Error","calculatePosition","clientX","clientY","container","rect","getBoundingClientRect","left","width","top","height","computedStyle","window","getComputedStyle","position","style","preventDefault","onContextMenu","pos","undefined","element","addEventListener","removeEventListener","renderedMenu","componentProps","lineHeight","pointerEvents","visibility","document","body","placement"],"sources":["../../../src/components/actions/use-context-menu.tsx"],"sourcesContent":["import { Pressable } from '@react-aria/interactions';\nimport {\n ComponentProps,\n ComponentType,\n createRef,\n MouseEvent,\n PointerEvent,\n ReactElement,\n RefObject,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { VisuallyHidden } from 'react-aria';\nimport { createPortal } from 'react-dom';\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\ntype NativeMouseEvent = globalThis.MouseEvent;\ntype NativePointerEvent = globalThis.PointerEvent;\n\nexport interface UseContextMenuReturn<\n E extends HTMLElement = HTMLElement,\n P extends object = {},\n T = ComponentProps<typeof MenuTrigger>,\n> {\n /** Container element that receives context menu events. Attach this ref to your target element. */\n targetRef: RefObject<E | null>;\n\n /**\n * Programmatically opens the menu at the specified coordinates or element center.\n * Runtime props are merged with the CURRENT `defaultMenuProps` on every render\n * (runtime props take precedence), so defaults that change while the menu is\n * open reach it without an `update()` call.\n *\n * @param props - Props to pass to the menu component (optional, defaults to defaultMenuProps)\n * @param triggerProps - Additional props for MenuTrigger (merged with defaultTriggerProps)\n * @param event - The pointer/mouse event containing coordinates for positioning (optional, centers on element if not provided)\n */\n open(\n props?: P,\n triggerProps?: T,\n event?: NativeMouseEvent | NativePointerEvent | MouseEvent | PointerEvent,\n ): void;\n\n /**\n * Updates the RUNTIME props of the currently open menu without repositioning.\n * Props are merged over the current `defaultMenuProps`. Only needed for props\n * the caller owns — `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 * IMPORTANT: Must be placed directly inside the target container (the element with targetRef).\n */\n get rendered(): ReactElement | null;\n}\n\n/**\n * Generic hook to manage a context menu component that opens at pointer coordinates.\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 `targetRef` to attach to the container element, `open` function to open the menu at event coordinates, `close` function to close the menu, and `rendered` JSX element to include in your component tree.\n */\nexport function useContextMenu<\n E extends HTMLElement = HTMLElement,\n P extends object = {},\n T = ComponentProps<typeof MenuTrigger>,\n>(\n Component: ComponentType<P>,\n defaultTriggerProps?: Omit<\n ComponentProps<typeof MenuTrigger>,\n 'children' | 'isOpen' | 'onOpenChange' | 'targetRef'\n >,\n defaultMenuProps?: P,\n): UseContextMenuReturn<E, 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`.\n *\n * Merging at open time snapshotted the defaults, so a consumer that keeps its\n * menu content IN the defaults (`Tree`'s row menu does: `children` is part of\n * the third argument) had a menu that was frozen the moment it opened. Items\n * appearing, disappearing or flipping `isDisabled` while it was open stayed\n * invisible until it was closed and reopened, and the only workaround was to\n * mirror every render into an `update()` call. Keeping the overrides alone\n * lets the merge happen at RENDER time, against the current defaults, while\n * runtime props still win.\n */\n const [runtimeProps, setRuntimeProps] = useState<P | null>(null);\n const [triggerProps, setTriggerProps] = useState<T | null>(null);\n const [anchorPosition, setAnchorPosition] = useState<{\n x: number;\n y: number;\n } | null>(null);\n const targetRef = useRef<E>(null);\n // Moving a zero-size anchor does not fire ResizeObserver. A fresh ref for\n // each point makes MenuTrigger refresh its positioning and observation while\n // keeping the menu itself mounted, including its current focus and selection.\n const invisibleAnchorRef = useMemo(\n () => createRef<HTMLSpanElement>(),\n [anchorPosition],\n );\n const popoverRef = useRef<HTMLDivElement>(null);\n const setupRef = useRef(false);\n\n // Mark the container as a popover trigger so that other open menus' close-on-\n // outside predicates treat clicks inside it (including programmatic\n // open buttons rendered alongside a context-menu target) as a legitimate\n // trigger interaction instead of a generic outside click. This mirrors the\n // pattern in `useAnchoredMenu`.\n useEffect(() => {\n const el = targetRef.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 context-menu target (`triggerRef`) and the popover\n // container (`containerRef`) into the sync. The container ref is shared with\n // the rendered `MenuTrigger` via its `popoverRef` prop — the dummy\n // `MenuTrigger` opts out of `usePopoverSync` (`enabled: !isDummy`), so\n // without this the nested-popover guard would have no container to match\n // against and a `SubMenuTrigger` opened inside this menu would close the\n // whole menu.\n usePopoverSync({\n menuId,\n isOpen,\n onClose: () => {\n setIsOpen(false);\n setAnchorPosition(null);\n },\n triggerRef: targetRef as RefObject<HTMLElement | null>,\n containerRef: popoverRef,\n });\n\n function setupCheck() {\n if (!setupRef.current) {\n throw new Error(\n 'useContextMenu: MenuTrigger must be rendered. Use `rendered` property to include it in your component tree.',\n );\n }\n }\n\n /**\n * Where to put the invisible anchor, in **viewport** coordinates.\n *\n * Viewport rather than container-relative on purpose. The anchor is rendered\n * into a fixed-position host pinned to the viewport origin (see\n * `renderedMenu`), so the two agree by construction. Computing coordinates\n * against the target element while the anchor's containing block was\n * whichever positioned ancestor happened to enclose `rendered` is what used\n * to open the menu one ancestor-origin away from the pointer.\n */\n const calculatePosition = (\n event?: NativeMouseEvent | NativePointerEvent | MouseEvent | PointerEvent,\n ) => {\n if (event) {\n const { clientX = 0, clientY = 0 } = event;\n\n return { x: clientX, y: clientY };\n }\n\n // No event — a keyboard opening, which has no coordinates. Anchor on the\n // target element's centre instead.\n const container = targetRef.current;\n\n if (!container) return { x: 0, y: 0 };\n\n const rect = container.getBoundingClientRect();\n\n return { x: rect.left + rect.width / 2, y: rect.top + rect.height / 2 };\n };\n\n // 'open' accepts props, trigger props, and optional event for positioning, then opens the menu\n const open = useEvent(\n (\n props: P = {} as P,\n triggerProps?: T,\n event?: NativeMouseEvent | NativePointerEvent | MouseEvent | PointerEvent,\n ) => {\n setupCheck();\n\n // Ensure the target element can serve as a positioning context for the\n // invisible target element. If the consumer hasn't explicitly set\n // `position: relative | absolute | fixed | sticky` we switch it to\n // `relative` so that absolutely-positioned children are laid out correctly.\n if (targetRef.current) {\n const computedStyle = window.getComputedStyle(targetRef.current);\n\n if (computedStyle.position === 'static') {\n targetRef.current.style.position = 'relative';\n }\n }\n\n // Prevent default context menu if it's a context menu event\n if (\n event &&\n 'preventDefault' in event &&\n typeof event.preventDefault === 'function'\n ) {\n event.preventDefault();\n }\n\n const { x, y } = calculatePosition(event);\n setAnchorPosition({ x, y });\n\n // Overrides only — `defaultMenuProps` is merged in on render.\n setRuntimeProps(props);\n setTriggerProps(triggerProps ?? null);\n setIsOpen(true);\n },\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 setAnchorPosition(null);\n });\n\n // Context menu event handler\n const onContextMenu = useEvent(\n (event: MouseEvent | PointerEvent | MouseEvent | PointerEvent) => {\n event.preventDefault();\n if (isOpen) {\n const pos = calculatePosition(event);\n setAnchorPosition(pos);\n } else {\n // No overrides: the defaults are merged in on every render, so\n // passing them here would freeze the version this right-click saw.\n open(undefined, undefined, event);\n }\n },\n );\n\n // Bind the onContextMenu event to targetRef\n useEffect(() => {\n const element = targetRef.current;\n if (!element) return;\n\n element.addEventListener('contextmenu', onContextMenu as any);\n\n return () => {\n element.removeEventListener('contextmenu', onContextMenu as any);\n };\n }, [onContextMenu]);\n\n // Render the menu only when it has been opened at least once\n const renderedMenu = useMemo(() => {\n if (!runtimeProps || !anchorPosition) 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 <>\n {/*\n Invisible anchor at the click coordinates.\n\n Two things make those coordinates mean what they say:\n\n 1. A `fixed` host, so the containing block's origin is the viewport\n rather than whichever positioned ancestor encloses `rendered` — the\n table root, the tree row — which is what used to open the menu one\n ancestor-origin away from the pointer.\n 2. A portal to `body`, because `position: fixed` is captured by any\n ancestor carrying a transform, filter or `will-change`. A\n virtualized row is usually translated, so the `fixed` host alone\n would still be anchored to the row.\n */}\n {createPortal(\n <div\n style={{\n position: 'fixed',\n left: 0,\n top: 0,\n width: 0,\n height: 0,\n }}\n >\n <span\n ref={invisibleAnchorRef}\n style={{\n position: 'absolute',\n left: `${anchorPosition.x}px`,\n top: `${anchorPosition.y}px`,\n width: '0px',\n height: '0px',\n lineHeight: '0',\n pointerEvents: 'none',\n visibility: 'hidden',\n }}\n />\n </div>,\n document.body,\n )}\n <MenuTrigger\n offset={0}\n placement={\n (triggerProps as ComponentProps<typeof MenuTrigger>)?.placement ||\n defaultTriggerProps?.placement ||\n 'bottom start'\n }\n {...mergeProps(defaultTriggerProps, triggerProps || undefined)}\n isDummy\n isOpen={isOpen}\n targetRef={invisibleAnchorRef}\n popoverRef={popoverRef}\n onOpenChange={setIsOpen}\n >\n <VisuallyHidden>\n <Pressable>\n <button\n aria-label={t(\n 'contextMenu.openContextMenu',\n 'Open context menu',\n )}\n />\n </Pressable>\n </VisuallyHidden>\n <Component {...componentProps} />\n </MenuTrigger>\n </>\n );\n }, [\n runtimeProps,\n defaultMenuProps,\n triggerProps,\n isOpen,\n defaultTriggerProps,\n anchorPosition,\n invisibleAnchorRef,\n t,\n ]);\n\n return {\n targetRef,\n open,\n update,\n close,\n isOpen,\n get rendered() {\n setupRef.current = true;\n\n return renderedMenu;\n },\n };\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.190.6 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.190.8 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
4
4
  import { useFocus as useFocus$1 } from "../../../utils/react/interactions.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.190.6 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.190.8 | Cube Dev Team */
2
2
  import themes_default from "../../../data/themes.js";
3
3
  import { useAlert } from "./use-alert.js";
4
4
  import { c } from "react-compiler-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.190.6 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.190.8 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { useDeprecationWarning } from "../../../_internal/hooks/use-deprecation-warning.js";
4
4
  import { c } from "react-compiler-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.190.6 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.190.8 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { c } from "react-compiler-runtime";
4
4
  import { CONTAINER_STYLES, Element, filterBaseProps } from "@tenphi/tasty";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.190.6 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.190.8 | Cube Dev Team */
2
2
  import { _Item } from "../Item/Item.js";
3
3
  import themes_default from "../../../data/themes.js";
4
4
  import { c } from "react-compiler-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.190.6 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.190.8 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { c } from "react-compiler-runtime";
4
4
  import { CONTAINER_STYLES, filterBaseProps, tasty } from "@tenphi/tasty";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.190.6 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.190.8 | Cube Dev Team */
2
2
  import { extractStyles } from "../../utils/styles.js";
3
3
  import { useSlotProps } from "../../utils/react/Slots.js";
4
4
  import { c } from "react-compiler-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.190.6 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.190.8 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { useTimer } from "../../../_internal/hooks/use-timer/use-timer.js";
4
4
  import { useI18n } from "../../../i18n/useI18n.js";
@@ -135,7 +135,7 @@ function CopyPasteBlock(allProps, ref) {
135
135
  mods: { error: !!error },
136
136
  "data-size": size,
137
137
  styles,
138
- tabIndex: "0",
138
+ tabIndex: 0,
139
139
  ...props,
140
140
  ...clipboardProps,
141
141
  children: /* @__PURE__ */ jsxs("div", {