@cube-dev/ui-kit 0.183.0 → 0.185.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (681) hide show
  1. package/README.md +1 -1
  2. package/dist/CHANGELOG.md +64 -0
  3. package/dist/README.md +1 -1
  4. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  5. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  6. package/dist/_internal/hooks/use-event.js +1 -1
  7. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  8. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  9. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  10. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  11. package/dist/_internal/hooks/use-warn.js +1 -1
  12. package/dist/components/Block.js +1 -1
  13. package/dist/components/CollectionItem.js +1 -1
  14. package/dist/components/GlobalStyles.js +19 -18
  15. package/dist/components/GlobalStyles.js.map +1 -1
  16. package/dist/components/GridProvider.js +1 -1
  17. package/dist/components/HiddenInput.js +1 -1
  18. package/dist/components/Root.js +1 -1
  19. package/dist/components/actions/Action/Action.js +1 -1
  20. package/dist/components/actions/Banner/Banner.js +1 -1
  21. package/dist/components/actions/Button/Button.js +1 -1
  22. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  23. package/dist/components/actions/ButtonSplit/ButtonSplit.js +2 -1
  24. package/dist/components/actions/ButtonSplit/ButtonSplit.js.map +1 -1
  25. package/dist/components/actions/ButtonSplit/context.js +1 -1
  26. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -8
  27. package/dist/components/actions/CommandMenu/CommandMenu.js.map +1 -1
  28. package/dist/components/actions/CommandMenu/styled.js +1 -1
  29. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  30. package/dist/components/actions/ItemActionContext.js +1 -1
  31. package/dist/components/actions/ItemActionsWrapper.js +1 -1
  32. package/dist/components/actions/ItemButton/ItemButton.js +3 -1
  33. package/dist/components/actions/ItemButton/ItemButton.js.map +1 -1
  34. package/dist/components/actions/Link/Link.js +1 -1
  35. package/dist/components/actions/Menu/Menu.js +1 -1
  36. package/dist/components/actions/Menu/Menu.js.map +1 -1
  37. package/dist/components/actions/Menu/MenuItem.js +19 -15
  38. package/dist/components/actions/Menu/MenuItem.js.map +1 -1
  39. package/dist/components/actions/Menu/MenuSection.js +1 -8
  40. package/dist/components/actions/Menu/MenuSection.js.map +1 -1
  41. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  42. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -7
  43. package/dist/components/actions/Menu/SubMenuTrigger.js.map +1 -1
  44. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  45. package/dist/components/actions/Menu/context.js +1 -1
  46. package/dist/components/actions/Menu/styled.js +1 -1
  47. package/dist/components/actions/actions-run.js +1 -1
  48. package/dist/components/actions/index.js +1 -1
  49. package/dist/components/actions/use-action.js +3 -5
  50. package/dist/components/actions/use-action.js.map +1 -1
  51. package/dist/components/actions/use-anchored-menu.js +1 -1
  52. package/dist/components/actions/use-context-menu.js +1 -1
  53. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  54. package/dist/components/content/Alert/Alert.js +1 -1
  55. package/dist/components/content/Alert/use-alert.js +1 -1
  56. package/dist/components/content/Avatar/Avatar.js +1 -1
  57. package/dist/components/content/Badge/Badge.js +1 -1
  58. package/dist/components/content/Card/Card.js +1 -1
  59. package/dist/components/content/Content.js +2 -1
  60. package/dist/components/content/Content.js.map +1 -1
  61. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  62. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  63. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  64. package/dist/components/content/Divider.js +1 -1
  65. package/dist/components/content/Footer.js +1 -1
  66. package/dist/components/content/Header.js +1 -1
  67. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  68. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  69. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  70. package/dist/components/content/Item/Item.d.ts +27 -2
  71. package/dist/components/content/Item/Item.js +242 -233
  72. package/dist/components/content/Item/Item.js.map +1 -1
  73. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  74. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  75. package/dist/components/content/Layout/GridLayout.js +1 -1
  76. package/dist/components/content/Layout/Layout.js +1 -1
  77. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  78. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  79. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  80. package/dist/components/content/Layout/LayoutContent.js +1 -1
  81. package/dist/components/content/Layout/LayoutContext.js +1 -1
  82. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  83. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  84. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  85. package/dist/components/content/Layout/LayoutHeader.js +123 -118
  86. package/dist/components/content/Layout/LayoutHeader.js.map +1 -1
  87. package/dist/components/content/Layout/LayoutPane.js +1 -1
  88. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  89. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  90. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  91. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  92. package/dist/components/content/Layout/index.js +1 -1
  93. package/dist/components/content/Layout/utils.js +1 -1
  94. package/dist/components/content/Paragraph.js +1 -1
  95. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  96. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  97. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  98. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  99. package/dist/components/content/Result/Result.js +1 -1
  100. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  101. package/dist/components/content/Tag/Tag.d.ts +6 -1
  102. package/dist/components/content/Tag/Tag.js +1 -1
  103. package/dist/components/content/Tag/Tag.js.map +1 -1
  104. package/dist/components/content/Text.d.ts +14 -14
  105. package/dist/components/content/Text.js +1 -1
  106. package/dist/components/content/TextItem/TextItem.js +1 -1
  107. package/dist/components/content/Title.js +1 -1
  108. package/dist/components/content/Tree/Tree.js +1 -1
  109. package/dist/components/content/Tree/TreeNode.js +1 -1
  110. package/dist/components/content/Tree/styled.js +1 -1
  111. package/dist/components/content/Tree/tree-index.js +1 -1
  112. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  113. package/dist/components/content/Tree/use-load-data.js +1 -1
  114. package/dist/components/content/highlightText.js +1 -1
  115. package/dist/components/content/use-auto-tooltip.d.ts +1 -1
  116. package/dist/components/content/use-auto-tooltip.js +248 -128
  117. package/dist/components/content/use-auto-tooltip.js.map +1 -1
  118. package/dist/components/data/DataTable/DataTable.js +1 -1
  119. package/dist/components/data/ItemTable/ItemTable.js +1 -1
  120. package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
  121. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  122. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  123. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  124. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  125. package/dist/components/data/TableBase/RowCollection.js +1 -1
  126. package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
  127. package/dist/components/data/TableBase/TableRow.js +1 -1
  128. package/dist/components/data/TableBase/TableView.js +1 -1
  129. package/dist/components/data/TableBase/column-menu.js +1 -1
  130. package/dist/components/data/TableBase/column-tint.js +1 -1
  131. package/dist/components/data/TableBase/row-menu.js +1 -1
  132. package/dist/components/data/TableBase/styled.d.ts +1 -0
  133. package/dist/components/data/TableBase/styled.js +1 -1
  134. package/dist/components/data/TableBase/table-tree.js +1 -1
  135. package/dist/components/data/TableBase/types.js +1 -1
  136. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  137. package/dist/components/data/TableBase/use-column-order.js +1 -1
  138. package/dist/components/data/TableBase/use-container-width.js +1 -1
  139. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  140. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  141. package/dist/components/data/TableBase/use-table-columns.js +1 -1
  142. package/dist/components/data/TableBase/use-table-search.js +1 -1
  143. package/dist/components/data/TableBase/use-table-selection.js +1 -1
  144. package/dist/components/data/TableBase/use-table-sort.js +1 -1
  145. package/dist/components/data/TableBase/use-table-sorts.js +1 -1
  146. package/dist/components/data/TableBase/use-table-storage.js +1 -1
  147. package/dist/components/data/TableBase/use-table-tree-state.js +1 -1
  148. package/dist/components/fields/Checkbox/Checkbox.d.ts +8 -0
  149. package/dist/components/fields/Checkbox/Checkbox.js +58 -39
  150. package/dist/components/fields/Checkbox/Checkbox.js.map +1 -1
  151. package/dist/components/fields/Checkbox/CheckboxGroup.js +2 -2
  152. package/dist/components/fields/Checkbox/CheckboxGroup.js.map +1 -1
  153. package/dist/components/fields/Checkbox/context.js +1 -1
  154. package/dist/components/fields/ColorInput/ColorInput.d.ts +17 -1
  155. package/dist/components/fields/ColorInput/ColorInput.js +137 -134
  156. package/dist/components/fields/ColorInput/ColorInput.js.map +1 -1
  157. package/dist/components/fields/ColorPicker/ColorPicker.d.ts +18 -2
  158. package/dist/components/fields/ColorPicker/ColorPicker.js +4 -3
  159. package/dist/components/fields/ColorPicker/ColorPicker.js.map +1 -1
  160. package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
  161. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
  162. package/dist/components/fields/ComboBox/ComboBox.js +90 -43
  163. package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
  164. package/dist/components/fields/CommandTextArea/CommandTextArea.js +3 -2
  165. package/dist/components/fields/CommandTextArea/CommandTextArea.js.map +1 -1
  166. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  167. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  168. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  169. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  170. package/dist/components/fields/DatePicker/DatePicker.d.ts +17 -1
  171. package/dist/components/fields/DatePicker/DatePicker.js +81 -77
  172. package/dist/components/fields/DatePicker/DatePicker.js.map +1 -1
  173. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  174. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  175. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  176. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  177. package/dist/components/fields/DatePicker/DateRangePicker.d.ts +17 -2
  178. package/dist/components/fields/DatePicker/DateRangePicker.js +109 -105
  179. package/dist/components/fields/DatePicker/DateRangePicker.js.map +1 -1
  180. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.d.ts +17 -2
  181. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +228 -220
  182. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js.map +1 -1
  183. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  184. package/dist/components/fields/DatePicker/PeriodPicker.d.ts +17 -1
  185. package/dist/components/fields/DatePicker/PeriodPicker.js +89 -85
  186. package/dist/components/fields/DatePicker/PeriodPicker.js.map +1 -1
  187. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  188. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  189. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  190. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  191. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  192. package/dist/components/fields/DatePicker/period.js +1 -1
  193. package/dist/components/fields/DatePicker/props.js +1 -1
  194. package/dist/components/fields/DatePicker/utils.js +1 -1
  195. package/dist/components/fields/FileInput/FileInput.js +1 -1
  196. package/dist/components/fields/FilterListBox/FilterListBox.js +28 -18
  197. package/dist/components/fields/FilterListBox/FilterListBox.js.map +1 -1
  198. package/dist/components/fields/FilterPicker/FilterPicker.d.ts +11 -2
  199. package/dist/components/fields/FilterPicker/FilterPicker.js +3 -2
  200. package/dist/components/fields/FilterPicker/FilterPicker.js.map +1 -1
  201. package/dist/components/fields/Input/Input.js +1 -1
  202. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  203. package/dist/components/fields/ListBox/ListBox.d.ts +2 -2
  204. package/dist/components/fields/ListBox/ListBox.js +1 -2
  205. package/dist/components/fields/ListBox/ListBox.js.map +1 -1
  206. package/dist/components/fields/ListBox/optionId.js +16 -0
  207. package/dist/components/fields/ListBox/optionId.js.map +1 -0
  208. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +120 -110
  209. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js.map +1 -1
  210. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  211. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +44 -22
  212. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js.map +1 -1
  213. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  214. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  215. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  216. package/dist/components/fields/Picker/Picker.d.ts +20 -3
  217. package/dist/components/fields/Picker/Picker.js +4 -3
  218. package/dist/components/fields/Picker/Picker.js.map +1 -1
  219. package/dist/components/fields/RadioGroup/Radio.d.ts +10 -2
  220. package/dist/components/fields/RadioGroup/Radio.js +215 -213
  221. package/dist/components/fields/RadioGroup/Radio.js.map +1 -1
  222. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  223. package/dist/components/fields/RadioGroup/context.js +1 -1
  224. package/dist/components/fields/SearchComboBox/SearchComboBox.js +3 -2
  225. package/dist/components/fields/SearchComboBox/SearchComboBox.js.map +1 -1
  226. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  227. package/dist/components/fields/Select/Select.d.ts +24 -3
  228. package/dist/components/fields/Select/Select.js +8 -5
  229. package/dist/components/fields/Select/Select.js.map +1 -1
  230. package/dist/components/fields/Slider/Gradation.js +1 -1
  231. package/dist/components/fields/Slider/HueSlider.js +1 -1
  232. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  233. package/dist/components/fields/Slider/Slider.js +1 -1
  234. package/dist/components/fields/Slider/SliderBase.js +1 -1
  235. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  236. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  237. package/dist/components/fields/Slider/elements.js +1 -1
  238. package/dist/components/fields/Slider/index.js +1 -1
  239. package/dist/components/fields/Switch/Switch.js +1 -1
  240. package/dist/components/fields/TagInput/TagInput.d.ts +182 -0
  241. package/dist/components/fields/TagInput/TagInput.js +1856 -0
  242. package/dist/components/fields/TagInput/TagInput.js.map +1 -0
  243. package/dist/components/fields/TagInput/TagList.js +355 -0
  244. package/dist/components/fields/TagInput/TagList.js.map +1 -0
  245. package/dist/components/fields/TagInput/index.d.ts +2 -0
  246. package/dist/components/fields/TextArea/TextArea.js +1 -1
  247. package/dist/components/fields/TextInput/TextInput.js +1 -1
  248. package/dist/components/fields/TextInput/TextInputBase.d.ts +6 -0
  249. package/dist/components/fields/TextInput/TextInputBase.js +8 -6
  250. package/dist/components/fields/TextInput/TextInputBase.js.map +1 -1
  251. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
  252. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  253. package/dist/components/fields/TriggerActions.js +1 -1
  254. package/dist/components/fields/color/ColorPanel.js +1 -1
  255. package/dist/components/fields/color/channels.js +1 -1
  256. package/dist/components/fields/color/color.js +1 -1
  257. package/dist/components/fields/color/context.js +1 -1
  258. package/dist/components/fields/index.d.ts +2 -0
  259. package/dist/components/form/FieldWrapper/FieldWrapper.d.ts +1 -1
  260. package/dist/components/form/FieldWrapper/FieldWrapper.js +23 -10
  261. package/dist/components/form/FieldWrapper/FieldWrapper.js.map +1 -1
  262. package/dist/components/form/FieldWrapper/types.d.ts +1 -1
  263. package/dist/components/form/Form/Field.js +6 -4
  264. package/dist/components/form/Form/Field.js.map +1 -1
  265. package/dist/components/form/Form/Form.js +20 -5
  266. package/dist/components/form/Form/Form.js.map +1 -1
  267. package/dist/components/form/Form/ModernFormRoot.js +1 -1
  268. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  269. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  270. package/dist/components/form/Form/SubmitError.js +1 -1
  271. package/dist/components/form/Form/backend.js +1 -1
  272. package/dist/components/form/Form/index.js +1 -1
  273. package/dist/components/form/Form/modern/actions.js +1 -1
  274. package/dist/components/form/Form/modern/context.js +1 -1
  275. package/dist/components/form/Form/modern/controller.js +1 -1
  276. package/dist/components/form/Form/modern/field-binding.js +1 -1
  277. package/dist/components/form/Form/modern/field.js +1 -1
  278. package/dist/components/form/Form/modern/react.js +1 -1
  279. package/dist/components/form/Form/modern/store.js +1 -1
  280. package/dist/components/form/Form/modern/validation.js +1 -1
  281. package/dist/components/form/Form/modern/values.js +1 -1
  282. package/dist/components/form/Form/use-field/use-field-binding.js +1 -1
  283. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  284. package/dist/components/form/Form/use-field/use-field.js +1 -1
  285. package/dist/components/form/Form/use-form.js +1 -1
  286. package/dist/components/form/Form/validation.js +1 -1
  287. package/dist/components/form/Label.js +1 -1
  288. package/dist/components/form/legacy-tooltip.js +28 -0
  289. package/dist/components/form/legacy-tooltip.js.map +1 -0
  290. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  291. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  292. package/dist/components/form/validation/use-validation-props.js +1 -1
  293. package/dist/components/form/wrapper.js +5 -3
  294. package/dist/components/form/wrapper.js.map +1 -1
  295. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  296. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  297. package/dist/components/layout/Board/Board.js +1 -1
  298. package/dist/components/layout/Board/BoardProvider.js +1 -1
  299. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  300. package/dist/components/layout/Board/Widget.js +1 -1
  301. package/dist/components/layout/Board/WidgetHost.js +1 -1
  302. package/dist/components/layout/Board/board-context.js +1 -1
  303. package/dist/components/layout/Board/board-store.js +1 -1
  304. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  305. package/dist/components/layout/Board/grid-core/collision-modes.js +1 -1
  306. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  307. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  308. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  309. package/dist/components/layout/Board/grid-core/group-move.js +1 -1
  310. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  311. package/dist/components/layout/Board/grid-core/placement.js +1 -1
  312. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  313. package/dist/components/layout/Board/index.js +1 -1
  314. package/dist/components/layout/Board/responsive-utils.js +1 -1
  315. package/dist/components/layout/Board/use-board-layout.js +1 -1
  316. package/dist/components/layout/Board/use-board-registry.js +1 -1
  317. package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
  318. package/dist/components/layout/Board/use-board-selection.js +1 -1
  319. package/dist/components/layout/Flex.js +1 -1
  320. package/dist/components/layout/Flow.js +1 -1
  321. package/dist/components/layout/Grid.js +1 -1
  322. package/dist/components/layout/Panel.js +1 -1
  323. package/dist/components/layout/Prefix.js +1 -1
  324. package/dist/components/layout/ResizablePanel.js +1 -1
  325. package/dist/components/layout/Space.js +1 -1
  326. package/dist/components/layout/Suffix.js +1 -1
  327. package/dist/components/navigation/Pagination/Pagination.js +1 -1
  328. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  329. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  330. package/dist/components/navigation/Tabs/TabButton.js +131 -110
  331. package/dist/components/navigation/Tabs/TabButton.js.map +1 -1
  332. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  333. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  334. package/dist/components/navigation/Tabs/TabPicker.js +2 -1
  335. package/dist/components/navigation/Tabs/TabPicker.js.map +1 -1
  336. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  337. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  338. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  339. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  340. package/dist/components/navigation/Tabs/styled.js +2 -2
  341. package/dist/components/navigation/Tabs/styled.js.map +1 -1
  342. package/dist/components/navigation/Tabs/types.js +1 -1
  343. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  344. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  345. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  346. package/dist/components/other/Calendar/Calendar.js +1 -1
  347. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  348. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  349. package/dist/components/other/Calendar/CalendarHeader.js +1 -1
  350. package/dist/components/other/Calendar/CalendarPanel.js +1 -1
  351. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  352. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  353. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  354. package/dist/components/other/Calendar/styled.js +1 -1
  355. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  356. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  357. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  358. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  359. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  360. package/dist/components/overlays/Dialog/Dialog.js +18 -9
  361. package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
  362. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  363. package/dist/components/overlays/Dialog/DialogForm.js +6 -5
  364. package/dist/components/overlays/Dialog/DialogForm.js.map +1 -1
  365. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  366. package/dist/components/overlays/Dialog/ModernDialogForm.js +71 -64
  367. package/dist/components/overlays/Dialog/ModernDialogForm.js.map +1 -1
  368. package/dist/components/overlays/Dialog/context.js +1 -1
  369. package/dist/components/overlays/Dialog/use-content-overflow.js +68 -0
  370. package/dist/components/overlays/Dialog/use-content-overflow.js.map +1 -0
  371. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  372. package/dist/components/overlays/Modal/Modal.js +1 -1
  373. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  374. package/dist/components/overlays/Modal/Overlay.js +1 -1
  375. package/dist/components/overlays/Modal/Popover.js +1 -1
  376. package/dist/components/overlays/Modal/Tray.js +1 -1
  377. package/dist/components/overlays/Modal/Underlay.js +1 -1
  378. package/dist/components/overlays/Notifications/Notification.js +1 -1
  379. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  380. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  381. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  382. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  383. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  384. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  385. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  386. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  387. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  388. package/dist/components/overlays/Notifications/index.js +1 -1
  389. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  390. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  391. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  392. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  393. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  394. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  395. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  396. package/dist/components/overlays/Toast/index.js +1 -1
  397. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  398. package/dist/components/overlays/Toast/useToast.js +1 -1
  399. package/dist/components/overlays/Tooltip/Tooltip.js +14 -12
  400. package/dist/components/overlays/Tooltip/Tooltip.js.map +1 -1
  401. package/dist/components/overlays/Tooltip/TooltipProvider.d.ts +6 -0
  402. package/dist/components/overlays/Tooltip/TooltipProvider.js +43 -38
  403. package/dist/components/overlays/Tooltip/TooltipProvider.js.map +1 -1
  404. package/dist/components/overlays/Tooltip/TooltipTrigger.js +72 -69
  405. package/dist/components/overlays/Tooltip/TooltipTrigger.js.map +1 -1
  406. package/dist/components/overlays/Tooltip/context.js +1 -1
  407. package/dist/components/overlays/Tooltip/split-trigger-props.d.ts +16 -0
  408. package/dist/components/overlays/Tooltip/split-trigger-props.js +54 -0
  409. package/dist/components/overlays/Tooltip/split-trigger-props.js.map +1 -0
  410. package/dist/components/portal/Portal.js +1 -1
  411. package/dist/components/portal/PortalProvider.js +1 -1
  412. package/dist/components/portal/usePortal.js +1 -1
  413. package/dist/components/shared/DraggableCollection.js +1 -1
  414. package/dist/components/shared/InvalidIcon.js +1 -1
  415. package/dist/components/shared/ValidIcon.js +1 -1
  416. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  417. package/dist/components/status/Spin/Cube.js +1 -1
  418. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  419. package/dist/components/status/Spin/Spin.js +1 -1
  420. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  421. package/dist/data/item-themes.d.ts +1 -1
  422. package/dist/data/item-themes.js +7 -1
  423. package/dist/data/item-themes.js.map +1 -1
  424. package/dist/data/themes.js +1 -1
  425. package/dist/eslint-plugin/defaults.generated.js +47 -1
  426. package/dist/eslint-plugin/defaults.generated.js.map +1 -1
  427. package/dist/eslint-plugin/index.js +1 -1
  428. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  429. package/dist/i18n/I18nProvider.js +1 -1
  430. package/dist/i18n/createFormatter.js +1 -1
  431. package/dist/i18n/index.js +1 -1
  432. package/dist/i18n/instance.js +1 -1
  433. package/dist/i18n/locales/de-DE/uikit.js +18 -1
  434. package/dist/i18n/locales/en-US/uikit.js +18 -1
  435. package/dist/i18n/locales/en-US/uikit.json.d.ts +22 -2
  436. package/dist/i18n/locales/es-ES/uikit.js +18 -1
  437. package/dist/i18n/locales/es-MX/uikit.js +18 -1
  438. package/dist/i18n/locales/fr-FR/uikit.js +18 -1
  439. package/dist/i18n/locales/it-IT/uikit.js +18 -1
  440. package/dist/i18n/locales/ja-JP/uikit.js +18 -1
  441. package/dist/i18n/locales/nb-NO/uikit.js +18 -1
  442. package/dist/i18n/locales/pt-BR/uikit.js +18 -1
  443. package/dist/i18n/locales/pt-PT/uikit.js +18 -1
  444. package/dist/i18n/locales/sv-SE/uikit.js +18 -1
  445. package/dist/i18n/locales/vi-VN/uikit.js +18 -1
  446. package/dist/i18n/locales.js +1 -1
  447. package/dist/i18n/useFormatter.js +1 -1
  448. package/dist/i18n/useI18n.js +1 -1
  449. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  450. package/dist/icons/AdjustmentsIcon.js +1 -1
  451. package/dist/icons/AiIcon.js +1 -1
  452. package/dist/icons/AreaChartIcon.js +1 -1
  453. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  454. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  455. package/dist/icons/BackwardIcon.js +1 -1
  456. package/dist/icons/BarChartIcon.js +1 -1
  457. package/dist/icons/BellFilledIcon.js +1 -1
  458. package/dist/icons/BellIcon.js +1 -1
  459. package/dist/icons/BooleanIcon.js +1 -1
  460. package/dist/icons/CalendarEditIcon.js +1 -1
  461. package/dist/icons/CalendarIcon.js +1 -1
  462. package/dist/icons/CaretDownIcon.js +1 -1
  463. package/dist/icons/CaretUpIcon.js +1 -1
  464. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  465. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  466. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  467. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  468. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  469. package/dist/icons/ChartBarLineIcon.js +1 -1
  470. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  471. package/dist/icons/ChartBarStackedIcon.js +1 -1
  472. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  473. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  474. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  475. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  476. package/dist/icons/ChartBubbleIcon.js +1 -1
  477. package/dist/icons/ChartDonut2Icon.js +1 -1
  478. package/dist/icons/ChartFunnelIcon.js +1 -1
  479. package/dist/icons/ChartHeatmapIcon.js +1 -1
  480. package/dist/icons/ChartKPIIcon.js +1 -1
  481. package/dist/icons/ChartPie2Icon.js +1 -1
  482. package/dist/icons/ChartScatterIcon.js +1 -1
  483. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  484. package/dist/icons/CheckCircleIcon.js +1 -1
  485. package/dist/icons/CheckIcon.js +1 -1
  486. package/dist/icons/CircleFilledIcon.js +1 -1
  487. package/dist/icons/ClearIcon.js +1 -1
  488. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  489. package/dist/icons/CloseCircleIcon.js +1 -1
  490. package/dist/icons/CloseIcon.js +1 -1
  491. package/dist/icons/CodeIcon.js +1 -1
  492. package/dist/icons/ColumnTotalIcon.js +1 -1
  493. package/dist/icons/CopyIcon.js +1 -1
  494. package/dist/icons/CountIcon.js +1 -1
  495. package/dist/icons/CubeIcon.js +1 -1
  496. package/dist/icons/CubePauseIcon.js +1 -1
  497. package/dist/icons/CubePlayIcon.js +1 -1
  498. package/dist/icons/CurrencyDollarIcon.js +1 -1
  499. package/dist/icons/DangerIcon.js +1 -1
  500. package/dist/icons/DashboardIcon.js +1 -1
  501. package/dist/icons/DatabaseIcon.js +1 -1
  502. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  503. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  504. package/dist/icons/DirectionIcon.js +1 -1
  505. package/dist/icons/DonutIcon.js +1 -1
  506. package/dist/icons/DownIcon.js +1 -1
  507. package/dist/icons/EditIcon.js +1 -1
  508. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  509. package/dist/icons/ExclamationCircleIcon.js +1 -1
  510. package/dist/icons/ExclamationIcon.js +1 -1
  511. package/dist/icons/EyeIcon.js +1 -1
  512. package/dist/icons/EyeInvisibleIcon.js +1 -1
  513. package/dist/icons/FilterIcon.js +1 -1
  514. package/dist/icons/FolderFilledIcon.js +1 -1
  515. package/dist/icons/FolderIcon.js +1 -1
  516. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  517. package/dist/icons/FolderOpenIcon.js +1 -1
  518. package/dist/icons/ForwardIcon.js +1 -1
  519. package/dist/icons/GripVerticalIcon.js +1 -1
  520. package/dist/icons/HierarchyIcon.js +1 -1
  521. package/dist/icons/HierarchyOpenIcon.js +1 -1
  522. package/dist/icons/Icon.js +1 -1
  523. package/dist/icons/InfoCircleIcon.js +1 -1
  524. package/dist/icons/InfoIcon.js +1 -1
  525. package/dist/icons/KeyIcon.js +1 -1
  526. package/dist/icons/LeftIcon.js +1 -1
  527. package/dist/icons/LineChartIcon.js +1 -1
  528. package/dist/icons/LoadingIcon.js +1 -1
  529. package/dist/icons/LockFilledIcon.js +1 -1
  530. package/dist/icons/LockIcon.js +1 -1
  531. package/dist/icons/MoreIcon.js +1 -1
  532. package/dist/icons/NotAllowedIcon.js +1 -1
  533. package/dist/icons/Number123Icon.js +1 -1
  534. package/dist/icons/NumberIcon.js +1 -1
  535. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  536. package/dist/icons/PauseCircleIcon.js +1 -1
  537. package/dist/icons/PauseIcon.js +1 -1
  538. package/dist/icons/PercentageIcon.js +1 -1
  539. package/dist/icons/PieChartIcon.js +1 -1
  540. package/dist/icons/PipetteIcon.js +1 -1
  541. package/dist/icons/PlayCircleIcon.js +1 -1
  542. package/dist/icons/PlayIcon.js +1 -1
  543. package/dist/icons/PlusIcon.js +1 -1
  544. package/dist/icons/ProgressBarIcon.js +1 -1
  545. package/dist/icons/ReloadIcon.js +1 -1
  546. package/dist/icons/ReportIcon.js +1 -1
  547. package/dist/icons/ReturnIcon.js +1 -1
  548. package/dist/icons/RightIcon.js +1 -1
  549. package/dist/icons/RowTotalsIcon.js +1 -1
  550. package/dist/icons/SchemeIcon.js +1 -1
  551. package/dist/icons/SearchIcon.js +1 -1
  552. package/dist/icons/SemanticQueryIcon.js +1 -1
  553. package/dist/icons/SettingsIcon.js +1 -1
  554. package/dist/icons/ShieldFilledIcon.js +1 -1
  555. package/dist/icons/ShieldIcon.js +1 -1
  556. package/dist/icons/SlashIcon.js +1 -1
  557. package/dist/icons/SparklesIcon.js +1 -1
  558. package/dist/icons/SqlIcon.js +1 -1
  559. package/dist/icons/StatsIcon.js +1 -1
  560. package/dist/icons/StopIcon.js +1 -1
  561. package/dist/icons/StringIcon.js +1 -1
  562. package/dist/icons/SubtotalsIcon.js +1 -1
  563. package/dist/icons/SwitchIcon.js +1 -1
  564. package/dist/icons/TableIcon.js +1 -1
  565. package/dist/icons/ThumbsDownIcon.js +1 -1
  566. package/dist/icons/ThumbsUpIcon.js +1 -1
  567. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  568. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  569. package/dist/icons/ThunderboltIcon.js +1 -1
  570. package/dist/icons/TimeIcon.js +1 -1
  571. package/dist/icons/TrashIcon.js +1 -1
  572. package/dist/icons/UnlockIcon.js +1 -1
  573. package/dist/icons/UpIcon.js +1 -1
  574. package/dist/icons/UserGroupIcon.js +1 -1
  575. package/dist/icons/UserIcon.js +1 -1
  576. package/dist/icons/UserLockIcon.js +1 -1
  577. package/dist/icons/ViewIcon.js +1 -1
  578. package/dist/icons/WarningFilledIcon.js +1 -1
  579. package/dist/icons/WarningIcon.js +1 -1
  580. package/dist/icons/wrap-icon.js +1 -1
  581. package/dist/index.d.ts +2 -1
  582. package/dist/index.js +3 -2
  583. package/dist/index.js.map +1 -1
  584. package/dist/probe/canonicalize.js +1 -1
  585. package/dist/probe/css.js +1 -1
  586. package/dist/probe/index.js +1 -1
  587. package/dist/provider.js +1 -1
  588. package/dist/providers/TrackingProvider.js +1 -1
  589. package/dist/providers/navigationAdapter.default.js +1 -1
  590. package/dist/shared/form.d.ts +9 -2
  591. package/dist/tokens/all-tokens.js +1 -1
  592. package/dist/tokens/base.js +1 -1
  593. package/dist/tokens/color-seed.js +1 -1
  594. package/dist/tokens/color-theme.js +4 -5
  595. package/dist/tokens/color-theme.js.map +1 -1
  596. package/dist/tokens/colors.js +1 -1
  597. package/dist/tokens/layout.js +1 -1
  598. package/dist/tokens/lazy-styles.js +1 -1
  599. package/dist/tokens/legacy-color.js +1 -1
  600. package/dist/tokens/palette-config.d.ts +5 -0
  601. package/dist/tokens/palette-config.js +30 -7
  602. package/dist/tokens/palette-config.js.map +1 -1
  603. package/dist/tokens/palette.js +1 -1
  604. package/dist/tokens/resolve.js +1 -1
  605. package/dist/tokens/shadows.js +1 -1
  606. package/dist/tokens/sizes.js +1 -1
  607. package/dist/tokens/spacing.js +1 -1
  608. package/dist/tokens/typography.d.ts +1 -0
  609. package/dist/tokens/typography.js +10 -1
  610. package/dist/tokens/typography.js.map +1 -1
  611. package/dist/utils/ResizeSensor.js +1 -1
  612. package/dist/utils/colors.js +1 -1
  613. package/dist/utils/dotize.js +1 -1
  614. package/dist/utils/is-dev-env.js +1 -1
  615. package/dist/utils/modules.js +1 -1
  616. package/dist/utils/promise.js +1 -1
  617. package/dist/utils/raf.js +1 -1
  618. package/dist/utils/random.js +1 -1
  619. package/dist/utils/range.js +1 -1
  620. package/dist/utils/react/RenderCache.js +1 -1
  621. package/dist/utils/react/Slots.js +1 -1
  622. package/dist/utils/react/chain.js +1 -1
  623. package/dist/utils/react/disabledProps.js +1 -1
  624. package/dist/utils/react/escapePropagation.js +1 -1
  625. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  626. package/dist/utils/react/index.js +1 -1
  627. package/dist/utils/react/interactions.js +1 -1
  628. package/dist/utils/react/isTextOnly.js +1 -1
  629. package/dist/utils/react/mapProps.js +1 -1
  630. package/dist/utils/react/mergeProps.js +1 -1
  631. package/dist/utils/react/nullableValue.js +1 -1
  632. package/dist/utils/react/programmaticFocus.js +1 -1
  633. package/dist/utils/react/resolveIcon.js +1 -1
  634. package/dist/utils/react/sharedStore.js +1 -1
  635. package/dist/utils/react/useBufferedValue.js +1 -1
  636. package/dist/utils/react/useCombinedRefs.js +1 -1
  637. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  638. package/dist/utils/react/useEventBus.js +1 -1
  639. package/dist/utils/react/useId.js +1 -1
  640. package/dist/utils/react/useIsDarwin.js +1 -1
  641. package/dist/utils/react/useKeySymbols.js +1 -1
  642. package/dist/utils/react/useLayoutEffect.js +1 -1
  643. package/dist/utils/react/useLocalStorage.js +1 -1
  644. package/dist/utils/react/useMergeStyles.js +1 -1
  645. package/dist/utils/react/useOverlayEscapeGuard.js +1 -1
  646. package/dist/utils/react/usePopoverSync.js +1 -1
  647. package/dist/utils/react/useQaProps.js +1 -1
  648. package/dist/utils/react/useScheme.js +1 -1
  649. package/dist/utils/react/useViewportSize.js +1 -1
  650. package/dist/utils/react/wrapNodeIfPlain.js +3 -4
  651. package/dist/utils/react/wrapNodeIfPlain.js.map +1 -1
  652. package/dist/utils/selection.js +1 -1
  653. package/dist/utils/styles.js +1 -1
  654. package/dist/utils/tree.js +1 -1
  655. package/dist/utils/warnings.js +1 -1
  656. package/dist/version.js +2 -2
  657. package/docs/FieldProperties.md +2 -2
  658. package/docs/Usage.md +10 -9
  659. package/docs/components/actions/ButtonSplit.md +2 -0
  660. package/docs/components/actions/ItemButton.md +2 -2
  661. package/docs/components/content/InfoBadge.md +1 -1
  662. package/docs/components/content/Layout.md +1 -1
  663. package/docs/components/content/Tag.md +10 -2
  664. package/docs/components/fields/Checkbox.md +11 -0
  665. package/docs/components/fields/ColorInput.md +2 -0
  666. package/docs/components/fields/ColorPicker.md +3 -1
  667. package/docs/components/fields/DatePicker.md +2 -0
  668. package/docs/components/fields/FilterPicker.md +3 -1
  669. package/docs/components/fields/PeriodPicker.md +2 -0
  670. package/docs/components/fields/Picker.md +3 -1
  671. package/docs/components/fields/RadioGroup.md +2 -2
  672. package/docs/components/fields/Select.md +5 -0
  673. package/docs/components/fields/TagInput.md +429 -0
  674. package/docs/components/form/Field.md +2 -2
  675. package/docs/components/form/Form.md +2 -0
  676. package/docs/components/navigation/Tabs.md +3 -3
  677. package/docs/components/overlays/Dialog.md +30 -3
  678. package/docs/components/overlays/DialogForm.md +1 -0
  679. package/docs/components/overlays/TooltipProvider.md +1 -0
  680. package/package.json +1 -1
  681. package/tasty.config.ts +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"CommandMenu.js","names":["useObjectRef","useSyncRef","FocusStrategy","BaseProps","CONTAINER_STYLES","ContainerStyleProps","filterBaseProps","Styles","React","Key","ReactElement","ReactNode","Ref","useCallback","useMemo","useRef","useState","useFilter","useMenu","Section","useTreeState","useI18n","LoadingIcon","mergeProps","extractStyles","CollectionItem","Item","TooltipProvider","useMenuContext","CubeMenuProps","MenuItem","MenuSection","MenuTrigger","StyledDivider","StyledFooter","StyledHeader","StyledMenu","StyledCommandMenu","StyledEmptyState","StyledLoadingWrapper","StyledSearchInput","CommandMenuItem","id","textValue","keywords","forceMount","key","CubeCommandMenuProps","Omit","T","searchPlaceholder","searchValue","onSearchChange","value","filter","inputValue","emptyLabel","searchInputStyles","headerStyles","footerStyles","isLoading","shouldFilter","autoFocus","size","selectedKeys","defaultSelectedKeys","onSelectionChange","keys","CommandMenu","props","ref","HTMLDivElement","t","controlledSearchValue","customFilter","qa","styles","header","footer","restMenuProps","domRef","searchInputRef","HTMLInputElement","contextProps","ariaSelectedKeys","Set","undefined","ariaDefaultSelectedKeys","handleSelectionChange","allKeys","Array","from","treeState","collection","getKeys","map","String","completeProps","internalSearchValue","setInternalSearchValue","handleSearchChange","contains","sensitivity","textFilterFn","enhancedFilter","item","searchWords","trim","toLowerCase","split","word","length","searchableTexts","push","isArray","keyword","every","searchWord","some","text","includes","collectionFilter","nodes","Iterable","term","filterNodes","iter","result","node","type","filteredChildren","childNodes","rendered","treeStateProps","shouldUseVirtualFocus","collectionItems","hasSections","focusedKey","setFocusedKey","focusedKeyRef","filteredCollectionItems","items","forEach","hasFilteredItems","viewHasSections","findFirstSelectableItem","selectionManager","visit","childResult","isDisabled","menuRef","HTMLUListElement","menuProps","renderedItems","isFirstSection","sectionStyles","itemStyles","sectionHeadingStyles","menuItem","onAction","tooltip","tooltipProps","title","wrapper","cloneElement","useEffect","current","timeoutId","setTimeout","focus","clearTimeout","prevSearchValueRef","currentSearchValue","prevSearchValue","firstSelectableKey","extractedStyles","hasSearchTerm","showEmptyState","mods","popoverMod","popover","trayMod","tray","sections","Record","border","e","target","preventDefault","isArrowDown","currentKey","getVisibleItemKeys","findNextSelectableKey","currentIndex","direction","visibleKeys","increment","i","findFirstLastSelectableKey","keysToCheck","reverse","nextKey","indexOf","currentFocusedKey","selectionMode","select","getItem","onClose","closeOnSelect","boxShadow","radius","padding","_CommandMenu","forwardRef","RefAttributes","__CommandMenu","Object","assign","Trigger","displayName"],"sources":["../../../../src/components/actions/CommandMenu/CommandMenu.tsx"],"sourcesContent":["import { useObjectRef, useSyncRef } from '@react-aria/utils';\nimport { FocusStrategy } from '@react-types/shared';\nimport {\n BaseProps,\n CONTAINER_STYLES,\n ContainerStyleProps,\n filterBaseProps,\n Styles,\n} from '@tenphi/tasty';\nimport React, {\n Key,\n ReactElement,\n ReactNode,\n Ref,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useFilter, useMenu } from 'react-aria';\nimport { Section, useTreeState } from 'react-stately';\n\nimport { useI18n } from '../../../i18n';\nimport { LoadingIcon } from '../../../icons/LoadingIcon';\nimport { mergeProps } from '../../../utils/react';\nimport { extractStyles } from '../../../utils/styles';\n// `CollectionItem` (not react-stately's bare `Item`) is what CommandMenu\n// actually renders through `MenuItem`, so it carries the `Item` props.\nimport { CollectionItem as Item } from '../../CollectionItem';\nimport { TooltipProvider } from '../../overlays/Tooltip/TooltipProvider';\nimport { useMenuContext } from '../Menu';\nimport { CubeMenuProps } from '../Menu/Menu';\nimport { MenuItem } from '../Menu/MenuItem';\nimport { MenuSection } from '../Menu/MenuSection';\nimport { MenuTrigger } from '../Menu/MenuTrigger';\nimport {\n StyledDivider,\n StyledFooter,\n StyledHeader,\n StyledMenu,\n} from '../Menu/styled';\n\nimport {\n StyledCommandMenu,\n StyledEmptyState,\n StyledLoadingWrapper,\n StyledSearchInput,\n} from './styled';\n\nexport interface CommandMenuItem {\n // Standard item props\n id: string;\n textValue: string;\n\n // Enhanced search features\n keywords?: string[];\n forceMount?: boolean;\n\n // Standard Menu item props inherited\n [key: string]: any;\n}\n\nexport interface CubeCommandMenuProps<T>\n extends BaseProps,\n ContainerStyleProps,\n Omit<\n CubeMenuProps<T>,\n 'selectedKeys' | 'defaultSelectedKeys' | 'onSelectionChange'\n > {\n // Search-specific props\n searchPlaceholder?: string;\n searchValue?: string;\n onSearchChange?: (value: string) => void;\n filter?: (textValue: string, inputValue: string) => boolean;\n emptyLabel?: ReactNode;\n searchInputStyles?: Styles;\n headerStyles?: Styles;\n footerStyles?: Styles;\n\n // Advanced search features\n isLoading?: boolean;\n shouldFilter?: boolean;\n\n // Focus management - override the autoFocus from CubeMenuProps to allow boolean | FocusStrategy\n autoFocus?: boolean | FocusStrategy;\n\n // Size prop\n size?: 'medium' | 'large' | (string & {});\n\n /** Currently selected keys (controlled) */\n selectedKeys?: string[];\n /** Initially selected keys (uncontrolled) */\n defaultSelectedKeys?: string[];\n /** Handler for selection changes */\n onSelectionChange?: (keys: string[]) => void;\n}\n\nfunction CommandMenu<T extends object>(\n props: CubeCommandMenuProps<T>,\n ref: Ref<HTMLDivElement>,\n) {\n const { t } = useI18n();\n\n const {\n searchPlaceholder = t(\n 'commandMenu.searchPlaceholder',\n 'Search commands...',\n ),\n searchValue: controlledSearchValue,\n onSearchChange,\n filter: customFilter,\n emptyLabel = t('commandMenu.empty', 'No commands found'),\n searchInputStyles,\n headerStyles,\n footerStyles,\n isLoading = false,\n shouldFilter = true,\n autoFocus = true,\n size = 'medium',\n qa,\n styles,\n selectedKeys,\n defaultSelectedKeys,\n onSelectionChange,\n header,\n footer,\n ...restMenuProps\n } = props;\n\n const domRef = useObjectRef(ref);\n const searchInputRef = useRef<HTMLInputElement>(null);\n const contextProps = useMenuContext();\n\n // Convert string[] to Set<Key> for React Aria compatibility\n const ariaSelectedKeys = selectedKeys ? new Set(selectedKeys) : undefined;\n const ariaDefaultSelectedKeys = defaultSelectedKeys\n ? new Set(defaultSelectedKeys)\n : undefined;\n\n const handleSelectionChange = onSelectionChange\n ? (keys: 'all' | Set<Key>) => {\n if (keys === 'all') {\n // Handle 'all' selection case - collect all available keys\n const allKeys = Array.from(treeState.collection.getKeys()).map(\n (key: any) => String(key),\n );\n onSelectionChange(allKeys);\n } else if (keys instanceof Set) {\n onSelectionChange(Array.from(keys).map((key) => String(key)));\n } else {\n onSelectionChange([]);\n }\n }\n : undefined;\n\n const completeProps = mergeProps(contextProps, restMenuProps, {\n selectedKeys: ariaSelectedKeys,\n defaultSelectedKeys: ariaDefaultSelectedKeys,\n onSelectionChange: handleSelectionChange,\n });\n\n // Search state management\n const [internalSearchValue, setInternalSearchValue] = useState('');\n const searchValue = controlledSearchValue ?? internalSearchValue;\n\n const handleSearchChange = useCallback(\n (value: string) => {\n if (controlledSearchValue === undefined) {\n setInternalSearchValue(value);\n }\n onSearchChange?.(value);\n },\n [controlledSearchValue, onSearchChange],\n );\n\n // Filter setup\n const { contains } = useFilter({ sensitivity: 'base' });\n const textFilterFn = useMemo(\n () => customFilter || contains,\n [customFilter, contains],\n );\n\n // Enhanced filter function that supports keywords and forceMount\n const enhancedFilter = useCallback(\n (textValue: string, inputValue: string, item?: any) => {\n // Always show force-mounted items\n if (item?.forceMount) {\n return true;\n }\n\n // If shouldFilter is false, show all items\n if (!shouldFilter) {\n return true;\n }\n\n // Split input value into individual words and filter out empty strings\n const searchWords = inputValue\n .trim()\n .toLowerCase()\n .split(/\\s+/)\n .filter((word) => word.length > 0);\n\n // If no search words, show all items\n if (searchWords.length === 0) {\n return true;\n }\n\n // Collect all searchable text for this item\n const searchableTexts: string[] = [];\n\n // Add main text value\n searchableTexts.push(textValue.toLowerCase());\n\n // Add keywords if available\n if (item?.keywords && Array.isArray(item.keywords)) {\n searchableTexts.push(\n ...item.keywords.map((keyword: string) => keyword.toLowerCase()),\n );\n }\n\n // Check if ALL search words match at least one of the searchable texts\n return searchWords.every((searchWord) =>\n searchableTexts.some((text) => text.includes(searchWord)),\n );\n },\n [shouldFilter],\n );\n\n // Collection filter for React Stately\n const collectionFilter = useCallback(\n (nodes: Iterable<any>): Iterable<any> => {\n const term = searchValue.trim();\n\n // If no search term, return all nodes\n if (!term) {\n return nodes;\n }\n\n // Split search term into words for multi-word filtering\n const searchWords = term\n .toLowerCase()\n .split(/\\s+/)\n .filter((word) => word.length > 0);\n\n // If no valid search words, return all nodes\n if (searchWords.length === 0) {\n return nodes;\n }\n\n // Recursive helper to filter sections and items\n const filterNodes = (iter: Iterable<any>): any[] => {\n const result: any[] = [];\n\n for (const node of iter) {\n if (node.type === 'section') {\n const filteredChildren = filterNodes(node.childNodes);\n\n if (filteredChildren.length) {\n result.push({\n ...node,\n childNodes: filteredChildren,\n });\n }\n } else {\n const text = node.textValue ?? String(node.rendered ?? '');\n\n if (enhancedFilter(text, term, node.props)) {\n result.push(node);\n }\n }\n }\n\n return result;\n };\n\n return filterNodes(nodes);\n },\n [searchValue, enhancedFilter],\n );\n\n // Create tree state with filter for both keyboard navigation and rendering\n const treeStateProps = {\n ...completeProps,\n filter: collectionFilter,\n shouldUseVirtualFocus: true, // Always use virtual focus for CommandMenu\n };\n\n const treeState = useTreeState(treeStateProps);\n\n const collectionItems = [...treeState.collection];\n const hasSections = collectionItems.some((item) => item.type === 'section');\n\n // Track focused key for aria-activedescendant\n const [focusedKey, setFocusedKey] = React.useState<React.Key | null>(null);\n const focusedKeyRef = useRef<React.Key | null>(null);\n\n // Apply filtering to collection items for rendering and empty state checks\n const filteredCollectionItems = useMemo(() => {\n const term = searchValue.trim();\n if (!term) {\n return collectionItems;\n }\n\n // Split search term into words for multi-word filtering\n const searchWords = term\n .toLowerCase()\n .split(/\\s+/)\n .filter((word) => word.length > 0);\n\n // If no valid search words, return all items\n if (searchWords.length === 0) {\n return collectionItems;\n }\n\n const filterNodes = (items: any[]): any[] => {\n const result: any[] = [];\n\n [...items].forEach((item) => {\n if (item.type === 'section') {\n const filteredChildren = filterNodes(item.childNodes);\n if (filteredChildren.length) {\n result.push({\n ...item,\n childNodes: filteredChildren,\n });\n }\n } else {\n const text = item.textValue ?? String(item.rendered ?? '');\n if (enhancedFilter(text, term, item.props)) {\n result.push(item);\n }\n }\n });\n\n return result;\n };\n\n return filterNodes(collectionItems);\n }, [collectionItems, searchValue, enhancedFilter]);\n\n const hasFilteredItems = filteredCollectionItems.length > 0;\n const viewHasSections = filteredCollectionItems.some(\n (item) => item.type === 'section',\n );\n\n // Helper function to find the first selectable item from filtered results\n const findFirstSelectableItem = useCallback(() => {\n const { selectionManager } = treeState;\n\n const visit = (items: any[]): Key | null => {\n for (const node of items) {\n if (node?.type === 'section') {\n const childResult = visit(Array.from(node.childNodes ?? []));\n if (childResult != null) return childResult;\n } else if (\n node?.type === 'item' &&\n !selectionManager.isDisabled(node.key)\n ) {\n return node.key;\n }\n }\n return null;\n };\n\n return visit(filteredCollectionItems);\n }, [filteredCollectionItems, treeState.selectionManager]);\n\n // Create a ref for the menu container\n const menuRef = useRef<HTMLUListElement>(null);\n\n // Use menu hook for accessibility\n const { menuProps } = useMenu(\n {\n ...completeProps,\n 'aria-label': 'Command palette menu',\n filter: collectionFilter,\n shouldUseVirtualFocus: true,\n },\n treeState,\n menuRef,\n );\n\n // Manual rendering of menu items (similar to Menu component)\n const renderedItems = useMemo(() => {\n const items: React.ReactNode[] = [];\n let isFirstSection = true;\n\n filteredCollectionItems.forEach((item) => {\n if (item.type === 'section') {\n if (!isFirstSection) {\n items.push(\n <StyledDivider\n key={`divider-${String(item.key)}`}\n role=\"separator\"\n aria-orientation=\"horizontal\"\n />,\n );\n }\n\n items.push(\n <MenuSection\n key={item.key}\n item={item}\n state={treeState}\n styles={completeProps.sectionStyles}\n itemStyles={completeProps.itemStyles}\n headingStyles={completeProps.sectionHeadingStyles}\n size={size}\n />,\n );\n\n isFirstSection = false;\n return;\n }\n\n let menuItem = (\n <MenuItem\n key={item.key}\n item={item}\n state={treeState}\n styles={completeProps.itemStyles}\n size={size}\n onAction={item.onAction}\n />\n );\n\n // Apply tooltip wrapper if tooltip property is provided\n if (item.props.tooltip) {\n const tooltipProps =\n typeof item.props.tooltip === 'string'\n ? { title: item.props.tooltip }\n : item.props.tooltip;\n\n menuItem = (\n <TooltipProvider\n key={item.key}\n activeWrap\n placement=\"right\"\n {...tooltipProps}\n >\n {menuItem}\n </TooltipProvider>\n );\n }\n\n // Apply custom wrapper if provided\n if (item.props.wrapper) {\n menuItem = item.props.wrapper(menuItem);\n }\n\n // Ensure every child has a stable key, even if the wrapper component didn't set one.\n items.push(React.cloneElement(menuItem, { key: item.key }));\n });\n\n return items;\n }, [\n filteredCollectionItems,\n treeState,\n completeProps.sectionStyles,\n completeProps.itemStyles,\n\n completeProps.sectionHeadingStyles,\n ]);\n\n // Auto-focus search input\n React.useEffect(() => {\n if (autoFocus && searchInputRef.current) {\n // Use a small timeout to ensure the element is visible and focusable\n // This is especially important when the CommandMenu is opened in a popover\n const timeoutId = setTimeout(() => {\n if (searchInputRef.current) {\n searchInputRef.current.focus();\n }\n }, 0);\n\n return () => clearTimeout(timeoutId);\n }\n }, [autoFocus]);\n\n // Also focus when the component becomes visible (for trigger/popover usage)\n React.useEffect(() => {\n // Check if autoFocus is enabled and we're in a trigger context\n if (autoFocus && contextProps.autoFocus && searchInputRef.current) {\n // Use a small timeout to ensure the popover is fully rendered\n const timeoutId = setTimeout(() => {\n if (searchInputRef.current) {\n searchInputRef.current.focus();\n }\n }, 50); // Slightly longer timeout for popover context\n\n return () => clearTimeout(timeoutId);\n }\n }, [autoFocus, contextProps.autoFocus]);\n\n // Track the previous search value to only run auto-focus when search actually changes\n const prevSearchValueRef = useRef<string>('');\n\n // Auto-focus first item when search value changes (but not on initial render)\n React.useEffect(() => {\n const currentSearchValue = searchValue.trim();\n const prevSearchValue = prevSearchValueRef.current;\n\n // Only auto-focus when search value actually changes\n if (currentSearchValue !== prevSearchValue && currentSearchValue !== '') {\n const firstSelectableKey = findFirstSelectableItem();\n\n if (firstSelectableKey && hasFilteredItems) {\n // Focus the first item in the selection manager\n treeState.selectionManager.setFocusedKey(firstSelectableKey);\n setFocusedKey(firstSelectableKey);\n focusedKeyRef.current = firstSelectableKey;\n } else {\n // Clear focus if no items are available\n treeState.selectionManager.setFocusedKey(null);\n setFocusedKey(null);\n focusedKeyRef.current = null;\n }\n }\n\n // Update the previous search value\n prevSearchValueRef.current = currentSearchValue;\n }, [searchValue, findFirstSelectableItem, hasFilteredItems]);\n\n // Extract styles\n const extractedStyles = useMemo(\n () => extractStyles(props, CONTAINER_STYLES),\n [props],\n );\n\n // Determine if we should show empty state based on actual filtered collection\n const hasSearchTerm = searchValue.trim().length > 0;\n const showEmptyState = hasSearchTerm && !hasFilteredItems && !isLoading;\n\n // Sync refs\n useSyncRef(contextProps, menuRef);\n\n const mods = useMemo(() => {\n // Determine mods based on menu context\n let popoverMod = completeProps.mods?.popover;\n let trayMod = completeProps.mods?.tray;\n\n return {\n sections: viewHasSections,\n footer: !!footer,\n header: !!header,\n popover: popoverMod,\n tray: trayMod,\n };\n }, [viewHasSections, footer, header, completeProps.mods]);\n\n return (\n <StyledCommandMenu\n {...(filterBaseProps(props) as Record<string, unknown>)}\n ref={domRef}\n qa={qa || 'CommandMenu'}\n data-size={size}\n mods={mods}\n styles={mergeProps(extractedStyles, styles)}\n >\n {/* Header */}\n {header && (\n <StyledHeader\n role=\"presentation\"\n data-size={size}\n styles={{ border: 'none', ...headerStyles }}\n >\n {header}\n </StyledHeader>\n )}\n\n {/* Search Input */}\n <StyledSearchInput\n ref={searchInputRef}\n type=\"search\"\n placeholder={searchPlaceholder}\n value={searchValue}\n styles={searchInputStyles}\n data-size={size}\n aria-controls={`${qa || 'CommandMenu'}-menu`}\n role=\"combobox\"\n aria-expanded=\"true\"\n aria-haspopup=\"listbox\"\n aria-activedescendant={\n focusedKey != null\n ? `${qa || 'CommandMenu'}-menu-option-${focusedKey}`\n : undefined\n }\n onChange={(e) => handleSearchChange(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n\n const isArrowDown = e.key === 'ArrowDown';\n const { selectionManager } = treeState;\n // Use the ref to get the current focused key synchronously\n const currentKey =\n focusedKeyRef.current || selectionManager.focusedKey;\n\n // Helper function to get all visible item keys accounting for sections\n const getVisibleItemKeys = (): Key[] => {\n const keys: Key[] = [];\n\n const visit = (items: any[]) => {\n for (const node of items) {\n if (node?.type === 'section') {\n visit(Array.from(node.childNodes ?? []));\n } else if (node?.type === 'item') {\n keys.push(node.key);\n }\n }\n };\n\n visit(filteredCollectionItems);\n return keys;\n };\n\n // Helper function to find next selectable key in a direction\n const findNextSelectableKey = (\n currentIndex: number,\n direction: 'forward' | 'backward',\n visibleKeys: Key[],\n ) => {\n const increment = direction === 'forward' ? 1 : -1;\n\n for (\n let i = currentIndex + increment;\n i >= 0 && i < visibleKeys.length;\n i += increment\n ) {\n const key = visibleKeys[i];\n if (!selectionManager.isDisabled(key)) {\n return key;\n }\n }\n\n return null;\n };\n\n // Helper function to find first or last selectable key\n const findFirstLastSelectableKey = (\n direction: 'forward' | 'backward',\n visibleKeys: Key[],\n ) => {\n const keysToCheck =\n direction === 'forward'\n ? visibleKeys\n : [...visibleKeys].reverse();\n\n for (const key of keysToCheck) {\n if (!selectionManager.isDisabled(key)) {\n return key;\n }\n }\n\n return null;\n };\n\n const visibleKeys = getVisibleItemKeys();\n\n if (visibleKeys.length === 0) {\n return; // No visible items to navigate\n }\n\n let nextKey;\n const direction = isArrowDown ? 'forward' : 'backward';\n\n if (currentKey == null) {\n // No current focus, start from the first/last item\n nextKey = findFirstLastSelectableKey(direction, visibleKeys);\n } else {\n // Find current position in visible keys\n const currentIndex = visibleKeys.indexOf(currentKey);\n\n if (currentIndex === -1) {\n // Current key not in visible items, start from beginning/end\n nextKey = findFirstLastSelectableKey(direction, visibleKeys);\n } else {\n // Find next selectable item from current position\n nextKey = findNextSelectableKey(\n currentIndex,\n direction,\n visibleKeys,\n );\n\n // If no next key found, wrap to first/last selectable item\n if (nextKey == null) {\n nextKey = findFirstLastSelectableKey(direction, visibleKeys);\n }\n }\n }\n\n if (nextKey != null) {\n selectionManager.setFocusedKey(nextKey);\n setFocusedKey(nextKey);\n focusedKeyRef.current = nextKey; // Update ref immediately\n }\n } else if (\n e.key === 'Enter' ||\n (e.key === ' ' && !searchValue.trim())\n ) {\n const currentFocusedKey =\n focusedKey || treeState.selectionManager.focusedKey;\n if (currentFocusedKey != null) {\n e.preventDefault();\n\n // Trigger action for the focused item (like Menu does)\n // First check if there's a selection mode, if so, handle selection\n if (treeState.selectionManager.selectionMode !== 'none') {\n treeState.selectionManager.select(currentFocusedKey, e);\n } else {\n // Default behavior: trigger action\n const node = treeState.collection.getItem(currentFocusedKey);\n if (node) {\n // Call the tree state's action handler\n const onAction = (completeProps as any).onAction;\n if (onAction) {\n onAction(currentFocusedKey);\n }\n // Also call the item's individual onAction if it exists\n if (node.props?.onAction) {\n node.props.onAction(currentFocusedKey);\n }\n }\n }\n\n // Close the menu if we're in a trigger context and closeOnSelect is enabled (default behavior)\n const { onClose, closeOnSelect } = contextProps;\n if (onClose && closeOnSelect !== false) {\n onClose();\n }\n }\n } else if (e.key === 'Escape') {\n if (searchValue) {\n e.preventDefault();\n handleSearchChange('');\n }\n }\n }}\n />\n\n {/* Loading State */}\n {isLoading && (\n <StyledLoadingWrapper>\n <LoadingIcon\n role=\"progressbar\"\n aria-label=\"Loading commands\"\n aria-hidden={false}\n />\n </StyledLoadingWrapper>\n )}\n\n {/* Menu Content - always render unless loading */}\n {!isLoading && !showEmptyState && (\n <StyledMenu\n {...menuProps}\n ref={menuRef}\n id={`${qa || 'CommandMenu'}-menu`}\n aria-label=\"Command menu\"\n qa=\"Menu\"\n data-size={size}\n mods={mods}\n styles={{\n border: 'none',\n boxShadow: 'none',\n radius: 0,\n padding: '0.5x',\n }}\n >\n {renderedItems}\n </StyledMenu>\n )}\n\n {/* Empty State - show when search term exists but no results */}\n {!isLoading && showEmptyState && (\n <StyledEmptyState>{emptyLabel}</StyledEmptyState>\n )}\n\n {/* Footer */}\n {footer && (\n <StyledFooter\n role=\"presentation\"\n data-size={size}\n styles={footerStyles}\n >\n {footer}\n </StyledFooter>\n )}\n </StyledCommandMenu>\n );\n}\n\n// forwardRef doesn't support generic parameters, so cast the result to the correct type\nconst _CommandMenu = React.forwardRef(CommandMenu) as <T>(\n props: CubeCommandMenuProps<T> & React.RefAttributes<HTMLDivElement>,\n) => ReactElement;\n\n// Attach Trigger alias from MenuTrigger for consistent API\n// Also attach Item and Section for compound component pattern\nconst __CommandMenu = Object.assign(_CommandMenu, {\n Trigger: MenuTrigger,\n Item,\n Section,\n displayName: 'CommandMenu',\n});\n\nexport { __CommandMenu as CommandMenu };\n"],"mappings":"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"}
