@cube-dev/ui-kit 0.141.0 → 0.142.1

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 (452) hide show
  1. package/dist/CHANGELOG.md +103 -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 +17 -3
  20. package/dist/components/actions/Button/Button.js.map +1 -1
  21. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  22. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  23. package/dist/components/actions/ButtonSplit/context.js +1 -1
  24. package/dist/components/actions/CommandMenu/CommandMenu.js +3 -4
  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 +18 -2
  30. package/dist/components/actions/ItemButton/ItemButton.js.map +1 -1
  31. package/dist/components/actions/Link/Link.js +1 -1
  32. package/dist/components/actions/Menu/Menu.js +3 -4
  33. package/dist/components/actions/Menu/Menu.js.map +1 -1
  34. package/dist/components/actions/Menu/MenuItem.js +1 -1
  35. package/dist/components/actions/Menu/MenuSection.js +1 -1
  36. package/dist/components/actions/Menu/MenuTrigger.js +8 -5
  37. package/dist/components/actions/Menu/MenuTrigger.js.map +1 -1
  38. package/dist/components/actions/Menu/SubMenuTrigger.js +10 -7
  39. package/dist/components/actions/Menu/SubMenuTrigger.js.map +1 -1
  40. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  41. package/dist/components/actions/Menu/context.js +1 -1
  42. package/dist/components/actions/Menu/styled.js +1 -1
  43. package/dist/components/actions/index.js +1 -1
  44. package/dist/components/actions/use-action.js +1 -1
  45. package/dist/components/actions/use-anchored-menu.js +4 -3
  46. package/dist/components/actions/use-anchored-menu.js.map +1 -1
  47. package/dist/components/actions/use-context-menu.js +4 -3
  48. package/dist/components/actions/use-context-menu.js.map +1 -1
  49. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  50. package/dist/components/content/Alert/Alert.js +1 -1
  51. package/dist/components/content/Alert/use-alert.js +1 -1
  52. package/dist/components/content/Avatar/Avatar.js +1 -1
  53. package/dist/components/content/Badge/Badge.js +1 -1
  54. package/dist/components/content/Card/Card.js +1 -1
  55. package/dist/components/content/Content.js +1 -1
  56. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  57. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  58. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  59. package/dist/components/content/Divider.js +1 -1
  60. package/dist/components/content/Footer.js +1 -1
  61. package/dist/components/content/Header.js +1 -1
  62. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  63. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  64. package/dist/components/content/Item/Item.js +1 -1
  65. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  66. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  67. package/dist/components/content/Layout/GridLayout.js +1 -1
  68. package/dist/components/content/Layout/Layout.js +1 -1
  69. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  70. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  71. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  72. package/dist/components/content/Layout/LayoutContent.js +1 -1
  73. package/dist/components/content/Layout/LayoutContext.js +1 -1
  74. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  75. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  76. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  77. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  78. package/dist/components/content/Layout/LayoutPane.js +1 -1
  79. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  80. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  81. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  82. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  83. package/dist/components/content/Layout/index.js +1 -1
  84. package/dist/components/content/Layout/utils.js +1 -1
  85. package/dist/components/content/Paragraph.js +1 -1
  86. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  87. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  88. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  89. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  90. package/dist/components/content/Result/Result.js +1 -1
  91. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  92. package/dist/components/content/Tag/Tag.js +1 -1
  93. package/dist/components/content/Text.js +1 -1
  94. package/dist/components/content/TextItem/TextItem.js +1 -1
  95. package/dist/components/content/Title.js +1 -1
  96. package/dist/components/content/Tree/Tree.js +1 -1
  97. package/dist/components/content/Tree/TreeNode.js +1 -1
  98. package/dist/components/content/Tree/styled.js +1 -1
  99. package/dist/components/content/Tree/tree-index.js +1 -1
  100. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  101. package/dist/components/content/Tree/use-load-data.js +1 -1
  102. package/dist/components/content/highlightText.js +1 -1
  103. package/dist/components/content/use-auto-tooltip.js +1 -1
  104. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  105. package/dist/components/fields/Checkbox/CheckboxGroup.js +3 -3
  106. package/dist/components/fields/Checkbox/CheckboxGroup.js.map +1 -1
  107. package/dist/components/fields/Checkbox/context.js +1 -1
  108. package/dist/components/fields/ComboBox/ComboBox.js +11 -7
  109. package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
  110. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  111. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  112. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  113. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  114. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  115. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  116. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  117. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  118. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  119. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  120. package/dist/components/fields/DatePicker/intl.js +1 -1
  121. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  122. package/dist/components/fields/DatePicker/props.js +1 -1
  123. package/dist/components/fields/DatePicker/utils.js +1 -1
  124. package/dist/components/fields/FileInput/FileInput.js +1 -1
  125. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  126. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -21
  127. package/dist/components/fields/FilterPicker/FilterPicker.js.map +1 -1
  128. package/dist/components/fields/Input/Input.js +1 -1
  129. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  130. package/dist/components/fields/ListBox/ListBox.js +2 -1
  131. package/dist/components/fields/ListBox/ListBox.js.map +1 -1
  132. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  133. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  134. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  135. package/dist/components/fields/Picker/Picker.js +1 -21
  136. package/dist/components/fields/Picker/Picker.js.map +1 -1
  137. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  138. package/dist/components/fields/RadioGroup/RadioGroup.js +3 -3
  139. package/dist/components/fields/RadioGroup/RadioGroup.js.map +1 -1
  140. package/dist/components/fields/RadioGroup/context.js +1 -1
  141. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  142. package/dist/components/fields/Select/Select.js +10 -7
  143. package/dist/components/fields/Select/Select.js.map +1 -1
  144. package/dist/components/fields/Slider/Gradation.js +1 -1
  145. package/dist/components/fields/Slider/HueSlider.js +1 -1
  146. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  147. package/dist/components/fields/Slider/Slider.js +1 -1
  148. package/dist/components/fields/Slider/SliderBase.js +1 -1
  149. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  150. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  151. package/dist/components/fields/Slider/elements.js +1 -1
  152. package/dist/components/fields/Slider/index.js +1 -1
  153. package/dist/components/fields/Switch/Switch.js +1 -1
  154. package/dist/components/fields/TextArea/TextArea.js +1 -1
  155. package/dist/components/fields/TextInput/TextInput.js +1 -1
  156. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  157. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  158. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  159. package/dist/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
  160. package/dist/components/form/Form/Field.js +1 -1
  161. package/dist/components/form/Form/Form.d.ts +1 -2
  162. package/dist/components/form/Form/Form.js +3 -3
  163. package/dist/components/form/Form/Form.js.map +1 -1
  164. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  165. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  166. package/dist/components/form/Form/SubmitError.js +1 -1
  167. package/dist/components/form/Form/index.d.ts +1 -1
  168. package/dist/components/form/Form/index.js +1 -1
  169. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  170. package/dist/components/form/Form/use-field/use-field.js +1 -1
  171. package/dist/components/form/Form/use-form.js +1 -1
  172. package/dist/components/form/Form/validation.js +1 -1
  173. package/dist/components/form/Label.js +3 -3
  174. package/dist/components/form/Label.js.map +1 -1
  175. package/dist/components/form/wrapper.js +1 -1
  176. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  177. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  178. package/dist/components/layout/Flex.js +1 -1
  179. package/dist/components/layout/Flow.js +1 -1
  180. package/dist/components/layout/Grid.js +1 -1
  181. package/dist/components/layout/Panel.js +1 -1
  182. package/dist/components/layout/Prefix.js +1 -1
  183. package/dist/components/layout/ResizablePanel.js +1 -1
  184. package/dist/components/layout/Space.js +1 -1
  185. package/dist/components/layout/Suffix.js +1 -1
  186. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  187. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  188. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  189. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  190. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  191. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  192. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  193. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  194. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  195. package/dist/components/navigation/Tabs/styled.js +1 -1
  196. package/dist/components/navigation/Tabs/types.js +1 -1
  197. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  198. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  199. package/dist/components/organisms/FileTabs/FileTabs.js +1 -1
  200. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  201. package/dist/components/other/Calendar/Calendar.js +1 -1
  202. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  203. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  204. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  205. package/dist/components/other/CloudLogo/CloudLogo.js +1 -1
  206. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  207. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  208. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  209. package/dist/components/overlays/Dialog/Dialog.d.ts +1 -2
  210. package/dist/components/overlays/Dialog/Dialog.js +3 -3
  211. package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
  212. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  213. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  214. package/dist/components/overlays/Dialog/DialogTrigger.js +54 -8
  215. package/dist/components/overlays/Dialog/DialogTrigger.js.map +1 -1
  216. package/dist/components/overlays/Dialog/context.js +1 -1
  217. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  218. package/dist/components/overlays/Modal/Modal.js +3 -3
  219. package/dist/components/overlays/Modal/Modal.js.map +1 -1
  220. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  221. package/dist/components/overlays/Modal/Overlay.js +1 -1
  222. package/dist/components/overlays/Modal/Popover.js +1 -1
  223. package/dist/components/overlays/Modal/Tray.js +3 -3
  224. package/dist/components/overlays/Modal/Tray.js.map +1 -1
  225. package/dist/components/overlays/Modal/Underlay.js +1 -1
  226. package/dist/components/overlays/Notifications/Notification.js +1 -1
  227. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  228. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  229. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  230. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  231. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  232. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  233. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  234. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  235. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  236. package/dist/components/overlays/Notifications/index.js +1 -1
  237. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  238. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  239. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  240. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  241. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  242. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  243. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  244. package/dist/components/overlays/Toast/index.js +1 -1
  245. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  246. package/dist/components/overlays/Toast/useToast.js +1 -1
  247. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  248. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  249. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  250. package/dist/components/overlays/Tooltip/context.js +1 -1
  251. package/dist/components/portal/Portal.js +1 -1
  252. package/dist/components/portal/PortalProvider.js +1 -1
  253. package/dist/components/portal/usePortal.js +1 -1
  254. package/dist/components/shared/DraggableCollection.js +1 -1
  255. package/dist/components/shared/InvalidIcon.js +1 -1
  256. package/dist/components/shared/ValidIcon.js +1 -1
  257. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  258. package/dist/components/status/Spin/Cube.js +1 -1
  259. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  260. package/dist/components/status/Spin/Spin.js +1 -1
  261. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  262. package/dist/data/item-themes.js +1 -1
  263. package/dist/data/themes.js +1 -1
  264. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  265. package/dist/icons/AdjustmentsIcon.js +1 -1
  266. package/dist/icons/AiIcon.js +1 -1
  267. package/dist/icons/AreaChartIcon.js +1 -1
  268. package/dist/icons/BackwardIcon.js +1 -1
  269. package/dist/icons/BarChartIcon.js +1 -1
  270. package/dist/icons/BellFilledIcon.js +1 -1
  271. package/dist/icons/BellIcon.js +1 -1
  272. package/dist/icons/BooleanIcon.js +1 -1
  273. package/dist/icons/CalendarEditIcon.js +1 -1
  274. package/dist/icons/CalendarIcon.js +1 -1
  275. package/dist/icons/CaretDownIcon.js +1 -1
  276. package/dist/icons/CaretUpIcon.js +1 -1
  277. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  278. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  279. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  280. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  281. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  282. package/dist/icons/ChartBarLineIcon.js +1 -1
  283. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  284. package/dist/icons/ChartBarStackedIcon.js +1 -1
  285. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  286. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  287. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  288. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  289. package/dist/icons/ChartBubbleIcon.js +1 -1
  290. package/dist/icons/ChartDonut2Icon.js +1 -1
  291. package/dist/icons/ChartFunnelIcon.js +1 -1
  292. package/dist/icons/ChartHeatmapIcon.js +1 -1
  293. package/dist/icons/ChartKPIIcon.js +1 -1
  294. package/dist/icons/ChartPie2Icon.js +1 -1
  295. package/dist/icons/ChartScatterIcon.js +1 -1
  296. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  297. package/dist/icons/CheckCircleIcon.js +1 -1
  298. package/dist/icons/CheckIcon.js +1 -1
  299. package/dist/icons/CircleFilledIcon.js +1 -1
  300. package/dist/icons/ClearIcon.js +1 -1
  301. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  302. package/dist/icons/CloseCircleIcon.js +1 -1
  303. package/dist/icons/CloseIcon.js +1 -1
  304. package/dist/icons/CodeIcon.js +1 -1
  305. package/dist/icons/ColumnTotalIcon.js +1 -1
  306. package/dist/icons/CopyIcon.js +1 -1
  307. package/dist/icons/CountIcon.js +1 -1
  308. package/dist/icons/CubeIcon.js +1 -1
  309. package/dist/icons/CubePauseIcon.js +1 -1
  310. package/dist/icons/CubePlayIcon.js +1 -1
  311. package/dist/icons/CurrencyDollarIcon.js +1 -1
  312. package/dist/icons/DangerIcon.js +1 -1
  313. package/dist/icons/DashboardIcon.js +1 -1
  314. package/dist/icons/DatabaseIcon.js +1 -1
  315. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  316. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  317. package/dist/icons/DirectionIcon.js +1 -1
  318. package/dist/icons/DonutIcon.js +1 -1
  319. package/dist/icons/DownIcon.js +1 -1
  320. package/dist/icons/EditIcon.js +1 -1
  321. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  322. package/dist/icons/ExclamationCircleIcon.js +1 -1
  323. package/dist/icons/ExclamationIcon.js +1 -1
  324. package/dist/icons/EyeIcon.js +1 -1
  325. package/dist/icons/EyeInvisibleIcon.js +1 -1
  326. package/dist/icons/FilterIcon.js +1 -1
  327. package/dist/icons/FolderFilledIcon.js +1 -1
  328. package/dist/icons/FolderIcon.js +1 -1
  329. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  330. package/dist/icons/FolderOpenIcon.js +1 -1
  331. package/dist/icons/ForwardIcon.js +1 -1
  332. package/dist/icons/GripVerticalIcon.js +1 -1
  333. package/dist/icons/HierarchyIcon.js +1 -1
  334. package/dist/icons/HierarchyOpenIcon.js +1 -1
  335. package/dist/icons/Icon.js +1 -1
  336. package/dist/icons/InfoCircleIcon.js +1 -1
  337. package/dist/icons/InfoIcon.js +1 -1
  338. package/dist/icons/KeyIcon.js +1 -1
  339. package/dist/icons/LeftIcon.js +1 -1
  340. package/dist/icons/LineChartIcon.js +1 -1
  341. package/dist/icons/LoadingIcon.js +1 -1
  342. package/dist/icons/LockFilledIcon.js +1 -1
  343. package/dist/icons/LockIcon.js +1 -1
  344. package/dist/icons/MoreIcon.js +1 -1
  345. package/dist/icons/NotAllowedIcon.js +1 -1
  346. package/dist/icons/Number123Icon.js +1 -1
  347. package/dist/icons/NumberIcon.js +1 -1
  348. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  349. package/dist/icons/PauseCircleIcon.js +1 -1
  350. package/dist/icons/PauseIcon.js +1 -1
  351. package/dist/icons/PercentageIcon.js +1 -1
  352. package/dist/icons/PieChartIcon.js +1 -1
  353. package/dist/icons/PlayCircleIcon.js +1 -1
  354. package/dist/icons/PlayIcon.js +1 -1
  355. package/dist/icons/PlusIcon.js +1 -1
  356. package/dist/icons/ProgressBarIcon.js +1 -1
  357. package/dist/icons/ReloadIcon.js +1 -1
  358. package/dist/icons/ReportIcon.js +1 -1
  359. package/dist/icons/ReturnIcon.js +1 -1
  360. package/dist/icons/RightIcon.js +1 -1
  361. package/dist/icons/RowTotalsIcon.js +1 -1
  362. package/dist/icons/SchemeIcon.js +1 -1
  363. package/dist/icons/SearchIcon.js +1 -1
  364. package/dist/icons/SemanticQueryIcon.js +1 -1
  365. package/dist/icons/SettingsIcon.js +1 -1
  366. package/dist/icons/ShieldFilledIcon.js +1 -1
  367. package/dist/icons/ShieldIcon.js +1 -1
  368. package/dist/icons/SlashIcon.js +1 -1
  369. package/dist/icons/SparklesIcon.js +1 -1
  370. package/dist/icons/SqlIcon.js +1 -1
  371. package/dist/icons/StatsIcon.js +1 -1
  372. package/dist/icons/StopIcon.js +1 -1
  373. package/dist/icons/StringIcon.js +1 -1
  374. package/dist/icons/SubtotalsIcon.js +1 -1
  375. package/dist/icons/SwitchIcon.js +1 -1
  376. package/dist/icons/TableIcon.js +1 -1
  377. package/dist/icons/ThumbsDownIcon.js +1 -1
  378. package/dist/icons/ThumbsUpIcon.js +1 -1
  379. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  380. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  381. package/dist/icons/ThunderboltIcon.js +1 -1
  382. package/dist/icons/TimeIcon.js +1 -1
  383. package/dist/icons/TrashIcon.js +1 -1
  384. package/dist/icons/UnlockIcon.js +1 -1
  385. package/dist/icons/UpIcon.js +1 -1
  386. package/dist/icons/UserGroupIcon.js +1 -1
  387. package/dist/icons/UserIcon.js +1 -1
  388. package/dist/icons/UserLockIcon.js +1 -1
  389. package/dist/icons/ViewIcon.js +1 -1
  390. package/dist/icons/WarningFilledIcon.js +1 -1
  391. package/dist/icons/WarningIcon.js +1 -1
  392. package/dist/icons/wrap-icon.js +1 -1
  393. package/dist/index.d.ts +2 -1
  394. package/dist/index.js +3 -2
  395. package/dist/index.js.map +1 -1
  396. package/dist/provider.js +1 -1
  397. package/dist/providers/TrackingProvider.js +1 -1
  398. package/dist/providers/navigationAdapter.default.js +1 -1
  399. package/dist/tokens/base.js +1 -1
  400. package/dist/tokens/colors.js +1 -1
  401. package/dist/tokens/index.js +1 -1
  402. package/dist/tokens/layout.js +1 -1
  403. package/dist/tokens/palette.js +1 -1
  404. package/dist/tokens/shadows.js +1 -1
  405. package/dist/tokens/sizes.js +1 -1
  406. package/dist/tokens/spacing.js +1 -1
  407. package/dist/tokens/typography.js +1 -1
  408. package/dist/utils/ResizeSensor.js +1 -1
  409. package/dist/utils/index.d.ts +1 -0
  410. package/dist/utils/is-dev-env.js +1 -1
  411. package/dist/utils/modules.js +1 -1
  412. package/dist/utils/promise.js +1 -1
  413. package/dist/utils/raf.js +1 -1
  414. package/dist/utils/random.js +1 -1
  415. package/dist/utils/range.js +1 -1
  416. package/dist/utils/react/RenderCache.js +1 -1
  417. package/dist/utils/react/Slots.js +1 -1
  418. package/dist/utils/react/chain.js +1 -1
  419. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  420. package/dist/utils/react/index.d.ts +1 -0
  421. package/dist/utils/react/index.js +2 -1
  422. package/dist/utils/react/interactions.js +1 -1
  423. package/dist/utils/react/isTextOnly.js +1 -1
  424. package/dist/utils/react/mapProps.js +1 -1
  425. package/dist/utils/react/mergeProps.js +1 -1
  426. package/dist/utils/react/nullableValue.js +1 -1
  427. package/dist/utils/react/resolveIcon.js +1 -1
  428. package/dist/utils/react/sharedStore.js +1 -1
  429. package/dist/utils/react/useCombinedRefs.js +1 -1
  430. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  431. package/dist/utils/react/useEventBus.js +26 -17
  432. package/dist/utils/react/useEventBus.js.map +1 -1
  433. package/dist/utils/react/useId.js +1 -1
  434. package/dist/utils/react/useIsDarwin.js +1 -1
  435. package/dist/utils/react/useKeySymbols.js +1 -1
  436. package/dist/utils/react/useLayoutEffect.js +1 -1
  437. package/dist/utils/react/useLocalStorage.js +1 -1
  438. package/dist/utils/react/useMergeStyles.js +1 -1
  439. package/dist/utils/react/usePopoverSync.d.ts +116 -0
  440. package/dist/utils/react/usePopoverSync.js +131 -11
  441. package/dist/utils/react/usePopoverSync.js.map +1 -1
  442. package/dist/utils/react/useQaProps.js +1 -1
  443. package/dist/utils/react/useViewportSize.js +1 -1
  444. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  445. package/dist/utils/selection.js +1 -1
  446. package/dist/utils/styles.js +1 -1
  447. package/dist/utils/tree.js +1 -1
  448. package/dist/utils/warnings.js +1 -1
  449. package/dist/version.js +2 -2
  450. package/docs/components/actions/Button.md +102 -24
  451. package/docs/components/actions/ItemButton.md +71 -34
  452. package/package.json +1 -1
