@cube-dev/ui-kit 0.155.0 → 0.156.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 (521) hide show
  1. package/dist/CHANGELOG.md +64 -0
  2. package/dist/_internal/hooks/use-chained-callback.js +1 -1
  3. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  4. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  5. package/dist/_internal/hooks/use-event.js +1 -1
  6. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  7. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  8. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  9. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  10. package/dist/_internal/hooks/use-warn.js +1 -1
  11. package/dist/components/Block.js +1 -1
  12. package/dist/components/CollectionItem.js +1 -1
  13. package/dist/components/GlobalStyles.js +1 -1
  14. package/dist/components/GridProvider.js +1 -1
  15. package/dist/components/HiddenInput.js +1 -1
  16. package/dist/components/Root.js +1 -1
  17. package/dist/components/actions/Action/Action.js +1 -1
  18. package/dist/components/actions/Banner/Banner.js +1 -1
  19. package/dist/components/actions/Button/Button.js +1 -1
  20. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  21. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  22. package/dist/components/actions/ButtonSplit/context.js +1 -1
  23. package/dist/components/actions/CommandMenu/CommandMenu.d.ts +10 -1
  24. package/dist/components/actions/CommandMenu/CommandMenu.js +4 -3
  25. package/dist/components/actions/CommandMenu/CommandMenu.js.map +1 -1
  26. package/dist/components/actions/CommandMenu/styled.js +1 -1
  27. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  28. package/dist/components/actions/ItemActionContext.js +1 -1
  29. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  30. package/dist/components/actions/Link/Link.js +1 -1
  31. package/dist/components/actions/Menu/Menu.js +1 -1
  32. package/dist/components/actions/Menu/MenuItem.js +1 -1
  33. package/dist/components/actions/Menu/MenuSection.js +1 -1
  34. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  35. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  36. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  37. package/dist/components/actions/Menu/context.js +1 -1
  38. package/dist/components/actions/Menu/styled.js +1 -1
  39. package/dist/components/actions/index.js +1 -1
  40. package/dist/components/actions/use-action.js +1 -1
  41. package/dist/components/actions/use-anchored-menu.js +1 -1
  42. package/dist/components/actions/use-context-menu.js +1 -1
  43. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  44. package/dist/components/content/Alert/Alert.js +1 -1
  45. package/dist/components/content/Alert/use-alert.js +1 -1
  46. package/dist/components/content/Avatar/Avatar.js +1 -1
  47. package/dist/components/content/Badge/Badge.js +1 -1
  48. package/dist/components/content/Card/Card.js +1 -1
  49. package/dist/components/content/Content.js +1 -1
  50. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  51. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  52. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  53. package/dist/components/content/Divider.js +1 -1
  54. package/dist/components/content/Footer.js +1 -1
  55. package/dist/components/content/Header.js +1 -1
  56. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  57. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  58. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  59. package/dist/components/content/Item/Item.js +1 -1
  60. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  61. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  62. package/dist/components/content/Layout/GridLayout.js +1 -1
  63. package/dist/components/content/Layout/Layout.js +1 -1
  64. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  65. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  66. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  67. package/dist/components/content/Layout/LayoutContent.js +1 -1
  68. package/dist/components/content/Layout/LayoutContext.js +1 -1
  69. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  70. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  71. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  72. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  73. package/dist/components/content/Layout/LayoutPane.js +1 -1
  74. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  75. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  76. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  77. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  78. package/dist/components/content/Layout/index.js +1 -1
  79. package/dist/components/content/Layout/utils.js +1 -1
  80. package/dist/components/content/Paragraph.js +1 -1
  81. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  82. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  83. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  84. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  85. package/dist/components/content/Result/Result.js +1 -1
  86. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  87. package/dist/components/content/Tag/Tag.js +1 -1
  88. package/dist/components/content/Text.js +1 -1
  89. package/dist/components/content/TextItem/TextItem.js +1 -1
  90. package/dist/components/content/Title.js +1 -1
  91. package/dist/components/content/Tree/Tree.js +1 -1
  92. package/dist/components/content/Tree/TreeNode.js +1 -1
  93. package/dist/components/content/Tree/styled.js +1 -1
  94. package/dist/components/content/Tree/tree-index.js +1 -1
  95. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  96. package/dist/components/content/Tree/use-load-data.js +1 -1
  97. package/dist/components/content/highlightText.js +1 -1
  98. package/dist/components/content/use-auto-tooltip.js +1 -1
  99. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  100. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  101. package/dist/components/fields/Checkbox/context.js +1 -1
  102. package/dist/components/fields/ColorPicker/ColorPicker.d.ts +67 -0
  103. package/dist/components/fields/ColorPicker/ColorPicker.js +240 -0
  104. package/dist/components/fields/ColorPicker/ColorPicker.js.map +1 -0
  105. package/dist/components/fields/ColorPicker/ColorPickerPanel.js +149 -0
  106. package/dist/components/fields/ColorPicker/ColorPickerPanel.js.map +1 -0
  107. package/dist/components/fields/ColorPicker/channels.d.ts +13 -0
  108. package/dist/components/fields/ColorPicker/channels.js +194 -0
  109. package/dist/components/fields/ColorPicker/channels.js.map +1 -0
  110. package/dist/components/fields/ColorPicker/color.d.ts +15 -0
  111. package/dist/components/fields/ColorPicker/color.js +282 -0
  112. package/dist/components/fields/ColorPicker/color.js.map +1 -0
  113. package/dist/components/fields/ColorPicker/index.d.ts +4 -0
  114. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  115. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  116. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  117. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  118. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  119. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  120. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  121. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  122. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  123. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  124. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  125. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  126. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  127. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  128. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  129. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  130. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  131. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  132. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  133. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  134. package/dist/components/fields/DatePicker/period.js +1 -1
  135. package/dist/components/fields/DatePicker/props.js +1 -1
  136. package/dist/components/fields/DatePicker/utils.js +1 -1
  137. package/dist/components/fields/FileInput/FileInput.js +1 -1
  138. package/dist/components/fields/FilterListBox/FilterListBox.d.ts +3 -3
  139. package/dist/components/fields/FilterListBox/FilterListBox.js +7 -6
  140. package/dist/components/fields/FilterListBox/FilterListBox.js.map +1 -1
  141. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  142. package/dist/components/fields/Input/Input.js +1 -1
  143. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  144. package/dist/components/fields/ListBox/ListBox.js +1 -1
  145. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  146. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  147. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  148. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  149. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  150. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  151. package/dist/components/fields/Picker/Picker.js +1 -1
  152. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  153. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  154. package/dist/components/fields/RadioGroup/context.js +1 -1
  155. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  156. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  157. package/dist/components/fields/Select/Select.js +1 -1
  158. package/dist/components/fields/Slider/Gradation.js +1 -1
  159. package/dist/components/fields/Slider/HueSlider.js +1 -1
  160. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  161. package/dist/components/fields/Slider/Slider.js +1 -1
  162. package/dist/components/fields/Slider/SliderBase.js +1 -1
  163. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  164. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  165. package/dist/components/fields/Slider/elements.js +1 -1
  166. package/dist/components/fields/Slider/index.js +1 -1
  167. package/dist/components/fields/Switch/Switch.js +1 -1
  168. package/dist/components/fields/TextArea/TextArea.js +1 -1
  169. package/dist/components/fields/TextInput/TextInput.js +1 -1
  170. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  171. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  172. package/dist/components/fields/index.d.ts +4 -0
  173. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  174. package/dist/components/form/Form/Field.js +1 -1
  175. package/dist/components/form/Form/Form.js +1 -1
  176. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  177. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  178. package/dist/components/form/Form/SubmitError.js +1 -1
  179. package/dist/components/form/Form/index.js +1 -1
  180. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  181. package/dist/components/form/Form/use-field/use-field.js +1 -1
  182. package/dist/components/form/Form/use-form.js +1 -1
  183. package/dist/components/form/Form/validation.js +1 -1
  184. package/dist/components/form/Label.js +1 -1
  185. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  186. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  187. package/dist/components/form/validation/use-validation-props.js +1 -1
  188. package/dist/components/form/wrapper.js +1 -1
  189. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  190. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  191. package/dist/components/layout/Board/Board.d.ts +55 -1
  192. package/dist/components/layout/Board/Board.js +278 -75
  193. package/dist/components/layout/Board/Board.js.map +1 -1
  194. package/dist/components/layout/Board/BoardProvider.js +1 -1
  195. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  196. package/dist/components/layout/Board/Widget.d.ts +16 -0
  197. package/dist/components/layout/Board/Widget.js +6 -3
  198. package/dist/components/layout/Board/Widget.js.map +1 -1
  199. package/dist/components/layout/Board/WidgetHost.js +81 -14
  200. package/dist/components/layout/Board/WidgetHost.js.map +1 -1
  201. package/dist/components/layout/Board/board-context.js +1 -1
  202. package/dist/components/layout/Board/board-context.js.map +1 -1
  203. package/dist/components/layout/Board/board-store.js +2 -2
  204. package/dist/components/layout/Board/board-store.js.map +1 -1
  205. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  206. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  207. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  208. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  209. package/dist/components/layout/Board/grid-core/group-move.js +132 -0
  210. package/dist/components/layout/Board/grid-core/group-move.js.map +1 -0
  211. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  212. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  213. package/dist/components/layout/Board/index.d.ts +2 -1
  214. package/dist/components/layout/Board/index.js +2 -2
  215. package/dist/components/layout/Board/index.js.map +1 -1
  216. package/dist/components/layout/Board/responsive-utils.js +1 -1
  217. package/dist/components/layout/Board/use-board-layout.js +17 -12
  218. package/dist/components/layout/Board/use-board-layout.js.map +1 -1
  219. package/dist/components/layout/Board/use-board-registry.js +139 -20
  220. package/dist/components/layout/Board/use-board-registry.js.map +1 -1
  221. package/dist/components/layout/Board/use-board-select-modifier-key.js +24 -0
  222. package/dist/components/layout/Board/use-board-select-modifier-key.js.map +1 -0
  223. package/dist/components/layout/Board/use-board-selection.d.ts +8 -0
  224. package/dist/components/layout/Board/use-board-selection.js +113 -0
  225. package/dist/components/layout/Board/use-board-selection.js.map +1 -0
  226. package/dist/components/layout/Flex.js +1 -1
  227. package/dist/components/layout/Flow.js +1 -1
  228. package/dist/components/layout/Grid.js +1 -1
  229. package/dist/components/layout/Panel.js +1 -1
  230. package/dist/components/layout/Prefix.js +1 -1
  231. package/dist/components/layout/ResizablePanel.js +1 -1
  232. package/dist/components/layout/Space.js +1 -1
  233. package/dist/components/layout/Suffix.js +1 -1
  234. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  235. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  236. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  237. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  238. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  239. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  240. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  241. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  242. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  243. package/dist/components/navigation/Tabs/styled.js +1 -1
  244. package/dist/components/navigation/Tabs/types.js +1 -1
  245. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  246. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  247. package/dist/components/organisms/FileTabs/FileTabs.js +1 -1
  248. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  249. package/dist/components/other/Calendar/Calendar.js +1 -1
  250. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  251. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  252. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  253. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  254. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  255. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  256. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  257. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  258. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  259. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  260. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  261. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  262. package/dist/components/overlays/Dialog/context.js +1 -1
  263. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  264. package/dist/components/overlays/Modal/Modal.js +1 -1
  265. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  266. package/dist/components/overlays/Modal/Overlay.js +1 -1
  267. package/dist/components/overlays/Modal/Popover.js +1 -1
  268. package/dist/components/overlays/Modal/Tray.js +1 -1
  269. package/dist/components/overlays/Modal/Underlay.js +1 -1
  270. package/dist/components/overlays/Notifications/Notification.js +1 -1
  271. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  272. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  273. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  274. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  275. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  276. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  277. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  278. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  279. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  280. package/dist/components/overlays/Notifications/index.js +1 -1
  281. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  282. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  283. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  284. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  285. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  286. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  287. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  288. package/dist/components/overlays/Toast/index.js +1 -1
  289. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  290. package/dist/components/overlays/Toast/useToast.js +1 -1
  291. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  292. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  293. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  294. package/dist/components/overlays/Tooltip/context.js +1 -1
  295. package/dist/components/portal/Portal.js +1 -1
  296. package/dist/components/portal/PortalProvider.js +1 -1
  297. package/dist/components/portal/usePortal.js +1 -1
  298. package/dist/components/shared/DraggableCollection.js +1 -1
  299. package/dist/components/shared/InvalidIcon.js +1 -1
  300. package/dist/components/shared/ValidIcon.js +1 -1
  301. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  302. package/dist/components/status/Spin/Cube.js +1 -1
  303. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  304. package/dist/components/status/Spin/Spin.js +1 -1
  305. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  306. package/dist/data/item-themes.js +1 -1
  307. package/dist/data/themes.js +1 -1
  308. package/dist/eslint-plugin/defaults.generated.js +9 -1
  309. package/dist/eslint-plugin/defaults.generated.js.map +1 -1
  310. package/dist/eslint-plugin/index.js +1 -1
  311. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  312. package/dist/i18n/I18nProvider.js +1 -1
  313. package/dist/i18n/createFormatter.js +1 -1
  314. package/dist/i18n/index.js +1 -1
  315. package/dist/i18n/instance.js +1 -1
  316. package/dist/i18n/locales/de-DE/uikit.js +9 -1
  317. package/dist/i18n/locales/en-US/uikit.js +9 -1
  318. package/dist/i18n/locales/en-US/uikit.json.d.ts +9 -1
  319. package/dist/i18n/locales/es-ES/uikit.js +9 -1
  320. package/dist/i18n/locales/es-MX/uikit.js +9 -1
  321. package/dist/i18n/locales/fr-FR/uikit.js +9 -1
  322. package/dist/i18n/locales/it-IT/uikit.js +9 -1
  323. package/dist/i18n/locales/ja-JP/uikit.js +9 -1
  324. package/dist/i18n/locales/nb-NO/uikit.js +9 -1
  325. package/dist/i18n/locales/pt-BR/uikit.js +9 -1
  326. package/dist/i18n/locales/pt-PT/uikit.js +9 -1
  327. package/dist/i18n/locales/sv-SE/uikit.js +9 -1
  328. package/dist/i18n/locales/vi-VN/uikit.js +9 -1
  329. package/dist/i18n/locales.js +1 -1
  330. package/dist/i18n/useFormatter.js +1 -1
  331. package/dist/i18n/useI18n.js +1 -1
  332. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  333. package/dist/icons/AdjustmentsIcon.js +1 -1
  334. package/dist/icons/AiIcon.js +1 -1
  335. package/dist/icons/AreaChartIcon.js +1 -1
  336. package/dist/icons/BackwardIcon.js +1 -1
  337. package/dist/icons/BarChartIcon.js +1 -1
  338. package/dist/icons/BellFilledIcon.js +1 -1
  339. package/dist/icons/BellIcon.js +1 -1
  340. package/dist/icons/BooleanIcon.js +1 -1
  341. package/dist/icons/CalendarEditIcon.js +1 -1
  342. package/dist/icons/CalendarIcon.js +1 -1
  343. package/dist/icons/CaretDownIcon.js +1 -1
  344. package/dist/icons/CaretUpIcon.js +1 -1
  345. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  346. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  347. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  348. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  349. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  350. package/dist/icons/ChartBarLineIcon.js +1 -1
  351. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  352. package/dist/icons/ChartBarStackedIcon.js +1 -1
  353. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  354. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  355. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  356. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  357. package/dist/icons/ChartBubbleIcon.js +1 -1
  358. package/dist/icons/ChartDonut2Icon.js +1 -1
  359. package/dist/icons/ChartFunnelIcon.js +1 -1
  360. package/dist/icons/ChartHeatmapIcon.js +1 -1
  361. package/dist/icons/ChartKPIIcon.js +1 -1
  362. package/dist/icons/ChartPie2Icon.js +1 -1
  363. package/dist/icons/ChartScatterIcon.js +1 -1
  364. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  365. package/dist/icons/CheckCircleIcon.js +1 -1
  366. package/dist/icons/CheckIcon.js +1 -1
  367. package/dist/icons/CircleFilledIcon.js +1 -1
  368. package/dist/icons/ClearIcon.js +1 -1
  369. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  370. package/dist/icons/CloseCircleIcon.js +1 -1
  371. package/dist/icons/CloseIcon.js +1 -1
  372. package/dist/icons/CodeIcon.js +1 -1
  373. package/dist/icons/ColumnTotalIcon.js +1 -1
  374. package/dist/icons/CopyIcon.js +1 -1
  375. package/dist/icons/CountIcon.js +1 -1
  376. package/dist/icons/CubeIcon.js +1 -1
  377. package/dist/icons/CubePauseIcon.js +1 -1
  378. package/dist/icons/CubePlayIcon.js +1 -1
  379. package/dist/icons/CurrencyDollarIcon.js +1 -1
  380. package/dist/icons/DangerIcon.js +1 -1
  381. package/dist/icons/DashboardIcon.js +1 -1
  382. package/dist/icons/DatabaseIcon.js +1 -1
  383. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  384. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  385. package/dist/icons/DirectionIcon.js +1 -1
  386. package/dist/icons/DonutIcon.js +1 -1
  387. package/dist/icons/DownIcon.js +1 -1
  388. package/dist/icons/EditIcon.js +1 -1
  389. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  390. package/dist/icons/ExclamationCircleIcon.js +1 -1
  391. package/dist/icons/ExclamationIcon.js +1 -1
  392. package/dist/icons/EyeIcon.js +1 -1
  393. package/dist/icons/EyeInvisibleIcon.js +1 -1
  394. package/dist/icons/FilterIcon.js +1 -1
  395. package/dist/icons/FolderFilledIcon.js +1 -1
  396. package/dist/icons/FolderIcon.js +1 -1
  397. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  398. package/dist/icons/FolderOpenIcon.js +1 -1
  399. package/dist/icons/ForwardIcon.js +1 -1
  400. package/dist/icons/GripVerticalIcon.js +1 -1
  401. package/dist/icons/HierarchyIcon.js +1 -1
  402. package/dist/icons/HierarchyOpenIcon.js +1 -1
  403. package/dist/icons/Icon.js +1 -1
  404. package/dist/icons/InfoCircleIcon.js +1 -1
  405. package/dist/icons/InfoIcon.js +1 -1
  406. package/dist/icons/KeyIcon.js +1 -1
  407. package/dist/icons/LeftIcon.js +1 -1
  408. package/dist/icons/LineChartIcon.js +1 -1
  409. package/dist/icons/LoadingIcon.js +1 -1
  410. package/dist/icons/LockFilledIcon.js +1 -1
  411. package/dist/icons/LockIcon.js +1 -1
  412. package/dist/icons/MoreIcon.js +1 -1
  413. package/dist/icons/NotAllowedIcon.js +1 -1
  414. package/dist/icons/Number123Icon.js +1 -1
  415. package/dist/icons/NumberIcon.js +1 -1
  416. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  417. package/dist/icons/PauseCircleIcon.js +1 -1
  418. package/dist/icons/PauseIcon.js +1 -1
  419. package/dist/icons/PercentageIcon.js +1 -1
  420. package/dist/icons/PieChartIcon.js +1 -1
  421. package/dist/icons/PipetteIcon.d.ts +12 -0
  422. package/dist/icons/PipetteIcon.js +11 -0
  423. package/dist/icons/PipetteIcon.js.map +1 -0
  424. package/dist/icons/PlayCircleIcon.js +1 -1
  425. package/dist/icons/PlayIcon.js +1 -1
  426. package/dist/icons/PlusIcon.js +1 -1
  427. package/dist/icons/ProgressBarIcon.js +1 -1
  428. package/dist/icons/ReloadIcon.js +1 -1
  429. package/dist/icons/ReportIcon.js +1 -1
  430. package/dist/icons/ReturnIcon.js +1 -1
  431. package/dist/icons/RightIcon.js +1 -1
  432. package/dist/icons/RowTotalsIcon.js +1 -1
  433. package/dist/icons/SchemeIcon.js +1 -1
  434. package/dist/icons/SearchIcon.js +1 -1
  435. package/dist/icons/SemanticQueryIcon.js +1 -1
  436. package/dist/icons/SettingsIcon.js +1 -1
  437. package/dist/icons/ShieldFilledIcon.js +1 -1
  438. package/dist/icons/ShieldIcon.js +1 -1
  439. package/dist/icons/SlashIcon.js +1 -1
  440. package/dist/icons/SparklesIcon.js +1 -1
  441. package/dist/icons/SqlIcon.js +1 -1
  442. package/dist/icons/StatsIcon.js +1 -1
  443. package/dist/icons/StopIcon.js +1 -1
  444. package/dist/icons/StringIcon.js +1 -1
  445. package/dist/icons/SubtotalsIcon.js +1 -1
  446. package/dist/icons/SwitchIcon.js +1 -1
  447. package/dist/icons/TableIcon.js +1 -1
  448. package/dist/icons/ThumbsDownIcon.js +1 -1
  449. package/dist/icons/ThumbsUpIcon.js +1 -1
  450. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  451. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  452. package/dist/icons/ThunderboltIcon.js +1 -1
  453. package/dist/icons/TimeIcon.js +1 -1
  454. package/dist/icons/TrashIcon.js +1 -1
  455. package/dist/icons/UnlockIcon.js +1 -1
  456. package/dist/icons/UpIcon.js +1 -1
  457. package/dist/icons/UserGroupIcon.js +1 -1
  458. package/dist/icons/UserIcon.js +1 -1
  459. package/dist/icons/UserLockIcon.js +1 -1
  460. package/dist/icons/ViewIcon.js +1 -1
  461. package/dist/icons/WarningFilledIcon.js +1 -1
  462. package/dist/icons/WarningIcon.js +1 -1
  463. package/dist/icons/index.d.ts +1 -0
  464. package/dist/icons/wrap-icon.js +1 -1
  465. package/dist/index.d.ts +7 -2
  466. package/dist/index.js +13 -8
  467. package/dist/index.js.map +1 -1
  468. package/dist/provider.js +1 -1
  469. package/dist/providers/TrackingProvider.js +1 -1
  470. package/dist/providers/navigationAdapter.default.js +1 -1
  471. package/dist/tokens/base.js +1 -1
  472. package/dist/tokens/colors.js +1 -1
  473. package/dist/tokens/index.js +1 -1
  474. package/dist/tokens/layout.js +1 -1
  475. package/dist/tokens/lazy-styles.js +1 -1
  476. package/dist/tokens/palette-config.js +1 -1
  477. package/dist/tokens/palette.js +1 -1
  478. package/dist/tokens/shadows.js +1 -1
  479. package/dist/tokens/sizes.js +1 -1
  480. package/dist/tokens/spacing.js +1 -1
  481. package/dist/tokens/typography.js +1 -1
  482. package/dist/utils/ResizeSensor.js +1 -1
  483. package/dist/utils/is-dev-env.js +1 -1
  484. package/dist/utils/modules.js +1 -1
  485. package/dist/utils/promise.js +1 -1
  486. package/dist/utils/raf.js +1 -1
  487. package/dist/utils/random.js +1 -1
  488. package/dist/utils/range.js +1 -1
  489. package/dist/utils/react/RenderCache.js +1 -1
  490. package/dist/utils/react/Slots.js +1 -1
  491. package/dist/utils/react/chain.js +1 -1
  492. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  493. package/dist/utils/react/index.js +1 -1
  494. package/dist/utils/react/interactions.js +1 -1
  495. package/dist/utils/react/isTextOnly.js +1 -1
  496. package/dist/utils/react/mapProps.js +1 -1
  497. package/dist/utils/react/mergeProps.js +1 -1
  498. package/dist/utils/react/nullableValue.js +1 -1
  499. package/dist/utils/react/resolveIcon.js +1 -1
  500. package/dist/utils/react/sharedStore.js +1 -1
  501. package/dist/utils/react/useCombinedRefs.js +1 -1
  502. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  503. package/dist/utils/react/useEventBus.js +1 -1
  504. package/dist/utils/react/useId.js +1 -1
  505. package/dist/utils/react/useIsDarwin.js +1 -1
  506. package/dist/utils/react/useKeySymbols.js +1 -1
  507. package/dist/utils/react/useLayoutEffect.js +1 -1
  508. package/dist/utils/react/useLocalStorage.js +1 -1
  509. package/dist/utils/react/useMergeStyles.js +1 -1
  510. package/dist/utils/react/usePopoverSync.js +1 -1
  511. package/dist/utils/react/useQaProps.js +1 -1
  512. package/dist/utils/react/useViewportSize.js +1 -1
  513. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  514. package/dist/utils/selection.js +1 -1
  515. package/dist/utils/styles.js +1 -1
  516. package/dist/utils/tree.js +1 -1
  517. package/dist/utils/warnings.js +1 -1
  518. package/dist/version.js +2 -2
  519. package/docs/components/fields/ColorPicker.md +271 -0
  520. package/docs/components/layout/Board.md +154 -6
  521. package/package.json +1 -1
