@cube-dev/ui-kit 0.120.1 → 0.121.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 (428) hide show
  1. package/dist/CHANGELOG.md +14 -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.d.ts +1 -0
  20. package/dist/components/actions/Button/Button.js +34 -14
  21. package/dist/components/actions/Button/Button.js.map +1 -1
  22. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  23. package/dist/components/actions/ButtonSplit/ButtonSplit.d.ts +47 -0
  24. package/dist/components/actions/ButtonSplit/ButtonSplit.js +105 -0
  25. package/dist/components/actions/ButtonSplit/ButtonSplit.js.map +1 -0
  26. package/dist/components/actions/ButtonSplit/context.d.ts +18 -0
  27. package/dist/components/actions/ButtonSplit/context.js +12 -0
  28. package/dist/components/actions/ButtonSplit/context.js.map +1 -0
  29. package/dist/components/actions/ButtonSplit/index.d.ts +3 -0
  30. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  31. package/dist/components/actions/CommandMenu/styled.js +1 -1
  32. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  33. package/dist/components/actions/ItemActionContext.js +1 -1
  34. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  35. package/dist/components/actions/Link/Link.js +1 -1
  36. package/dist/components/actions/Menu/Menu.d.ts +2 -2
  37. package/dist/components/actions/Menu/Menu.js +1 -1
  38. package/dist/components/actions/Menu/MenuItem.js +1 -1
  39. package/dist/components/actions/Menu/MenuSection.js +1 -1
  40. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  41. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  42. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  43. package/dist/components/actions/Menu/context.js +1 -1
  44. package/dist/components/actions/Menu/styled.js +1 -1
  45. package/dist/components/actions/index.d.ts +8 -3
  46. package/dist/components/actions/index.js +10 -5
  47. package/dist/components/actions/index.js.map +1 -1
  48. package/dist/components/actions/use-action.d.ts +1 -0
  49. package/dist/components/actions/use-action.js +21 -18
  50. package/dist/components/actions/use-action.js.map +1 -1
  51. package/dist/components/actions/use-anchored-menu.js +1 -1
  52. package/dist/components/actions/use-context-menu.js +1 -1
  53. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  54. package/dist/components/content/Alert/Alert.js +1 -1
  55. package/dist/components/content/Alert/use-alert.js +1 -1
  56. package/dist/components/content/Avatar/Avatar.js +1 -1
  57. package/dist/components/content/Badge/Badge.js +2 -1
  58. package/dist/components/content/Badge/Badge.js.map +1 -1
  59. package/dist/components/content/Card/Card.js +1 -1
  60. package/dist/components/content/Content.js +1 -1
  61. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  62. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  63. package/dist/components/content/Disclosure/Disclosure.js +5 -2
  64. package/dist/components/content/Disclosure/Disclosure.js.map +1 -1
  65. package/dist/components/content/Divider.js +1 -1
  66. package/dist/components/content/Footer.js +1 -1
  67. package/dist/components/content/Header.js +1 -1
  68. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  69. package/dist/components/content/Item/Item.js +1 -1
  70. package/dist/components/content/ItemBadge/ItemBadge.js +3 -2
  71. package/dist/components/content/ItemBadge/ItemBadge.js.map +1 -1
  72. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  73. package/dist/components/content/Layout/GridLayout.js +1 -1
  74. package/dist/components/content/Layout/Layout.js +1 -1
  75. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  76. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  77. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  78. package/dist/components/content/Layout/LayoutContent.js +1 -1
  79. package/dist/components/content/Layout/LayoutContext.js +1 -1
  80. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  81. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  82. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  83. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  84. package/dist/components/content/Layout/LayoutPane.js +1 -1
  85. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  86. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  87. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  88. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  89. package/dist/components/content/Layout/index.js +1 -1
  90. package/dist/components/content/Layout/utils.js +1 -1
  91. package/dist/components/content/Paragraph.js +1 -1
  92. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  93. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  94. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  95. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  96. package/dist/components/content/Result/Result.js +1 -1
  97. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  98. package/dist/components/content/Tag/Tag.js +2 -1
  99. package/dist/components/content/Tag/Tag.js.map +1 -1
  100. package/dist/components/content/Text.js +1 -1
  101. package/dist/components/content/TextItem/TextItem.js +1 -1
  102. package/dist/components/content/Title.js +1 -1
  103. package/dist/components/content/highlightText.js +1 -1
  104. package/dist/components/content/use-auto-tooltip.js +1 -1
  105. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  106. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  107. package/dist/components/fields/Checkbox/context.js +1 -1
  108. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  109. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  110. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  111. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  112. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  113. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  114. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  115. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  116. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  117. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  118. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  119. package/dist/components/fields/DatePicker/intl.js +1 -1
  120. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  121. package/dist/components/fields/DatePicker/props.js +1 -1
  122. package/dist/components/fields/DatePicker/utils.js +1 -1
  123. package/dist/components/fields/FileInput/FileInput.js +1 -1
  124. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  125. package/dist/components/fields/FilterPicker/FilterPicker.js +2 -2
  126. package/dist/components/fields/Input/Input.js +1 -1
  127. package/dist/components/fields/ListBox/ListBox.js +1 -1
  128. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  129. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  130. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  131. package/dist/components/fields/Picker/Picker.js +2 -2
  132. package/dist/components/fields/RadioGroup/Radio.js +3 -1
  133. package/dist/components/fields/RadioGroup/Radio.js.map +1 -1
  134. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  135. package/dist/components/fields/RadioGroup/context.js +1 -1
  136. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  137. package/dist/components/fields/Select/Select.js +1 -1
  138. package/dist/components/fields/Slider/Gradation.js +1 -1
  139. package/dist/components/fields/Slider/HueSlider.js +1 -1
  140. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  141. package/dist/components/fields/Slider/Slider.js +1 -1
  142. package/dist/components/fields/Slider/SliderBase.js +1 -1
  143. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  144. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  145. package/dist/components/fields/Slider/elements.js +1 -1
  146. package/dist/components/fields/Slider/index.js +1 -1
  147. package/dist/components/fields/Switch/Switch.js +1 -1
  148. package/dist/components/fields/TextArea/TextArea.js +1 -1
  149. package/dist/components/fields/TextInput/TextInput.js +1 -1
  150. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  151. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  152. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  153. package/dist/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
  154. package/dist/components/form/Form/Field.js +1 -1
  155. package/dist/components/form/Form/Form.js +1 -1
  156. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  157. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  158. package/dist/components/form/Form/SubmitError.js +1 -1
  159. package/dist/components/form/Form/index.js +1 -1
  160. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  161. package/dist/components/form/Form/use-field/use-field.js +1 -1
  162. package/dist/components/form/Form/use-form.js +1 -1
  163. package/dist/components/form/Form/validation.js +1 -1
  164. package/dist/components/form/Label.js +1 -1
  165. package/dist/components/form/wrapper.js +1 -1
  166. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  167. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  168. package/dist/components/layout/Flex.js +1 -1
  169. package/dist/components/layout/Flow.js +1 -1
  170. package/dist/components/layout/Grid.js +1 -1
  171. package/dist/components/layout/Panel.js +1 -1
  172. package/dist/components/layout/Prefix.js +1 -1
  173. package/dist/components/layout/ResizablePanel.js +1 -1
  174. package/dist/components/layout/Space.js +1 -1
  175. package/dist/components/layout/Suffix.js +1 -1
  176. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  177. package/dist/components/navigation/Tabs/EditableTitle.js +1 -1
  178. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  179. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  180. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  181. package/dist/components/navigation/Tabs/TabPicker.js +2 -1
  182. package/dist/components/navigation/Tabs/TabPicker.js.map +1 -1
  183. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  184. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  185. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  186. package/dist/components/navigation/Tabs/styled.js +3 -1
  187. package/dist/components/navigation/Tabs/styled.js.map +1 -1
  188. package/dist/components/navigation/Tabs/types.d.ts +2 -2
  189. package/dist/components/navigation/Tabs/types.js +1 -1
  190. package/dist/components/navigation/Tabs/types.js.map +1 -1
  191. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  192. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  193. package/dist/components/organisms/FileTabs/FileTabs.js +1 -1
  194. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  195. package/dist/components/other/Calendar/Calendar.js +1 -1
  196. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  197. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  198. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  199. package/dist/components/other/CloudLogo/CloudLogo.js +1 -1
  200. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  201. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  202. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  203. package/dist/components/overlays/Dialog/Dialog.js +2 -2
  204. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  205. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  206. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  207. package/dist/components/overlays/Dialog/context.js +1 -1
  208. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  209. package/dist/components/overlays/Modal/Modal.js +1 -1
  210. package/dist/components/overlays/Modal/OpenTransition.js +1 -1
  211. package/dist/components/overlays/Modal/Overlay.js +1 -1
  212. package/dist/components/overlays/Modal/Popover.js +1 -1
  213. package/dist/components/overlays/Modal/Tray.js +1 -1
  214. package/dist/components/overlays/Modal/Underlay.js +1 -1
  215. package/dist/components/overlays/Notifications/Notification.js +1 -1
  216. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  217. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  218. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  219. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  220. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  221. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  222. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  223. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  224. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  225. package/dist/components/overlays/Notifications/index.js +1 -1
  226. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  227. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  228. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  229. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  230. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  231. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  232. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  233. package/dist/components/overlays/Toast/index.js +1 -1
  234. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  235. package/dist/components/overlays/Toast/useToast.js +1 -1
  236. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  237. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  238. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  239. package/dist/components/overlays/Tooltip/context.js +1 -1
  240. package/dist/components/portal/Portal.js +1 -1
  241. package/dist/components/portal/PortalProvider.js +1 -1
  242. package/dist/components/portal/usePortal.js +1 -1
  243. package/dist/components/shared/InvalidIcon.js +1 -1
  244. package/dist/components/shared/ValidIcon.js +1 -1
  245. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  246. package/dist/components/status/Spin/Cube.js +1 -1
  247. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  248. package/dist/components/status/Spin/Spin.js +1 -1
  249. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  250. package/dist/data/item-themes.js +6 -6
  251. package/dist/data/item-themes.js.map +1 -1
  252. package/dist/data/themes.js +1 -1
  253. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  254. package/dist/icons/AdjustmentsIcon.js +1 -1
  255. package/dist/icons/AiIcon.js +1 -1
  256. package/dist/icons/AreaChartIcon.js +1 -1
  257. package/dist/icons/BackwardIcon.js +1 -1
  258. package/dist/icons/BarChartIcon.js +1 -1
  259. package/dist/icons/BellFilledIcon.js +1 -1
  260. package/dist/icons/BellIcon.js +1 -1
  261. package/dist/icons/BooleanIcon.js +1 -1
  262. package/dist/icons/CalendarEditIcon.js +1 -1
  263. package/dist/icons/CalendarIcon.js +1 -1
  264. package/dist/icons/CaretDownIcon.js +1 -1
  265. package/dist/icons/CaretUpIcon.js +1 -1
  266. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  267. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  268. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  269. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  270. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  271. package/dist/icons/ChartBarLineIcon.js +1 -1
  272. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  273. package/dist/icons/ChartBarStackedIcon.js +1 -1
  274. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  275. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  276. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  277. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  278. package/dist/icons/ChartBubbleIcon.js +1 -1
  279. package/dist/icons/ChartDonut2Icon.js +1 -1
  280. package/dist/icons/ChartFunnelIcon.js +1 -1
  281. package/dist/icons/ChartHeatmapIcon.js +1 -1
  282. package/dist/icons/ChartKPIIcon.js +1 -1
  283. package/dist/icons/ChartPie2Icon.js +1 -1
  284. package/dist/icons/ChartScatterIcon.js +1 -1
  285. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  286. package/dist/icons/CheckCircleIcon.js +1 -1
  287. package/dist/icons/CheckIcon.js +1 -1
  288. package/dist/icons/CircleFilledIcon.js +1 -1
  289. package/dist/icons/ClearIcon.js +1 -1
  290. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  291. package/dist/icons/CloseCircleIcon.js +1 -1
  292. package/dist/icons/CloseIcon.js +1 -1
  293. package/dist/icons/CodeIcon.js +1 -1
  294. package/dist/icons/ColumnTotalIcon.js +1 -1
  295. package/dist/icons/CopyIcon.js +1 -1
  296. package/dist/icons/CountIcon.js +1 -1
  297. package/dist/icons/CubeIcon.js +1 -1
  298. package/dist/icons/CubePauseIcon.js +1 -1
  299. package/dist/icons/CubePlayIcon.js +1 -1
  300. package/dist/icons/CurrencyDollarIcon.js +1 -1
  301. package/dist/icons/DangerIcon.js +1 -1
  302. package/dist/icons/DashboardIcon.js +1 -1
  303. package/dist/icons/DatabaseIcon.js +1 -1
  304. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  305. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  306. package/dist/icons/DirectionIcon.js +1 -1
  307. package/dist/icons/DonutIcon.js +1 -1
  308. package/dist/icons/DownIcon.js +1 -1
  309. package/dist/icons/EditIcon.js +1 -1
  310. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  311. package/dist/icons/ExclamationCircleIcon.js +1 -1
  312. package/dist/icons/ExclamationIcon.js +1 -1
  313. package/dist/icons/EyeIcon.js +1 -1
  314. package/dist/icons/EyeInvisibleIcon.js +1 -1
  315. package/dist/icons/FilterIcon.js +1 -1
  316. package/dist/icons/FolderFilledIcon.js +1 -1
  317. package/dist/icons/FolderIcon.js +1 -1
  318. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  319. package/dist/icons/FolderOpenIcon.js +1 -1
  320. package/dist/icons/ForwardIcon.js +1 -1
  321. package/dist/icons/HierarchyIcon.js +1 -1
  322. package/dist/icons/HierarchyOpenIcon.js +1 -1
  323. package/dist/icons/Icon.js +1 -1
  324. package/dist/icons/InfoCircleIcon.js +1 -1
  325. package/dist/icons/InfoIcon.js +1 -1
  326. package/dist/icons/KeyIcon.js +1 -1
  327. package/dist/icons/LeftIcon.js +1 -1
  328. package/dist/icons/LineChartIcon.js +1 -1
  329. package/dist/icons/LoadingIcon.js +1 -1
  330. package/dist/icons/LockFilledIcon.js +1 -1
  331. package/dist/icons/LockIcon.js +1 -1
  332. package/dist/icons/MoreIcon.js +1 -1
  333. package/dist/icons/NotAllowedIcon.js +1 -1
  334. package/dist/icons/Number123Icon.js +1 -1
  335. package/dist/icons/NumberIcon.js +1 -1
  336. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  337. package/dist/icons/PauseCircleIcon.js +1 -1
  338. package/dist/icons/PauseIcon.js +1 -1
  339. package/dist/icons/PercentageIcon.js +1 -1
  340. package/dist/icons/PieChartIcon.js +1 -1
  341. package/dist/icons/PlayCircleIcon.js +1 -1
  342. package/dist/icons/PlayIcon.js +1 -1
  343. package/dist/icons/PlusIcon.js +1 -1
  344. package/dist/icons/ProgressBarIcon.js +1 -1
  345. package/dist/icons/ReloadIcon.js +1 -1
  346. package/dist/icons/ReportIcon.js +1 -1
  347. package/dist/icons/ReturnIcon.js +1 -1
  348. package/dist/icons/RightIcon.js +1 -1
  349. package/dist/icons/RowTotalsIcon.js +1 -1
  350. package/dist/icons/SchemeIcon.js +1 -1
  351. package/dist/icons/SearchIcon.js +1 -1
  352. package/dist/icons/SemanticQueryIcon.js +1 -1
  353. package/dist/icons/SettingsIcon.js +1 -1
  354. package/dist/icons/ShieldFilledIcon.js +1 -1
  355. package/dist/icons/ShieldIcon.js +1 -1
  356. package/dist/icons/SlashIcon.js +1 -1
  357. package/dist/icons/SparklesIcon.js +1 -1
  358. package/dist/icons/SqlIcon.js +1 -1
  359. package/dist/icons/StatsIcon.js +1 -1
  360. package/dist/icons/StopIcon.js +1 -1
  361. package/dist/icons/StringIcon.js +1 -1
  362. package/dist/icons/SubtotalsIcon.js +1 -1
  363. package/dist/icons/SwitchIcon.js +1 -1
  364. package/dist/icons/TableIcon.js +1 -1
  365. package/dist/icons/ThumbsDownIcon.js +1 -1
  366. package/dist/icons/ThumbsUpIcon.js +1 -1
  367. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  368. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  369. package/dist/icons/ThunderboltIcon.js +1 -1
  370. package/dist/icons/TimeIcon.js +1 -1
  371. package/dist/icons/TrashIcon.js +1 -1
  372. package/dist/icons/UnlockIcon.js +1 -1
  373. package/dist/icons/UpIcon.js +1 -1
  374. package/dist/icons/UserGroupIcon.js +1 -1
  375. package/dist/icons/UserIcon.js +1 -1
  376. package/dist/icons/UserLockIcon.js +1 -1
  377. package/dist/icons/ViewIcon.js +1 -1
  378. package/dist/icons/WarningFilledIcon.js +1 -1
  379. package/dist/icons/WarningIcon.js +1 -1
  380. package/dist/icons/wrap-icon.js +1 -1
  381. package/dist/index.d.ts +6 -4
  382. package/dist/index.js +7 -5
  383. package/dist/index.js.map +1 -1
  384. package/dist/provider.js +1 -1
  385. package/dist/providers/TrackingProvider.js +1 -1
  386. package/dist/providers/navigationAdapter.default.js +1 -1
  387. package/dist/tokens/base.js +1 -1
  388. package/dist/tokens/colors.js +1 -1
  389. package/dist/tokens/index.js +1 -1
  390. package/dist/tokens/layout.js +1 -1
  391. package/dist/tokens/shadows.js +1 -1
  392. package/dist/tokens/sizes.js +1 -1
  393. package/dist/tokens/spacing.js +1 -1
  394. package/dist/utils/ResizeSensor.js +1 -1
  395. package/dist/utils/is-dev-env.js +1 -1
  396. package/dist/utils/modules.js +1 -1
  397. package/dist/utils/promise.js +1 -1
  398. package/dist/utils/raf.js +1 -1
  399. package/dist/utils/random.js +1 -1
  400. package/dist/utils/range.js +1 -1
  401. package/dist/utils/react/RenderCache.js +1 -1
  402. package/dist/utils/react/Slots.js +1 -1
  403. package/dist/utils/react/chain.js +1 -1
  404. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  405. package/dist/utils/react/index.js +1 -1
  406. package/dist/utils/react/interactions.js +1 -1
  407. package/dist/utils/react/isTextOnly.js +1 -1
  408. package/dist/utils/react/mapProps.js +1 -1
  409. package/dist/utils/react/mergeProps.js +1 -1
  410. package/dist/utils/react/nullableValue.js +1 -1
  411. package/dist/utils/react/resolveIcon.js +1 -1
  412. package/dist/utils/react/sharedStore.js +1 -1
  413. package/dist/utils/react/useCombinedRefs.js +1 -1
  414. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  415. package/dist/utils/react/useEventBus.js +1 -1
  416. package/dist/utils/react/useId.js +1 -1
  417. package/dist/utils/react/useIsDarwin.js +1 -1
  418. package/dist/utils/react/useKeySymbols.js +1 -1
  419. package/dist/utils/react/useLayoutEffect.js +1 -1
  420. package/dist/utils/react/useLocalStorage.js +1 -1
  421. package/dist/utils/react/useMergeStyles.js +1 -1
  422. package/dist/utils/react/useQaProps.js +1 -1
  423. package/dist/utils/react/useViewportSize.js +1 -1
  424. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  425. package/dist/utils/tree.js +1 -1
  426. package/dist/utils/warnings.js +1 -1
  427. package/dist/version.js +2 -2
  428. package/package.json +3 -3