package/dist/CHANGELOG.md CHANGED
@@ -1,5 +1,108 @@
1
1
  # @cube-dev/ui-kit
2
2
 
3
+ ## 0.142.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [#1192](https://github.com/cube-js/cube-ui-kit/pull/1192) [`33d633ef`](https://github.com/cube-js/cube-ui-kit/commit/33d633efc2c958c8e4bbfde77dfb8c76f769db13) Thanks [@tenphi](https://github.com/tenphi)! - **Fix:** A `DialogTrigger type="popover"` no longer swallows the outside click
8
+ that opens another popover. Previously, while a popover Dialog was open, a
9
+ single click on a sibling popover trigger was consumed and that trigger's
10
+ popover would not open. The popover branch now uses the same
11
+ `shouldCloseOnInteractOutside` predicate as `Select`, `ComboBox`, and
12
+ `MenuTrigger`, letting clicks on other popover triggers (and
13
+ `data-popover-dismiss` controls) through so `usePopoverSync` can hand off
14
+ between popovers correctly.
15
+
16
+ ## 0.142.0
17
+
18
+ ### Minor Changes
19
+
20
+ - [#1188](https://github.com/cube-js/cube-ui-kit/pull/1188) [`dd3419ce`](https://github.com/cube-js/cube-ui-kit/commit/dd3419ce0a91e9f747c1ed78175e94c557b8c810) Thanks [@tenphi](https://github.com/tenphi)! - **Breaking:** Refs forwarded to `Modal`, `Tray`, `Dialog`, `Form`, `MenuTrigger`, `Menu`, `CommandMenu`, `RadioGroup`, `CheckboxGroup`, and `Label` now resolve to the underlying DOM element directly. The previous `@react-spectrum/utils` `{ UNSAFE_getDOMNode() }` wrapper (`DOMRefValue`) has been removed. Migrate by reading `ref.current` instead of calling `ref.current?.UNSAFE_getDOMNode()` on these components.
21
+
22
+ Internally, these components now use `useObjectRef` from `@react-aria/utils` in place of `useDOMRef` from `@react-spectrum/utils`. Refs into focusable wrappers like `Button` (which still use `useFocusableRef`) are unaffected and continue to expose `UNSAFE_getDOMNode()` plus `focus()`.
23
+
24
+ - [#1188](https://github.com/cube-js/cube-ui-kit/pull/1188) [`dd3419ce`](https://github.com/cube-js/cube-ui-kit/commit/dd3419ce0a91e9f747c1ed78175e94c557b8c810) Thanks [@tenphi](https://github.com/tenphi)! - **New:** Pressing a `Button` or `ItemButton` inside an open popover now
25
+ **dismisses that popover by default**. This covers every overlay that uses
26
+ `usePopoverSync` — `FilterPicker`, `Picker`, `ComboBox`, `Select`,
27
+ `MenuTrigger`, `SubMenuTrigger`, `DialogTrigger type="popover"`,
28
+ `use-anchored-menu`, and `use-context-menu`. Modal/tray/fullscreen Dialogs
29
+ are **not** affected — a Button inside a modal Dialog still does not
30
+ auto-close it.
31
+
32
+ The dismiss event is dispatched through the EventBus and deferred via
33
+ `setTimeout(0)`, so synchronous `onPress` handlers (and any React state
34
+ updates they trigger) flush BEFORE the popover closes. This makes the
35
+ common "open a hoisted modal from a popover footer" flow work without
36
+ flicker: the modal mounts first, then the popover closes.
37
+
38
+ ### Opt-outs
39
+
40
+ - **Automatic** — Buttons that act as popover triggers (`MenuTrigger`
41
+ children, `DialogTrigger type="popover"` children, picker trigger
42
+ ItemButtons) already carry `data-popover-trigger` and skip the dismiss.
43
+ Modal-type `DialogTrigger` children stay unmarked so they correctly
44
+ dismiss the parent popover and let the modal take over.
45
+ - **Manual** — Add `data-popover-keep` to a Button (toggle case) or any
46
+ ancestor element (subtree case):
47
+
48
+ ```jsx
49
+ <Button data-popover-keep onPress={() => setMode((m) => !m)}>
50
+ Toggle
51
+ </Button>
52
+
53
+ <div data-popover-keep>{/* every Button inside opts out */}</div>
54
+ ```
55
+
56
+ - **Custom non-Cube triggers** — call the newly exported
57
+ `useDismissParentPopover()` to wire the same behaviour into your own
58
+ interactive controls.
59
+
60
+ ### Migration
61
+
62
+ Existing Buttons / ItemButtons inside popovers that were expected to **keep
63
+ the popover open** on press (toggles, inline editors, mode switches, etc.)
64
+ need `data-popover-keep`. Popover triggers wrapped by `MenuTrigger`,
65
+ `DialogTrigger type="popover"`, `FilterPicker`, `Picker`, `ComboBox`, or
66
+ `Select` need no change — they're auto-skipped.
67
+
68
+ ### Internals
69
+
70
+ - `usePopoverSync` gained a `dismissOnInnerButtonPress` option (default
71
+ `true`). `DialogTrigger` passes `false` for modal/tray/fullscreen types
72
+ so buttons inside those dialogs don't subscribe to the new dismiss
73
+ event. The `popover:dismiss-ancestor` EventBus event carries the
74
+ originating DOM element so each popover host can do a `container.contains()`
75
+ check before closing.
76
+ - `usePopoverSync` gained a `closeOnPeerOpen` option (default `true`).
77
+ `DialogTrigger` passes `false` for modal/tray/fullscreen/panel types so
78
+ a peer popover opening (e.g. via `useDialogContainer` or
79
+ `useAnchoredMenu`) cannot bypass the dialog's `isDismissable` /
80
+ `onClose` handling and call `state.close()` directly. The host still
81
+ EMITS `popover:open`, so opening a modal correctly dismisses peer
82
+ popovers — only the listener side is gated.
83
+ - `DialogTrigger` now applies `data-popover-trigger` to its child press
84
+ responder **only when `type === 'popover'`**. This is the critical
85
+ correctness piece for the original bug — when a `DialogTrigger type="modal"`
86
+ lives inside a `FilterPicker` footer, pressing its trigger now correctly
87
+ dismisses the FilterPicker, and the modal takes over.
88
+ - `EventBusProvider` is now a no-op when nested inside another
89
+ `EventBusProvider`. The internal `Provider` from `provider.tsx` wraps
90
+ overlay content with its own `EventBusProvider`, which used to silently
91
+ shadow the global `<Root>` bus and prevent cross-overlay events from
92
+ reaching the host.
93
+ - `usePopoverSync`'s nested-popover guard now walks the **logical**
94
+ popover chain via a module-level registry of open overlays, rather than
95
+ relying solely on a direct `container.contains(triggerEl)` DOM check.
96
+ Popover content is portaled to a shared overlay root, so a grandchild
97
+ popover's trigger lives in a sibling portal — not inside its
98
+ grandparent's DOM. Without the chain walk, opening a third+ level
99
+ `SubMenuTrigger` (or any equivalent nested popover) closed every
100
+ ancestor.
101
+
102
+ ### Patch Changes
103
+
104
+ - [#1189](https://github.com/cube-js/cube-ui-kit/pull/1189) [`cb9c0635`](https://github.com/cube-js/cube-ui-kit/commit/cb9c0635e6b060e473b38faab7fdef2c4cdad496) Thanks [@solarrust](https://github.com/solarrust)! - `ListBox`: fix missing bottom spacing for the last item in `isReorderable` mode.
105
+
3
106
  ## 0.141.0
4
107
 
5
108
  ### Minor Changes
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.141.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.142.1 | 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.141.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.142.1 | 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.141.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.142.1 | 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.141.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.142.1 | 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.141.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.142.1 | 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.141.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.142.1 | 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.141.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.142.1 | 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.141.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.142.1 | 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.141.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.142.1 | 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.141.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.142.1 | 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.141.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.142.1 | 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.141.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.142.1 | 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.141.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.142.1 | 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.141.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.142.1 | 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.141.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.142.1 | 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.141.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.142.1 | 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.141.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.142.1 | 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";
@@ -1,6 +1,8 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.141.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.142.1 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { mergeProps } from "../../../utils/react/mergeProps.js";
4
+ import { useDismissParentPopover } from "../../../utils/react/usePopoverSync.js";
5
+ import { useEvent } from "../../../_internal/hooks/use-event.js";
4
6
  import { resolveIcon } from "../../../utils/react/resolveIcon.js";
5
7
  import { DisplayTransition } from "../../helpers/DisplayTransition/DisplayTransition.js";
6
8
  import { useAutoTooltip } from "../../content/use-auto-tooltip.js";
@@ -12,7 +14,7 @@ import { useAction } from "../use-action.js";
12
14
  import { IconSwitch } from "../../helpers/IconSwitch/IconSwitch.js";
13
15
  import { useButtonSplitContext } from "../ButtonSplit/context.js";
14
16
  import { CONTAINER_STYLES, TEXT_STYLES, tasty } from "@tenphi/tasty";
15
- import { Children, forwardRef, isValidElement, useMemo, useState } from "react";
17
+ import { Children, forwardRef, isValidElement, useMemo, useRef, useState } from "react";
16
18
  import { jsx, jsxs } from "react/jsx-runtime";
17
19
 
18
20
  //#region src/components/actions/Button/Button.tsx
@@ -196,15 +198,26 @@ const ButtonElement = tasty({
196
198
  });
197
199
  const Button = forwardRef(function Button(allProps, ref) {
198
200
  const splitContext = useButtonSplitContext();
199
- let { type, size: sizeProp, label, children, theme = splitContext?.theme ?? "default", icon: iconProp, rightIcon: rightIconProp, mods, download, tooltip = true, defaultTooltipPlacement = "top", ...props } = allProps;
201
+ let { type, size: sizeProp, label, children, theme = splitContext?.theme ?? "default", icon: iconProp, rightIcon: rightIconProp, mods, download, tooltip = true, defaultTooltipPlacement = "top", onPress: userOnPress, ...props } = allProps;
200
202
  type = type ?? splitContext?.type;
201
203
  const size = sizeProp ?? splitContext?.size ?? (type === "link" ? "inline" : "medium");
202
204
  const isDisabled = splitContext?.isDisabled || props.isDisabled || props.isLoading;
203
205
  const isLoading = props.isLoading;
204
206
  const isSelected = props.isSelected;
207
+ const dismissParentPopover = useDismissParentPopover();
208
+ const buttonElementRef = useRef(null);
209
+ const wrappedOnPress = useEvent((e) => {
210
+ userOnPress?.(e);
211
+ const el = buttonElementRef.current;
212
+ if (!el) return;
213
+ if (el.hasAttribute("data-popover-trigger")) return;
214
+ if (el.closest("[data-popover-keep]")) return;
215
+ dismissParentPopover(el);
216
+ });
205
217
  const { actionProps, isPressed } = useAction({
206
218
  ...allProps,
207
219
  isDisabled,
220
+ onPress: wrappedOnPress,
208
221
  ...label ? { label } : {}
209
222
  }, ref);
210
223
  const styles = extractStyles(props, STYLE_PROPS);
@@ -283,6 +296,7 @@ const Button = forwardRef(function Button(allProps, ref) {
283
296
  if (typeof domRef === "function") domRef(element);
284
297
  else if (domRef) domRef.current = element;
285
298
  if (tooltipRef) tooltipRef.current = element;
299
+ buttonElementRef.current = element;
286
300
  };
287
301
  const isCustomSize = typeof size === "number" || size != null && !BUTTON_SIZE_VALUES.includes(size);
288
302
  const sizeTokenValue = typeof size === "number" ? `${size}px` : isCustomSize ? size : void 0;
@@ -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 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_OUTLINE_2_STYLES,\n DANGER_OUTLINE_STYLES,\n DANGER_PRIMARY_STYLES,\n DEFAULT_CLEAR_STYLES,\n DEFAULT_LINK_STYLES,\n DEFAULT_OUTLINE_2_STYLES,\n DEFAULT_OUTLINE_STYLES,\n DEFAULT_PRIMARY_STYLES,\n NOTE_CLEAR_STYLES,\n NOTE_LINK_STYLES,\n NOTE_OUTLINE_2_STYLES,\n NOTE_OUTLINE_STYLES,\n NOTE_PRIMARY_STYLES,\n SPECIAL_CLEAR_STYLES,\n SPECIAL_LINK_STYLES,\n SPECIAL_OUTLINE_STYLES,\n SPECIAL_PRIMARY_STYLES,\n SUCCESS_CLEAR_STYLES,\n SUCCESS_LINK_STYLES,\n SUCCESS_OUTLINE_2_STYLES,\n SUCCESS_OUTLINE_STYLES,\n SUCCESS_PRIMARY_STYLES,\n WARNING_CLEAR_STYLES,\n WARNING_LINK_STYLES,\n WARNING_OUTLINE_2_STYLES,\n WARNING_OUTLINE_STYLES,\n WARNING_PRIMARY_STYLES,\n} from '../../../data/item-themes';\nimport { LoadingIcon } from '../../../icons';\nimport { DynamicIcon, mergeProps, resolveIcon } from '../../../utils/react';\nimport { extractStyles } from '../../../utils/styles';\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 | 'danger'\n | 'link'\n | 'clear'\n | 'outline'\n | 'outline-2'\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.outline'\n | 'default.outline-2'\n | 'default.clear'\n | 'default.link'\n | 'danger.primary'\n | 'danger.outline'\n | 'danger.outline-2'\n | 'danger.clear'\n | 'danger.link'\n | 'success.primary'\n | 'success.outline'\n | 'success.outline-2'\n | 'success.clear'\n | 'success.link'\n | 'warning.primary'\n | 'warning.outline'\n | 'warning.outline-2'\n | 'warning.clear'\n | 'warning.link'\n | 'note.primary'\n | 'note.outline'\n | 'note.outline-2'\n | 'note.clear'\n | 'note.link'\n | 'special.primary'\n | 'special.outline'\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=outline | type=outline-2 | 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.outline': DEFAULT_OUTLINE_STYLES,\n 'default.outline-2': DEFAULT_OUTLINE_2_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.outline': DANGER_OUTLINE_STYLES,\n 'danger.outline-2': DANGER_OUTLINE_2_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.outline': SUCCESS_OUTLINE_STYLES,\n 'success.outline-2': SUCCESS_OUTLINE_2_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.outline': WARNING_OUTLINE_STYLES,\n 'warning.outline-2': WARNING_OUTLINE_2_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.outline': NOTE_OUTLINE_STYLES,\n 'note.outline-2': NOTE_OUTLINE_2_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.outline': SPECIAL_OUTLINE_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 splitContext?.isDisabled || props.isDisabled || props.isLoading;\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 // The `special` theme has no `outline-2` variant (it paints over\n // `#special-surface`, not `#surface-2`/`#surface-3`); fall back to\n // `outline` so the button still renders.\n const effectiveType =\n theme === 'special' && type === 'outline-2' ? 'outline' : type;\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}.${effectiveType ?? 'outline'}` as ButtonVariant}\n data-theme={theme}\n data-type={effectiveType ?? 'outline'}\n data-size={size}\n data-popover-dismiss=\"\"\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, PressEvent } from '@react-types/shared';\nimport {\n CONTAINER_STYLES,\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 useRef,\n useState,\n} from 'react';\nimport { OverlayProps } from 'react-aria';\n\nimport { useEvent } from '../../../_internal';\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_OUTLINE_2_STYLES,\n DANGER_OUTLINE_STYLES,\n DANGER_PRIMARY_STYLES,\n DEFAULT_CLEAR_STYLES,\n DEFAULT_LINK_STYLES,\n DEFAULT_OUTLINE_2_STYLES,\n DEFAULT_OUTLINE_STYLES,\n DEFAULT_PRIMARY_STYLES,\n NOTE_CLEAR_STYLES,\n NOTE_LINK_STYLES,\n NOTE_OUTLINE_2_STYLES,\n NOTE_OUTLINE_STYLES,\n NOTE_PRIMARY_STYLES,\n SPECIAL_CLEAR_STYLES,\n SPECIAL_LINK_STYLES,\n SPECIAL_OUTLINE_STYLES,\n SPECIAL_PRIMARY_STYLES,\n SUCCESS_CLEAR_STYLES,\n SUCCESS_LINK_STYLES,\n SUCCESS_OUTLINE_2_STYLES,\n SUCCESS_OUTLINE_STYLES,\n SUCCESS_PRIMARY_STYLES,\n WARNING_CLEAR_STYLES,\n WARNING_LINK_STYLES,\n WARNING_OUTLINE_2_STYLES,\n WARNING_OUTLINE_STYLES,\n WARNING_PRIMARY_STYLES,\n} from '../../../data/item-themes';\nimport { LoadingIcon } from '../../../icons';\nimport {\n DynamicIcon,\n mergeProps,\n resolveIcon,\n useDismissParentPopover,\n} from '../../../utils/react';\nimport { extractStyles } from '../../../utils/styles';\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 | 'danger'\n | 'link'\n | 'clear'\n | 'outline'\n | 'outline-2'\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.outline'\n | 'default.outline-2'\n | 'default.clear'\n | 'default.link'\n | 'danger.primary'\n | 'danger.outline'\n | 'danger.outline-2'\n | 'danger.clear'\n | 'danger.link'\n | 'success.primary'\n | 'success.outline'\n | 'success.outline-2'\n | 'success.clear'\n | 'success.link'\n | 'warning.primary'\n | 'warning.outline'\n | 'warning.outline-2'\n | 'warning.clear'\n | 'warning.link'\n | 'note.primary'\n | 'note.outline'\n | 'note.outline-2'\n | 'note.clear'\n | 'note.link'\n | 'special.primary'\n | 'special.outline'\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=outline | type=outline-2 | 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.outline': DEFAULT_OUTLINE_STYLES,\n 'default.outline-2': DEFAULT_OUTLINE_2_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.outline': DANGER_OUTLINE_STYLES,\n 'danger.outline-2': DANGER_OUTLINE_2_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.outline': SUCCESS_OUTLINE_STYLES,\n 'success.outline-2': SUCCESS_OUTLINE_2_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.outline': WARNING_OUTLINE_STYLES,\n 'warning.outline-2': WARNING_OUTLINE_2_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.outline': NOTE_OUTLINE_STYLES,\n 'note.outline-2': NOTE_OUTLINE_2_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.outline': SPECIAL_OUTLINE_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 onPress: userOnPress,\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 splitContext?.isDisabled || props.isDisabled || props.isLoading;\n const isLoading = props.isLoading;\n const isSelected = props.isSelected;\n\n // Default: pressing a Button inside an open popover closes that popover.\n // Opt-outs (handled inline below):\n // - `data-popover-trigger` (auto, applied by MenuTrigger/DialogTrigger\n // type='popover' so triggers don't dismiss the popover they live in)\n // - `data-popover-keep` on self or any ancestor (manual opt-out for\n // toggles, custom inline editors, etc.)\n // Modals/trays don't subscribe at all, so this is a no-op there.\n const dismissParentPopover = useDismissParentPopover();\n const buttonElementRef = useRef<HTMLElement | null>(null);\n\n const wrappedOnPress = useEvent((e: PressEvent) => {\n userOnPress?.(e);\n const el = buttonElementRef.current;\n if (!el) return;\n if (el.hasAttribute('data-popover-trigger')) return;\n if (el.closest('[data-popover-keep]')) return;\n dismissParentPopover(el);\n });\n\n const { actionProps, isPressed } = useAction(\n {\n ...allProps,\n isDisabled,\n onPress: wrappedOnPress,\n ...(label ? { label } : {}),\n },\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 // Track the rendered DOM node so the dismiss wrapper around `onPress`\n // can read it synchronously without coupling to `useAction`'s ref shape.\n buttonElementRef.current = element;\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 // The `special` theme has no `outline-2` variant (it paints over\n // `#special-surface`, not `#surface-2`/`#surface-3`); fall back to\n // `outline` so the button still renders.\n const effectiveType =\n theme === 'special' && type === 'outline-2' ? 'outline' : type;\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}.${effectiveType ?? 'outline'}` as ButtonVariant}\n data-theme={theme}\n data-type={effectiveType ?? 'outline'}\n data-size={size}\n data-popover-dismiss=\"\"\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.141.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.142.1 | 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.141.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.142.1 | 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.141.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.142.1 | Cube Dev Team */
2
2
  import { createContext, useContext } from "react";
3
3
 
4
4
  //#region src/components/actions/ButtonSplit/context.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.141.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.142.1 | 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";
@@ -13,14 +13,13 @@ import { CONTAINER_STYLES, filterBaseProps } from "@tenphi/tasty";
13
13
  import React, { useCallback, useMemo, useRef, useState } from "react";
14
14
  import { jsx, jsxs } from "react/jsx-runtime";
15
15
  import { useFilter, useMenu } from "react-aria";
16
- import { useDOMRef } from "@react-spectrum/utils";
17
16
  import { Item, Section, useTreeState } from "react-stately";
18
- import { useSyncRef } from "@react-aria/utils";
17
+ import { useObjectRef, useSyncRef } from "@react-aria/utils";
19
18
 
20
19
  //#region src/components/actions/CommandMenu/CommandMenu.tsx
21
20
  function CommandMenu(props, ref) {
22
21
  const { searchPlaceholder = "Search commands...", searchValue: controlledSearchValue, onSearchChange, filter: customFilter, emptyLabel = "No commands found", searchInputStyles, headerStyles, footerStyles, isLoading = false, shouldFilter = true, autoFocus = true, size = "medium", qa, styles, selectedKeys, defaultSelectedKeys, onSelectionChange, header, footer, ...restMenuProps } = props;
23
- const domRef = useDOMRef(ref);
22
+ const domRef = useObjectRef(ref);
24
23
  const searchInputRef = useRef(null);
25
24
  const contextProps = useMenuContext();
26
25
  const completeProps = mergeProps$1(contextProps, restMenuProps, {