1
+ {"version":3,"file":"CommandMenu.js","names":["useObjectRef","useSyncRef","FocusStrategy","BaseProps","CONTAINER_STYLES","ContainerStyleProps","filterBaseProps","Styles","React","Key","ReactElement","ReactNode","Ref","useCallback","useMemo","useRef","useState","useFilter","useMenu","Section","useTreeState","useI18n","LoadingIcon","mergeProps","extractStyles","CollectionItem","Item","useMenuContext","CubeMenuProps","MenuItem","MenuSection","MenuTrigger","StyledDivider","StyledFooter","StyledHeader","StyledMenu","StyledCommandMenu","StyledEmptyState","StyledLoadingWrapper","StyledSearchInput","CommandMenuItem","id","textValue","keywords","forceMount","key","CubeCommandMenuProps","Omit","T","searchPlaceholder","searchValue","onSearchChange","value","filter","inputValue","emptyLabel","searchInputStyles","headerStyles","footerStyles","isLoading","shouldFilter","autoFocus","size","selectedKeys","defaultSelectedKeys","onSelectionChange","keys","CommandMenu","props","ref","HTMLDivElement","t","controlledSearchValue","customFilter","qa","styles","header","footer","restMenuProps","domRef","searchInputRef","HTMLInputElement","contextProps","ariaSelectedKeys","Set","undefined","ariaDefaultSelectedKeys","handleSelectionChange","allKeys","Array","from","treeState","collection","getKeys","map","String","completeProps","internalSearchValue","setInternalSearchValue","handleSearchChange","contains","sensitivity","textFilterFn","enhancedFilter","item","searchWords","trim","toLowerCase","split","word","length","searchableTexts","push","isArray","keyword","every","searchWord","some","text","includes","collectionFilter","nodes","Iterable","term","filterNodes","iter","result","node","type","filteredChildren","childNodes","rendered","treeStateProps","shouldUseVirtualFocus","collectionItems","hasSections","focusedKey","setFocusedKey","focusedKeyRef","filteredCollectionItems","items","forEach","hasFilteredItems","viewHasSections","findFirstSelectableItem","selectionManager","visit","childResult","isDisabled","menuRef","HTMLUListElement","menuProps","renderedItems","isFirstSection","sectionStyles","itemStyles","sectionHeadingStyles","menuItem","onAction","wrapper","cloneElement","useEffect","current","timeoutId","setTimeout","focus","clearTimeout","prevSearchValueRef","currentSearchValue","prevSearchValue","firstSelectableKey","extractedStyles","hasSearchTerm","showEmptyState","mods","popoverMod","popover","trayMod","tray","sections","Record","border","e","target","preventDefault","isArrowDown","currentKey","getVisibleItemKeys","findNextSelectableKey","currentIndex","direction","visibleKeys","increment","i","findFirstLastSelectableKey","keysToCheck","reverse","nextKey","indexOf","currentFocusedKey","selectionMode","select","getItem","onClose","closeOnSelect","boxShadow","radius","padding","_CommandMenu","forwardRef","RefAttributes","__CommandMenu","Object","assign","Trigger","displayName"],"sources":["../../../../src/components/actions/CommandMenu/CommandMenu.tsx"],"sourcesContent":["import { useObjectRef, useSyncRef } from '@react-aria/utils';\nimport { FocusStrategy } from '@react-types/shared';\nimport {\n BaseProps,\n CONTAINER_STYLES,\n ContainerStyleProps,\n filterBaseProps,\n Styles,\n} from '@tenphi/tasty';\nimport React, {\n Key,\n ReactElement,\n ReactNode,\n Ref,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useFilter, useMenu } from 'react-aria';\nimport { Section, useTreeState } from 'react-stately';\n\nimport { useI18n } from '../../../i18n';\nimport { LoadingIcon } from '../../../icons/LoadingIcon';\nimport { mergeProps } from '../../../utils/react';\nimport { extractStyles } from '../../../utils/styles';\n// `CollectionItem` (not react-stately's bare `Item`) is what CommandMenu\n// actually renders through `MenuItem`, so it carries the `Item` props.\nimport { CollectionItem as Item } from '../../CollectionItem';\nimport { useMenuContext } from '../Menu';\nimport { CubeMenuProps } from '../Menu/Menu';\nimport { MenuItem } from '../Menu/MenuItem';\nimport { MenuSection } from '../Menu/MenuSection';\nimport { MenuTrigger } from '../Menu/MenuTrigger';\nimport {\n StyledDivider,\n StyledFooter,\n StyledHeader,\n StyledMenu,\n} from '../Menu/styled';\n\nimport {\n StyledCommandMenu,\n StyledEmptyState,\n StyledLoadingWrapper,\n StyledSearchInput,\n} from './styled';\n\nexport interface CommandMenuItem {\n // Standard item props\n id: string;\n textValue: string;\n\n // Enhanced search features\n keywords?: string[];\n forceMount?: boolean;\n\n // Standard Menu item props inherited\n [key: string]: any;\n}\n\nexport interface CubeCommandMenuProps<T>\n extends BaseProps,\n ContainerStyleProps,\n Omit<\n CubeMenuProps<T>,\n 'selectedKeys' | 'defaultSelectedKeys' | 'onSelectionChange'\n > {\n // Search-specific props\n searchPlaceholder?: string;\n searchValue?: string;\n onSearchChange?: (value: string) => void;\n filter?: (textValue: string, inputValue: string) => boolean;\n emptyLabel?: ReactNode;\n searchInputStyles?: Styles;\n headerStyles?: Styles;\n footerStyles?: Styles;\n\n // Advanced search features\n isLoading?: boolean;\n shouldFilter?: boolean;\n\n // Focus management - override the autoFocus from CubeMenuProps to allow boolean | FocusStrategy\n autoFocus?: boolean | FocusStrategy;\n\n // Size prop\n size?: 'medium' | 'large' | (string & {});\n\n /** Currently selected keys (controlled) */\n selectedKeys?: string[];\n /** Initially selected keys (uncontrolled) */\n defaultSelectedKeys?: string[];\n /** Handler for selection changes */\n onSelectionChange?: (keys: string[]) => void;\n}\n\nfunction CommandMenu<T extends object>(\n props: CubeCommandMenuProps<T>,\n ref: Ref<HTMLDivElement>,\n) {\n const { t } = useI18n();\n\n const {\n searchPlaceholder = t(\n 'commandMenu.searchPlaceholder',\n 'Search commands...',\n ),\n searchValue: controlledSearchValue,\n onSearchChange,\n filter: customFilter,\n emptyLabel = t('commandMenu.empty', 'No commands found'),\n searchInputStyles,\n headerStyles,\n footerStyles,\n isLoading = false,\n shouldFilter = true,\n autoFocus = true,\n size = 'medium',\n qa,\n styles,\n selectedKeys,\n defaultSelectedKeys,\n onSelectionChange,\n header,\n footer,\n ...restMenuProps\n } = props;\n\n const domRef = useObjectRef(ref);\n const searchInputRef = useRef<HTMLInputElement>(null);\n const contextProps = useMenuContext();\n\n // Convert string[] to Set<Key> for React Aria compatibility\n const ariaSelectedKeys = selectedKeys ? new Set(selectedKeys) : undefined;\n const ariaDefaultSelectedKeys = defaultSelectedKeys\n ? new Set(defaultSelectedKeys)\n : undefined;\n\n const handleSelectionChange = onSelectionChange\n ? (keys: 'all' | Set<Key>) => {\n if (keys === 'all') {\n // Handle 'all' selection case - collect all available keys\n const allKeys = Array.from(treeState.collection.getKeys()).map(\n (key: any) => String(key),\n );\n onSelectionChange(allKeys);\n } else if (keys instanceof Set) {\n onSelectionChange(Array.from(keys).map((key) => String(key)));\n } else {\n onSelectionChange([]);\n }\n }\n : undefined;\n\n const completeProps = mergeProps(contextProps, restMenuProps, {\n selectedKeys: ariaSelectedKeys,\n defaultSelectedKeys: ariaDefaultSelectedKeys,\n onSelectionChange: handleSelectionChange,\n });\n\n // Search state management\n const [internalSearchValue, setInternalSearchValue] = useState('');\n const searchValue = controlledSearchValue ?? internalSearchValue;\n\n const handleSearchChange = useCallback(\n (value: string) => {\n if (controlledSearchValue === undefined) {\n setInternalSearchValue(value);\n }\n onSearchChange?.(value);\n },\n [controlledSearchValue, onSearchChange],\n );\n\n // Filter setup\n const { contains } = useFilter({ sensitivity: 'base' });\n const textFilterFn = useMemo(\n () => customFilter || contains,\n [customFilter, contains],\n );\n\n // Enhanced filter function that supports keywords and forceMount\n const enhancedFilter = useCallback(\n (textValue: string, inputValue: string, item?: any) => {\n // Always show force-mounted items\n if (item?.forceMount) {\n return true;\n }\n\n // If shouldFilter is false, show all items\n if (!shouldFilter) {\n return true;\n }\n\n // Split input value into individual words and filter out empty strings\n const searchWords = inputValue\n .trim()\n .toLowerCase()\n .split(/\\s+/)\n .filter((word) => word.length > 0);\n\n // If no search words, show all items\n if (searchWords.length === 0) {\n return true;\n }\n\n // Collect all searchable text for this item\n const searchableTexts: string[] = [];\n\n // Add main text value\n searchableTexts.push(textValue.toLowerCase());\n\n // Add keywords if available\n if (item?.keywords && Array.isArray(item.keywords)) {\n searchableTexts.push(\n ...item.keywords.map((keyword: string) => keyword.toLowerCase()),\n );\n }\n\n // Check if ALL search words match at least one of the searchable texts\n return searchWords.every((searchWord) =>\n searchableTexts.some((text) => text.includes(searchWord)),\n );\n },\n [shouldFilter],\n );\n\n // Collection filter for React Stately\n const collectionFilter = useCallback(\n (nodes: Iterable<any>): Iterable<any> => {\n const term = searchValue.trim();\n\n // If no search term, return all nodes\n if (!term) {\n return nodes;\n }\n\n // Split search term into words for multi-word filtering\n const searchWords = term\n .toLowerCase()\n .split(/\\s+/)\n .filter((word) => word.length > 0);\n\n // If no valid search words, return all nodes\n if (searchWords.length === 0) {\n return nodes;\n }\n\n // Recursive helper to filter sections and items\n const filterNodes = (iter: Iterable<any>): any[] => {\n const result: any[] = [];\n\n for (const node of iter) {\n if (node.type === 'section') {\n const filteredChildren = filterNodes(node.childNodes);\n\n if (filteredChildren.length) {\n result.push({\n ...node,\n childNodes: filteredChildren,\n });\n }\n } else {\n const text = node.textValue ?? String(node.rendered ?? '');\n\n if (enhancedFilter(text, term, node.props)) {\n result.push(node);\n }\n }\n }\n\n return result;\n };\n\n return filterNodes(nodes);\n },\n [searchValue, enhancedFilter],\n );\n\n // Create tree state with filter for both keyboard navigation and rendering\n const treeStateProps = {\n ...completeProps,\n filter: collectionFilter,\n shouldUseVirtualFocus: true, // Always use virtual focus for CommandMenu\n };\n\n const treeState = useTreeState(treeStateProps);\n\n const collectionItems = [...treeState.collection];\n const hasSections = collectionItems.some((item) => item.type === 'section');\n\n // Track focused key for aria-activedescendant\n const [focusedKey, setFocusedKey] = React.useState<React.Key | null>(null);\n const focusedKeyRef = useRef<React.Key | null>(null);\n\n // Apply filtering to collection items for rendering and empty state checks\n const filteredCollectionItems = useMemo(() => {\n const term = searchValue.trim();\n if (!term) {\n return collectionItems;\n }\n\n // Split search term into words for multi-word filtering\n const searchWords = term\n .toLowerCase()\n .split(/\\s+/)\n .filter((word) => word.length > 0);\n\n // If no valid search words, return all items\n if (searchWords.length === 0) {\n return collectionItems;\n }\n\n const filterNodes = (items: any[]): any[] => {\n const result: any[] = [];\n\n [...items].forEach((item) => {\n if (item.type === 'section') {\n const filteredChildren = filterNodes(item.childNodes);\n if (filteredChildren.length) {\n result.push({\n ...item,\n childNodes: filteredChildren,\n });\n }\n } else {\n const text = item.textValue ?? String(item.rendered ?? '');\n if (enhancedFilter(text, term, item.props)) {\n result.push(item);\n }\n }\n });\n\n return result;\n };\n\n return filterNodes(collectionItems);\n }, [collectionItems, searchValue, enhancedFilter]);\n\n const hasFilteredItems = filteredCollectionItems.length > 0;\n const viewHasSections = filteredCollectionItems.some(\n (item) => item.type === 'section',\n );\n\n // Helper function to find the first selectable item from filtered results\n const findFirstSelectableItem = useCallback(() => {\n const { selectionManager } = treeState;\n\n const visit = (items: any[]): Key | null => {\n for (const node of items) {\n if (node?.type === 'section') {\n const childResult = visit(Array.from(node.childNodes ?? []));\n if (childResult != null) return childResult;\n } else if (\n node?.type === 'item' &&\n !selectionManager.isDisabled(node.key)\n ) {\n return node.key;\n }\n }\n return null;\n };\n\n return visit(filteredCollectionItems);\n }, [filteredCollectionItems, treeState.selectionManager]);\n\n // Create a ref for the menu container\n const menuRef = useRef<HTMLUListElement>(null);\n\n // Use menu hook for accessibility\n const { menuProps } = useMenu(\n {\n ...completeProps,\n 'aria-label': 'Command palette menu',\n filter: collectionFilter,\n shouldUseVirtualFocus: true,\n },\n treeState,\n menuRef,\n );\n\n // Manual rendering of menu items (similar to Menu component)\n const renderedItems = useMemo(() => {\n const items: React.ReactNode[] = [];\n let isFirstSection = true;\n\n filteredCollectionItems.forEach((item) => {\n if (item.type === 'section') {\n if (!isFirstSection) {\n items.push(\n <StyledDivider\n key={`divider-${String(item.key)}`}\n role=\"separator\"\n aria-orientation=\"horizontal\"\n />,\n );\n }\n\n items.push(\n <MenuSection\n key={item.key}\n item={item}\n state={treeState}\n styles={completeProps.sectionStyles}\n itemStyles={completeProps.itemStyles}\n headingStyles={completeProps.sectionHeadingStyles}\n size={size}\n />,\n );\n\n isFirstSection = false;\n return;\n }\n\n let menuItem = (\n <MenuItem\n key={item.key}\n item={item}\n state={treeState}\n styles={completeProps.itemStyles}\n size={size}\n onAction={item.onAction}\n />\n );\n\n // Apply custom wrapper if provided\n if (item.props.wrapper) {\n menuItem = item.props.wrapper(menuItem);\n }\n\n // Ensure every child has a stable key, even if the wrapper component didn't set one.\n items.push(React.cloneElement(menuItem, { key: item.key }));\n });\n\n return items;\n }, [\n filteredCollectionItems,\n treeState,\n completeProps.sectionStyles,\n completeProps.itemStyles,\n\n completeProps.sectionHeadingStyles,\n ]);\n\n // Auto-focus search input\n React.useEffect(() => {\n if (autoFocus && searchInputRef.current) {\n // Use a small timeout to ensure the element is visible and focusable\n // This is especially important when the CommandMenu is opened in a popover\n const timeoutId = setTimeout(() => {\n if (searchInputRef.current) {\n searchInputRef.current.focus();\n }\n }, 0);\n\n return () => clearTimeout(timeoutId);\n }\n }, [autoFocus]);\n\n // Also focus when the component becomes visible (for trigger/popover usage)\n React.useEffect(() => {\n // Check if autoFocus is enabled and we're in a trigger context\n if (autoFocus && contextProps.autoFocus && searchInputRef.current) {\n // Use a small timeout to ensure the popover is fully rendered\n const timeoutId = setTimeout(() => {\n if (searchInputRef.current) {\n searchInputRef.current.focus();\n }\n }, 50); // Slightly longer timeout for popover context\n\n return () => clearTimeout(timeoutId);\n }\n }, [autoFocus, contextProps.autoFocus]);\n\n // Track the previous search value to only run auto-focus when search actually changes\n const prevSearchValueRef = useRef<string>('');\n\n // Auto-focus first item when search value changes (but not on initial render)\n React.useEffect(() => {\n const currentSearchValue = searchValue.trim();\n const prevSearchValue = prevSearchValueRef.current;\n\n // Only auto-focus when search value actually changes\n if (currentSearchValue !== prevSearchValue && currentSearchValue !== '') {\n const firstSelectableKey = findFirstSelectableItem();\n\n if (firstSelectableKey && hasFilteredItems) {\n // Focus the first item in the selection manager\n treeState.selectionManager.setFocusedKey(firstSelectableKey);\n setFocusedKey(firstSelectableKey);\n focusedKeyRef.current = firstSelectableKey;\n } else {\n // Clear focus if no items are available\n treeState.selectionManager.setFocusedKey(null);\n setFocusedKey(null);\n focusedKeyRef.current = null;\n }\n }\n\n // Update the previous search value\n prevSearchValueRef.current = currentSearchValue;\n }, [searchValue, findFirstSelectableItem, hasFilteredItems]);\n\n // Extract styles\n const extractedStyles = useMemo(\n () => extractStyles(props, CONTAINER_STYLES),\n [props],\n );\n\n // Determine if we should show empty state based on actual filtered collection\n const hasSearchTerm = searchValue.trim().length > 0;\n const showEmptyState = hasSearchTerm && !hasFilteredItems && !isLoading;\n\n // Sync refs\n useSyncRef(contextProps, menuRef);\n\n const mods = useMemo(() => {\n // Determine mods based on menu context\n let popoverMod = completeProps.mods?.popover;\n let trayMod = completeProps.mods?.tray;\n\n return {\n sections: viewHasSections,\n footer: !!footer,\n header: !!header,\n popover: popoverMod,\n tray: trayMod,\n };\n }, [viewHasSections, footer, header, completeProps.mods]);\n\n return (\n <StyledCommandMenu\n {...(filterBaseProps(props) as Record<string, unknown>)}\n ref={domRef}\n qa={qa || 'CommandMenu'}\n data-size={size}\n mods={mods}\n styles={mergeProps(extractedStyles, styles)}\n >\n {/* Header */}\n {header && (\n <StyledHeader\n role=\"presentation\"\n data-size={size}\n styles={{ border: 'none', ...headerStyles }}\n >\n {header}\n </StyledHeader>\n )}\n\n {/* Search Input */}\n <StyledSearchInput\n ref={searchInputRef}\n type=\"search\"\n placeholder={searchPlaceholder}\n value={searchValue}\n styles={searchInputStyles}\n data-size={size}\n aria-controls={`${qa || 'CommandMenu'}-menu`}\n role=\"combobox\"\n aria-expanded=\"true\"\n aria-haspopup=\"listbox\"\n aria-activedescendant={\n focusedKey != null\n ? `${qa || 'CommandMenu'}-menu-option-${focusedKey}`\n : undefined\n }\n onChange={(e) => handleSearchChange(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n\n const isArrowDown = e.key === 'ArrowDown';\n const { selectionManager } = treeState;\n // Use the ref to get the current focused key synchronously\n const currentKey =\n focusedKeyRef.current || selectionManager.focusedKey;\n\n // Helper function to get all visible item keys accounting for sections\n const getVisibleItemKeys = (): Key[] => {\n const keys: Key[] = [];\n\n const visit = (items: any[]) => {\n for (const node of items) {\n if (node?.type === 'section') {\n visit(Array.from(node.childNodes ?? []));\n } else if (node?.type === 'item') {\n keys.push(node.key);\n }\n }\n };\n\n visit(filteredCollectionItems);\n return keys;\n };\n\n // Helper function to find next selectable key in a direction\n const findNextSelectableKey = (\n currentIndex: number,\n direction: 'forward' | 'backward',\n visibleKeys: Key[],\n ) => {\n const increment = direction === 'forward' ? 1 : -1;\n\n for (\n let i = currentIndex + increment;\n i >= 0 && i < visibleKeys.length;\n i += increment\n ) {\n const key = visibleKeys[i];\n if (!selectionManager.isDisabled(key)) {\n return key;\n }\n }\n\n return null;\n };\n\n // Helper function to find first or last selectable key\n const findFirstLastSelectableKey = (\n direction: 'forward' | 'backward',\n visibleKeys: Key[],\n ) => {\n const keysToCheck =\n direction === 'forward'\n ? visibleKeys\n : [...visibleKeys].reverse();\n\n for (const key of keysToCheck) {\n if (!selectionManager.isDisabled(key)) {\n return key;\n }\n }\n\n return null;\n };\n\n const visibleKeys = getVisibleItemKeys();\n\n if (visibleKeys.length === 0) {\n return; // No visible items to navigate\n }\n\n let nextKey;\n const direction = isArrowDown ? 'forward' : 'backward';\n\n if (currentKey == null) {\n // No current focus, start from the first/last item\n nextKey = findFirstLastSelectableKey(direction, visibleKeys);\n } else {\n // Find current position in visible keys\n const currentIndex = visibleKeys.indexOf(currentKey);\n\n if (currentIndex === -1) {\n // Current key not in visible items, start from beginning/end\n nextKey = findFirstLastSelectableKey(direction, visibleKeys);\n } else {\n // Find next selectable item from current position\n nextKey = findNextSelectableKey(\n currentIndex,\n direction,\n visibleKeys,\n );\n\n // If no next key found, wrap to first/last selectable item\n if (nextKey == null) {\n nextKey = findFirstLastSelectableKey(direction, visibleKeys);\n }\n }\n }\n\n if (nextKey != null) {\n selectionManager.setFocusedKey(nextKey);\n setFocusedKey(nextKey);\n focusedKeyRef.current = nextKey; // Update ref immediately\n }\n } else if (\n e.key === 'Enter' ||\n (e.key === ' ' && !searchValue.trim())\n ) {\n const currentFocusedKey =\n focusedKey || treeState.selectionManager.focusedKey;\n if (currentFocusedKey != null) {\n e.preventDefault();\n\n // Trigger action for the focused item (like Menu does)\n // First check if there's a selection mode, if so, handle selection\n if (treeState.selectionManager.selectionMode !== 'none') {\n treeState.selectionManager.select(currentFocusedKey, e);\n } else {\n // Default behavior: trigger action\n const node = treeState.collection.getItem(currentFocusedKey);\n if (node) {\n // Call the tree state's action handler\n const onAction = (completeProps as any).onAction;\n if (onAction) {\n onAction(currentFocusedKey);\n }\n // Also call the item's individual onAction if it exists\n if (node.props?.onAction) {\n node.props.onAction(currentFocusedKey);\n }\n }\n }\n\n // Close the menu if we're in a trigger context and closeOnSelect is enabled (default behavior)\n const { onClose, closeOnSelect } = contextProps;\n if (onClose && closeOnSelect !== false) {\n onClose();\n }\n }\n } else if (e.key === 'Escape') {\n if (searchValue) {\n e.preventDefault();\n handleSearchChange('');\n }\n }\n }}\n />\n\n {/* Loading State */}\n {isLoading && (\n <StyledLoadingWrapper>\n <LoadingIcon\n role=\"progressbar\"\n aria-label=\"Loading commands\"\n aria-hidden={false}\n />\n </StyledLoadingWrapper>\n )}\n\n {/* Menu Content - always render unless loading */}\n {!isLoading && !showEmptyState && (\n <StyledMenu\n {...menuProps}\n ref={menuRef}\n id={`${qa || 'CommandMenu'}-menu`}\n aria-label=\"Command menu\"\n qa=\"Menu\"\n data-size={size}\n mods={mods}\n styles={{\n border: 'none',\n boxShadow: 'none',\n radius: 0,\n padding: '0.5x',\n }}\n >\n {renderedItems}\n </StyledMenu>\n )}\n\n {/* Empty State - show when search term exists but no results */}\n {!isLoading && showEmptyState && (\n <StyledEmptyState>{emptyLabel}</StyledEmptyState>\n )}\n\n {/* Footer */}\n {footer && (\n <StyledFooter\n role=\"presentation\"\n data-size={size}\n styles={footerStyles}\n >\n {footer}\n </StyledFooter>\n )}\n </StyledCommandMenu>\n );\n}\n\n// forwardRef doesn't support generic parameters, so cast the result to the correct type\nconst _CommandMenu = React.forwardRef(CommandMenu) as <T>(\n props: CubeCommandMenuProps<T> & React.RefAttributes<HTMLDivElement>,\n) => ReactElement;\n\n// Attach Trigger alias from MenuTrigger for consistent API\n// Also attach Item and Section for compound component pattern\nconst __CommandMenu = Object.assign(_CommandMenu, {\n Trigger: MenuTrigger,\n Item,\n Section,\n displayName: 'CommandMenu',\n});\n\nexport { __CommandMenu as CommandMenu };\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.183.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.185.0 | Cube Dev Team */
2
2
  import { tasty } from "@tenphi/tasty";
3
3
 
4
4
  //#region src/components/actions/CommandMenu/styled.tsx
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.183.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.185.0 | Cube Dev Team */
2
2
  import { mergeProps } from "../../../utils/react/mergeProps.js";
3
3
  import { TooltipProvider } from "../../overlays/Tooltip/TooltipProvider.js";
4
4
  import { CURRENT_CLEAR_STYLES, CURRENT_OUTLINE_STYLES, CURRENT_PRIMARY_STYLES, DANGER_CLEAR_STYLES, DANGER_OUTLINE_STYLES, DANGER_PRIMARY_STYLES, DEFAULT_CLEAR_STYLES, DEFAULT_OUTLINE_STYLES, DEFAULT_PRIMARY_STYLES, ITEM_ACTION_BASE_STYLES, NOTE_CLEAR_STYLES, NOTE_OUTLINE_STYLES, NOTE_PRIMARY_STYLES, SPECIAL_CLEAR_STYLES, SPECIAL_OUTLINE_STYLES, SPECIAL_PRIMARY_STYLES, SUCCESS_CLEAR_STYLES, SUCCESS_OUTLINE_STYLES, SUCCESS_PRIMARY_STYLES, WARNING_CLEAR_STYLES, WARNING_OUTLINE_STYLES, WARNING_PRIMARY_STYLES } from "../../../data/item-themes.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.183.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.185.0 | Cube Dev Team */
2
2
  import { c } from "react-compiler-runtime";
3
3
  import { createContext, useContext } from "react";
4
4
  import { jsx } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.183.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.185.0 | Cube Dev Team */
2
2
  import { DisplayTransition } from "../helpers/DisplayTransition/DisplayTransition.js";
3
3
  import { ITEM_RESTING_COLOR_VARIANTS, ROW_STATE_ALIASES, resolveItemVariant } from "../../data/item-themes.js";
4
4
  import { ItemActionProvider } from "./ItemActionContext.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.183.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.185.0 | Cube Dev Team */
2
2
  import { mergeProps } from "../../../utils/react/mergeProps.js";
3
3
  import { mergeRefs } from "../../../utils/react/useCombinedRefs.js";
4
4
  import { useDismissParentPopover } from "../../../utils/react/usePopoverSync.js";
@@ -48,11 +48,13 @@ const ItemButton = forwardRef(function ItemButton(allProps, ref) {
48
48
  const hasHadActions = useRef(false);
49
49
  if (actions !== void 0) hasHadActions.current = true;
50
50
  const withWrapper = hasHadActions.current;
51
+ const ariaPressed = allProps["aria-pressed"] ?? (allProps.isSelected != null && actionProps.as !== "a" && allProps.role == null && allProps["aria-expanded"] == null ? allProps.isSelected : void 0);
51
52
  const renderButton = (showActions) => /* @__PURE__ */ jsx(StyledItem, {
52
53
  insideWrapper: withWrapper,
53
54
  showActions,
54
55
  actions: actions ? true : void 0,
55
56
  ...mergeProps(rest, actionProps),
57
+ "aria-pressed": ariaPressed,
56
58
  ref: combinedRef,
57
59
  "data-popover-dismiss": "",
58
60
  htmlType: actionProps.type,
@@ -1 +1 @@
1
- {"version":3,"file":"ItemButton.js","names":["FocusableRef","PressEvent","Styles","tasty","forwardRef","HTMLAttributes","ReactNode","useMemo","useRef","useEvent","mergeProps","mergeRefs","useDismissParentPopover","CubeItemProps","Item","ItemBadge","CubeItemActionProps","ItemAction","ItemActionsWrapper","CubeUseActionProps","useAction","CubeItemButtonProps","Omit","actions","size","wrapperStyles","actionsProps","HTMLDivElement","StyledItem","as","type","theme","styles","recipe","placeContent","ItemButton","allProps","ref","HTMLElement","mods","to","htmlType","onPress","onPressStart","_onPressStart","onPressEnd","_onPressEnd","onPressChange","_onPressChange","onPressUp","_onPressUp","autoHideActions","disableActionsFocus","isDisabled","isLoading","rest","finalIsDisabled","dismissParentPopover","buttonElementRef","wrappedOnPress","e","el","current","hasAttribute","closest","actionProps","combinedRef","hasHadActions","undefined","withWrapper","renderButton","showActions","_ItemButton","Object","assign","Action","Badge","ItemButtonProps","ItemActionProps"],"sources":["../../../../src/components/actions/ItemButton/ItemButton.tsx"],"sourcesContent":["import { FocusableRef, PressEvent } from '@react-types/shared';\nimport { Styles, tasty } from '@tenphi/tasty';\nimport { forwardRef, HTMLAttributes, ReactNode, useMemo, useRef } from 'react';\n\nimport { useEvent } from '../../../_internal';\nimport {\n mergeProps,\n mergeRefs,\n useDismissParentPopover,\n} from '../../../utils/react';\nimport { CubeItemProps, Item } from '../../content/Item';\nimport { ItemBadge } from '../../content/ItemBadge';\nimport { CubeItemActionProps, ItemAction } from '../ItemAction';\nimport { ItemActionsWrapper } from '../ItemActionsWrapper';\nimport { CubeUseActionProps, useAction } from '../use-action';\n\nexport interface CubeItemButtonProps\n extends Omit<CubeItemProps, 'size'>,\n Omit<CubeUseActionProps, 'as'> {\n /**\n * The row's trailing controls, rendered beside the button rather than inside\n * it. Pass `null` to keep an empty run — the row reserves no space for it, and\n * the button is not remounted when the actions arrive later.\n */\n actions?: ReactNode;\n size?: Omit<CubeItemProps['size'], 'inline'>;\n wrapperStyles?: Styles;\n /**\n * Extra props spread on the actions run's container, e.g. event handlers.\n * Only meaningful together with `actions`.\n */\n actionsProps?: HTMLAttributes<HTMLDivElement>;\n}\n\nconst StyledItem = tasty(Item, {\n as: 'button',\n type: 'item',\n theme: 'default',\n styles: {\n recipe: 'reset button',\n placeContent: 'center stretch',\n },\n});\n\nconst ItemButton = forwardRef(function ItemButton(\n allProps: CubeItemButtonProps,\n ref: FocusableRef<HTMLElement>,\n) {\n const {\n mods,\n to,\n htmlType,\n as,\n type = 'item',\n theme = 'default',\n onPress,\n // Extract react-aria press callbacks to prevent them from leaking to DOM via rest.\n // These are handled by useButton inside useAction.\n onPressStart: _onPressStart,\n onPressEnd: _onPressEnd,\n onPressChange: _onPressChange,\n onPressUp: _onPressUp,\n actions,\n actionsProps,\n size = 'medium',\n wrapperStyles,\n autoHideActions = false,\n disableActionsFocus = false,\n isDisabled,\n isLoading = false,\n ...rest\n } = allProps as CubeItemButtonProps & {\n as?: 'a' | 'button' | 'div' | 'span';\n };\n\n // Loading state makes the component disabled (same logic as Item)\n const finalIsDisabled =\n isDisabled === true || (isLoading && isDisabled !== false);\n\n // Default: pressing an ItemButton inside an open popover closes that\n // popover. Opt-outs: `data-popover-trigger` on self (applied by\n // FilterPicker / Picker / Select / MenuTrigger for their own triggers) and\n // `data-popover-keep` on self or any ancestor. Modals don't subscribe.\n const dismissParentPopover = useDismissParentPopover();\n const buttonElementRef = useRef<HTMLElement | null>(null);\n\n const wrappedOnPress = useEvent((e: PressEvent) => {\n onPress?.(e);\n const el = buttonElementRef.current;\n if (!el) return;\n if (el.hasAttribute('data-popover-trigger')) return;\n if (el.closest('[data-popover-keep]')) return;\n dismissParentPopover(el);\n });\n\n const { actionProps } = useAction(\n {\n ...(allProps as any),\n htmlType,\n to,\n as,\n mods,\n isDisabled: finalIsDisabled,\n onPress: wrappedOnPress,\n },\n ref,\n );\n\n // Merge the useAction-supplied ref with our internal ref so the dismiss\n // wrapper can read the rendered DOM node at press time.\n const combinedRef = useMemo(\n () => mergeRefs(actionProps.ref as any, buttonElementRef),\n [actionProps.ref],\n );\n\n // Once a row has had actions it keeps the wrapper, even after they go away.\n // Adding or removing a DOM level around the button remounts it — losing focus,\n // any running transition, and the element every ref in the tree is holding —\n // and a row whose actions come and go with a permission or a loading flag\n // would do that on every flip. The empty run costs nothing: it publishes a\n // width of 0, so the row reserves no space for it.\n //\n // `null` is how a caller asks for the run up front — \"there is a run here, it\n // just has nothing in it right now\" — so a row that knows its actions are\n // coming never has to remount to receive them. Only `undefined` means the row\n // has no run at all.\n const hasHadActions = useRef(false);\n\n if (actions !== undefined) {\n hasHadActions.current = true;\n }\n\n const withWrapper = hasHadActions.current;\n\n const renderButton = (showActions: boolean) => (\n <StyledItem\n // Two different questions. `insideWrapper` is \"am I laid out for a\n // sibling run\", which stays true so the DOM does not restructure;\n // `actions` is \"is there anything in that run to reserve width for\",\n // which must go back to false when the run empties — it drives the\n // two-square minimum width and the suffix's padding, and a row that\n // reserved space for nothing would sit wider than it needs to.\n insideWrapper={withWrapper}\n showActions={showActions}\n actions={actions ? true : undefined}\n {...(mergeProps(rest, actionProps) as any)}\n ref={combinedRef}\n data-popover-dismiss=\"\"\n htmlType={actionProps.type}\n type={type}\n theme={theme}\n size={size}\n isLoading={isLoading}\n isDisabled={isDisabled}\n />\n );\n\n if (withWrapper) {\n return (\n <ItemActionsWrapper\n type={type}\n theme={theme}\n size={size as CubeItemProps['size']}\n mods={mods}\n styles={wrapperStyles}\n actions={actions}\n actionsProps={actionsProps}\n autoHideActions={autoHideActions}\n disableActionsFocus={disableActionsFocus}\n isDisabled={finalIsDisabled}\n >\n {({ showActions }) => renderButton(showActions)}\n </ItemActionsWrapper>\n );\n }\n\n return renderButton(false);\n});\n\nconst _ItemButton = Object.assign(ItemButton, {\n Action: ItemAction,\n Badge: ItemBadge,\n});\n\nexport { _ItemButton as ItemButton };\nexport type {\n CubeItemButtonProps as ItemButtonProps,\n CubeItemActionProps as ItemActionProps,\n};\n"],"mappings":";;;;;;;;;;;;;;;AAkCA,MAAM4B,aAAazB,MAAMW,OAAM;CAC7Be,IAAI;CACJC,MAAM;CACNC,OAAO;CACPC,QAAQ;EACNC,QAAQ;EACRC,cAAc;EAChB;CACD,CAAC;AAEF,MAAMC,aAAa/B,WAAW,SAAS+B,WACrCC,UACAC,KACA;CACA,MAAM,EACJE,MACAC,IACAC,UACAZ,IACAC,OAAO,QACPC,QAAQ,WACRW,SAGAC,cAAcC,eACdC,YAAYC,aACZC,eAAeC,gBACfC,WAAWC,YACX3B,SACAG,cACAF,OAAO,UACPC,eACA0B,kBAAkB,OAClBC,sBAAsB,OACtBC,YACAC,YAAY,OACZ,GAAGC,SACDnB;CAKJ,MAAMoB,kBACJH,eAAe,QAASC,aAAaD,eAAe;CAMtD,MAAMI,uBAAuB7C,yBAAyB;CACtD,MAAM8C,mBAAmBlD,OAA2B,KAAK;CAEzD,MAAMmD,iBAAiBlD,UAAUmD,MAAkB;AACjDlB,YAAUkB,EAAE;EACZ,MAAMC,KAAKH,iBAAiBI;AAC5B,MAAI,CAACD,GAAI;AACT,MAAIA,GAAGE,aAAa,uBAAuB,CAAE;AAC7C,MAAIF,GAAGG,QAAQ,sBAAsB,CAAE;AACvCP,uBAAqBI,GAAG;GACxB;CAEF,MAAM,EAAEI,gBAAgB7C,UACtB;EACE,GAAIgB;EACJK;EACAD;EACAX;EACAU;EACAc,YAAYG;EACZd,SAASiB;EACV,EACDtB,IACD;CAID,MAAM6B,cAAc3D,cACZI,UAAUsD,YAAY5B,KAAYqB,iBAAiB,EACzD,CAACO,YAAY5B,IACf,CAAC;CAaD,MAAM8B,gBAAgB3D,OAAO,MAAM;AAEnC,KAAIe,YAAY6C,OACdD,eAAcL,UAAU;CAG1B,MAAMO,cAAcF,cAAcL;CAElC,MAAMQ,gBAAgBC,gBACpB,oBAAC;EAOC,eAAeF;EACFE;EACb,SAAShD,UAAU,OAAO6C;EAC1B,GAAK1D,WAAW6C,MAAMU,YAAY;EAClC,KAAKC;EACL,wBAAqB;EACrB,UAAUD,YAAYnC;EAChBA;EACCC;EACDP;EACK8B;EACCD;GAEf;AAED,KAAIgB,YACF,QACE,oBAAC;EACOvC;EACCC;EACDP;EACAe;EACN,QAAQd;EACCF;EACKG;EACGyB;EACIC;EACrB,YAAYI;aAEV,EAAEe,aAAAA,oBAAkBD,aAAaC,cAAY;GAC5B;AAIzB,QAAOD,aAAa,MAAM;EAC1B;AAEF,MAAME,cAAcC,OAAOC,OAAOvC,YAAY;CAC5CwC,QAAQ1D;CACR2D,OAAO7D;CACR,CAAC"}
1
+ {"version":3,"file":"ItemButton.js","names":["FocusableRef","PressEvent","Styles","tasty","forwardRef","HTMLAttributes","ReactNode","useMemo","useRef","useEvent","mergeProps","mergeRefs","useDismissParentPopover","CubeItemProps","Item","ItemBadge","CubeItemActionProps","ItemAction","ItemActionsWrapper","CubeUseActionProps","useAction","CubeItemButtonProps","Omit","actions","size","wrapperStyles","actionsProps","HTMLDivElement","StyledItem","as","type","theme","styles","recipe","placeContent","ItemButton","allProps","ref","HTMLElement","mods","to","htmlType","onPress","onPressStart","_onPressStart","onPressEnd","_onPressEnd","onPressChange","_onPressChange","onPressUp","_onPressUp","autoHideActions","disableActionsFocus","isDisabled","isLoading","rest","finalIsDisabled","dismissParentPopover","buttonElementRef","wrappedOnPress","e","el","current","hasAttribute","closest","actionProps","combinedRef","hasHadActions","undefined","withWrapper","ariaPressed","isSelected","role","renderButton","showActions","_ItemButton","Object","assign","Action","Badge","ItemButtonProps","ItemActionProps"],"sources":["../../../../src/components/actions/ItemButton/ItemButton.tsx"],"sourcesContent":["import { FocusableRef, PressEvent } from '@react-types/shared';\nimport { Styles, tasty } from '@tenphi/tasty';\nimport { forwardRef, HTMLAttributes, ReactNode, useMemo, useRef } from 'react';\n\nimport { useEvent } from '../../../_internal';\nimport {\n mergeProps,\n mergeRefs,\n useDismissParentPopover,\n} from '../../../utils/react';\nimport { CubeItemProps, Item } from '../../content/Item';\nimport { ItemBadge } from '../../content/ItemBadge';\nimport { CubeItemActionProps, ItemAction } from '../ItemAction';\nimport { ItemActionsWrapper } from '../ItemActionsWrapper';\nimport { CubeUseActionProps, useAction } from '../use-action';\n\nexport interface CubeItemButtonProps\n extends Omit<CubeItemProps, 'size'>,\n Omit<CubeUseActionProps, 'as'> {\n /**\n * The row's trailing controls, rendered beside the button rather than inside\n * it. Pass `null` to keep an empty run — the row reserves no space for it, and\n * the button is not remounted when the actions arrive later.\n */\n actions?: ReactNode;\n size?: Omit<CubeItemProps['size'], 'inline'>;\n wrapperStyles?: Styles;\n /**\n * Extra props spread on the actions run's container, e.g. event handlers.\n * Only meaningful together with `actions`.\n */\n actionsProps?: HTMLAttributes<HTMLDivElement>;\n}\n\nconst StyledItem = tasty(Item, {\n as: 'button',\n type: 'item',\n theme: 'default',\n styles: {\n recipe: 'reset button',\n placeContent: 'center stretch',\n },\n});\n\nconst ItemButton = forwardRef(function ItemButton(\n allProps: CubeItemButtonProps,\n ref: FocusableRef<HTMLElement>,\n) {\n const {\n mods,\n to,\n htmlType,\n as,\n type = 'item',\n theme = 'default',\n onPress,\n // Extract react-aria press callbacks to prevent them from leaking to DOM via rest.\n // These are handled by useButton inside useAction.\n onPressStart: _onPressStart,\n onPressEnd: _onPressEnd,\n onPressChange: _onPressChange,\n onPressUp: _onPressUp,\n actions,\n actionsProps,\n size = 'medium',\n wrapperStyles,\n autoHideActions = false,\n disableActionsFocus = false,\n isDisabled,\n isLoading = false,\n ...rest\n } = allProps as CubeItemButtonProps & {\n as?: 'a' | 'button' | 'div' | 'span';\n };\n\n // Loading state makes the component disabled (same logic as Item)\n const finalIsDisabled =\n isDisabled === true || (isLoading && isDisabled !== false);\n\n // Default: pressing an ItemButton inside an open popover closes that\n // popover. Opt-outs: `data-popover-trigger` on self (applied by\n // FilterPicker / Picker / Select / MenuTrigger for their own triggers) and\n // `data-popover-keep` on self or any ancestor. Modals don't subscribe.\n const dismissParentPopover = useDismissParentPopover();\n const buttonElementRef = useRef<HTMLElement | null>(null);\n\n const wrappedOnPress = useEvent((e: PressEvent) => {\n onPress?.(e);\n const el = buttonElementRef.current;\n if (!el) return;\n if (el.hasAttribute('data-popover-trigger')) return;\n if (el.closest('[data-popover-keep]')) return;\n dismissParentPopover(el);\n });\n\n const { actionProps } = useAction(\n {\n ...(allProps as any),\n htmlType,\n to,\n as,\n mods,\n isDisabled: finalIsDisabled,\n onPress: wrappedOnPress,\n },\n ref,\n );\n\n // Merge the useAction-supplied ref with our internal ref so the dismiss\n // wrapper can read the rendered DOM node at press time.\n const combinedRef = useMemo(\n () => mergeRefs(actionProps.ref as any, buttonElementRef),\n [actionProps.ref],\n );\n\n // Once a row has had actions it keeps the wrapper, even after they go away.\n // Adding or removing a DOM level around the button remounts it — losing focus,\n // any running transition, and the element every ref in the tree is holding —\n // and a row whose actions come and go with a permission or a loading flag\n // would do that on every flip. The empty run costs nothing: it publishes a\n // width of 0, so the row reserves no space for it.\n //\n // `null` is how a caller asks for the run up front — \"there is a run here, it\n // just has nothing in it right now\" — so a row that knows its actions are\n // coming never has to remount to receive them. Only `undefined` means the row\n // has no run at all.\n const hasHadActions = useRef(false);\n\n if (actions !== undefined) {\n hasHadActions.current = true;\n }\n\n const withWrapper = hasHadActions.current;\n\n // `isSelected` on a button is a toggle state, so it reads as `aria-pressed`,\n // as `Button` does. Skipped on a link (`to`), for a call site's own `role` (a\n // tab or option wants `aria-selected`), and on a trigger that reports\n // `aria-expanded`, which is its state instead. An explicit value still wins.\n //\n // Set after the spread: `useButton` always returns an `aria-pressed` key,\n // undefined when the caller passed none, which would overwrite it.\n const ariaPressed =\n allProps['aria-pressed'] ??\n (allProps.isSelected != null &&\n actionProps.as !== 'a' &&\n allProps.role == null &&\n allProps['aria-expanded'] == null\n ? allProps.isSelected\n : undefined);\n\n const renderButton = (showActions: boolean) => (\n <StyledItem\n // Two different questions. `insideWrapper` is \"am I laid out for a\n // sibling run\", which stays true so the DOM does not restructure;\n // `actions` is \"is there anything in that run to reserve width for\",\n // which must go back to false when the run empties — it drives the\n // two-square minimum width and the suffix's padding, and a row that\n // reserved space for nothing would sit wider than it needs to.\n insideWrapper={withWrapper}\n showActions={showActions}\n actions={actions ? true : undefined}\n {...(mergeProps(rest, actionProps) as any)}\n aria-pressed={ariaPressed}\n ref={combinedRef}\n data-popover-dismiss=\"\"\n htmlType={actionProps.type}\n type={type}\n theme={theme}\n size={size}\n isLoading={isLoading}\n isDisabled={isDisabled}\n />\n );\n\n if (withWrapper) {\n return (\n <ItemActionsWrapper\n type={type}\n theme={theme}\n size={size as CubeItemProps['size']}\n mods={mods}\n styles={wrapperStyles}\n actions={actions}\n actionsProps={actionsProps}\n autoHideActions={autoHideActions}\n disableActionsFocus={disableActionsFocus}\n isDisabled={finalIsDisabled}\n >\n {({ showActions }) => renderButton(showActions)}\n </ItemActionsWrapper>\n );\n }\n\n return renderButton(false);\n});\n\nconst _ItemButton = Object.assign(ItemButton, {\n Action: ItemAction,\n Badge: ItemBadge,\n});\n\nexport { _ItemButton as ItemButton };\nexport type {\n CubeItemButtonProps as ItemButtonProps,\n CubeItemActionProps as ItemActionProps,\n};\n"],"mappings":";;;;;;;;;;;;;;;AAkCA,MAAM4B,aAAazB,MAAMW,OAAM;CAC7Be,IAAI;CACJC,MAAM;CACNC,OAAO;CACPC,QAAQ;EACNC,QAAQ;EACRC,cAAc;EAChB;CACD,CAAC;AAEF,MAAMC,aAAa/B,WAAW,SAAS+B,WACrCC,UACAC,KACA;CACA,MAAM,EACJE,MACAC,IACAC,UACAZ,IACAC,OAAO,QACPC,QAAQ,WACRW,SAGAC,cAAcC,eACdC,YAAYC,aACZC,eAAeC,gBACfC,WAAWC,YACX3B,SACAG,cACAF,OAAO,UACPC,eACA0B,kBAAkB,OAClBC,sBAAsB,OACtBC,YACAC,YAAY,OACZ,GAAGC,SACDnB;CAKJ,MAAMoB,kBACJH,eAAe,QAASC,aAAaD,eAAe;CAMtD,MAAMI,uBAAuB7C,yBAAyB;CACtD,MAAM8C,mBAAmBlD,OAA2B,KAAK;CAEzD,MAAMmD,iBAAiBlD,UAAUmD,MAAkB;AACjDlB,YAAUkB,EAAE;EACZ,MAAMC,KAAKH,iBAAiBI;AAC5B,MAAI,CAACD,GAAI;AACT,MAAIA,GAAGE,aAAa,uBAAuB,CAAE;AAC7C,MAAIF,GAAGG,QAAQ,sBAAsB,CAAE;AACvCP,uBAAqBI,GAAG;GACxB;CAEF,MAAM,EAAEI,gBAAgB7C,UACtB;EACE,GAAIgB;EACJK;EACAD;EACAX;EACAU;EACAc,YAAYG;EACZd,SAASiB;EACV,EACDtB,IACD;CAID,MAAM6B,cAAc3D,cACZI,UAAUsD,YAAY5B,KAAYqB,iBAAiB,EACzD,CAACO,YAAY5B,IACf,CAAC;CAaD,MAAM8B,gBAAgB3D,OAAO,MAAM;AAEnC,KAAIe,YAAY6C,OACdD,eAAcL,UAAU;CAG1B,MAAMO,cAAcF,cAAcL;CASlC,MAAMQ,cACJlC,SAAS,oBACRA,SAASmC,cAAc,QACxBN,YAAYpC,OAAO,OACnBO,SAASoC,QAAQ,QACjBpC,SAAS,oBAAoB,OACzBA,SAASmC,aACTH;CAEN,MAAMK,gBAAgBC,gBACpB,oBAAC;EAOC,eAAeL;EACFK;EACb,SAASnD,UAAU,OAAO6C;EAC1B,GAAK1D,WAAW6C,MAAMU,YAAY;EAClC,gBAAcK;EACd,KAAKJ;EACL,wBAAqB;EACrB,UAAUD,YAAYnC;EAChBA;EACCC;EACDP;EACK8B;EACCD;GAEf;AAED,KAAIgB,YACF,QACE,oBAAC;EACOvC;EACCC;EACDP;EACAe;EACN,QAAQd;EACCF;EACKG;EACGyB;EACIC;EACrB,YAAYI;aAEV,EAAEkB,aAAAA,oBAAkBD,aAAaC,cAAY;GAC5B;AAIzB,QAAOD,aAAa,MAAM;EAC1B;AAEF,MAAME,cAAcC,OAAOC,OAAO1C,YAAY;CAC5C2C,QAAQ7D;CACR8D,OAAOhE;CACR,CAAC"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.183.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.185.0 | Cube Dev Team */
2
2
  import { Button } from "../Button/Button.js";
3
3
  import { c } from "react-compiler-runtime";
4
4
  import { forwardRef } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.183.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.185.0 | 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 { _CollectionItem } from "../../CollectionItem.js";
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.js","names":["useObjectRef","useSyncRef","FocusStrategy","ItemProps","BasePropsWithoutChildren","CONTAINER_STYLES","ContainerStyleProps","filterBaseProps","Styles","React","ReactElement","ReactNode","Ref","useMemo","AriaMenuProps","useMenu","Section","BaseSection","useTreeState","mergeProps","extractStyles","CollectionItem","useMenuContext","MenuItem","MenuSection","MenuTrigger","StyledDivider","StyledFooter","StyledHeader","StyledMenu","StyledMenuWrapper","SubMenuTrigger","CubeMenuProps","Omit","T","header","footer","menuStyles","headerStyles","footerStyles","styles","itemStyles","sectionStyles","sectionHeadingStyles","shouldFocusWrap","autoFocus","shouldUseVirtualFocus","size","selectedKeys","defaultSelectedKeys","onSelectionChange","keys","Menu","props","ref","$","_c","t0","focusOnHover","t1","qa","rest","undefined","domRef","contextProps","ariaSelectedKeys","Set","ariaDefaultSelectedKeys","handleSelectionChange","allKeys","Array","from","state","collection","getKeys","map","_temp","_temp2","completeProps","treeProps","collectionItems","hasSections","some","_temp3","menuProps","t2","t3","mods","popover","t4","wrapperMods","t5","sections","menuMods","items","isFirstSection","forEach","item_0","item","type","push","String","key","menuItem","onAction","wrapper","cloneElement","renderedItems","t6","t7","t8","t9","Record","role","key_0","_Menu","forwardRef","RefAttributes","HTMLUListElement","SectionComponent","Object","assign","displayName","__MenuComponent","Item","Trigger","__Menu"],"sources":["../../../../src/components/actions/Menu/Menu.tsx"],"sourcesContent":["import { useObjectRef, useSyncRef } from '@react-aria/utils';\nimport { FocusStrategy, ItemProps } from '@react-types/shared';\nimport {\n BasePropsWithoutChildren,\n CONTAINER_STYLES,\n ContainerStyleProps,\n filterBaseProps,\n Styles,\n} from '@tenphi/tasty';\nimport React, { ReactElement, ReactNode, Ref, useMemo } from 'react';\nimport { AriaMenuProps, useMenu } from 'react-aria';\nimport { Section as BaseSection, useTreeState } from 'react-stately';\n\nimport { mergeProps } from '../../../utils/react';\nimport { extractStyles } from '../../../utils/styles';\nimport { CollectionItem } from '../../CollectionItem';\n\nimport { useMenuContext } from './context';\nimport { MenuItem } from './MenuItem';\nimport { MenuSection } from './MenuSection';\nimport { MenuTrigger } from './MenuTrigger';\nimport {\n StyledDivider,\n StyledFooter,\n StyledHeader,\n StyledMenu,\n StyledMenuWrapper,\n} from './styled';\nimport { SubMenuTrigger } from './SubMenuTrigger';\n\nexport interface CubeMenuProps<T>\n extends BasePropsWithoutChildren,\n ContainerStyleProps,\n Omit<\n AriaMenuProps<T>,\n 'selectedKeys' | 'defaultSelectedKeys' | 'onSelectionChange'\n > {\n // @deprecated\n header?: ReactNode;\n footer?: ReactNode;\n menuStyles?: Styles;\n headerStyles?: Styles;\n footerStyles?: Styles;\n styles?: Styles;\n itemStyles?: Styles;\n sectionStyles?: Styles;\n sectionHeadingStyles?: Styles;\n /**\n * Whether keyboard navigation should wrap around when reaching the start/end of the collection.\n * This directly maps to the `shouldFocusWrap` option supported by React-Aria's `useMenu` hook.\n */\n shouldFocusWrap?: boolean;\n\n /**\n * Whether the menu should automatically receive focus when it mounts.\n * This directly maps to the `autoFocus` option supported by React-Aria's `useMenu` hook.\n */\n autoFocus?: boolean | FocusStrategy;\n shouldUseVirtualFocus?: boolean;\n\n /** Size of the menu items */\n size?: 'medium' | 'large' | (string & {});\n\n /** Currently selected keys (controlled) */\n selectedKeys?: string[];\n /** Initially selected keys (uncontrolled) */\n defaultSelectedKeys?: string[];\n /** Handler for selection changes */\n onSelectionChange?: (keys: string[]) => void;\n}\n\nfunction Menu<T extends object>(\n props: CubeMenuProps<T>,\n ref: Ref<HTMLUListElement>,\n) {\n const {\n header,\n footer,\n menuStyles,\n headerStyles,\n footerStyles,\n itemStyles,\n sectionStyles,\n sectionHeadingStyles,\n size = 'medium',\n focusOnHover = false,\n qa,\n selectedKeys,\n defaultSelectedKeys,\n onSelectionChange,\n ...rest\n } = props;\n const domRef = useObjectRef(ref);\n const contextProps = useMenuContext();\n\n // Convert string[] to Set<Key> for React Aria compatibility\n const ariaSelectedKeys = selectedKeys ? new Set(selectedKeys) : undefined;\n const ariaDefaultSelectedKeys = defaultSelectedKeys\n ? new Set(defaultSelectedKeys)\n : undefined;\n\n const handleSelectionChange = onSelectionChange\n ? (keys: any) => {\n if (keys === 'all') {\n // Handle 'all' selection case - collect all available keys\n const allKeys = Array.from(state.collection.getKeys()).map(\n (key: any) => String(key),\n );\n onSelectionChange(allKeys);\n } else if (keys instanceof Set) {\n onSelectionChange(Array.from(keys).map((key) => String(key)));\n } else {\n onSelectionChange([]);\n }\n }\n : undefined;\n\n const completeProps = mergeProps(contextProps, rest, {\n focusOnHover,\n selectedKeys: ariaSelectedKeys,\n defaultSelectedKeys: ariaDefaultSelectedKeys,\n onSelectionChange: handleSelectionChange,\n });\n\n // Props used for collection building.\n const treeProps = completeProps as typeof completeProps;\n\n const state = useTreeState(treeProps as typeof completeProps);\n const collectionItems = [...state.collection];\n const hasSections = collectionItems.some((item) => item.type === 'section');\n\n const { menuProps } = useMenu(completeProps, state, domRef);\n const styles = useMemo(\n () => extractStyles(completeProps, CONTAINER_STYLES),\n [completeProps],\n );\n\n const wrapperMods = useMemo(() => {\n return {\n popover: completeProps.mods?.popover,\n footer: !!footer,\n header: !!header,\n };\n }, [completeProps.mods?.popover, footer, header]);\n\n const menuMods = useMemo(() => {\n return {\n sections: hasSections,\n };\n }, [hasSections]);\n\n // Sync the ref stored in the context object with the menu's DOM ref.\n // `useSyncRef` from @react-aria/utils expects the context object as the\n // first argument to keep it up-to-date, and a ref object as the second.\n useSyncRef(contextProps, domRef);\n\n const renderedItems = useMemo(() => {\n const items: React.ReactNode[] = [];\n let isFirstSection = true;\n\n collectionItems.forEach((item) => {\n if (item.type === 'section') {\n if (!isFirstSection) {\n items.push(\n <StyledDivider\n key={`divider-${String(item.key)}`}\n role=\"separator\"\n aria-orientation=\"horizontal\"\n />,\n );\n }\n\n items.push(\n <MenuSection\n key={item.key}\n item={item}\n state={state}\n styles={sectionStyles}\n itemStyles={itemStyles}\n headingStyles={sectionHeadingStyles}\n size={size}\n />,\n );\n\n isFirstSection = false;\n return;\n }\n\n let menuItem = (\n <MenuItem\n key={item.key}\n item={item}\n state={state}\n styles={itemStyles}\n size={size}\n onAction={item.onAction}\n />\n );\n\n // Apply tooltip wrapper if tooltip property is provided\n // if (item.props.tooltip) {\n // const tooltipProps =\n // typeof item.props.tooltip === 'string'\n // ? { title: item.props.tooltip }\n // : item.props.tooltip;\n\n // menuItem = (\n // <TooltipProvider key={item.key} placement=\"right\" {...tooltipProps}>\n // {menuItem}\n // </TooltipProvider>\n // );\n // }\n\n // Apply custom wrapper if provided\n if (item.props?.wrapper) {\n menuItem = item.props.wrapper(menuItem);\n } else if ((item as any).wrapper) {\n // Handle wrapper from collection nodes (e.g., SubMenuTrigger)\n menuItem = (item as any).wrapper(menuItem);\n }\n\n // Ensure every child has a stable key, even if the wrapper component didn't set one.\n items.push(React.cloneElement(menuItem, { key: item.key }));\n });\n\n return items;\n }, [collectionItems, state, sectionStyles, itemStyles, sectionHeadingStyles]);\n\n return (\n <StyledMenuWrapper\n qa={qa}\n styles={styles}\n mods={wrapperMods}\n {...(filterBaseProps(completeProps) as Record<string, unknown>)}\n >\n {header ? (\n <StyledHeader data-size={size} styles={headerStyles}>\n {header}\n </StyledHeader>\n ) : (\n <div role=\"presentation\" />\n )}\n <StyledMenu\n {...mergeProps(\n {\n styles: menuStyles,\n 'data-size': size,\n mods: menuMods,\n },\n menuProps,\n )}\n ref={domRef}\n role={menuProps.role ?? 'menu'}\n >\n {renderedItems}\n </StyledMenu>\n {footer ? (\n <StyledFooter data-size={size} styles={footerStyles}>\n {footer}\n </StyledFooter>\n ) : (\n <div role=\"presentation\" />\n )}\n </StyledMenuWrapper>\n );\n}\n\n// forwardRef doesn't support generic parameters, so cast the result to the correct type\n// https://stackoverflow.com/questions/58469229/react-with-typescript-generics-while-using-react-forwardref\nconst _Menu = React.forwardRef(Menu) as <T>(\n props: CubeMenuProps<T> & React.RefAttributes<HTMLUListElement>,\n) => ReactElement;\n\ntype SectionComponent = typeof BaseSection;\n\nconst Section = Object.assign(BaseSection, {\n displayName: 'Section',\n}) as SectionComponent;\n\ntype __MenuComponent = typeof _Menu & {\n Item: typeof CollectionItem;\n Section: typeof Section;\n SubMenuTrigger: typeof SubMenuTrigger;\n Trigger: typeof MenuTrigger;\n};\n\nconst __Menu = Object.assign(_Menu as __MenuComponent, {\n Item: CollectionItem,\n Section,\n SubMenuTrigger,\n Trigger: MenuTrigger,\n displayName: 'Menu',\n});\n\n__Menu.displayName = 'Menu';\n\nexport { __Menu as Menu };\n"],"mappings":"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"}
1
+ {"version":3,"file":"Menu.js","names":["useObjectRef","useSyncRef","FocusStrategy","ItemProps","BasePropsWithoutChildren","CONTAINER_STYLES","ContainerStyleProps","filterBaseProps","Styles","React","ReactElement","ReactNode","Ref","useMemo","AriaMenuProps","useMenu","Section","BaseSection","useTreeState","mergeProps","extractStyles","CollectionItem","useMenuContext","MenuItem","MenuSection","MenuTrigger","StyledDivider","StyledFooter","StyledHeader","StyledMenu","StyledMenuWrapper","SubMenuTrigger","CubeMenuProps","Omit","T","header","footer","menuStyles","headerStyles","footerStyles","styles","itemStyles","sectionStyles","sectionHeadingStyles","shouldFocusWrap","autoFocus","shouldUseVirtualFocus","size","selectedKeys","defaultSelectedKeys","onSelectionChange","keys","Menu","props","ref","$","_c","t0","focusOnHover","t1","qa","rest","undefined","domRef","contextProps","ariaSelectedKeys","Set","ariaDefaultSelectedKeys","handleSelectionChange","allKeys","Array","from","state","collection","getKeys","map","_temp","_temp2","completeProps","treeProps","collectionItems","hasSections","some","_temp3","menuProps","t2","t3","mods","popover","t4","wrapperMods","t5","sections","menuMods","items","isFirstSection","forEach","item_0","item","type","push","String","key","menuItem","onAction","wrapper","cloneElement","renderedItems","t6","t7","t8","t9","Record","role","key_0","_Menu","forwardRef","RefAttributes","HTMLUListElement","SectionComponent","Object","assign","displayName","__MenuComponent","Item","Trigger","__Menu"],"sources":["../../../../src/components/actions/Menu/Menu.tsx"],"sourcesContent":["import { useObjectRef, useSyncRef } from '@react-aria/utils';\nimport { FocusStrategy, ItemProps } from '@react-types/shared';\nimport {\n BasePropsWithoutChildren,\n CONTAINER_STYLES,\n ContainerStyleProps,\n filterBaseProps,\n Styles,\n} from '@tenphi/tasty';\nimport React, { ReactElement, ReactNode, Ref, useMemo } from 'react';\nimport { AriaMenuProps, useMenu } from 'react-aria';\nimport { Section as BaseSection, useTreeState } from 'react-stately';\n\nimport { mergeProps } from '../../../utils/react';\nimport { extractStyles } from '../../../utils/styles';\nimport { CollectionItem } from '../../CollectionItem';\n\nimport { useMenuContext } from './context';\nimport { MenuItem } from './MenuItem';\nimport { MenuSection } from './MenuSection';\nimport { MenuTrigger } from './MenuTrigger';\nimport {\n StyledDivider,\n StyledFooter,\n StyledHeader,\n StyledMenu,\n StyledMenuWrapper,\n} from './styled';\nimport { SubMenuTrigger } from './SubMenuTrigger';\n\nexport interface CubeMenuProps<T>\n extends BasePropsWithoutChildren,\n ContainerStyleProps,\n Omit<\n AriaMenuProps<T>,\n 'selectedKeys' | 'defaultSelectedKeys' | 'onSelectionChange'\n > {\n // @deprecated\n header?: ReactNode;\n footer?: ReactNode;\n menuStyles?: Styles;\n headerStyles?: Styles;\n footerStyles?: Styles;\n styles?: Styles;\n itemStyles?: Styles;\n sectionStyles?: Styles;\n sectionHeadingStyles?: Styles;\n /**\n * Whether keyboard navigation should wrap around when reaching the start/end of the collection.\n * This directly maps to the `shouldFocusWrap` option supported by React-Aria's `useMenu` hook.\n */\n shouldFocusWrap?: boolean;\n\n /**\n * Whether the menu should automatically receive focus when it mounts.\n * This directly maps to the `autoFocus` option supported by React-Aria's `useMenu` hook.\n */\n autoFocus?: boolean | FocusStrategy;\n shouldUseVirtualFocus?: boolean;\n\n /** Size of the menu items */\n size?: 'medium' | 'large' | (string & {});\n\n /** Currently selected keys (controlled) */\n selectedKeys?: string[];\n /** Initially selected keys (uncontrolled) */\n defaultSelectedKeys?: string[];\n /** Handler for selection changes */\n onSelectionChange?: (keys: string[]) => void;\n}\n\nfunction Menu<T extends object>(\n props: CubeMenuProps<T>,\n ref: Ref<HTMLUListElement>,\n) {\n const {\n header,\n footer,\n menuStyles,\n headerStyles,\n footerStyles,\n itemStyles,\n sectionStyles,\n sectionHeadingStyles,\n size = 'medium',\n focusOnHover = false,\n qa,\n selectedKeys,\n defaultSelectedKeys,\n onSelectionChange,\n ...rest\n } = props;\n const domRef = useObjectRef(ref);\n const contextProps = useMenuContext();\n\n // Convert string[] to Set<Key> for React Aria compatibility\n const ariaSelectedKeys = selectedKeys ? new Set(selectedKeys) : undefined;\n const ariaDefaultSelectedKeys = defaultSelectedKeys\n ? new Set(defaultSelectedKeys)\n : undefined;\n\n const handleSelectionChange = onSelectionChange\n ? (keys: any) => {\n if (keys === 'all') {\n // Handle 'all' selection case - collect all available keys\n const allKeys = Array.from(state.collection.getKeys()).map(\n (key: any) => String(key),\n );\n onSelectionChange(allKeys);\n } else if (keys instanceof Set) {\n onSelectionChange(Array.from(keys).map((key) => String(key)));\n } else {\n onSelectionChange([]);\n }\n }\n : undefined;\n\n const completeProps = mergeProps(contextProps, rest, {\n focusOnHover,\n selectedKeys: ariaSelectedKeys,\n defaultSelectedKeys: ariaDefaultSelectedKeys,\n onSelectionChange: handleSelectionChange,\n });\n\n // Props used for collection building.\n const treeProps = completeProps as typeof completeProps;\n\n const state = useTreeState(treeProps as typeof completeProps);\n const collectionItems = [...state.collection];\n const hasSections = collectionItems.some((item) => item.type === 'section');\n\n const { menuProps } = useMenu(completeProps, state, domRef);\n const styles = useMemo(\n () => extractStyles(completeProps, CONTAINER_STYLES),\n [completeProps],\n );\n\n const wrapperMods = useMemo(() => {\n return {\n popover: completeProps.mods?.popover,\n footer: !!footer,\n header: !!header,\n };\n }, [completeProps.mods?.popover, footer, header]);\n\n const menuMods = useMemo(() => {\n return {\n sections: hasSections,\n };\n }, [hasSections]);\n\n // Sync the ref stored in the context object with the menu's DOM ref.\n // `useSyncRef` from @react-aria/utils expects the context object as the\n // first argument to keep it up-to-date, and a ref object as the second.\n useSyncRef(contextProps, domRef);\n\n const renderedItems = useMemo(() => {\n const items: React.ReactNode[] = [];\n let isFirstSection = true;\n\n collectionItems.forEach((item) => {\n if (item.type === 'section') {\n if (!isFirstSection) {\n items.push(\n <StyledDivider\n key={`divider-${String(item.key)}`}\n role=\"separator\"\n aria-orientation=\"horizontal\"\n />,\n );\n }\n\n items.push(\n <MenuSection\n key={item.key}\n item={item}\n state={state}\n styles={sectionStyles}\n itemStyles={itemStyles}\n headingStyles={sectionHeadingStyles}\n size={size}\n />,\n );\n\n isFirstSection = false;\n return;\n }\n\n let menuItem = (\n <MenuItem\n key={item.key}\n item={item}\n state={state}\n styles={itemStyles}\n size={size}\n onAction={item.onAction}\n />\n );\n\n // `MenuItem` renders the item's `tooltip` itself — wrapping it in a\n // second provider makes the two tooltips close each other.\n\n // Apply custom wrapper if provided\n if (item.props?.wrapper) {\n menuItem = item.props.wrapper(menuItem);\n } else if ((item as any).wrapper) {\n // Handle wrapper from collection nodes (e.g., SubMenuTrigger)\n menuItem = (item as any).wrapper(menuItem);\n }\n\n // Ensure every child has a stable key, even if the wrapper component didn't set one.\n items.push(React.cloneElement(menuItem, { key: item.key }));\n });\n\n return items;\n }, [collectionItems, state, sectionStyles, itemStyles, sectionHeadingStyles]);\n\n return (\n <StyledMenuWrapper\n qa={qa}\n styles={styles}\n mods={wrapperMods}\n {...(filterBaseProps(completeProps) as Record<string, unknown>)}\n >\n {header ? (\n <StyledHeader data-size={size} styles={headerStyles}>\n {header}\n </StyledHeader>\n ) : (\n <div role=\"presentation\" />\n )}\n <StyledMenu\n {...mergeProps(\n {\n styles: menuStyles,\n 'data-size': size,\n mods: menuMods,\n },\n menuProps,\n )}\n ref={domRef}\n role={menuProps.role ?? 'menu'}\n >\n {renderedItems}\n </StyledMenu>\n {footer ? (\n <StyledFooter data-size={size} styles={footerStyles}>\n {footer}\n </StyledFooter>\n ) : (\n <div role=\"presentation\" />\n )}\n </StyledMenuWrapper>\n );\n}\n\n// forwardRef doesn't support generic parameters, so cast the result to the correct type\n// https://stackoverflow.com/questions/58469229/react-with-typescript-generics-while-using-react-forwardref\nconst _Menu = React.forwardRef(Menu) as <T>(\n props: CubeMenuProps<T> & React.RefAttributes<HTMLUListElement>,\n) => ReactElement;\n\ntype SectionComponent = typeof BaseSection;\n\nconst Section = Object.assign(BaseSection, {\n displayName: 'Section',\n}) as SectionComponent;\n\ntype __MenuComponent = typeof _Menu & {\n Item: typeof CollectionItem;\n Section: typeof Section;\n SubMenuTrigger: typeof SubMenuTrigger;\n Trigger: typeof MenuTrigger;\n};\n\nconst __Menu = Object.assign(_Menu as __MenuComponent, {\n Item: CollectionItem,\n Section,\n SubMenuTrigger,\n Trigger: MenuTrigger,\n displayName: 'Menu',\n});\n\n__Menu.displayName = 'Menu';\n\nexport { __Menu as Menu };\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.183.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.185.0 | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
3
3
  import { filterCollectionItemProps } from "../../CollectionItem.js";
4
4
  import { _Item } from "../../content/Item/Item.js";
@@ -67,6 +67,18 @@ function MenuItem(props) {
67
67
  } else t6 = $[15];
68
68
  const { menuItemProps, labelProps, descriptionProps, keyboardShortcutProps, isFocused, isSelected, isPressed, isDisabled } = useMenuItem(t6, state, elementRef);
69
69
  const isVirtualFocused = state.selectionManager.focusedKey === key;
70
+ const { onKeyDown: itemOnKeyDown, ...itemOwnProps } = menuItemProps;
71
+ let t7;
72
+ if ($[16] !== itemOnKeyDown || $[17] !== submenuContext) {
73
+ t7 = submenuContext?.onKeyDown ? (e) => {
74
+ submenuContext.onKeyDown?.(e);
75
+ if (!e.defaultPrevented) itemOnKeyDown?.(e);
76
+ } : itemOnKeyDown;
77
+ $[16] = itemOnKeyDown;
78
+ $[17] = submenuContext;
79
+ $[18] = t7;
80
+ } else t7 = $[18];
81
+ const onKeyDown = t7;
70
82
  const mods = {
71
83
  ...itemMods,
72
84
  focused: isFocused || isVirtualFocused,
@@ -78,17 +90,10 @@ function MenuItem(props) {
78
90
  };
79
91
  const T0 = FocusRing;
80
92
  const T1 = _Item;
81
- let t7;
82
- if ($[16] !== menuItemProps || $[17] !== submenuContext) {
83
- t7 = submenuContext?.onKeyDown ? (e) => {
84
- submenuContext.onKeyDown?.(e);
85
- if (!e.defaultPrevented && menuItemProps.onKeyDown) menuItemProps.onKeyDown(e);
86
- } : menuItemProps.onKeyDown;
87
- $[16] = menuItemProps;
88
- $[17] = submenuContext;
89
- $[18] = t7;
90
- } else t7 = $[18];
91
- const t8 = mergeProps$1(menuItemProps, filteredItemProps, {
93
+ const t8 = mergeProps$1({
94
+ ...itemOwnProps,
95
+ onKeyDown
96
+ }, filteredItemProps, {
92
97
  "data-popover-trigger": true,
93
98
  qa: itemQa ? itemQa : `MenuItem-${key}`,
94
99
  mods,
@@ -101,9 +106,8 @@ function MenuItem(props) {
101
106
  "aria-haspopup": submenuContext ? "menu" : void 0,
102
107
  "aria-expanded": submenuContext?.isOpen,
103
108
  "data-has-submenu": submenuContext ? true : void 0,
104
- onKeyDown: t7,
105
- onMouseEnter: submenuContext?.onMouseEnter || menuItemProps.onMouseEnter,
106
- onMouseLeave: submenuContext?.onMouseLeave || menuItemProps.onMouseLeave
109
+ onMouseEnter: submenuContext?.onMouseEnter,
110
+ onMouseLeave: submenuContext?.onMouseLeave
107
111
  });
108
112
  let t9;
109
113
  if ($[19] !== filteredItemProps || $[20] !== submenuContext) {
@@ -1 +1 @@
1
- {"version":3,"file":"MenuItem.js","names":["Key","Node","Styles","KeyboardEvent","useContext","useRef","FocusRing","useMenuItem","TreeState","RightIcon","mergeProps","filterCollectionItemProps","Item","useMenuContext","SubmenuTriggerContext","MenuSelectionType","MenuItemProps","item","T","state","styles","isVirtualized","isDisabled","onAction","key","size","MenuItem","props","$","_c","onClose","closeOnSelect","rendered","itemProps","submenuContext","filteredItemProps","mods","itemMods","qa","itemQa","isSelectable","selectionManager","selectionMode","t0","disabledKeys","has","isDisabledKey","ref","elementRef","triggerRef","t1","isSelected","t2","t3","undefined","t4","t5","t6","menuItemProps","labelProps","descriptionProps","keyboardShortcutProps","isFocused","isPressed","isVirtualFocused","focusedKey","focused","pressed","selected","disabled","submenu","menuitem","T0","T1","t7","onKeyDown","e","defaultPrevented","t8","as","isOpen","onMouseEnter","onMouseLeave","t9","rightIcon","t10","t11","t12","t13"],"sources":["../../../../src/components/actions/Menu/MenuItem.tsx"],"sourcesContent":["import { Key, Node } from '@react-types/shared';\nimport { Styles } from '@tenphi/tasty';\nimport { KeyboardEvent, useContext, useRef } from 'react';\nimport { FocusRing, useMenuItem } from 'react-aria';\nimport { TreeState } from 'react-stately';\n\nimport { RightIcon } from '../../../icons/RightIcon';\nimport { mergeProps } from '../../../utils/react';\nimport { filterCollectionItemProps } from '../../CollectionItem';\nimport { Item } from '../../content/Item/Item';\n\nimport { useMenuContext } from './context';\nimport { SubmenuTriggerContext } from './SubmenuTriggerContext';\n\nexport type MenuSelectionType = 'checkbox' | 'radio' | 'checkmark';\n\nexport interface MenuItemProps<T> {\n item: Node<T>;\n state: TreeState<T>;\n styles?: Styles;\n isVirtualized?: boolean;\n isDisabled?: boolean;\n onAction?: (key: Key) => void;\n size?: 'small' | 'medium' | (string & {});\n}\n\n/** @private */\nexport function MenuItem<T>(props: MenuItemProps<T>) {\n const { item, state, styles, isVirtualized, onAction, size } = props;\n const { onClose, closeOnSelect } = useMenuContext();\n const { rendered, key, props: itemProps } = item;\n\n // Check if this item is wrapped in a SubmenuTriggerContext\n const submenuContext = useContext(SubmenuTriggerContext);\n\n // Filter out service props (react-stately and parent-handled props)\n // All remaining props are safe to pass to Item component\n const filteredItemProps = filterCollectionItemProps(itemProps);\n\n // Extract specific props that need special handling\n const { hotkeys, mods: itemMods, qa: itemQa } = filteredItemProps;\n\n const isSelectable = state.selectionManager.selectionMode !== 'none';\n const isDisabledKey =\n state.disabledKeys.has(key) || submenuContext?.isDisabled;\n\n const ref = useRef<HTMLLIElement>(null);\n\n // Use the triggerRef from submenu context if present\n const elementRef = (submenuContext?.triggerRef ?? ref) as any;\n\n const {\n menuItemProps,\n labelProps,\n descriptionProps,\n keyboardShortcutProps,\n isFocused,\n isSelected,\n isPressed,\n isDisabled,\n } = useMenuItem(\n {\n isSelected: state.selectionManager.isSelected(key),\n isDisabled: isDisabledKey,\n 'aria-label': item['aria-label'],\n key,\n onClose: submenuContext ? undefined : onClose, // Don't close menu for submenu triggers\n closeOnSelect: submenuContext ? false : closeOnSelect, // Don't close on submenu trigger selection\n isVirtualized,\n onAction: submenuContext?.onAction || onAction,\n },\n state,\n elementRef,\n );\n\n // Selection indicator will be handled by Item component\n const isVirtualFocused = state.selectionManager.focusedKey === key;\n\n const mods = {\n ...itemMods,\n focused: isFocused || isVirtualFocused,\n pressed: isPressed,\n selected: isSelected,\n disabled: isDisabled,\n submenu: !!submenuContext,\n menuitem: true,\n };\n\n return (\n <FocusRing>\n <Item\n {...mergeProps(menuItemProps, filteredItemProps, {\n 'data-popover-trigger': true,\n qa: itemQa ? itemQa : `MenuItem-${key}`,\n mods,\n styles,\n 'data-size': size,\n as: 'li',\n labelProps,\n descriptionProps,\n keyboardShortcutProps,\n 'aria-haspopup': submenuContext ? 'menu' : undefined,\n 'aria-expanded': submenuContext?.isOpen,\n 'data-has-submenu': submenuContext ? true : undefined,\n onKeyDown: submenuContext?.onKeyDown\n ? (e: KeyboardEvent) => {\n // Call submenu handler first, if it prevents default, don't call the original\n submenuContext.onKeyDown?.(e);\n if (!e.defaultPrevented && menuItemProps.onKeyDown) {\n menuItemProps.onKeyDown(e);\n }\n }\n : menuItemProps.onKeyDown,\n onMouseEnter:\n submenuContext?.onMouseEnter || menuItemProps.onMouseEnter,\n onMouseLeave:\n submenuContext?.onMouseLeave || menuItemProps.onMouseLeave,\n })}\n ref={elementRef}\n disableActionsFocus={true}\n rightIcon={submenuContext ? <RightIcon /> : filteredItemProps.rightIcon}\n defaultTooltipPlacement=\"right\"\n isSelected={isSelectable ? isSelected : undefined}\n isDisabled={isDisabled}\n size={size === 'small' ? 'small' : 'medium'}\n >\n {rendered}\n </Item>\n </FocusRing>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"MenuItem.js","names":["Key","Node","Styles","KeyboardEvent","useContext","useRef","FocusRing","useMenuItem","TreeState","RightIcon","mergeProps","filterCollectionItemProps","Item","useMenuContext","SubmenuTriggerContext","MenuSelectionType","MenuItemProps","item","T","state","styles","isVirtualized","isDisabled","onAction","key","size","MenuItem","props","$","_c","onClose","closeOnSelect","rendered","itemProps","submenuContext","filteredItemProps","mods","itemMods","qa","itemQa","isSelectable","selectionManager","selectionMode","t0","disabledKeys","has","isDisabledKey","ref","elementRef","triggerRef","t1","isSelected","t2","t3","undefined","t4","t5","t6","menuItemProps","labelProps","descriptionProps","keyboardShortcutProps","isFocused","isPressed","isVirtualFocused","focusedKey","onKeyDown","itemOnKeyDown","itemOwnProps","t7","e","defaultPrevented","focused","pressed","selected","disabled","submenu","menuitem","T0","T1","t8","as","isOpen","onMouseEnter","onMouseLeave","t9","rightIcon","t10","t11","t12","t13"],"sources":["../../../../src/components/actions/Menu/MenuItem.tsx"],"sourcesContent":["import { Key, Node } from '@react-types/shared';\nimport { Styles } from '@tenphi/tasty';\nimport { KeyboardEvent, useContext, useRef } from 'react';\nimport { FocusRing, useMenuItem } from 'react-aria';\nimport { TreeState } from 'react-stately';\n\nimport { RightIcon } from '../../../icons/RightIcon';\nimport { mergeProps } from '../../../utils/react';\nimport { filterCollectionItemProps } from '../../CollectionItem';\nimport { Item } from '../../content/Item/Item';\n\nimport { useMenuContext } from './context';\nimport { SubmenuTriggerContext } from './SubmenuTriggerContext';\n\nexport type MenuSelectionType = 'checkbox' | 'radio' | 'checkmark';\n\nexport interface MenuItemProps<T> {\n item: Node<T>;\n state: TreeState<T>;\n styles?: Styles;\n isVirtualized?: boolean;\n isDisabled?: boolean;\n onAction?: (key: Key) => void;\n size?: 'small' | 'medium' | (string & {});\n}\n\n/** @private */\nexport function MenuItem<T>(props: MenuItemProps<T>) {\n const { item, state, styles, isVirtualized, onAction, size } = props;\n const { onClose, closeOnSelect } = useMenuContext();\n const { rendered, key, props: itemProps } = item;\n\n // Check if this item is wrapped in a SubmenuTriggerContext\n const submenuContext = useContext(SubmenuTriggerContext);\n\n // Filter out service props (react-stately and parent-handled props)\n // All remaining props are safe to pass to Item component\n const filteredItemProps = filterCollectionItemProps(itemProps);\n\n // Extract specific props that need special handling\n const { hotkeys, mods: itemMods, qa: itemQa } = filteredItemProps;\n\n const isSelectable = state.selectionManager.selectionMode !== 'none';\n const isDisabledKey =\n state.disabledKeys.has(key) || submenuContext?.isDisabled;\n\n const ref = useRef<HTMLLIElement>(null);\n\n // Use the triggerRef from submenu context if present\n const elementRef = (submenuContext?.triggerRef ?? ref) as any;\n\n const {\n menuItemProps,\n labelProps,\n descriptionProps,\n keyboardShortcutProps,\n isFocused,\n isSelected,\n isPressed,\n isDisabled,\n } = useMenuItem(\n {\n isSelected: state.selectionManager.isSelected(key),\n isDisabled: isDisabledKey,\n 'aria-label': item['aria-label'],\n key,\n onClose: submenuContext ? undefined : onClose, // Don't close menu for submenu triggers\n closeOnSelect: submenuContext ? false : closeOnSelect, // Don't close on submenu trigger selection\n isVirtualized,\n onAction: submenuContext?.onAction || onAction,\n },\n state,\n elementRef,\n );\n\n // Selection indicator will be handled by Item component\n const isVirtualFocused = state.selectionManager.focusedKey === key;\n\n // `mergeProps` chains handlers rather than replacing them, so a handler of\n // the item's own passed to it again runs twice. `onKeyDown` used to be: Enter\n // and Space each click the item, so every keyboard activation fired\n // `onAction` twice. It is taken out here and passed once.\n const { onKeyDown: itemOnKeyDown, ...itemOwnProps } = menuItemProps;\n const onKeyDown = submenuContext?.onKeyDown\n ? (e: KeyboardEvent) => {\n // The submenu goes first; a key it handles is not the item's too.\n submenuContext.onKeyDown?.(e);\n if (!e.defaultPrevented) itemOnKeyDown?.(e);\n }\n : itemOnKeyDown;\n\n const mods = {\n ...itemMods,\n focused: isFocused || isVirtualFocused,\n pressed: isPressed,\n selected: isSelected,\n disabled: isDisabled,\n submenu: !!submenuContext,\n menuitem: true,\n };\n\n return (\n <FocusRing>\n <Item\n {...mergeProps({ ...itemOwnProps, onKeyDown }, filteredItemProps, {\n 'data-popover-trigger': true,\n qa: itemQa ? itemQa : `MenuItem-${key}`,\n mods,\n styles,\n 'data-size': size,\n as: 'li',\n labelProps,\n descriptionProps,\n keyboardShortcutProps,\n 'aria-haspopup': submenuContext ? 'menu' : undefined,\n 'aria-expanded': submenuContext?.isOpen,\n 'data-has-submenu': submenuContext ? true : undefined,\n // Chained after the item's own hover handlers.\n onMouseEnter: submenuContext?.onMouseEnter,\n onMouseLeave: submenuContext?.onMouseLeave,\n })}\n ref={elementRef}\n disableActionsFocus={true}\n rightIcon={submenuContext ? <RightIcon /> : filteredItemProps.rightIcon}\n defaultTooltipPlacement=\"right\"\n isSelected={isSelectable ? isSelected : undefined}\n isDisabled={isDisabled}\n size={size === 'small' ? 'small' : 'medium'}\n >\n {rendered}\n </Item>\n </FocusRing>\n );\n}\n"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.183.0 | Cube Dev Team */
2
- import { TooltipProvider } from "../../overlays/Tooltip/TooltipProvider.js";
1
+ /** @license MIT | @cube-dev/ui-kit v0.185.0 | Cube Dev Team */
3
2
  import { MenuItem } from "./MenuItem.js";
4
3
  import { StyledMenu, StyledSection, StyledSectionHeading } from "./styled.js";
5
4
  import { c } from "react-compiler-runtime";
@@ -59,12 +58,6 @@ function MenuSection(props) {
59
58
  size,
60
59
  onAction: node.onAction
61
60
  }, node.key);
62
- if (node.props.tooltip) menuItem = /* @__PURE__ */ jsx(TooltipProvider, {
63
- activeWrap: true,
64
- placement: "right",
65
- ...typeof node.props.tooltip === "string" ? { title: node.props.tooltip } : node.props.tooltip,
66
- children: menuItem
67
- }, node.key);
68
61
  if (node.props.wrapper) menuItem = node.props.wrapper(menuItem);
69
62
  return menuItem;
70
63
  });
@@ -1 +1 @@
1
- {"version":3,"file":"MenuSection.js","names":["Styles","useMenuSection","TooltipProvider","MenuItem","MenuItemProps","StyledMenu","StyledSection","StyledSectionHeading","CubeMenuSectionProps","T","itemStyles","headingStyles","size","MenuSection","props","$","_c","item","state","styles","heading","rendered","t0","t1","itemProps","headingProps","groupProps","t2","t3","Symbol","for","section","t4","childNodes","t5","map","node","menuItem","key","onAction","tooltip","tooltipProps","title","wrapper","t6","t7"],"sources":["../../../../src/components/actions/Menu/MenuSection.tsx"],"sourcesContent":["import { Styles } from '@tenphi/tasty';\nimport { useMenuSection } from 'react-aria';\n\nimport { TooltipProvider } from '../../overlays/Tooltip/TooltipProvider';\n\nimport { MenuItem, MenuItemProps } from './MenuItem';\nimport { StyledMenu, StyledSection, StyledSectionHeading } from './styled';\n\nexport interface CubeMenuSectionProps<T> extends MenuItemProps<T> {\n itemStyles?: Styles;\n headingStyles?: Styles;\n size?: 'small' | 'medium' | (string & {});\n}\n\n/** @private */\nexport function MenuSection<T>(props: CubeMenuSectionProps<T>) {\n const { item, state, styles, itemStyles, headingStyles, size } = props;\n const heading = item.rendered;\n const { itemProps, headingProps, groupProps } = useMenuSection({\n heading,\n 'aria-label': item['aria-label'],\n });\n\n return (\n <>\n <StyledSection {...itemProps} styles={styles}>\n {heading && (\n <StyledSectionHeading\n {...headingProps}\n size={size}\n styles={headingStyles}\n >\n {heading}\n </StyledSectionHeading>\n )}\n <StyledMenu {...groupProps} mods={{ section: true }}>\n {[...item.childNodes].map((node) => {\n let menuItem = (\n <MenuItem\n key={node.key}\n item={node}\n styles={itemStyles}\n state={state}\n size={size}\n onAction={(node as unknown as MenuItemProps<T>).onAction}\n />\n );\n\n // Apply tooltip wrapper if tooltip property is provided\n if (node.props.tooltip) {\n const tooltipProps =\n typeof node.props.tooltip === 'string'\n ? { title: node.props.tooltip }\n : node.props.tooltip;\n\n menuItem = (\n <TooltipProvider\n key={node.key}\n activeWrap\n placement=\"right\"\n {...tooltipProps}\n >\n {menuItem}\n </TooltipProvider>\n );\n }\n\n if (node.props.wrapper) {\n menuItem = node.props.wrapper(menuItem);\n }\n\n return menuItem;\n })}\n </StyledMenu>\n </StyledSection>\n </>\n );\n}\n"],"mappings":";;;;;;;;;;AAeA,SAAOa,YAAAC,OAAA;CAAA,MAAAC,IAAAC,EAAA,GAAA;CACL,MAAA,EAAAC,MAAAC,OAAAC,QAAAT,YAAAC,eAAAC,SAAiEE;CACjE,MAAAM,UAAgBH,KAAII;CAGJ,MAAAC,KAAAL,KAAK;CAAa,IAAAM;AAAA,KAAAR,EAAA,OAAAK,WAAAL,EAAA,OAAAO,IAAA;AAF6BC,OAAA;GAAAH;GAAA,cAE/CE;GACf;AAAAP,IAAA,KAAAK;AAAAL,IAAA,KAAAO;AAAAP,IAAA,KAAAQ;OAAAA,MAAAR,EAAA;CAHD,MAAA,EAAAS,WAAAC,cAAAC,eAAgDzB,eAAesB,GAG7D;CAAC,IAAAI;AAAA,KAAAZ,EAAA,OAAAK,WAAAL,EAAA,OAAAU,gBAAAV,EAAA,OAAAJ,iBAAAI,EAAA,OAAAH,MAAA;AAKIe,OAAAP,WACC,oBAAC;GAAoB,GACfK;GACEb;GACED,QAAAA;aAEPS;IAEJ;AAAAL,IAAA,KAAAK;AAAAL,IAAA,KAAAU;AAAAV,IAAA,KAAAJ;AAAAI,IAAA,KAAAH;AAAAG,IAAA,KAAAY;OAAAA,MAAAZ,EAAA;CAAA,IAAAa;AAAA,KAAAb,EAAA,OAAAc,OAAAC,IAAA,4BAAA,EAAA;AACiCF,OAAA,EAAAG,SAAW,MAAM;AAAAhB,IAAA,KAAAa;OAAAA,MAAAb,EAAA;CAAA,IAAAiB;AAAA,KAAAjB,EAAA,OAAAE,KAAAgB,YAAA;AAChDD,OAAA,CAAA,GAAIf,KAAIgB,WAAY;AAAAlB,IAAA,KAAAE,KAAAgB;AAAAlB,IAAA,MAAAiB;OAAAA,MAAAjB,EAAA;CAAA,IAAAmB;AAAA,KAAAnB,EAAA,QAAAL,cAAAK,EAAA,QAAAH,QAAAG,EAAA,QAAAG,SAAAH,EAAA,QAAAiB,IAAA;AAApBE,OAAAF,GAAoBG,KAAKC,SAAA;GACxB,IAAAC,WACE,oBAAC;IAEOD,MAAAA;IACE1B,QAAAA;IACDQ;IACDN;IACI,UAACwB,KAAmCG;MALzCH,KAAIE,IAMT;AAIJ,OAAIF,KAAItB,MAAM0B,QAMZH,YACEA,oBAACA;IAEC,YAAA;IACU,WAAA;IAAO,GARnB,OAAOD,KAAItB,MAAM0B,YAAa,WAA9B,EAAAE,OACaN,KAAItB,MAAM0B,SACD,GAAlBJ,KAAItB,MAAM0B;cASXH;MALID,KAAIE,IAMO;AAItB,OAAIF,KAAItB,MAAM6B,QACZN,YAAWD,KAAItB,MAAM6B,QAASN,SAAS;AACxC,UAEMA;IACP;AAAAtB,IAAA,MAAAL;AAAAK,IAAA,MAAAH;AAAAG,IAAA,MAAAG;AAAAH,IAAA,MAAAiB;AAAAjB,IAAA,MAAAmB;OAAAA,MAAAnB,EAAA;CAAA,IAAA6B;AAAA,KAAA7B,EAAA,QAAAW,cAAAX,EAAA,QAAAmB,IAAA;AArCJU,OAAA,oBAAC;GAAU,GAAKlB;GAAkB,MAAAE;aAC/BM;IAqCU;AAAAnB,IAAA,MAAAW;AAAAX,IAAA,MAAAmB;AAAAnB,IAAA,MAAA6B;OAAAA,MAAA7B,EAAA;CAAA,IAAA8B;AAAA,KAAA9B,EAAA,QAAAS,aAAAT,EAAA,QAAAI,UAAAJ,EAAA,QAAAY,MAAAZ,EAAA,QAAA6B,IAAA;AAjDjBC,OAAA,0CACE,qBAAC;GAAa,GAAKrB;GAAmBL;cACnCQ,IASDiB;IAuCc,GACf;AAAA7B,IAAA,MAAAS;AAAAT,IAAA,MAAAI;AAAAJ,IAAA,MAAAY;AAAAZ,IAAA,MAAA6B;AAAA7B,IAAA,MAAA8B;OAAAA,MAAA9B,EAAA;AAAA,QAnDH8B"}
1
+ {"version":3,"file":"MenuSection.js","names":["Styles","useMenuSection","MenuItem","MenuItemProps","StyledMenu","StyledSection","StyledSectionHeading","CubeMenuSectionProps","T","itemStyles","headingStyles","size","MenuSection","props","$","_c","item","state","styles","heading","rendered","t0","t1","itemProps","headingProps","groupProps","t2","t3","Symbol","for","section","t4","childNodes","t5","map","node","menuItem","key","onAction","wrapper","t6","t7"],"sources":["../../../../src/components/actions/Menu/MenuSection.tsx"],"sourcesContent":["import { Styles } from '@tenphi/tasty';\nimport { useMenuSection } from 'react-aria';\n\nimport { MenuItem, MenuItemProps } from './MenuItem';\nimport { StyledMenu, StyledSection, StyledSectionHeading } from './styled';\n\nexport interface CubeMenuSectionProps<T> extends MenuItemProps<T> {\n itemStyles?: Styles;\n headingStyles?: Styles;\n size?: 'small' | 'medium' | (string & {});\n}\n\n/** @private */\nexport function MenuSection<T>(props: CubeMenuSectionProps<T>) {\n const { item, state, styles, itemStyles, headingStyles, size } = props;\n const heading = item.rendered;\n const { itemProps, headingProps, groupProps } = useMenuSection({\n heading,\n 'aria-label': item['aria-label'],\n });\n\n return (\n <>\n <StyledSection {...itemProps} styles={styles}>\n {heading && (\n <StyledSectionHeading\n {...headingProps}\n size={size}\n styles={headingStyles}\n >\n {heading}\n </StyledSectionHeading>\n )}\n <StyledMenu {...groupProps} mods={{ section: true }}>\n {[...item.childNodes].map((node) => {\n let menuItem = (\n <MenuItem\n key={node.key}\n item={node}\n styles={itemStyles}\n state={state}\n size={size}\n onAction={(node as unknown as MenuItemProps<T>).onAction}\n />\n );\n\n // `MenuItem` renders the item's `tooltip` itself, as `Menu` does\n // for items outside a section.\n if (node.props.wrapper) {\n menuItem = node.props.wrapper(menuItem);\n }\n\n return menuItem;\n })}\n </StyledMenu>\n </StyledSection>\n </>\n );\n}\n"],"mappings":";;;;;;;;;AAaA,SAAOY,YAAAC,OAAA;CAAA,MAAAC,IAAAC,EAAA,GAAA;CACL,MAAA,EAAAC,MAAAC,OAAAC,QAAAT,YAAAC,eAAAC,SAAiEE;CACjE,MAAAM,UAAgBH,KAAII;CAGJ,MAAAC,KAAAL,KAAK;CAAa,IAAAM;AAAA,KAAAR,EAAA,OAAAK,WAAAL,EAAA,OAAAO,IAAA;AAF6BC,OAAA;GAAAH;GAAA,cAE/CE;GACf;AAAAP,IAAA,KAAAK;AAAAL,IAAA,KAAAO;AAAAP,IAAA,KAAAQ;OAAAA,MAAAR,EAAA;CAHD,MAAA,EAAAS,WAAAC,cAAAC,eAAgDxB,eAAeqB,GAG7D;CAAC,IAAAI;AAAA,KAAAZ,EAAA,OAAAK,WAAAL,EAAA,OAAAU,gBAAAV,EAAA,OAAAJ,iBAAAI,EAAA,OAAAH,MAAA;AAKIe,OAAAP,WACC,oBAAC;GAAoB,GACfK;GACEb;GACED,QAAAA;aAEPS;IAEJ;AAAAL,IAAA,KAAAK;AAAAL,IAAA,KAAAU;AAAAV,IAAA,KAAAJ;AAAAI,IAAA,KAAAH;AAAAG,IAAA,KAAAY;OAAAA,MAAAZ,EAAA;CAAA,IAAAa;AAAA,KAAAb,EAAA,OAAAc,OAAAC,IAAA,4BAAA,EAAA;AACiCF,OAAA,EAAAG,SAAW,MAAM;AAAAhB,IAAA,KAAAa;OAAAA,MAAAb,EAAA;CAAA,IAAAiB;AAAA,KAAAjB,EAAA,OAAAE,KAAAgB,YAAA;AAChDD,OAAA,CAAA,GAAIf,KAAIgB,WAAY;AAAAlB,IAAA,KAAAE,KAAAgB;AAAAlB,IAAA,MAAAiB;OAAAA,MAAAjB,EAAA;CAAA,IAAAmB;AAAA,KAAAnB,EAAA,QAAAL,cAAAK,EAAA,QAAAH,QAAAG,EAAA,QAAAG,SAAAH,EAAA,QAAAiB,IAAA;AAApBE,OAAAF,GAAoBG,KAAKC,SAAA;GACxB,IAAAC,WACE,oBAAC;IAEOD,MAAAA;IACE1B,QAAAA;IACDQ;IACDN;IACI,UAACwB,KAAmCG;MALzCH,KAAIE,IAMT;AAKJ,OAAIF,KAAItB,MAAM0B,QACZH,YAAWD,KAAItB,MAAM0B,QAASH,SAAS;AACxC,UAEMA;IACP;AAAAtB,IAAA,MAAAL;AAAAK,IAAA,MAAAH;AAAAG,IAAA,MAAAG;AAAAH,IAAA,MAAAiB;AAAAjB,IAAA,MAAAmB;OAAAA,MAAAnB,EAAA;CAAA,IAAA0B;AAAA,KAAA1B,EAAA,QAAAW,cAAAX,EAAA,QAAAmB,IAAA;AApBJO,OAAA,oBAAC;GAAU,GAAKf;GAAkB,MAAAE;aAC/BM;IAoBU;AAAAnB,IAAA,MAAAW;AAAAX,IAAA,MAAAmB;AAAAnB,IAAA,MAAA0B;OAAAA,MAAA1B,EAAA;CAAA,IAAA2B;AAAA,KAAA3B,EAAA,QAAAS,aAAAT,EAAA,QAAAI,UAAAJ,EAAA,QAAAY,MAAAZ,EAAA,QAAA0B,IAAA;AAhCjBC,OAAA,0CACE,qBAAC;GAAa,GAAKlB;GAAmBL;cACnCQ,IASDc;IAsBc,GACf;AAAA1B,IAAA,MAAAS;AAAAT,IAAA,MAAAI;AAAAJ,IAAA,MAAAY;AAAAZ,IAAA,MAAA0B;AAAA1B,IAAA,MAAA2B;OAAAA,MAAA3B,EAAA;AAAA,QAlCH2B"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.183.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.185.0 | Cube Dev Team */
2
2
  import { SlotProvider } from "../../../utils/react/Slots.js";
3
3
  import { usePopoverSync } from "../../../utils/react/usePopoverSync.js";
4
4
  import { useEvent } from "../../../_internal/hooks/use-event.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.183.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.185.0 | Cube Dev Team */
2
2
  import { usePopoverSync } from "../../../utils/react/usePopoverSync.js";
3
3
  import { useEvent } from "../../../_internal/hooks/use-event.js";
4
4
  import { MenuContext, useMenuContext } from "./context.js";
@@ -95,7 +95,6 @@ function InternalSubMenuTrigger(props) {
95
95
  e.stopPropagation();
96
96
  e.nativeEvent.stopImmediatePropagation();
97
97
  state.open();
98
- suppressNextActionRef.current = true;
99
98
  } else if (e.key === "ArrowLeft" && state.isOpen) {
100
99
  e.preventDefault();
101
100
  e.stopPropagation();
@@ -106,7 +105,6 @@ function InternalSubMenuTrigger(props) {
106
105
  const hoverCloseTimerRef = useRef(null);
107
106
  const isHoveringRef = useRef(false);
108
107
  const isHoveringSubmenuRef = useRef(false);
109
- const suppressNextActionRef = useRef(false);
110
108
  const checkShouldClose = () => {
111
109
  if (!isHoveringRef.current && !isHoveringSubmenuRef.current) hoverCloseTimerRef.current = setTimeout(() => {
112
110
  if (!isHoveringRef.current && !isHoveringSubmenuRef.current) state.close();
@@ -164,10 +162,6 @@ function InternalSubMenuTrigger(props) {
164
162
  onMouseLeave: handleMouseLeave,
165
163
  onKeyDown: handleKeyDown,
166
164
  onAction: isDisabled ? void 0 : () => {
167
- if (suppressNextActionRef.current) {
168
- suppressNextActionRef.current = false;
169
- return;
170
- }
171
165
  state.open();
172
166
  }
173
167
  }), [