package/dist/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # @cube-dev/ui-kit
2
2
 
3
+ ## 0.121.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#1067](https://github.com/cube-js/cube-ui-kit/pull/1067) [`8af42c73`](https://github.com/cube-js/cube-ui-kit/commit/8af42c732511957f37bf89e725c0ed6c93c72a3b) Thanks [@tenphi](https://github.com/tenphi)! - **Button.Split:** New compound component for split-button patterns. Supports two modes: **custom** (arbitrary `<Button>` children with joined radius) and **strict** (declarative `actions` array with built-in dropdown menu, controlled/uncontrolled selection). `type`, `theme`, `size`, and `isDisabled` are inherited by child buttons via context.
8
+
9
+ - [#1067](https://github.com/cube-js/cube-ui-kit/pull/1067) [`8af42c73`](https://github.com/cube-js/cube-ui-kit/commit/8af42c732511957f37bf89e725c0ed6c93c72a3b) Thanks [@tenphi](https://github.com/tenphi)! - **Tabs:** Added support for `icon`, `rightIcon`, `prefix`, `suffix`, `tooltip`, `isLoading`, and `loadingSlot` props on `Tabs.Tab`, inherited from the `Item` component. Tab icons are also shown in the TabPicker dropdown.
10
+
11
+ ### Patch Changes
12
+
13
+ - [#1067](https://github.com/cube-js/cube-ui-kit/pull/1067) [`8af42c73`](https://github.com/cube-js/cube-ui-kit/commit/8af42c732511957f37bf89e725c0ed6c93c72a3b) Thanks [@tenphi](https://github.com/tenphi)! - **Button:** The dynamic `icon` callback now receives `pressed` in its mods argument. Use it to change the icon when the button is pressed (e.g., arrow up when menu is open, arrow down when closed).
14
+
15
+ - [#1067](https://github.com/cube-js/cube-ui-kit/pull/1067) [`8af42c73`](https://github.com/cube-js/cube-ui-kit/commit/8af42c732511957f37bf89e725c0ed6c93c72a3b) Thanks [@tenphi](https://github.com/tenphi)! - **Disclosure:** Removed default white background (`fill`) from the disclosure root. The component is now transparent by default; use `styles` or `contentStyles` to add a background when needed.
16
+
3
17
  ## 0.120.1
4
18
 
5
19
  ### Patch Changes
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.120.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.121.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.120.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.121.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.120.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.121.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.120.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.121.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.120.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.121.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.120.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.121.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.120.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.121.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.120.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.121.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.120.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.121.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.120.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.121.0 | Cube Dev Team */
2
2
  import { CONTAINER_STYLES, extractStyles, filterBaseProps, tasty } from "@tenphi/tasty";
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.120.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.121.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.120.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.121.0 | Cube Dev Team */
2
2
  import { TOKENS } from "../tokens/index.js";
3
3
  import { useGlobalStyles, useRawCSS } from "@tenphi/tasty";
4
4
  import { useMemo } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.120.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.121.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.120.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.121.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.120.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.121.0 | Cube Dev Team */
2
2
  import { EventBusProvider } from "../utils/react/useEventBus.js";
3
3
  import { PortalProvider } from "./portal/PortalProvider.js";
4
4
  import { VERSION } from "../version.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.120.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.121.0 | Cube Dev Team */
2
2
  import { useAction } from "../use-action.js";
3
3
  import { CONTAINER_STYLES, TEXT_STYLES, extractStyles, tasty } from "@tenphi/tasty";
4
4
  import { forwardRef } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.120.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.121.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 { Button } from "../Button/Button.js";
@@ -10,6 +10,7 @@ import { OverlayProps } from "react-aria";
10
10
  //#region src/components/actions/Button/Button.d.ts
11
11
  /** Known modifiers for Button component */
12
12
  type ButtonMods = Mods<{
13
+ pressed?: boolean;
13
14
  loading?: boolean;
14
15
  selected?: boolean;
15
16
  'has-icons'?: boolean;
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.120.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.121.0 | Cube Dev Team */
2
2
  import { mergeProps } from "../../../utils/react/mergeProps.js";
3
3
  import { resolveIcon } from "../../../utils/react/resolveIcon.js";
4
4
  import { DisplayTransition } from "../../helpers/DisplayTransition/DisplayTransition.js";
@@ -9,6 +9,7 @@ import { useWarn } from "../../../_internal/hooks/use-warn.js";
9
9
  import { useIsFirstRender } from "../../../_internal/hooks/use-is-first-render.js";
10
10
  import { useAction } from "../use-action.js";
11
11
  import { IconSwitch } from "../../helpers/IconSwitch/IconSwitch.js";
12
+ import { useButtonSplitContext } from "../ButtonSplit/context.js";
12
13
  import { CONTAINER_STYLES, TEXT_STYLES, extractStyles, tasty } from "@tenphi/tasty";
13
14
  import { Children, forwardRef, isValidElement, useMemo, useState } from "react";
14
15
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -71,7 +72,18 @@ const DEFAULT_BUTTON_STYLES = {
71
72
  whiteSpace: "nowrap",
72
73
  radius: {
73
74
  "": true,
74
- "type=link & !focused": 0
75
+ "type=link & !focused": 0,
76
+ "@parent(button-split, >) & !:last-child": "1r left",
77
+ "@parent(button-split, >) & !:first-child": "1r right",
78
+ "@parent(button-split, >) & !:first-child & !:last-child": 0
79
+ },
80
+ margin: {
81
+ "": 0,
82
+ "@parent(button-split, >) & !:first-child & (type=secondary | type=outline | type=primary)": "-1bw left"
83
+ },
84
+ zIndex: {
85
+ "@parent(button-split, >) & :hover": 1,
86
+ "@parent(button-split, >) & :focus-visible": 2
75
87
  },
76
88
  transition: "theme, grid-template, padding",
77
89
  verticalAlign: "bottom",
@@ -189,16 +201,29 @@ const ButtonElement = tasty({
189
201
  }
190
202
  });
191
203
  const Button = forwardRef(function Button(allProps, ref) {
192
- let { type, size: sizeProp, label, children, theme = "default", icon: iconProp, rightIcon: rightIconProp, mods, download, tooltip = true, defaultTooltipPlacement = "top", ...props } = allProps;
193
- const size = sizeProp ?? (type === "link" ? "inline" : "medium");
194
- const isDisabled = props.isDisabled ?? props.isLoading;
204
+ const splitContext = useButtonSplitContext();
205
+ let { type, size: sizeProp, label, children, theme = splitContext?.theme ?? "default", icon: iconProp, rightIcon: rightIconProp, mods, download, tooltip = true, defaultTooltipPlacement = "top", ...props } = allProps;
206
+ type = type ?? splitContext?.type;
207
+ const size = sizeProp ?? splitContext?.size ?? (type === "link" ? "inline" : "medium");
208
+ const isDisabled = props.isDisabled ?? props.isLoading ?? splitContext?.isDisabled;
195
209
  const isLoading = props.isLoading;
196
210
  const isSelected = props.isSelected;
211
+ const { actionProps, isPressed } = useAction({
212
+ ...allProps,
213
+ isDisabled,
214
+ ...label ? { label } : {}
215
+ }, ref);
216
+ const styles = extractStyles(props, STYLE_PROPS);
217
+ const isDisabledElement = actionProps.isDisabled;
218
+ delete actionProps.isDisabled;
197
219
  const baseMods = useMemo(() => ({
220
+ pressed: isPressed && !isDisabled,
198
221
  loading: isLoading,
199
222
  selected: isSelected,
200
223
  ...mods
201
224
  }), [
225
+ isPressed,
226
+ isDisabled,
202
227
  isLoading,
203
228
  isSelected,
204
229
  mods
@@ -253,15 +278,6 @@ const Button = forwardRef(function Button(allProps, ref) {
253
278
  isIconShown,
254
279
  isRightIconShown
255
280
  ]);
256
- const { actionProps } = useAction({
257
- ...allProps,
258
- isDisabled,
259
- mods: modifiers,
260
- ...label ? { label } : {}
261
- }, ref);
262
- const styles = extractStyles(props, STYLE_PROPS);
263
- const isDisabledElement = actionProps.isDisabled;
264
- delete actionProps.isDisabled;
265
281
  const { labelProps: finalLabelProps, labelRef, renderWithTooltip } = useAutoTooltip({
266
282
  tooltip,
267
283
  children,
@@ -280,6 +296,10 @@ const Button = forwardRef(function Button(allProps, ref) {
280
296
  download,
281
297
  ...mergeProps(actionProps, tooltipTriggerProps || {}),
282
298
  ref: handleRef,
299
+ mods: {
300
+ ...actionProps.mods,
301
+ ...modifiers
302
+ },
283
303
  disabled: isDisabledElement,
284
304
  variant: `${theme}.${type ?? "outline"}`,
285
305
  "data-theme": theme,
@@ -1 +1 @@
1
- {"version":3,"file":"Button.js","names":[],"sources":["../../../../src/components/actions/Button/Button.tsx"],"sourcesContent":["import { FocusableRef } from '@react-types/shared';\nimport {\n CONTAINER_STYLES,\n extractStyles,\n Mods,\n Styles,\n tasty,\n TEXT_STYLES,\n} from '@tenphi/tasty';\nimport {\n Children,\n forwardRef,\n HTMLAttributes,\n isValidElement,\n ReactNode,\n RefObject,\n useMemo,\n useState,\n} from 'react';\nimport { OverlayProps } from 'react-aria';\n\nimport { useIsFirstRender } from '../../../_internal/hooks/use-is-first-render';\nimport { useWarn } from '../../../_internal/hooks/use-warn';\nimport {\n DANGER_CLEAR_STYLES,\n DANGER_LINK_STYLES,\n DANGER_NEUTRAL_STYLES,\n DANGER_OUTLINE_STYLES,\n DANGER_PRIMARY_STYLES,\n DANGER_SECONDARY_STYLES,\n DEFAULT_CLEAR_STYLES,\n DEFAULT_LINK_STYLES,\n DEFAULT_NEUTRAL_STYLES,\n DEFAULT_OUTLINE_STYLES,\n DEFAULT_PRIMARY_STYLES,\n DEFAULT_SECONDARY_STYLES,\n NOTE_CLEAR_STYLES,\n NOTE_LINK_STYLES,\n NOTE_NEUTRAL_STYLES,\n NOTE_OUTLINE_STYLES,\n NOTE_PRIMARY_STYLES,\n NOTE_SECONDARY_STYLES,\n SPECIAL_CLEAR_STYLES,\n SPECIAL_LINK_STYLES,\n SPECIAL_NEUTRAL_STYLES,\n SPECIAL_OUTLINE_STYLES,\n SPECIAL_PRIMARY_STYLES,\n SPECIAL_SECONDARY_STYLES,\n SUCCESS_CLEAR_STYLES,\n SUCCESS_LINK_STYLES,\n SUCCESS_NEUTRAL_STYLES,\n SUCCESS_OUTLINE_STYLES,\n SUCCESS_PRIMARY_STYLES,\n SUCCESS_SECONDARY_STYLES,\n WARNING_CLEAR_STYLES,\n WARNING_LINK_STYLES,\n WARNING_NEUTRAL_STYLES,\n WARNING_OUTLINE_STYLES,\n WARNING_PRIMARY_STYLES,\n WARNING_SECONDARY_STYLES,\n} from '../../../data/item-themes';\nimport { LoadingIcon } from '../../../icons';\nimport { DynamicIcon, mergeProps, resolveIcon } from '../../../utils/react';\nimport { useAutoTooltip } from '../../content/use-auto-tooltip';\nimport { DisplayTransition } from '../../helpers/DisplayTransition';\nimport { IconSwitch } from '../../helpers/IconSwitch/IconSwitch';\nimport { CubeTooltipProviderProps } from '../../overlays/Tooltip/TooltipProvider';\nimport { CubeActionProps } from '../Action/Action';\nimport { useAction } from '../use-action';\n\nconst BUTTON_SIZE_VALUES = [\n 'xsmall',\n 'small',\n 'medium',\n 'large',\n 'xlarge',\n 'inline',\n] as const;\n\n/** Known modifiers for Button component */\nexport type ButtonMods = Mods<{\n loading?: boolean;\n selected?: boolean;\n 'has-icons'?: boolean;\n 'has-icon'?: boolean;\n 'has-right-icon'?: boolean;\n 'single-icon'?: boolean;\n 'text-only'?: boolean;\n 'raw-children'?: boolean;\n}>;\n\nexport interface CubeButtonProps extends CubeActionProps {\n icon?: DynamicIcon<ButtonMods>;\n rightIcon?: DynamicIcon<ButtonMods>;\n isLoading?: boolean;\n isSelected?: boolean;\n type?:\n | 'primary'\n | 'secondary'\n | 'danger'\n | 'link'\n | 'clear'\n | 'outline'\n | 'neutral'\n | (string & {});\n size?:\n | 'xsmall'\n | 'small'\n | 'medium'\n | 'large'\n | 'xlarge'\n | 'inline'\n | number\n | (string & {});\n /**\n * Tooltip content and configuration:\n * - string: simple tooltip text\n * - true: auto tooltip on overflow (shows children as tooltip when truncated)\n * - object: advanced configuration with optional auto property\n */\n tooltip?:\n | string\n | boolean\n | (Omit<CubeTooltipProviderProps, 'children'> & { auto?: boolean });\n /**\n * @private\n * Default tooltip placement for the button.\n * @default \"top\"\n */\n defaultTooltipPlacement?: OverlayProps['placement'];\n}\n\nexport type ButtonVariant =\n | 'default.primary'\n | 'default.secondary'\n | 'default.outline'\n | 'default.neutral'\n | 'default.clear'\n | 'default.link'\n | 'danger.primary'\n | 'danger.secondary'\n | 'danger.outline'\n | 'danger.neutral'\n | 'danger.clear'\n | 'danger.link'\n | 'success.primary'\n | 'success.secondary'\n | 'success.outline'\n | 'success.neutral'\n | 'success.clear'\n | 'success.link'\n | 'warning.primary'\n | 'warning.secondary'\n | 'warning.outline'\n | 'warning.neutral'\n | 'warning.clear'\n | 'warning.link'\n | 'note.primary'\n | 'note.secondary'\n | 'note.outline'\n | 'note.neutral'\n | 'note.clear'\n | 'note.link'\n | 'special.primary'\n | 'special.secondary'\n | 'special.outline'\n | 'special.neutral'\n | 'special.clear'\n | 'special.link';\n\nconst STYLE_PROPS = [...CONTAINER_STYLES, ...TEXT_STYLES];\n\nconst DEFAULT_ICON_STYLES: Styles = {\n $: '>',\n position: 'relative',\n display: 'grid',\n placeItems: 'center',\n placeContent: 'center',\n placeSelf: 'stretch',\n // overflow: 'hidden',\n width: 'fixed ($size - 2bw)',\n height: 'fixed ($size - 2bw)',\n pointerEvents: 'none',\n transition: 'theme, width, height, translate',\n};\n\nexport const DEFAULT_BUTTON_STYLES: Styles = {\n recipe: 'reset button',\n display: 'inline-grid',\n flow: 'column dense',\n gap: 0,\n placeItems: {\n '': 'stretch',\n 'raw-children': 'center stretch',\n },\n placeContent: 'center',\n position: 'relative',\n preset: {\n '': 't3m',\n 'size=xsmall': 't4',\n 'size=xlarge': 't2m',\n 'type=link': 'strong',\n },\n outlineOffset: 1,\n padding: {\n '': 0,\n 'raw-children & !has-icons':\n '$block-padding $inline-padding $block-padding $inline-padding',\n 'type=link': '0',\n },\n width: {\n '': 'min $size',\n 'has-icon & has-right-icon': 'min ($size * 2 - 2bw)',\n 'single-icon': 'fixed $size',\n 'type=link': 'min 1ch',\n },\n height: {\n '': 'fixed $size',\n 'type=link': 'initial',\n },\n whiteSpace: 'nowrap',\n radius: {\n '': true,\n 'type=link & !focused': 0,\n },\n transition: 'theme, grid-template, padding',\n verticalAlign: 'bottom',\n\n $size: {\n '': '$size-md',\n 'size=xsmall': '$size-xs',\n 'size=small': '$size-sm',\n 'size=medium': '$size-md',\n 'size=large': '$size-lg',\n 'size=xlarge': '$size-xl',\n 'size=inline': '(1lh + 2bw)',\n },\n '$inline-padding': {\n '': 'max($min-inline-padding, (($size - 1lh - 2bw) / 2 + $inline-compensation))',\n },\n '$block-padding': {\n '': '.5x',\n 'size=xsmall | size=small': '.25x',\n },\n '$inline-compensation': '.5x',\n '$min-inline-padding': '(1x - 1bw)',\n '$left-padding': {\n '': '$inline-padding',\n 'is-icon-shown': '0px',\n },\n '$right-padding': {\n '': '$inline-padding',\n 'is-right-icon-shown': '0px',\n },\n\n // Icon sub-element (recommended format)\n Icon: {\n ...DEFAULT_ICON_STYLES,\n width: {\n '': 'fixed 0px',\n 'is-icon-shown': 'fixed ($size - 2bw)',\n },\n opacity: {\n '': 0,\n 'is-icon-shown': 1,\n },\n translate: {\n '': '($size * 1 / 4) 0',\n 'is-icon-shown': '0 0',\n },\n },\n\n // RightIcon sub-element (recommended format)\n RightIcon: {\n ...DEFAULT_ICON_STYLES,\n width: {\n '': 'fixed 0px',\n 'is-right-icon-shown': 'fixed ($size - 2bw)',\n },\n opacity: {\n '': 0,\n 'is-right-icon-shown': 1,\n },\n translate: {\n '': '($size * -1 / 4) 0',\n 'is-right-icon-shown': '0 0',\n },\n },\n\n // Label sub-element (recommended format)\n Label: {\n $: '>',\n display: 'block',\n placeSelf: 'center stretch',\n boxSizing: 'border-box',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n width: '0 100%',\n textAlign: 'center',\n transition: 'theme, padding',\n padding: {\n '': '$block-padding $right-padding $block-padding $left-padding',\n 'type=link': '0',\n },\n },\n} as const;\n\nconst ButtonElement = tasty({\n qa: 'Button',\n styles: DEFAULT_BUTTON_STYLES,\n variants: {\n // Default theme\n 'default.primary': DEFAULT_PRIMARY_STYLES,\n 'default.secondary': DEFAULT_SECONDARY_STYLES,\n 'default.outline': DEFAULT_OUTLINE_STYLES,\n 'default.neutral': DEFAULT_NEUTRAL_STYLES,\n 'default.clear': DEFAULT_CLEAR_STYLES,\n 'default.link': DEFAULT_LINK_STYLES,\n\n // Danger theme\n 'danger.primary': DANGER_PRIMARY_STYLES,\n 'danger.secondary': DANGER_SECONDARY_STYLES,\n 'danger.outline': DANGER_OUTLINE_STYLES,\n 'danger.neutral': DANGER_NEUTRAL_STYLES,\n 'danger.clear': DANGER_CLEAR_STYLES,\n 'danger.link': DANGER_LINK_STYLES,\n\n // Success theme\n 'success.primary': SUCCESS_PRIMARY_STYLES,\n 'success.secondary': SUCCESS_SECONDARY_STYLES,\n 'success.outline': SUCCESS_OUTLINE_STYLES,\n 'success.neutral': SUCCESS_NEUTRAL_STYLES,\n 'success.clear': SUCCESS_CLEAR_STYLES,\n 'success.link': SUCCESS_LINK_STYLES,\n\n // Warning theme\n 'warning.primary': WARNING_PRIMARY_STYLES,\n 'warning.secondary': WARNING_SECONDARY_STYLES,\n 'warning.outline': WARNING_OUTLINE_STYLES,\n 'warning.neutral': WARNING_NEUTRAL_STYLES,\n 'warning.clear': WARNING_CLEAR_STYLES,\n 'warning.link': WARNING_LINK_STYLES,\n\n // Note theme\n 'note.primary': NOTE_PRIMARY_STYLES,\n 'note.secondary': NOTE_SECONDARY_STYLES,\n 'note.outline': NOTE_OUTLINE_STYLES,\n 'note.neutral': NOTE_NEUTRAL_STYLES,\n 'note.clear': NOTE_CLEAR_STYLES,\n 'note.link': NOTE_LINK_STYLES,\n\n // Special theme\n 'special.primary': SPECIAL_PRIMARY_STYLES,\n 'special.secondary': SPECIAL_SECONDARY_STYLES,\n 'special.outline': SPECIAL_OUTLINE_STYLES,\n 'special.neutral': SPECIAL_NEUTRAL_STYLES,\n 'special.clear': SPECIAL_CLEAR_STYLES,\n 'special.link': SPECIAL_LINK_STYLES,\n },\n});\n\nexport const Button = forwardRef(function Button(\n allProps: CubeButtonProps,\n ref: FocusableRef<HTMLElement>,\n) {\n let {\n type,\n size: sizeProp,\n label,\n children,\n theme = 'default',\n icon: iconProp,\n rightIcon: rightIconProp,\n mods,\n download,\n tooltip = true,\n defaultTooltipPlacement = 'top',\n ...props\n } = allProps;\n\n const size = sizeProp ?? (type === 'link' ? 'inline' : 'medium');\n\n const isDisabled = props.isDisabled ?? props.isLoading;\n const isLoading = props.isLoading;\n const isSelected = props.isSelected;\n\n // Base mods for icon resolution (without icon-dependent mods)\n const baseMods = useMemo<ButtonMods>(\n () => ({\n loading: isLoading,\n selected: isSelected,\n ...mods,\n }),\n [isLoading, isSelected, mods],\n );\n\n // Resolve dynamic icon props\n const resolvedIcon = useMemo(\n () => resolveIcon(iconProp, baseMods),\n [iconProp, baseMods],\n );\n const resolvedRightIcon = useMemo(\n () => resolveIcon(rightIconProp, baseMods),\n [rightIconProp, baseMods],\n );\n\n const hasLeftSlot = resolvedIcon.hasSlot;\n const hasRightSlot = resolvedRightIcon.hasSlot;\n\n const icon: ReactNode = resolvedIcon.content;\n const rightIcon: ReactNode = resolvedRightIcon.content;\n\n // Generate stable keys for icon transitions based on icon type\n const iconKey = isLoading\n ? 'loading'\n : isValidElement(icon)\n ? (icon.type as any)?.displayName || (icon.type as any)?.name || 'icon'\n : icon\n ? 'icon'\n : 'empty';\n\n const rightIconKey = isValidElement(rightIcon)\n ? (rightIcon.type as any)?.displayName ||\n (rightIcon.type as any)?.name ||\n 'icon'\n : rightIcon\n ? 'icon'\n : 'empty';\n\n children = children || hasLeftSlot || hasRightSlot ? children : label;\n\n const specifiedLabel =\n label ?? props['aria-label'] ?? props['aria-labelledby'];\n\n // Warn about accessibility issues when button has no accessible label\n useWarn(!children && hasLeftSlot && !specifiedLabel, {\n key: ['button-icon-no-label', hasLeftSlot],\n args: [\n 'accessibility issue:',\n 'If you provide `icon` property for a Button and do not provide any children then you should specify the `aria-label` property to make sure the Button element stays accessible.',\n ],\n });\n\n useWarn(!children && !hasLeftSlot && !specifiedLabel, {\n key: ['button-no-content-no-label', hasLeftSlot],\n args: [\n 'accessibility issue:',\n 'If you provide no children for a Button then you should specify the `aria-label` property to make sure the Button element stays accessible.',\n ],\n });\n\n if (!children && !specifiedLabel) {\n label = 'Unnamed'; // fix to avoid warning in production\n }\n\n const hasLeftIcon = !!(hasLeftSlot || isLoading);\n const hasChildren = children != null;\n const singleIcon = !!(\n ((hasLeftIcon && !hasRightSlot) || (hasRightSlot && !hasLeftIcon)) &&\n !hasChildren\n );\n\n const hasIcons = hasLeftIcon || hasRightSlot;\n const rawChildren = !!(\n hasChildren &&\n typeof children !== 'string' &&\n !Children.toArray(children).some((child) => typeof child === 'string')\n );\n\n const [isIconShown, setIsIconShown] = useState(hasLeftIcon);\n const [isRightIconShown, setIsRightIconShown] = useState(hasRightSlot);\n const isFirstRender = useIsFirstRender();\n\n const modifiers = useMemo<ButtonMods>(\n () => ({\n ...baseMods,\n 'has-icons': hasIcons,\n 'has-icon': hasLeftIcon,\n 'is-icon-shown': isIconShown,\n 'has-right-icon': hasRightSlot,\n 'is-right-icon-shown': isRightIconShown,\n 'single-icon': singleIcon,\n 'text-only': !!(hasChildren && typeof children === 'string' && !hasIcons),\n 'raw-children': rawChildren,\n 'has-content': children != null,\n }),\n [\n baseMods,\n children,\n hasLeftIcon,\n hasRightSlot,\n singleIcon,\n hasIcons,\n hasChildren,\n rawChildren,\n isIconShown,\n isRightIconShown,\n ],\n );\n\n const { actionProps } = useAction(\n { ...allProps, isDisabled, mods: modifiers, ...(label ? { label } : {}) },\n ref,\n );\n\n const styles = extractStyles(props, STYLE_PROPS);\n const isDisabledElement = actionProps.isDisabled;\n\n delete actionProps.isDisabled;\n\n const {\n labelProps: finalLabelProps,\n labelRef,\n renderWithTooltip,\n } = useAutoTooltip({\n tooltip,\n children,\n labelProps: undefined,\n });\n\n // Render function that creates the button element\n const renderButtonElement = (\n tooltipTriggerProps?: HTMLAttributes<HTMLElement>,\n tooltipRef?: RefObject<HTMLElement>,\n ): ReactNode => {\n // Use callback ref to merge multiple refs without calling hooks\n const handleRef = (element: HTMLElement | null) => {\n // Set the component's forwarded ref from useAction\n const domRef = actionProps.ref as any;\n if (typeof domRef === 'function') {\n domRef(element);\n } else if (domRef) {\n domRef.current = element;\n }\n // Set the tooltip ref if provided\n if (tooltipRef) {\n (tooltipRef as any).current = element;\n }\n };\n\n // Determine if size is custom (number or unrecognized string)\n const isCustomSize =\n typeof size === 'number' ||\n (size != null &&\n !(BUTTON_SIZE_VALUES as readonly string[]).includes(size));\n const sizeTokenValue =\n typeof size === 'number' ? `${size}px` : isCustomSize ? size : undefined;\n\n return (\n <ButtonElement\n download={download}\n {...mergeProps(actionProps, tooltipTriggerProps || {})}\n ref={handleRef}\n disabled={isDisabledElement}\n variant={`${theme}.${type ?? 'outline'}` as ButtonVariant}\n data-theme={theme}\n data-type={type ?? 'outline'}\n data-size={size}\n styles={styles}\n tokens={sizeTokenValue ? { $size: sizeTokenValue } : undefined}\n >\n <DisplayTransition\n isShown={hasLeftIcon}\n animateOnMount={!isFirstRender}\n onToggle={setIsIconShown}\n >\n {({ ref }) => (\n <div ref={ref} data-element=\"Icon\" aria-hidden=\"true\">\n <IconSwitch noWrapper contentKey={iconKey}>\n {isLoading ? <LoadingIcon /> : icon}\n </IconSwitch>\n </div>\n )}\n </DisplayTransition>\n {hasChildren &&\n (rawChildren ? (\n children\n ) : (\n <div data-element=\"Label\" {...finalLabelProps} ref={labelRef}>\n {children}\n </div>\n ))}\n <DisplayTransition\n isShown={hasRightSlot}\n animateOnMount={!isFirstRender}\n onToggle={setIsRightIconShown}\n >\n {({ ref }) => (\n <div ref={ref} data-element=\"RightIcon\" aria-hidden=\"true\">\n <IconSwitch noWrapper contentKey={rightIconKey}>\n {rightIcon}\n </IconSwitch>\n </div>\n )}\n </DisplayTransition>\n </ButtonElement>\n );\n };\n\n return renderWithTooltip(renderButtonElement, defaultTooltipPlacement);\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"Button.js","names":[],"sources":["../../../../src/components/actions/Button/Button.tsx"],"sourcesContent":["import { FocusableRef } from '@react-types/shared';\nimport {\n CONTAINER_STYLES,\n extractStyles,\n Mods,\n Styles,\n tasty,\n TEXT_STYLES,\n} from '@tenphi/tasty';\nimport {\n Children,\n forwardRef,\n HTMLAttributes,\n isValidElement,\n ReactNode,\n RefObject,\n useMemo,\n useState,\n} from 'react';\nimport { OverlayProps } from 'react-aria';\n\nimport { useIsFirstRender } from '../../../_internal/hooks/use-is-first-render';\nimport { useWarn } from '../../../_internal/hooks/use-warn';\nimport {\n DANGER_CLEAR_STYLES,\n DANGER_LINK_STYLES,\n DANGER_NEUTRAL_STYLES,\n DANGER_OUTLINE_STYLES,\n DANGER_PRIMARY_STYLES,\n DANGER_SECONDARY_STYLES,\n DEFAULT_CLEAR_STYLES,\n DEFAULT_LINK_STYLES,\n DEFAULT_NEUTRAL_STYLES,\n DEFAULT_OUTLINE_STYLES,\n DEFAULT_PRIMARY_STYLES,\n DEFAULT_SECONDARY_STYLES,\n NOTE_CLEAR_STYLES,\n NOTE_LINK_STYLES,\n NOTE_NEUTRAL_STYLES,\n NOTE_OUTLINE_STYLES,\n NOTE_PRIMARY_STYLES,\n NOTE_SECONDARY_STYLES,\n SPECIAL_CLEAR_STYLES,\n SPECIAL_LINK_STYLES,\n SPECIAL_NEUTRAL_STYLES,\n SPECIAL_OUTLINE_STYLES,\n SPECIAL_PRIMARY_STYLES,\n SPECIAL_SECONDARY_STYLES,\n SUCCESS_CLEAR_STYLES,\n SUCCESS_LINK_STYLES,\n SUCCESS_NEUTRAL_STYLES,\n SUCCESS_OUTLINE_STYLES,\n SUCCESS_PRIMARY_STYLES,\n SUCCESS_SECONDARY_STYLES,\n WARNING_CLEAR_STYLES,\n WARNING_LINK_STYLES,\n WARNING_NEUTRAL_STYLES,\n WARNING_OUTLINE_STYLES,\n WARNING_PRIMARY_STYLES,\n WARNING_SECONDARY_STYLES,\n} from '../../../data/item-themes';\nimport { LoadingIcon } from '../../../icons';\nimport { DynamicIcon, mergeProps, resolveIcon } from '../../../utils/react';\nimport { useAutoTooltip } from '../../content/use-auto-tooltip';\nimport { DisplayTransition } from '../../helpers/DisplayTransition';\nimport { IconSwitch } from '../../helpers/IconSwitch/IconSwitch';\nimport { CubeTooltipProviderProps } from '../../overlays/Tooltip/TooltipProvider';\nimport { CubeActionProps } from '../Action/Action';\nimport { useButtonSplitContext } from '../ButtonSplit/context';\nimport { useAction } from '../use-action';\n\nconst BUTTON_SIZE_VALUES = [\n 'xsmall',\n 'small',\n 'medium',\n 'large',\n 'xlarge',\n 'inline',\n] as const;\n\n/** Known modifiers for Button component */\nexport type ButtonMods = Mods<{\n pressed?: boolean;\n loading?: boolean;\n selected?: boolean;\n 'has-icons'?: boolean;\n 'has-icon'?: boolean;\n 'has-right-icon'?: boolean;\n 'single-icon'?: boolean;\n 'text-only'?: boolean;\n 'raw-children'?: boolean;\n}>;\n\nexport interface CubeButtonProps extends CubeActionProps {\n icon?: DynamicIcon<ButtonMods>;\n rightIcon?: DynamicIcon<ButtonMods>;\n isLoading?: boolean;\n isSelected?: boolean;\n type?:\n | 'primary'\n | 'secondary'\n | 'danger'\n | 'link'\n | 'clear'\n | 'outline'\n | 'neutral'\n | (string & {});\n size?:\n | 'xsmall'\n | 'small'\n | 'medium'\n | 'large'\n | 'xlarge'\n | 'inline'\n | number\n | (string & {});\n /**\n * Tooltip content and configuration:\n * - string: simple tooltip text\n * - true: auto tooltip on overflow (shows children as tooltip when truncated)\n * - object: advanced configuration with optional auto property\n */\n tooltip?:\n | string\n | boolean\n | (Omit<CubeTooltipProviderProps, 'children'> & { auto?: boolean });\n /**\n * @private\n * Default tooltip placement for the button.\n * @default \"top\"\n */\n defaultTooltipPlacement?: OverlayProps['placement'];\n}\n\nexport type ButtonVariant =\n | 'default.primary'\n | 'default.secondary'\n | 'default.outline'\n | 'default.neutral'\n | 'default.clear'\n | 'default.link'\n | 'danger.primary'\n | 'danger.secondary'\n | 'danger.outline'\n | 'danger.neutral'\n | 'danger.clear'\n | 'danger.link'\n | 'success.primary'\n | 'success.secondary'\n | 'success.outline'\n | 'success.neutral'\n | 'success.clear'\n | 'success.link'\n | 'warning.primary'\n | 'warning.secondary'\n | 'warning.outline'\n | 'warning.neutral'\n | 'warning.clear'\n | 'warning.link'\n | 'note.primary'\n | 'note.secondary'\n | 'note.outline'\n | 'note.neutral'\n | 'note.clear'\n | 'note.link'\n | 'special.primary'\n | 'special.secondary'\n | 'special.outline'\n | 'special.neutral'\n | 'special.clear'\n | 'special.link';\n\nconst STYLE_PROPS = [...CONTAINER_STYLES, ...TEXT_STYLES];\n\nconst DEFAULT_ICON_STYLES: Styles = {\n $: '>',\n position: 'relative',\n display: 'grid',\n placeItems: 'center',\n placeContent: 'center',\n placeSelf: 'stretch',\n // overflow: 'hidden',\n width: 'fixed ($size - 2bw)',\n height: 'fixed ($size - 2bw)',\n pointerEvents: 'none',\n transition: 'theme, width, height, translate',\n};\n\nexport const DEFAULT_BUTTON_STYLES: Styles = {\n recipe: 'reset button',\n display: 'inline-grid',\n flow: 'column dense',\n gap: 0,\n placeItems: {\n '': 'stretch',\n 'raw-children': 'center stretch',\n },\n placeContent: 'center',\n position: 'relative',\n preset: {\n '': 't3m',\n 'size=xsmall': 't4',\n 'size=xlarge': 't2m',\n 'type=link': 'strong',\n },\n outlineOffset: 1,\n padding: {\n '': 0,\n 'raw-children & !has-icons':\n '$block-padding $inline-padding $block-padding $inline-padding',\n 'type=link': '0',\n },\n width: {\n '': 'min $size',\n 'has-icon & has-right-icon': 'min ($size * 2 - 2bw)',\n 'single-icon': 'fixed $size',\n 'type=link': 'min 1ch',\n },\n height: {\n '': 'fixed $size',\n 'type=link': 'initial',\n },\n whiteSpace: 'nowrap',\n radius: {\n '': true,\n 'type=link & !focused': 0,\n '@parent(button-split, >) & !:last-child': '1r left',\n '@parent(button-split, >) & !:first-child': '1r right',\n '@parent(button-split, >) & !:first-child & !:last-child': 0,\n },\n margin: {\n '': 0,\n '@parent(button-split, >) & !:first-child & (type=secondary | type=outline | type=primary)':\n '-1bw left',\n },\n zIndex: {\n '@parent(button-split, >) & :hover': 1,\n '@parent(button-split, >) & :focus-visible': 2,\n },\n transition: 'theme, grid-template, padding',\n verticalAlign: 'bottom',\n\n $size: {\n '': '$size-md',\n 'size=xsmall': '$size-xs',\n 'size=small': '$size-sm',\n 'size=medium': '$size-md',\n 'size=large': '$size-lg',\n 'size=xlarge': '$size-xl',\n 'size=inline': '(1lh + 2bw)',\n },\n '$inline-padding': {\n '': 'max($min-inline-padding, (($size - 1lh - 2bw) / 2 + $inline-compensation))',\n },\n '$block-padding': {\n '': '.5x',\n 'size=xsmall | size=small': '.25x',\n },\n '$inline-compensation': '.5x',\n '$min-inline-padding': '(1x - 1bw)',\n '$left-padding': {\n '': '$inline-padding',\n 'is-icon-shown': '0px',\n },\n '$right-padding': {\n '': '$inline-padding',\n 'is-right-icon-shown': '0px',\n },\n\n // Icon sub-element (recommended format)\n Icon: {\n ...DEFAULT_ICON_STYLES,\n width: {\n '': 'fixed 0px',\n 'is-icon-shown': 'fixed ($size - 2bw)',\n },\n opacity: {\n '': 0,\n 'is-icon-shown': 1,\n },\n translate: {\n '': '($size * 1 / 4) 0',\n 'is-icon-shown': '0 0',\n },\n },\n\n // RightIcon sub-element (recommended format)\n RightIcon: {\n ...DEFAULT_ICON_STYLES,\n width: {\n '': 'fixed 0px',\n 'is-right-icon-shown': 'fixed ($size - 2bw)',\n },\n opacity: {\n '': 0,\n 'is-right-icon-shown': 1,\n },\n translate: {\n '': '($size * -1 / 4) 0',\n 'is-right-icon-shown': '0 0',\n },\n },\n\n // Label sub-element (recommended format)\n Label: {\n $: '>',\n display: 'block',\n placeSelf: 'center stretch',\n boxSizing: 'border-box',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n width: '0 100%',\n textAlign: 'center',\n transition: 'theme, padding',\n padding: {\n '': '$block-padding $right-padding $block-padding $left-padding',\n 'type=link': '0',\n },\n },\n} as const;\n\nconst ButtonElement = tasty({\n qa: 'Button',\n styles: DEFAULT_BUTTON_STYLES,\n variants: {\n // Default theme\n 'default.primary': DEFAULT_PRIMARY_STYLES,\n 'default.secondary': DEFAULT_SECONDARY_STYLES,\n 'default.outline': DEFAULT_OUTLINE_STYLES,\n 'default.neutral': DEFAULT_NEUTRAL_STYLES,\n 'default.clear': DEFAULT_CLEAR_STYLES,\n 'default.link': DEFAULT_LINK_STYLES,\n\n // Danger theme\n 'danger.primary': DANGER_PRIMARY_STYLES,\n 'danger.secondary': DANGER_SECONDARY_STYLES,\n 'danger.outline': DANGER_OUTLINE_STYLES,\n 'danger.neutral': DANGER_NEUTRAL_STYLES,\n 'danger.clear': DANGER_CLEAR_STYLES,\n 'danger.link': DANGER_LINK_STYLES,\n\n // Success theme\n 'success.primary': SUCCESS_PRIMARY_STYLES,\n 'success.secondary': SUCCESS_SECONDARY_STYLES,\n 'success.outline': SUCCESS_OUTLINE_STYLES,\n 'success.neutral': SUCCESS_NEUTRAL_STYLES,\n 'success.clear': SUCCESS_CLEAR_STYLES,\n 'success.link': SUCCESS_LINK_STYLES,\n\n // Warning theme\n 'warning.primary': WARNING_PRIMARY_STYLES,\n 'warning.secondary': WARNING_SECONDARY_STYLES,\n 'warning.outline': WARNING_OUTLINE_STYLES,\n 'warning.neutral': WARNING_NEUTRAL_STYLES,\n 'warning.clear': WARNING_CLEAR_STYLES,\n 'warning.link': WARNING_LINK_STYLES,\n\n // Note theme\n 'note.primary': NOTE_PRIMARY_STYLES,\n 'note.secondary': NOTE_SECONDARY_STYLES,\n 'note.outline': NOTE_OUTLINE_STYLES,\n 'note.neutral': NOTE_NEUTRAL_STYLES,\n 'note.clear': NOTE_CLEAR_STYLES,\n 'note.link': NOTE_LINK_STYLES,\n\n // Special theme\n 'special.primary': SPECIAL_PRIMARY_STYLES,\n 'special.secondary': SPECIAL_SECONDARY_STYLES,\n 'special.outline': SPECIAL_OUTLINE_STYLES,\n 'special.neutral': SPECIAL_NEUTRAL_STYLES,\n 'special.clear': SPECIAL_CLEAR_STYLES,\n 'special.link': SPECIAL_LINK_STYLES,\n },\n});\n\nexport const Button = forwardRef(function Button(\n allProps: CubeButtonProps,\n ref: FocusableRef<HTMLElement>,\n) {\n const splitContext = useButtonSplitContext();\n\n let {\n type,\n size: sizeProp,\n label,\n children,\n theme = splitContext?.theme ?? 'default',\n icon: iconProp,\n rightIcon: rightIconProp,\n mods,\n download,\n tooltip = true,\n defaultTooltipPlacement = 'top',\n ...props\n } = allProps;\n\n type = type ?? splitContext?.type;\n const size =\n sizeProp ?? splitContext?.size ?? (type === 'link' ? 'inline' : 'medium');\n\n const isDisabled =\n props.isDisabled ?? props.isLoading ?? splitContext?.isDisabled;\n const isLoading = props.isLoading;\n const isSelected = props.isSelected;\n\n const { actionProps, isPressed } = useAction(\n { ...allProps, isDisabled, ...(label ? { label } : {}) },\n ref,\n );\n\n const styles = extractStyles(props, STYLE_PROPS);\n const isDisabledElement = actionProps.isDisabled;\n\n delete actionProps.isDisabled;\n\n // Base mods for icon resolution (without icon-dependent mods)\n const baseMods = useMemo<ButtonMods>(\n () => ({\n pressed: isPressed && !isDisabled,\n loading: isLoading,\n selected: isSelected,\n ...mods,\n }),\n [isPressed, isDisabled, isLoading, isSelected, mods],\n );\n\n // Resolve dynamic icon props\n const resolvedIcon = useMemo(\n () => resolveIcon(iconProp, baseMods),\n [iconProp, baseMods],\n );\n const resolvedRightIcon = useMemo(\n () => resolveIcon(rightIconProp, baseMods),\n [rightIconProp, baseMods],\n );\n\n const hasLeftSlot = resolvedIcon.hasSlot;\n const hasRightSlot = resolvedRightIcon.hasSlot;\n\n const icon: ReactNode = resolvedIcon.content;\n const rightIcon: ReactNode = resolvedRightIcon.content;\n\n // Generate stable keys for icon transitions based on icon type\n const iconKey = isLoading\n ? 'loading'\n : isValidElement(icon)\n ? (icon.type as any)?.displayName || (icon.type as any)?.name || 'icon'\n : icon\n ? 'icon'\n : 'empty';\n\n const rightIconKey = isValidElement(rightIcon)\n ? (rightIcon.type as any)?.displayName ||\n (rightIcon.type as any)?.name ||\n 'icon'\n : rightIcon\n ? 'icon'\n : 'empty';\n\n children = children || hasLeftSlot || hasRightSlot ? children : label;\n\n const specifiedLabel =\n label ?? props['aria-label'] ?? props['aria-labelledby'];\n\n // Warn about accessibility issues when button has no accessible label\n useWarn(!children && hasLeftSlot && !specifiedLabel, {\n key: ['button-icon-no-label', hasLeftSlot],\n args: [\n 'accessibility issue:',\n 'If you provide `icon` property for a Button and do not provide any children then you should specify the `aria-label` property to make sure the Button element stays accessible.',\n ],\n });\n\n useWarn(!children && !hasLeftSlot && !specifiedLabel, {\n key: ['button-no-content-no-label', hasLeftSlot],\n args: [\n 'accessibility issue:',\n 'If you provide no children for a Button then you should specify the `aria-label` property to make sure the Button element stays accessible.',\n ],\n });\n\n if (!children && !specifiedLabel) {\n label = 'Unnamed'; // fix to avoid warning in production\n }\n\n const hasLeftIcon = !!(hasLeftSlot || isLoading);\n const hasChildren = children != null;\n const singleIcon = !!(\n ((hasLeftIcon && !hasRightSlot) || (hasRightSlot && !hasLeftIcon)) &&\n !hasChildren\n );\n\n const hasIcons = hasLeftIcon || hasRightSlot;\n const rawChildren = !!(\n hasChildren &&\n typeof children !== 'string' &&\n !Children.toArray(children).some((child) => typeof child === 'string')\n );\n\n const [isIconShown, setIsIconShown] = useState(hasLeftIcon);\n const [isRightIconShown, setIsRightIconShown] = useState(hasRightSlot);\n const isFirstRender = useIsFirstRender();\n\n const modifiers = useMemo<ButtonMods>(\n () => ({\n ...baseMods,\n 'has-icons': hasIcons,\n 'has-icon': hasLeftIcon,\n 'is-icon-shown': isIconShown,\n 'has-right-icon': hasRightSlot,\n 'is-right-icon-shown': isRightIconShown,\n 'single-icon': singleIcon,\n 'text-only': !!(hasChildren && typeof children === 'string' && !hasIcons),\n 'raw-children': rawChildren,\n 'has-content': children != null,\n }),\n [\n baseMods,\n children,\n hasLeftIcon,\n hasRightSlot,\n singleIcon,\n hasIcons,\n hasChildren,\n rawChildren,\n isIconShown,\n isRightIconShown,\n ],\n );\n\n const {\n labelProps: finalLabelProps,\n labelRef,\n renderWithTooltip,\n } = useAutoTooltip({\n tooltip,\n children,\n labelProps: undefined,\n });\n\n // Render function that creates the button element\n const renderButtonElement = (\n tooltipTriggerProps?: HTMLAttributes<HTMLElement>,\n tooltipRef?: RefObject<HTMLElement>,\n ): ReactNode => {\n // Use callback ref to merge multiple refs without calling hooks\n const handleRef = (element: HTMLElement | null) => {\n // Set the component's forwarded ref from useAction\n const domRef = actionProps.ref as any;\n if (typeof domRef === 'function') {\n domRef(element);\n } else if (domRef) {\n domRef.current = element;\n }\n // Set the tooltip ref if provided\n if (tooltipRef) {\n (tooltipRef as any).current = element;\n }\n };\n\n // Determine if size is custom (number or unrecognized string)\n const isCustomSize =\n typeof size === 'number' ||\n (size != null &&\n !(BUTTON_SIZE_VALUES as readonly string[]).includes(size));\n const sizeTokenValue =\n typeof size === 'number' ? `${size}px` : isCustomSize ? size : undefined;\n\n return (\n <ButtonElement\n download={download}\n {...mergeProps(actionProps, tooltipTriggerProps || {})}\n ref={handleRef}\n mods={{ ...actionProps.mods, ...modifiers }}\n disabled={isDisabledElement}\n variant={`${theme}.${type ?? 'outline'}` as ButtonVariant}\n data-theme={theme}\n data-type={type ?? 'outline'}\n data-size={size}\n styles={styles}\n tokens={sizeTokenValue ? { $size: sizeTokenValue } : undefined}\n >\n <DisplayTransition\n isShown={hasLeftIcon}\n animateOnMount={!isFirstRender}\n onToggle={setIsIconShown}\n >\n {({ ref }) => (\n <div ref={ref} data-element=\"Icon\" aria-hidden=\"true\">\n <IconSwitch noWrapper contentKey={iconKey}>\n {isLoading ? <LoadingIcon /> : icon}\n </IconSwitch>\n </div>\n )}\n </DisplayTransition>\n {hasChildren &&\n (rawChildren ? (\n children\n ) : (\n <div data-element=\"Label\" {...finalLabelProps} ref={labelRef}>\n {children}\n </div>\n ))}\n <DisplayTransition\n isShown={hasRightSlot}\n animateOnMount={!isFirstRender}\n onToggle={setIsRightIconShown}\n >\n {({ ref }) => (\n <div ref={ref} data-element=\"RightIcon\" aria-hidden=\"true\">\n <IconSwitch noWrapper contentKey={rightIconKey}>\n {rightIcon}\n </IconSwitch>\n </div>\n )}\n </DisplayTransition>\n </ButtonElement>\n );\n };\n\n return renderWithTooltip(renderButtonElement, defaultTooltipPlacement);\n});\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.120.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.121.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";
@@ -0,0 +1,47 @@
1
+
2
+ import { CubeButtonProps } from "../Button/Button.js";
3
+ import { CubeMenuProps } from "../Menu/Menu.js";
4
+ import { CubeCollectionItemProps } from "../../CollectionItem.js";
5
+ import { BaseProps, ContainerStyleProps, Styles } from "@tenphi/tasty";
6
+ import * as react from "react";
7
+ import { ReactNode } from "react";
8
+
9
+ //#region src/components/actions/ButtonSplit/ButtonSplit.d.ts
10
+ interface ButtonSplitAction extends Omit<CubeCollectionItemProps<object>, 'children' | 'onAction' | 'wrapper'> {
11
+ key: string;
12
+ label: ReactNode;
13
+ }
14
+ interface CubeButtonSplitProps extends BaseProps, ContainerStyleProps {
15
+ /** Actions for strict mode. When provided, renders action + trigger buttons automatically. */
16
+ actions?: ButtonSplitAction[];
17
+ /** Currently selected action key (controlled). */
18
+ actionKey?: string;
19
+ /** Initially selected action key (uncontrolled). */
20
+ defaultActionKey?: string;
21
+ /** Called when the action button is pressed. Receives the current action key. */
22
+ onAction?: (key: string) => void;
23
+ /** Called when the selected action changes via the trigger menu. */
24
+ onActionChange?: (key: string) => void;
25
+ /** Button type applied to both action and trigger buttons in strict mode. */
26
+ type?: CubeButtonProps['type'];
27
+ /** Button theme applied to both action and trigger buttons in strict mode. */
28
+ theme?: CubeButtonProps['theme'];
29
+ /** Button size applied to both action and trigger buttons in strict mode. */
30
+ size?: CubeButtonProps['size'];
31
+ /** Disables both buttons in strict mode. */
32
+ isDisabled?: boolean;
33
+ /** Additional props for the action button in strict mode. */
34
+ actionProps?: Partial<CubeButtonProps>;
35
+ /** Additional props for the trigger button in strict mode. */
36
+ triggerProps?: Partial<CubeButtonProps>;
37
+ /** Additional props for the dropdown menu in strict mode. */
38
+ menuProps?: Partial<CubeMenuProps<object>>;
39
+ /** Custom styles for the wrapper element. */
40
+ styles?: Styles;
41
+ /** Custom mode: render arbitrary Button children. */
42
+ children?: ReactNode;
43
+ }
44
+ declare const ButtonSplit: react.ForwardRefExoticComponent<CubeButtonSplitProps & react.RefAttributes<HTMLDivElement>>;
45
+ //#endregion
46
+ export { ButtonSplit, ButtonSplitAction, CubeButtonSplitProps };
47
+ //# sourceMappingURL=ButtonSplit.d.ts.map
@@ -0,0 +1,105 @@
1
+ /** @license MIT | @cube-dev/ui-kit v0.121.0 | Cube Dev Team */
2
+ import { mergeProps } from "../../../utils/react/mergeProps.js";
3
+ import { DirectionIcon } from "../../../icons/DirectionIcon.js";
4
+ import { ButtonSplitContext } from "./context.js";
5
+ import { Button } from "../Button/Button.js";
6
+ import { __Menu } from "../Menu/Menu.js";
7
+ import { CONTAINER_STYLES, extractStyles, tasty } from "@tenphi/tasty";
8
+ import { forwardRef, useCallback, useMemo, useState } from "react";
9
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
10
+
11
+ //#region src/components/actions/ButtonSplit/ButtonSplit.tsx
12
+ const STYLE_PROPS = CONTAINER_STYLES;
13
+ const ButtonSplitElement = tasty({
14
+ tag: "div",
15
+ qa: "ButtonSplit",
16
+ styles: {
17
+ display: "inline-flex",
18
+ position: "relative",
19
+ verticalAlign: "bottom"
20
+ }
21
+ });
22
+ const ButtonSplit = forwardRef(function ButtonSplit(props, ref) {
23
+ const { actions, actionKey: controlledActionKey, defaultActionKey, onAction, onActionChange, type, theme, size, isDisabled, actionProps, triggerProps, menuProps, styles, children, ...rest } = props;
24
+ const isControlled = controlledActionKey !== void 0;
25
+ const [uncontrolledKey, setUncontrolledKey] = useState(() => defaultActionKey ?? actions?.[0]?.key);
26
+ const currentKey = isControlled ? controlledActionKey : uncontrolledKey;
27
+ const currentAction = useMemo(() => actions?.find((a) => a.key === currentKey) ?? actions?.[0], [actions, currentKey]);
28
+ const handleActionPress = useCallback(() => {
29
+ if (currentKey) onAction?.(currentKey);
30
+ }, [currentKey, onAction]);
31
+ const handleSelectionChange = useCallback((keys) => {
32
+ const newKey = keys[0];
33
+ if (newKey) {
34
+ if (!isControlled) setUncontrolledKey(newKey);
35
+ onActionChange?.(newKey);
36
+ }
37
+ }, [isControlled, onActionChange]);
38
+ const containerStyles = extractStyles(rest, STYLE_PROPS);
39
+ const mergedStyles = useMemo(() => ({
40
+ ...containerStyles,
41
+ ...styles
42
+ }), [containerStyles, styles]);
43
+ const contextValue = useMemo(() => ({
44
+ currentKey,
45
+ onAction,
46
+ onActionChange,
47
+ type,
48
+ theme,
49
+ size,
50
+ isDisabled
51
+ }), [
52
+ currentKey,
53
+ onAction,
54
+ onActionChange,
55
+ type,
56
+ theme,
57
+ size,
58
+ isDisabled
59
+ ]);
60
+ const isCustomMode = children != null;
61
+ return /* @__PURE__ */ jsx(ButtonSplitContext.Provider, {
62
+ value: contextValue,
63
+ children: /* @__PURE__ */ jsx(ButtonSplitElement, {
64
+ ref,
65
+ "data-button-split": true,
66
+ styles: mergedStyles,
67
+ qa: rest.qa,
68
+ children: isCustomMode ? children : actions ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Button, {
69
+ type,
70
+ theme,
71
+ size,
72
+ isDisabled,
73
+ icon: currentAction?.icon,
74
+ ...mergeProps(actionProps, { onPress: handleActionPress }),
75
+ children: currentAction?.label
76
+ }), /* @__PURE__ */ jsxs(__Menu.Trigger, {
77
+ placement: "bottom end",
78
+ children: [/* @__PURE__ */ jsx(Button, {
79
+ type,
80
+ theme,
81
+ size,
82
+ isDisabled,
83
+ "aria-label": "More options",
84
+ icon: ({ pressed }) => /* @__PURE__ */ jsx(DirectionIcon, { to: pressed ? "up" : "down" }),
85
+ ...triggerProps
86
+ }), /* @__PURE__ */ jsx(__Menu, {
87
+ selectionMode: "single",
88
+ selectedKeys: currentKey ? [currentKey] : [],
89
+ onSelectionChange: handleSelectionChange,
90
+ ...menuProps,
91
+ children: actions.map(({ key, label, textValue, ...itemProps }) => /* @__PURE__ */ jsx(__Menu.Item, {
92
+ textValue: textValue ?? (typeof label === "string" ? label : key),
93
+ ...itemProps,
94
+ children: label
95
+ }, key))
96
+ })]
97
+ })] }) : null
98
+ })
99
+ });
100
+ });
101
+ ButtonSplit.displayName = "ButtonSplit";
102
+
103
+ //#endregion
104
+ export { ButtonSplit };
105
+ //# sourceMappingURL=ButtonSplit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ButtonSplit.js","names":["Menu"],"sources":["../../../../src/components/actions/ButtonSplit/ButtonSplit.tsx"],"sourcesContent":["import { CONTAINER_STYLES, extractStyles, tasty } from '@tenphi/tasty';\nimport { forwardRef, ReactNode, useCallback, useMemo, useState } from 'react';\n\nimport { DirectionIcon } from '../../../icons/DirectionIcon';\nimport { mergeProps } from '../../../utils/react';\nimport { Button } from '../Button/Button';\nimport { Menu } from '../Menu/Menu';\n\nimport { ButtonSplitContext } from './context';\n\nimport type { BaseProps, ContainerStyleProps, Styles } from '@tenphi/tasty';\nimport type { CubeCollectionItemProps } from '../../CollectionItem';\nimport type { CubeButtonProps } from '../Button/Button';\nimport type { CubeMenuProps } from '../Menu/Menu';\n\nexport interface ButtonSplitAction\n extends Omit<\n CubeCollectionItemProps<object>,\n 'children' | 'onAction' | 'wrapper'\n > {\n key: string;\n label: ReactNode;\n}\n\nexport interface CubeButtonSplitProps extends BaseProps, ContainerStyleProps {\n /** Actions for strict mode. When provided, renders action + trigger buttons automatically. */\n actions?: ButtonSplitAction[];\n /** Currently selected action key (controlled). */\n actionKey?: string;\n /** Initially selected action key (uncontrolled). */\n defaultActionKey?: string;\n /** Called when the action button is pressed. Receives the current action key. */\n onAction?: (key: string) => void;\n /** Called when the selected action changes via the trigger menu. */\n onActionChange?: (key: string) => void;\n\n /** Button type applied to both action and trigger buttons in strict mode. */\n type?: CubeButtonProps['type'];\n /** Button theme applied to both action and trigger buttons in strict mode. */\n theme?: CubeButtonProps['theme'];\n /** Button size applied to both action and trigger buttons in strict mode. */\n size?: CubeButtonProps['size'];\n /** Disables both buttons in strict mode. */\n isDisabled?: boolean;\n\n /** Additional props for the action button in strict mode. */\n actionProps?: Partial<CubeButtonProps>;\n /** Additional props for the trigger button in strict mode. */\n triggerProps?: Partial<CubeButtonProps>;\n /** Additional props for the dropdown menu in strict mode. */\n menuProps?: Partial<CubeMenuProps<object>>;\n\n /** Custom styles for the wrapper element. */\n styles?: Styles;\n\n /** Custom mode: render arbitrary Button children. */\n children?: ReactNode;\n}\n\nconst STYLE_PROPS = CONTAINER_STYLES;\n\nconst ButtonSplitElement = tasty({\n tag: 'div',\n qa: 'ButtonSplit',\n styles: {\n display: 'inline-flex',\n position: 'relative',\n verticalAlign: 'bottom',\n },\n});\n\nexport const ButtonSplit = forwardRef<HTMLDivElement, CubeButtonSplitProps>(\n function ButtonSplit(props, ref) {\n const {\n actions,\n actionKey: controlledActionKey,\n defaultActionKey,\n onAction,\n onActionChange,\n type,\n theme,\n size,\n isDisabled,\n actionProps,\n triggerProps,\n menuProps,\n styles,\n children,\n ...rest\n } = props;\n\n const isControlled = controlledActionKey !== undefined;\n const [uncontrolledKey, setUncontrolledKey] = useState(\n () => defaultActionKey ?? actions?.[0]?.key,\n );\n\n const currentKey = isControlled ? controlledActionKey : uncontrolledKey;\n\n const currentAction = useMemo(\n () => actions?.find((a) => a.key === currentKey) ?? actions?.[0],\n [actions, currentKey],\n );\n\n const handleActionPress = useCallback(() => {\n if (currentKey) {\n onAction?.(currentKey);\n }\n }, [currentKey, onAction]);\n\n const handleSelectionChange = useCallback(\n (keys: string[]) => {\n const newKey = keys[0];\n\n if (newKey) {\n if (!isControlled) {\n setUncontrolledKey(newKey);\n }\n\n onActionChange?.(newKey);\n }\n },\n [isControlled, onActionChange],\n );\n\n const containerStyles = extractStyles(rest, STYLE_PROPS);\n\n const mergedStyles = useMemo<Styles>(\n () => ({\n ...containerStyles,\n ...styles,\n }),\n [containerStyles, styles],\n );\n\n const contextValue = useMemo(\n () => ({\n currentKey,\n onAction,\n onActionChange,\n type,\n theme,\n size,\n isDisabled,\n }),\n [currentKey, onAction, onActionChange, type, theme, size, isDisabled],\n );\n\n const isCustomMode = children != null;\n\n return (\n <ButtonSplitContext.Provider value={contextValue}>\n <ButtonSplitElement\n ref={ref}\n data-button-split\n styles={mergedStyles}\n qa={rest.qa}\n >\n {isCustomMode ? (\n children\n ) : actions ? (\n <>\n <Button\n type={type}\n theme={theme}\n size={size}\n isDisabled={isDisabled}\n icon={currentAction?.icon}\n {...mergeProps(actionProps, { onPress: handleActionPress })}\n >\n {currentAction?.label}\n </Button>\n <Menu.Trigger placement=\"bottom end\">\n <Button\n type={type}\n theme={theme}\n size={size}\n isDisabled={isDisabled}\n aria-label=\"More options\"\n icon={({ pressed }) => (\n <DirectionIcon to={pressed ? 'up' : 'down'} />\n )}\n {...triggerProps}\n />\n <Menu\n selectionMode=\"single\"\n selectedKeys={currentKey ? [currentKey] : []}\n onSelectionChange={handleSelectionChange}\n {...menuProps}\n >\n {actions.map(({ key, label, textValue, ...itemProps }) => (\n <Menu.Item\n key={key}\n textValue={\n textValue ?? (typeof label === 'string' ? label : key)\n }\n {...itemProps}\n >\n {label}\n </Menu.Item>\n ))}\n </Menu>\n </Menu.Trigger>\n </>\n ) : null}\n </ButtonSplitElement>\n </ButtonSplitContext.Provider>\n );\n },\n);\n\nButtonSplit.displayName = 'ButtonSplit';\n"],"mappings":";;;;;;;;;;;AA2DA,MAAM,cAAc;AAEpB,MAAM,qBAAqB,MAAM;CAC/B,KAAK;CACL,IAAI;CACJ,QAAQ;EACN,SAAS;EACT,UAAU;EACV,eAAe;EAChB;CACF,CAAC;AAEF,MAAa,cAAc,WACzB,SAAS,YAAY,OAAO,KAAK;CAC/B,MAAM,EACJ,SACA,WAAW,qBACX,kBACA,UACA,gBACA,MACA,OACA,MACA,YACA,aACA,cACA,WACA,QACA,UACA,GAAG,SACD;CAEJ,MAAM,eAAe,wBAAwB;CAC7C,MAAM,CAAC,iBAAiB,sBAAsB,eACtC,oBAAoB,UAAU,IAAI,IACzC;CAED,MAAM,aAAa,eAAe,sBAAsB;CAExD,MAAM,gBAAgB,cACd,SAAS,MAAM,MAAM,EAAE,QAAQ,WAAW,IAAI,UAAU,IAC9D,CAAC,SAAS,WAAW,CACtB;CAED,MAAM,oBAAoB,kBAAkB;AAC1C,MAAI,WACF,YAAW,WAAW;IAEvB,CAAC,YAAY,SAAS,CAAC;CAE1B,MAAM,wBAAwB,aAC3B,SAAmB;EAClB,MAAM,SAAS,KAAK;AAEpB,MAAI,QAAQ;AACV,OAAI,CAAC,aACH,oBAAmB,OAAO;AAG5B,oBAAiB,OAAO;;IAG5B,CAAC,cAAc,eAAe,CAC/B;CAED,MAAM,kBAAkB,cAAc,MAAM,YAAY;CAExD,MAAM,eAAe,eACZ;EACL,GAAG;EACH,GAAG;EACJ,GACD,CAAC,iBAAiB,OAAO,CAC1B;CAED,MAAM,eAAe,eACZ;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACD,GACD;EAAC;EAAY;EAAU;EAAgB;EAAM;EAAO;EAAM;EAAW,CACtE;CAED,MAAM,eAAe,YAAY;AAEjC,QACE,oBAAC,mBAAmB;EAAS,OAAO;YAClC,oBAAC;GACM;GACL;GACA,QAAQ;GACR,IAAI,KAAK;aAER,eACC,WACE,UACF,8CACE,oBAAC;IACO;IACC;IACD;IACM;IACZ,MAAM,eAAe;IACrB,GAAI,WAAW,aAAa,EAAE,SAAS,mBAAmB,CAAC;cAE1D,eAAe;KACT,EACT,qBAACA,OAAK;IAAQ,WAAU;eACtB,oBAAC;KACO;KACC;KACD;KACM;KACZ,cAAW;KACX,OAAO,EAAE,cACP,oBAAC,iBAAc,IAAI,UAAU,OAAO,SAAU;KAEhD,GAAI;MACJ,EACF,oBAACA;KACC,eAAc;KACd,cAAc,aAAa,CAAC,WAAW,GAAG,EAAE;KAC5C,mBAAmB;KACnB,GAAI;eAEH,QAAQ,KAAK,EAAE,KAAK,OAAO,WAAW,GAAG,gBACxC,oBAACA,OAAK;MAEJ,WACE,cAAc,OAAO,UAAU,WAAW,QAAQ;MAEpD,GAAI;gBAEH;QANI,IAOK,CACZ;MACG;KACM,IACd,GACD;IACe;GACO;EAGnC;AAED,YAAY,cAAc"}
@@ -0,0 +1,18 @@
1
+
2
+ import * as react from "react";
3
+
4
+ //#region src/components/actions/ButtonSplit/context.d.ts
5
+ interface ButtonSplitContextValue {
6
+ currentKey: string | undefined;
7
+ onAction: ((key: string) => void) | undefined;
8
+ onActionChange: ((key: string) => void) | undefined;
9
+ type?: string;
10
+ theme?: string;
11
+ size?: string | number;
12
+ isDisabled?: boolean;
13
+ }
14
+ declare const ButtonSplitContext: react.Context<ButtonSplitContextValue | null>;
15
+ declare function useButtonSplitContext(): ButtonSplitContextValue | null;
16
+ //#endregion
17
+ export { ButtonSplitContext, ButtonSplitContextValue, useButtonSplitContext };
18
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1,12 @@
1
+ /** @license MIT | @cube-dev/ui-kit v0.121.0 | Cube Dev Team */
2
+ import { createContext, useContext } from "react";
3
+
4
+ //#region src/components/actions/ButtonSplit/context.ts
5
+ const ButtonSplitContext = createContext(null);
6
+ function useButtonSplitContext() {
7
+ return useContext(ButtonSplitContext);
8
+ }
9
+
10
+ //#endregion
11
+ export { ButtonSplitContext, useButtonSplitContext };
12
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../../../src/components/actions/ButtonSplit/context.ts"],"sourcesContent":["import { createContext, useContext } from 'react';\n\nexport interface ButtonSplitContextValue {\n currentKey: string | undefined;\n onAction: ((key: string) => void) | undefined;\n onActionChange: ((key: string) => void) | undefined;\n type?: string;\n theme?: string;\n size?: string | number;\n isDisabled?: boolean;\n}\n\nexport const ButtonSplitContext = createContext<ButtonSplitContextValue | null>(\n null,\n);\n\nexport function useButtonSplitContext(): ButtonSplitContextValue | null {\n return useContext(ButtonSplitContext);\n}\n"],"mappings":";;;;AAYA,MAAa,qBAAqB,cAChC,KACD;AAED,SAAgB,wBAAwD;AACtE,QAAO,WAAW,mBAAmB"}
@@ -0,0 +1,3 @@
1
+
2
+ import { ButtonSplit, ButtonSplitAction, CubeButtonSplitProps } from "./ButtonSplit.js";
3
+ import { ButtonSplitContext, ButtonSplitContextValue, useButtonSplitContext } from "./context.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.120.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.121.0 | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
3
3
  import { TooltipProvider } from "../../overlays/Tooltip/TooltipProvider.js";
4
4
  import { LoadingIcon } from "../../../icons/LoadingIcon.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.120.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.121.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.120.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.121.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_NEUTRAL_STYLES, DANGER_OUTLINE_STYLES, DANGER_PRIMARY_STYLES, DANGER_SECONDARY_STYLES, DEFAULT_CLEAR_STYLES, DEFAULT_NEUTRAL_STYLES, DEFAULT_OUTLINE_STYLES, DEFAULT_PRIMARY_STYLES, DEFAULT_SECONDARY_STYLES, ITEM_ACTION_BASE_STYLES, NOTE_CLEAR_STYLES, NOTE_NEUTRAL_STYLES, NOTE_OUTLINE_STYLES, NOTE_PRIMARY_STYLES, NOTE_SECONDARY_STYLES, SPECIAL_CLEAR_STYLES, SPECIAL_NEUTRAL_STYLES, SPECIAL_OUTLINE_STYLES, SPECIAL_PRIMARY_STYLES, SPECIAL_SECONDARY_STYLES, SUCCESS_CLEAR_STYLES, SUCCESS_NEUTRAL_STYLES, SUCCESS_OUTLINE_STYLES, SUCCESS_PRIMARY_STYLES, SUCCESS_SECONDARY_STYLES, WARNING_CLEAR_STYLES, WARNING_NEUTRAL_STYLES, WARNING_OUTLINE_STYLES, WARNING_PRIMARY_STYLES, WARNING_SECONDARY_STYLES } from "../../../data/item-themes.js";