package/dist/CHANGELOG.md CHANGED
@@ -1,5 +1,69 @@
1
1
  # @cube-dev/ui-kit
2
2
 
3
+ ## 0.156.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#1287](https://github.com/cube-js/cube-ui-kit/pull/1287) [`946f6b85`](https://github.com/cube-js/cube-ui-kit/commit/946f6b8570acd63d97d9e9ba8ebf91459e315e48) Thanks [@tenphi](https://github.com/tenphi)! - Add `ColorPicker` — a form-attachable color input. The field shows the current color as a swatch, accepts hex, `rgb()`, `hsl()`, `okhsl()`, `okhst()` and `oklch()` text, and opens a popover where the color can be tuned on three axes: HST (OKHST hue/saturation/tone), LCH (OKLCH lightness/chroma/hue) or RGB. Every conversion runs through Glaze, so the value is always a real, in-gamut color.
8
+
9
+ `formatMode` controls how the text relates to the value: `forced` (default) rewrites the text in `format`, `derive` keeps the notation the user typed but normalizes the value, and `free` passes the text through verbatim after verifying it parses. Also adds a `PipetteIcon`.
10
+
11
+ - [#1286](https://github.com/cube-js/cube-ui-kit/pull/1286) [`272a9e9b`](https://github.com/cube-js/cube-ui-kit/commit/272a9e9bc424b8b09be268640ff81be016540c9a) Thanks [@tenphi](https://github.com/tenphi)! - Add widget selection and rigid group movement to `Board`.
12
+
13
+ Set `selectionMode="single" | "multiple"` and read the selection with
14
+ `selectedKeys` / `defaultSelectedKeys` / `onSelectionChange` (keys are layout item
15
+ ids, always returned in layout order).
16
+
17
+ Pressing a widget selects it on pointer-down and arms a drag of the selection —
18
+ selecting and grabbing are one gesture, so move the pointer and it drags, stay
19
+ still and it was only a selection. <kbd>Shift</kbd> (or <kbd>Cmd</kbd>/
20
+ <kbd>Ctrl</kbd>) toggles membership, dragging from empty canvas lassos
21
+ (`allowMarqueeSelection`), <kbd>Space</kbd> toggles the focused widget, and
22
+ <kbd>Escape</kbd> clears.
23
+
24
+ Selection behaves like focus: it tracks what the user is working with and moves on
25
+ as soon as they touch something else — pressing another widget makes that the
26
+ selection, and pressing an interactive control inside a widget or moving focus off
27
+ the board drops it entirely.
28
+
29
+ With `"multiple"`, dragging any selected widget moves the whole selection as a
30
+ rigid block that reflows by the board's own rules — the same compaction a single
31
+ widget gets, so a group can never be parked in empty space on a `vertical` board
32
+ and the widgets around it close the gap in the same frame. Every widget travels by the same delta, the group clamps against the
33
+ grid edge as a unit instead of collapsing into it, a frame that cannot be placed
34
+ is rejected outright rather than partially applied, and the move commits through a
35
+ single `onLayoutChange`. Arrow keys move the group too. `BoardInteractionInfo`
36
+ gains `items`, `oldItems` and `placeholders` describing the whole gesture; the
37
+ existing `item` / `oldItem` / `placeholder` fields are unchanged, and a board with
38
+ no selection behaves exactly as before.
39
+
40
+ The `selectionCancel` selector (board- or widget-level, defaulting to the exported
41
+ `BOARD_SELECTION_CANCEL`) marks interactive descendants; `[data-no-select]` opts
42
+ out a custom control. On a selectable board it also gates dragging, which fixes a
43
+ long-standing trap: `useMove`'s pointer-down calls `preventDefault()`, so without
44
+ a `dragCancel` an `input` inside a widget could not be focused or typed into.
45
+ Selected widgets are drawn with a `#primary-border` border and a `#primary` ring —
46
+ an edge treatment rather than a fill, since selection reads as a focus-like state;
47
+ `outline` stays reserved for the real focus ring. Widgets get a `selected`
48
+ modifier you can restyle through `widgetProps.styles`.
49
+
50
+ `onWidgetsDelete` reports a <kbd>Delete</kbd>/<kbd>Backspace</kbd> press with a
51
+ non-empty selection. Board never mutates the layout itself, so removal stays
52
+ yours to implement and to make undoable.
53
+
54
+ Accessibility: widget hosts are now `role="group"` with an accessible name from
55
+ the new `Board.Widget` `aria-label` prop (falling back to `qa`, then the layout
56
+ id). `aria-roledescription` is now localized rather than hardcoded English — it
57
+ was previously also invalid, sitting on a role-less element. Selected widgets are
58
+ described as "Selected", and selection changes are announced through a polite live
59
+ region.
60
+
61
+ Widget hosts also expose `data-board-widget-id` and `data-selected`.
62
+
63
+ ### Patch Changes
64
+
65
+ - [#1284](https://github.com/cube-js/cube-ui-kit/pull/1284) [`fc517477`](https://github.com/cube-js/cube-ui-kit/commit/fc5174777e4d330d5d4be98cf5547daa038dc9f0) Thanks [@tenphi](https://github.com/tenphi)! - Fix the types of `FilterListBox.Item` and `CommandMenu.Item`. Both were declared as React Stately's bare `Item`, so `Item` props such as `icon`, `rightIcon`, `description`, `hotkeys` and `actions` were rejected by TypeScript even though they worked at runtime. They now use `CollectionItem`, matching `ListBox.Item`, `Menu.Item` and the other collection components.
66
+
3
67
  ## 0.155.0
4
68
 
5
69
  ### Minor Changes
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import { useEvent } from "./use-event.js";
3
3
 
4
4
  //#region src/_internal/hooks/use-chained-callback.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import { useEffect, useRef, useState } from "react";
3
3
 
4
4
  //#region src/_internal/hooks/use-debounced-value.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import { deprecationWarning } from "../../utils/warnings.js";
3
3
  import React, { useEffect } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import { useSyncRef } from "./use-sync-ref.js";
3
3
  import { useCallback } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import { useRef } from "react";
3
3
 
4
4
  //#region src/_internal/hooks/use-is-first-render.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import { useLayoutEffect as useLayoutEffect$1 } from "../../utils/react/useLayoutEffect.js";
3
3
  import { useRef } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  //#region src/_internal/hooks/use-timer/timer.ts
3
3
  var Timer = class {
4
4
  callback;
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import { useEvent } from "../use-event.js";
3
3
  import { Timer } from "./timer.js";
4
4
  import { useEffect, useState } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import { useEvent } from "./use-event.js";
3
3
  import { warn } from "../../utils/warnings.js";
4
4
  import { useRef } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import { extractStyles } from "../utils/styles.js";
3
3
  import { CONTAINER_STYLES, filterBaseProps, tasty } from "@tenphi/tasty";
4
4
  import { forwardRef } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import { ItemAction } from "./actions/ItemAction/ItemAction.js";
3
3
  import { ItemBadge } from "./content/ItemBadge/ItemBadge.js";
4
4
  import { Item } from "react-stately";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import { usePaletteVersion } from "../tokens/palette-config.js";
3
3
  import { getTokens } from "../tokens/index.js";
4
4
  import { useGlobalStyles, useRawCSS } from "@tenphi/tasty";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import { useCombinedRefs } from "../utils/react/useCombinedRefs.js";
3
3
  import { filterBaseProps, tasty } from "@tenphi/tasty";
4
4
  import { forwardRef, useCallback, useEffect, useState } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import { tasty } from "@tenphi/tasty";
3
3
 
4
4
  //#region src/components/HiddenInput.tsx
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import { extractStyles } from "../utils/styles.js";
3
3
  import { EventBusProvider } from "../utils/react/useEventBus.js";
4
4
  import { PortalProvider } from "./portal/PortalProvider.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { useAction } from "../use-action.js";
4
4
  import { CONTAINER_STYLES, TEXT_STYLES, tasty } from "@tenphi/tasty";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { _Item } from "../../content/Item/Item.js";
4
4
  import { useI18n } from "../../../i18n/useI18n.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { mergeProps } from "../../../utils/react/mergeProps.js";
4
4
  import { useDismissParentPopover } from "../../../utils/react/usePopoverSync.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import { useSlotProps } from "../../../utils/react/Slots.js";
3
3
  import { Space } from "../../layout/Space.js";
4
4
  import { tasty } from "@tenphi/tasty";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { mergeProps } from "../../../utils/react/mergeProps.js";
4
4
  import { DirectionIcon } from "../../../icons/DirectionIcon.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import { createContext, useContext } from "react";
3
3
 
4
4
  //#region src/components/actions/ButtonSplit/context.ts
@@ -1,7 +1,13 @@
1
1
 
2
2
  import { CubeMenuProps } from "../Menu/Menu.js";
3
+ import { CubeItemBadgeProps } from "../../content/ItemBadge/ItemBadge.js";
4
+ import { CubeItemActionProps } from "../ItemAction/ItemAction.js";
5
+ import "../index.js";
6
+ import { CubeCollectionItemProps } from "../../CollectionItem.js";
7
+ import "../../../index.js";
3
8
  import { BaseProps, ContainerStyleProps, Styles } from "@tenphi/tasty";
4
9
  import React, { ReactElement, ReactNode } from "react";
10
+ import * as _react_types_shared0 from "@react-types/shared";
5
11
  import { FocusStrategy } from "@react-types/shared";
6
12
 
7
13
  //#region src/components/actions/CommandMenu/CommandMenu.d.ts
@@ -34,7 +40,10 @@ interface CubeCommandMenuProps<T> extends BaseProps, ContainerStyleProps, Omit<C
34
40
  }
35
41
  declare const __CommandMenu: (<T>(props: CubeCommandMenuProps<T> & React.RefAttributes<HTMLDivElement>) => ReactElement) & {
36
42
  Trigger: React.ForwardRefExoticComponent<any>;
37
- Item: any;
43
+ Item: (<T>(props: CubeCollectionItemProps<T>) => ReactElement) & {
44
+ Action: React.ForwardRefExoticComponent<Omit<CubeItemActionProps, "ref"> & React.RefAttributes<_react_types_shared0.FocusableRefValue<HTMLElement, HTMLElement>>>;
45
+ Badge: React.ForwardRefExoticComponent<CubeItemBadgeProps & React.RefAttributes<HTMLDivElement>>;
46
+ };
38
47
  Section: any;
39
48
  displayName: string;
40
49
  };
@@ -1,8 +1,9 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.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 { TooltipProvider } from "../../overlays/Tooltip/TooltipProvider.js";
5
5
  import { LoadingIcon } from "../../../icons/LoadingIcon.js";
6
+ import { _CollectionItem } from "../../CollectionItem.js";
6
7
  import { useI18n } from "../../../i18n/useI18n.js";
7
8
  import { useMenuContext } from "../Menu/context.js";
8
9
  import { MenuItem } from "../Menu/MenuItem.js";
@@ -14,7 +15,7 @@ import { CONTAINER_STYLES, filterBaseProps } from "@tenphi/tasty";
14
15
  import React, { useCallback, useMemo, useRef, useState } from "react";
15
16
  import { jsx, jsxs } from "react/jsx-runtime";
16
17
  import { useFilter, useMenu } from "react-aria";
17
- import { Item, Section, useTreeState } from "react-stately";
18
+ import { Section, useTreeState } from "react-stately";
18
19
  import { useObjectRef, useSyncRef } from "@react-aria/utils";
19
20
 
20
21
  //#region src/components/actions/CommandMenu/CommandMenu.tsx
@@ -354,7 +355,7 @@ function CommandMenu(props, ref) {
354
355
  const _CommandMenu = React.forwardRef(CommandMenu);
355
356
  const __CommandMenu = Object.assign(_CommandMenu, {
356
357
  Trigger: _MenuTrigger,
357
- Item,
358
+ Item: _CollectionItem,
358
359
  Section,
359
360
  displayName: "CommandMenu"
360
361
  });
@@ -1 +1 @@
1
- {"version":3,"file":"CommandMenu.js","names":["mergeProps","MenuTrigger"],"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';\n// Import Item and Section from Menu for CommandMenu compound component\nimport { Item, Section, useTreeState } from 'react-stately';\n\nimport { useI18n } from '../../../i18n';\nimport { LoadingIcon } from '../../../icons';\nimport { mergeProps } from '../../../utils/react';\nimport { extractStyles } from '../../../utils/styles';\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":["mergeProps","MenuTrigger"],"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';\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,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.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.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.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 { 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.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import { createContext, useContext } from "react";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
3
3
  import { mergeRefs } from "../../../utils/react/useCombinedRefs.js";
4
4
  import { useDismissParentPopover } from "../../../utils/react/usePopoverSync.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import { Button } from "../Button/Button.js";
3
3
  import { forwardRef } from "react";
4
4
  import { jsx } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.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,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.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";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import { TooltipProvider } from "../../overlays/Tooltip/TooltipProvider.js";
3
3
  import { MenuItem } from "./MenuItem.js";
4
4
  import { StyledMenu, StyledSection, StyledSectionHeading } from "./styled.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.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.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.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";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import React from "react";
3
3
 
4
4
  //#region src/components/actions/Menu/SubmenuTriggerContext.tsx
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import React, { useContext } from "react";
3
3
 
4
4
  //#region src/components/actions/Menu/context.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import { DEFAULT_CLEAR_STYLES } from "../../../data/item-themes.js";
3
3
  import { Space } from "../../layout/Space.js";
4
4
  import { DEFAULT_BUTTON_STYLES } from "../Button/Button.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import { ItemActionProvider, useItemActionContext } from "./ItemActionContext.js";
3
3
  import { openLink, parseTo, performClickHandler, useAction } from "./use-action.js";
4
4
  import { ItemAction } from "./ItemAction/ItemAction.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../utils/react/mergeProps.js";
3
3
  import { useEvent } from "../../_internal/hooks/use-event.js";
4
4
  import { useFocus as useFocus$1 } from "../../utils/react/interactions.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../utils/react/mergeProps.js";
3
3
  import { usePopoverSync } from "../../utils/react/usePopoverSync.js";
4
4
  import { useEvent } from "../../_internal/hooks/use-event.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../utils/react/mergeProps.js";
3
3
  import { usePopoverSync } from "../../utils/react/usePopoverSync.js";
4
4
  import { useEvent } from "../../_internal/hooks/use-event.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.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 { useFocus as useFocus$1 } from "../../../utils/react/interactions.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import themes_default from "../../../data/themes.js";
3
3
  import { useAlert } from "./use-alert.js";
4
4
  import { tasty } from "@tenphi/tasty";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.155.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { useDeprecationWarning } from "../../../_internal/hooks/use-deprecation-warning.js";
4
4
  import { CONTAINER_STYLES, TEXT_STYLES, filterBaseProps } from "@tenphi/tasty";