@cube-dev/ui-kit 0.104.0 → 0.105.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 (615) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/es/_internal/hooks/index.js +1 -1
  3. package/es/_internal/hooks/use-chained-callback.js +1 -1
  4. package/es/_internal/hooks/use-debounced-value.js +1 -1
  5. package/es/_internal/hooks/use-deprecation-warning.js +1 -1
  6. package/es/_internal/hooks/use-effect-once.js +1 -1
  7. package/es/_internal/hooks/use-event.js +1 -1
  8. package/es/_internal/hooks/use-is-first-render.js +1 -1
  9. package/es/_internal/hooks/use-sync-ref.js +1 -1
  10. package/es/_internal/hooks/use-timer/index.js +1 -1
  11. package/es/_internal/hooks/use-timer/timer.js +1 -1
  12. package/es/_internal/hooks/use-timer/use-timer.js +1 -1
  13. package/es/_internal/hooks/use-update-effect.js +1 -1
  14. package/es/_internal/hooks/use-warn.js +1 -1
  15. package/es/_internal/index.js +1 -1
  16. package/es/components/Block.js +1 -1
  17. package/es/components/CollectionItem.js +1 -1
  18. package/es/components/GlobalStyles.js +1 -1
  19. package/es/components/GridProvider.js +1 -1
  20. package/es/components/HiddenInput.js +1 -1
  21. package/es/components/OpenTrasition.js +1 -1
  22. package/es/components/Root.js +3 -2
  23. package/es/components/actions/Action/Action.js +1 -1
  24. package/es/components/actions/Button/Button.js +2 -1
  25. package/es/components/actions/Button/index.js +1 -1
  26. package/es/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  27. package/es/components/actions/CommandMenu/CommandMenu.js +1 -1
  28. package/es/components/actions/CommandMenu/index.js +1 -1
  29. package/es/components/actions/CommandMenu/styled.js +1 -1
  30. package/es/components/actions/ItemAction/ItemAction.js +1 -1
  31. package/es/components/actions/ItemAction/index.js +1 -1
  32. package/es/components/actions/ItemActionContext.js +1 -1
  33. package/es/components/actions/ItemButton/ItemButton.js +1 -1
  34. package/es/components/actions/ItemButton/index.js +1 -1
  35. package/es/components/actions/Link/Link.js +1 -1
  36. package/es/components/actions/Menu/Menu.js +1 -1
  37. package/es/components/actions/Menu/MenuItem.js +1 -1
  38. package/es/components/actions/Menu/MenuSection.js +1 -1
  39. package/es/components/actions/Menu/MenuTrigger.js +1 -1
  40. package/es/components/actions/Menu/SubMenuTrigger.js +1 -1
  41. package/es/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  42. package/es/components/actions/Menu/context.js +1 -1
  43. package/es/components/actions/Menu/index.js +1 -1
  44. package/es/components/actions/Menu/styled.js +1 -1
  45. package/es/components/actions/index.js +1 -1
  46. package/es/components/actions/use-action.js +1 -1
  47. package/es/components/actions/use-anchored-menu.js +1 -1
  48. package/es/components/actions/use-context-menu.js +1 -1
  49. package/es/components/content/ActiveZone/ActiveZone.js +1 -1
  50. package/es/components/content/Alert/Alert.js +1 -1
  51. package/es/components/content/Alert/index.js +1 -1
  52. package/es/components/content/Alert/types.js +1 -1
  53. package/es/components/content/Alert/use-alert.js +1 -1
  54. package/es/components/content/Avatar/Avatar.js +1 -1
  55. package/es/components/content/Badge/Badge.js +1 -1
  56. package/es/components/content/Card/Card.js +1 -1
  57. package/es/components/content/Content.js +1 -1
  58. package/es/components/content/CopyPasteBlock/CopyPasteBlock.js +3 -3
  59. package/es/components/content/CopyPasteBlock/index.js +1 -1
  60. package/es/components/content/CopySnippet/CopySnippet.js +3 -3
  61. package/es/components/content/CopySnippet/index.js +1 -1
  62. package/es/components/content/Disclosure/Disclosure.js +1 -1
  63. package/es/components/content/Disclosure/index.js +1 -1
  64. package/es/components/content/Divider.js +1 -1
  65. package/es/components/content/Footer.js +1 -1
  66. package/es/components/content/Header.js +1 -1
  67. package/es/components/content/HotKeys/HotKeys.js +1 -1
  68. package/es/components/content/HotKeys/index.js +1 -1
  69. package/es/components/content/Item/Item.js +1 -1
  70. package/es/components/content/Item/index.js +1 -1
  71. package/es/components/content/ItemBadge/ItemBadge.js +1 -1
  72. package/es/components/content/ItemBadge/index.js +1 -1
  73. package/es/components/content/Layout/GridLayout.js +1 -1
  74. package/es/components/content/Layout/Layout.js +1 -1
  75. package/es/components/content/Layout/LayoutBlock.js +1 -1
  76. package/es/components/content/Layout/LayoutCenter.js +1 -1
  77. package/es/components/content/Layout/LayoutContainer.js +1 -1
  78. package/es/components/content/Layout/LayoutContent.js +1 -1
  79. package/es/components/content/Layout/LayoutContext.js +1 -1
  80. package/es/components/content/Layout/LayoutFlex.js +1 -1
  81. package/es/components/content/Layout/LayoutFooter.js +1 -1
  82. package/es/components/content/Layout/LayoutGrid.js +1 -1
  83. package/es/components/content/Layout/LayoutHeader.js +2 -2
  84. package/es/components/content/Layout/LayoutPane.js +1 -1
  85. package/es/components/content/Layout/LayoutPanel.js +1 -1
  86. package/es/components/content/Layout/LayoutPanelHeader.js +1 -1
  87. package/es/components/content/Layout/LayoutToolbar.js +1 -1
  88. package/es/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  89. package/es/components/content/Layout/index.js +1 -1
  90. package/es/components/content/Layout/utils.js +1 -1
  91. package/es/components/content/List/SectionHeading.js +1 -1
  92. package/es/components/content/List/index.js +1 -1
  93. package/es/components/content/Paragraph.js +1 -1
  94. package/es/components/content/Placeholder/Placeholder.js +1 -1
  95. package/es/components/content/PrismCode/PrismCode.js +1 -1
  96. package/es/components/content/PrismCode/prismSetup.js +1 -1
  97. package/es/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  98. package/es/components/content/Result/Result.js +1 -1
  99. package/es/components/content/Skeleton/Skeleton.js +1 -1
  100. package/es/components/content/Tag/Tag.js +1 -1
  101. package/es/components/content/Text.js +1 -1
  102. package/es/components/content/TextItem/TextItem.js +1 -1
  103. package/es/components/content/TextItem/index.js +1 -1
  104. package/es/components/content/Title.js +1 -1
  105. package/es/components/content/highlightText.js +1 -1
  106. package/es/components/content/use-auto-tooltip.js +1 -1
  107. package/es/components/fields/Checkbox/Checkbox.js +1 -1
  108. package/es/components/fields/Checkbox/CheckboxGroup.js +1 -1
  109. package/es/components/fields/Checkbox/context.js +1 -1
  110. package/es/components/fields/Checkbox/index.js +1 -1
  111. package/es/components/fields/ComboBox/ComboBox.js +1 -1
  112. package/es/components/fields/ComboBox/index.js +1 -1
  113. package/es/components/fields/DatePicker/DateInput.js +1 -1
  114. package/es/components/fields/DatePicker/DateInputBase.js +1 -1
  115. package/es/components/fields/DatePicker/DatePicker.js +1 -1
  116. package/es/components/fields/DatePicker/DatePickerButton.js +1 -1
  117. package/es/components/fields/DatePicker/DatePickerElement.js +1 -1
  118. package/es/components/fields/DatePicker/DatePickerInput.js +1 -1
  119. package/es/components/fields/DatePicker/DatePickerSegment.js +1 -1
  120. package/es/components/fields/DatePicker/DateRangePicker.js +1 -1
  121. package/es/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  122. package/es/components/fields/DatePicker/TimeInput.js +1 -1
  123. package/es/components/fields/DatePicker/index.js +1 -1
  124. package/es/components/fields/DatePicker/intl.js +1 -1
  125. package/es/components/fields/DatePicker/parseDate.js +1 -1
  126. package/es/components/fields/DatePicker/props.js +1 -1
  127. package/es/components/fields/DatePicker/types.js +1 -1
  128. package/es/components/fields/DatePicker/utils.js +1 -1
  129. package/es/components/fields/FileInput/FileInput.js +1 -1
  130. package/es/components/fields/FilterListBox/FilterListBox.js +1 -1
  131. package/es/components/fields/FilterListBox/index.js +1 -1
  132. package/es/components/fields/FilterPicker/FilterPicker.js +1 -1
  133. package/es/components/fields/FilterPicker/index.js +1 -1
  134. package/es/components/fields/Input/Input.js +1 -1
  135. package/es/components/fields/Input/index.js +1 -1
  136. package/es/components/fields/ListBox/ListBox.js +1 -1
  137. package/es/components/fields/ListBox/index.js +1 -1
  138. package/es/components/fields/NumberInput/NumberInput.js +1 -1
  139. package/es/components/fields/NumberInput/StepButton.js +1 -1
  140. package/es/components/fields/PasswordInput/PasswordInput.js +1 -1
  141. package/es/components/fields/Picker/Picker.js +1 -1
  142. package/es/components/fields/Picker/index.js +1 -1
  143. package/es/components/fields/RadioGroup/Radio.js +1 -1
  144. package/es/components/fields/RadioGroup/RadioGroup.js +1 -1
  145. package/es/components/fields/RadioGroup/context.js +1 -1
  146. package/es/components/fields/RadioGroup/index.js +1 -1
  147. package/es/components/fields/SearchInput/SearchInput.js +1 -1
  148. package/es/components/fields/SearchInput/index.js +1 -1
  149. package/es/components/fields/Select/Select.js +1 -1
  150. package/es/components/fields/Select/index.js +1 -1
  151. package/es/components/fields/Slider/Gradation.js +1 -1
  152. package/es/components/fields/Slider/Header.js +1 -1
  153. package/es/components/fields/Slider/RangeSlider.js +1 -1
  154. package/es/components/fields/Slider/Slider.js +1 -1
  155. package/es/components/fields/Slider/SliderBase.js +1 -1
  156. package/es/components/fields/Slider/SliderInput.js +1 -1
  157. package/es/components/fields/Slider/SliderThumb.js +1 -1
  158. package/es/components/fields/Slider/SliderTrack.js +1 -1
  159. package/es/components/fields/Slider/elements.js +1 -1
  160. package/es/components/fields/Slider/index.js +1 -1
  161. package/es/components/fields/Slider/types.js +1 -1
  162. package/es/components/fields/Switch/Switch.js +1 -1
  163. package/es/components/fields/Switch/index.js +1 -1
  164. package/es/components/fields/TextArea/TextArea.js +1 -1
  165. package/es/components/fields/TextArea/index.js +1 -1
  166. package/es/components/fields/TextInput/TextInput.js +1 -1
  167. package/es/components/fields/TextInput/TextInputBase.js +1 -1
  168. package/es/components/fields/TextInput/index.js +1 -1
  169. package/es/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  170. package/es/components/fields/TextInputMapper/index.js +1 -1
  171. package/es/components/fields/index.js +1 -1
  172. package/es/components/form/FieldWrapper/FieldWrapper.js +1 -1
  173. package/es/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
  174. package/es/components/form/FieldWrapper/index.js +1 -1
  175. package/es/components/form/FieldWrapper/types.js +1 -1
  176. package/es/components/form/Form/Field.js +1 -1
  177. package/es/components/form/Form/Form.js +1 -1
  178. package/es/components/form/Form/ResetButton/ResetButton.js +1 -1
  179. package/es/components/form/Form/ResetButton/index.js +1 -1
  180. package/es/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  181. package/es/components/form/Form/SubmitButton/index.js +1 -1
  182. package/es/components/form/Form/SubmitError.js +1 -1
  183. package/es/components/form/Form/index.js +1 -1
  184. package/es/components/form/Form/types.js +1 -1
  185. package/es/components/form/Form/use-field/index.js +1 -1
  186. package/es/components/form/Form/use-field/types.js +1 -1
  187. package/es/components/form/Form/use-field/use-field-props.js +1 -1
  188. package/es/components/form/Form/use-field/use-field.js +1 -1
  189. package/es/components/form/Form/use-form.js +1 -1
  190. package/es/components/form/Form/validation.js +1 -1
  191. package/es/components/form/Label.js +1 -1
  192. package/es/components/form/index.js +1 -1
  193. package/es/components/form/wrapper.js +1 -1
  194. package/es/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  195. package/es/components/helpers/DisplayTransition/index.js +1 -1
  196. package/es/components/helpers/IconSwitch/IconSwitch.js +1 -1
  197. package/es/components/helpers/index.js +1 -1
  198. package/es/components/layout/Flex.js +1 -1
  199. package/es/components/layout/Flow.js +1 -1
  200. package/es/components/layout/Grid.js +1 -1
  201. package/es/components/layout/Panel.js +1 -1
  202. package/es/components/layout/Prefix.js +1 -1
  203. package/es/components/layout/ResizablePanel.js +1 -1
  204. package/es/components/layout/Space.js +1 -1
  205. package/es/components/layout/Suffix.js +1 -1
  206. package/es/components/navigation/Tabs/DraggableTabList.js +1 -1
  207. package/es/components/navigation/Tabs/EditableTitle.js +1 -1
  208. package/es/components/navigation/Tabs/TabButton.js +1 -1
  209. package/es/components/navigation/Tabs/TabDropIndicator.js +1 -1
  210. package/es/components/navigation/Tabs/TabPanel.js +1 -1
  211. package/es/components/navigation/Tabs/TabPicker.js +1 -1
  212. package/es/components/navigation/Tabs/Tabs.js +1 -1
  213. package/es/components/navigation/Tabs/TabsAction.js +1 -1
  214. package/es/components/navigation/Tabs/TabsContext.js +1 -1
  215. package/es/components/navigation/Tabs/index.js +1 -1
  216. package/es/components/navigation/Tabs/styled.js +1 -1
  217. package/es/components/navigation/Tabs/types.js +1 -1
  218. package/es/components/navigation/Tabs/use-tab-editing.js +1 -1
  219. package/es/components/navigation/Tabs/use-tab-indicator.js +1 -1
  220. package/es/components/navigation/index.js +1 -1
  221. package/es/components/organisms/FileTabs/FileTabs.js +1 -1
  222. package/es/components/organisms/StatsCard/StatsCard.js +1 -1
  223. package/es/components/other/Calendar/Calendar.js +1 -1
  224. package/es/components/other/Calendar/CalendarCell.js +1 -1
  225. package/es/components/other/Calendar/CalendarGrid.js +1 -1
  226. package/es/components/other/Calendar/RangeCalendar.js +1 -1
  227. package/es/components/other/CloudLogo/CloudLogo.js +1 -1
  228. package/es/components/overlays/AlertDialog/AlertDialog.js +1 -1
  229. package/es/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  230. package/es/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  231. package/es/components/overlays/AlertDialog/index.js +1 -1
  232. package/es/components/overlays/AlertDialog/types.js +1 -1
  233. package/es/components/overlays/Dialog/Dialog.js +1 -1
  234. package/es/components/overlays/Dialog/DialogContainer.js +1 -1
  235. package/es/components/overlays/Dialog/DialogForm.js +1 -1
  236. package/es/components/overlays/Dialog/DialogTrigger.js +1 -1
  237. package/es/components/overlays/Dialog/context.js +1 -1
  238. package/es/components/overlays/Dialog/index.js +1 -1
  239. package/es/components/overlays/Dialog/use-dialog-container.js +1 -1
  240. package/es/components/overlays/Modal/Modal.js +1 -1
  241. package/es/components/overlays/Modal/OpenTransition.js +1 -1
  242. package/es/components/overlays/Modal/Overlay.js +1 -1
  243. package/es/components/overlays/Modal/Popover.js +1 -1
  244. package/es/components/overlays/Modal/Tray.js +1 -1
  245. package/es/components/overlays/Modal/Underlay.js +1 -1
  246. package/es/components/overlays/Modal/index.js +1 -1
  247. package/es/components/overlays/Modal/types.js +1 -1
  248. package/es/components/overlays/NewNotifications/Bar/FloatingNotification.js +1 -1
  249. package/es/components/overlays/NewNotifications/Bar/NotificationsBar.js +1 -1
  250. package/es/components/overlays/NewNotifications/Bar/TransitionComponent.js +1 -1
  251. package/es/components/overlays/NewNotifications/Bar/index.js +1 -1
  252. package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogContext.js +1 -1
  253. package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogTrigger.js +1 -1
  254. package/es/components/overlays/NewNotifications/Dialog/index.js +1 -1
  255. package/es/components/overlays/NewNotifications/Notification.js +1 -1
  256. package/es/components/overlays/NewNotifications/NotificationView/NotificationAction.js +1 -1
  257. package/es/components/overlays/NewNotifications/NotificationView/NotificationCloseButton.js +1 -1
  258. package/es/components/overlays/NewNotifications/NotificationView/NotificationDescription.js +1 -1
  259. package/es/components/overlays/NewNotifications/NotificationView/NotificationFooter.js +1 -1
  260. package/es/components/overlays/NewNotifications/NotificationView/NotificationHeader.js +1 -1
  261. package/es/components/overlays/NewNotifications/NotificationView/NotificationIcon.js +1 -1
  262. package/es/components/overlays/NewNotifications/NotificationView/NotificationProvider.js +1 -1
  263. package/es/components/overlays/NewNotifications/NotificationView/NotificationView.js +1 -1
  264. package/es/components/overlays/NewNotifications/NotificationView/index.js +1 -1
  265. package/es/components/overlays/NewNotifications/NotificationView/types.js +1 -1
  266. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsContext.js +1 -1
  267. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsProvider.js +1 -1
  268. package/es/components/overlays/NewNotifications/NotificationsContext/index.js +1 -1
  269. package/es/components/overlays/NewNotifications/NotificationsContext/use-notifications.js +1 -1
  270. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsList.js +1 -1
  271. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsListItem.js +1 -1
  272. package/es/components/overlays/NewNotifications/NotificationsList/index.js +1 -1
  273. package/es/components/overlays/NewNotifications/NotificationsList/types.js +1 -1
  274. package/es/components/overlays/NewNotifications/hooks/index.js +1 -1
  275. package/es/components/overlays/NewNotifications/hooks/types.js +1 -1
  276. package/es/components/overlays/NewNotifications/hooks/use-notification-list-item.js +1 -1
  277. package/es/components/overlays/NewNotifications/hooks/use-notifications-api.js +1 -1
  278. package/es/components/overlays/NewNotifications/hooks/use-notifications-list.js +1 -1
  279. package/es/components/overlays/NewNotifications/hooks/use-notifications-observer.js +1 -1
  280. package/es/components/overlays/NewNotifications/index.js +1 -1
  281. package/es/components/overlays/NewNotifications/types.js +1 -1
  282. package/es/components/overlays/Notification/Notification.js +1 -1
  283. package/es/components/overlays/OverlayWrapper.js +1 -1
  284. package/es/components/overlays/Toast/ToastItem.js +26 -0
  285. package/es/components/overlays/Toast/ToastProvider.js +360 -0
  286. package/es/components/overlays/Toast/index.js +92 -0
  287. package/es/components/overlays/{Toasts → Toast}/types.js +1 -1
  288. package/es/components/overlays/Toast/useProgressToast.js +177 -0
  289. package/es/components/overlays/Toast/useToast.js +96 -0
  290. package/es/components/overlays/Tooltip/Tooltip.js +1 -1
  291. package/es/components/overlays/Tooltip/TooltipProvider.js +1 -1
  292. package/es/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  293. package/es/components/overlays/Tooltip/context.js +1 -1
  294. package/es/components/overlays/Tooltip/index.js +1 -1
  295. package/es/components/portal/Portal.js +1 -1
  296. package/es/components/portal/PortalProvider.js +1 -1
  297. package/es/components/portal/index.js +1 -1
  298. package/es/components/portal/types.js +1 -1
  299. package/es/components/portal/usePortal.js +1 -1
  300. package/es/components/shared/InvalidIcon.js +1 -1
  301. package/es/components/shared/ValidIcon.js +1 -1
  302. package/es/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  303. package/es/components/status/LoadingAnimation/index.js +1 -1
  304. package/es/components/status/Spin/Cube.js +1 -1
  305. package/es/components/status/Spin/InternalSpinner.js +1 -1
  306. package/es/components/status/Spin/Spin.js +1 -1
  307. package/es/components/status/Spin/SpinsContainer.js +1 -1
  308. package/es/components/status/Spin/index.js +1 -1
  309. package/es/components/status/Spin/types.js +1 -1
  310. package/es/components/status/index.js +1 -1
  311. package/es/data/item-themes.js +27 -27
  312. package/es/data/themes.js +1 -1
  313. package/es/icons/AdjustmentsHorizontalIcon.js +1 -1
  314. package/es/icons/AdjustmentsIcon.js +1 -1
  315. package/es/icons/AiIcon.js +1 -1
  316. package/es/icons/AreaChartIcon.js +1 -1
  317. package/es/icons/BackwardIcon.js +1 -1
  318. package/es/icons/BarChartIcon.js +1 -1
  319. package/es/icons/BellFilledIcon.js +1 -1
  320. package/es/icons/BellIcon.js +1 -1
  321. package/es/icons/BooleanIcon.js +1 -1
  322. package/es/icons/CalendarEditIcon.js +1 -1
  323. package/es/icons/CalendarIcon.js +1 -1
  324. package/es/icons/CaretDownIcon.js +1 -1
  325. package/es/icons/CaretUpIcon.js +1 -1
  326. package/es/icons/ChartAreaStackedIcon.js +1 -1
  327. package/es/icons/ChartAreaStackedPercentageIcon.js +1 -1
  328. package/es/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  329. package/es/icons/ChartBarGroupedIcon.js +1 -1
  330. package/es/icons/ChartBarHorizontalIcon.js +1 -1
  331. package/es/icons/ChartBarLineIcon.js +1 -1
  332. package/es/icons/ChartBarStackedHorizontalIcon.js +1 -1
  333. package/es/icons/ChartBarStackedIcon.js +1 -1
  334. package/es/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  335. package/es/icons/ChartBarStackedPercentageIcon.js +1 -1
  336. package/es/icons/ChartBoxPlot2Icon.js +1 -1
  337. package/es/icons/ChartBoxPlotIcon.js +1 -1
  338. package/es/icons/ChartBubbleIcon.js +1 -1
  339. package/es/icons/ChartDonut2Icon.js +1 -1
  340. package/es/icons/ChartFunnelIcon.js +1 -1
  341. package/es/icons/ChartHeatmapIcon.js +1 -1
  342. package/es/icons/ChartKPIIcon.js +1 -1
  343. package/es/icons/ChartPie2Icon.js +1 -1
  344. package/es/icons/ChartScatterIcon.js +1 -1
  345. package/es/icons/CheckCircleFilledIcon.js +1 -1
  346. package/es/icons/CheckCircleIcon.js +1 -1
  347. package/es/icons/CheckIcon.js +1 -1
  348. package/es/icons/CircleFilledIcon.js +1 -1
  349. package/es/icons/ClearIcon.js +1 -1
  350. package/es/icons/CloseCircleFilledIcon.js +1 -1
  351. package/es/icons/CloseCircleIcon.js +1 -1
  352. package/es/icons/CloseIcon.js +1 -1
  353. package/es/icons/CodeIcon.js +1 -1
  354. package/es/icons/ColumnTotalIcon.js +1 -1
  355. package/es/icons/CopyIcon.js +1 -1
  356. package/es/icons/CountIcon.js +1 -1
  357. package/es/icons/CubeIcon.js +1 -1
  358. package/es/icons/CubePauseIcon.js +1 -1
  359. package/es/icons/CubePlayIcon.js +1 -1
  360. package/es/icons/CurrencyDollarIcon.js +1 -1
  361. package/es/icons/DangerIcon.js +1 -1
  362. package/es/icons/DashboardIcon.js +1 -1
  363. package/es/icons/DatabaseIcon.js +1 -1
  364. package/es/icons/DecimalDecreaseIcon.js +1 -1
  365. package/es/icons/DecimalIncreaseIcon.js +1 -1
  366. package/es/icons/DirectionIcon.js +1 -1
  367. package/es/icons/DonutIcon.js +1 -1
  368. package/es/icons/DownIcon.js +1 -1
  369. package/es/icons/EditIcon.js +1 -1
  370. package/es/icons/ExclamationCircleFilledIcon.js +1 -1
  371. package/es/icons/ExclamationCircleIcon.js +1 -1
  372. package/es/icons/ExclamationIcon.js +1 -1
  373. package/es/icons/EyeIcon.js +1 -1
  374. package/es/icons/EyeInvisibleIcon.js +1 -1
  375. package/es/icons/FilterIcon.js +1 -1
  376. package/es/icons/FolderFilledIcon.js +1 -1
  377. package/es/icons/FolderIcon.js +1 -1
  378. package/es/icons/FolderOpenFilledIcon.js +1 -1
  379. package/es/icons/FolderOpenIcon.js +1 -1
  380. package/es/icons/ForwardIcon.js +1 -1
  381. package/es/icons/HierarchyIcon.js +1 -1
  382. package/es/icons/HierarchyOpenIcon.js +1 -1
  383. package/es/icons/Icon.js +1 -1
  384. package/es/icons/InfoCircleIcon.js +1 -1
  385. package/es/icons/InfoIcon.js +1 -1
  386. package/es/icons/KeyIcon.js +1 -1
  387. package/es/icons/LeftIcon.js +1 -1
  388. package/es/icons/LineChartIcon.js +1 -1
  389. package/es/icons/LoadingIcon.js +1 -1
  390. package/es/icons/LockFilledIcon.js +1 -1
  391. package/es/icons/LockIcon.js +1 -1
  392. package/es/icons/MoreIcon.js +1 -1
  393. package/es/icons/NotAllowedIcon.js +1 -1
  394. package/es/icons/Number123Icon.js +1 -1
  395. package/es/icons/NumberIcon.js +1 -1
  396. package/es/icons/PauseCircleFilledIcon.js +1 -1
  397. package/es/icons/PauseCircleIcon.js +1 -1
  398. package/es/icons/PauseIcon.js +1 -1
  399. package/es/icons/PercentageIcon.js +1 -1
  400. package/es/icons/PieChartIcon.js +1 -1
  401. package/es/icons/PlayCircleIcon.js +1 -1
  402. package/es/icons/PlayIcon.js +1 -1
  403. package/es/icons/PlusIcon.js +1 -1
  404. package/es/icons/ProgressBarIcon.js +1 -1
  405. package/es/icons/ReloadIcon.js +1 -1
  406. package/es/icons/ReportIcon.js +1 -1
  407. package/es/icons/ReturnIcon.js +1 -1
  408. package/es/icons/RightIcon.js +1 -1
  409. package/es/icons/RowTotalsIcon.js +1 -1
  410. package/es/icons/SchemeIcon.js +1 -1
  411. package/es/icons/SearchIcon.js +1 -1
  412. package/es/icons/SemanticQueryIcon.js +1 -1
  413. package/es/icons/SettingsIcon.js +1 -1
  414. package/es/icons/ShieldFilledIcon.js +1 -1
  415. package/es/icons/ShieldIcon.js +1 -1
  416. package/es/icons/SlashIcon.js +1 -1
  417. package/es/icons/SparklesIcon.js +1 -1
  418. package/es/icons/SqlIcon.js +1 -1
  419. package/es/icons/StatsIcon.js +1 -1
  420. package/es/icons/StopIcon.js +1 -1
  421. package/es/icons/StringIcon.js +1 -1
  422. package/es/icons/SubtotalsIcon.js +1 -1
  423. package/es/icons/SwitchIcon.js +1 -1
  424. package/es/icons/TableIcon.js +1 -1
  425. package/es/icons/ThumbsDownIcon.js +1 -1
  426. package/es/icons/ThumbsUpIcon.js +1 -1
  427. package/es/icons/ThunderboltCrossedIcon.js +1 -1
  428. package/es/icons/ThunderboltFilledIcon.js +1 -1
  429. package/es/icons/ThunderboltIcon.js +1 -1
  430. package/es/icons/TimeIcon.js +1 -1
  431. package/es/icons/TrashIcon.js +1 -1
  432. package/es/icons/UnlockIcon.js +1 -1
  433. package/es/icons/UpIcon.js +1 -1
  434. package/es/icons/UserGroupIcon.js +1 -1
  435. package/es/icons/UserIcon.js +1 -1
  436. package/es/icons/UserLockIcon.js +1 -1
  437. package/es/icons/ViewIcon.js +1 -1
  438. package/es/icons/WarningFilledIcon.js +1 -1
  439. package/es/icons/WarningIcon.js +1 -1
  440. package/es/icons/index.js +1 -1
  441. package/es/icons/wrap-icon.js +1 -1
  442. package/es/index.js +2 -2
  443. package/es/provider.js +1 -1
  444. package/es/providers/TrackingProvider.js +1 -1
  445. package/es/providers/navigation.types.js +1 -1
  446. package/es/providers/navigationAdapter.default.js +1 -1
  447. package/es/services/notification.js +1 -1
  448. package/es/shared/form.js +1 -1
  449. package/es/shared/index.js +1 -1
  450. package/es/stories/Form.legacy-stories.js +1 -1
  451. package/es/stories/FormFieldArgs.js +1 -1
  452. package/es/stories/SimpleLayout.stories.js +1 -1
  453. package/es/stories/Tasty.stories.js +1 -1
  454. package/es/stories/components/ConfirmDeletionDialogForm.js +1 -1
  455. package/es/stories/components/DialogFormApp.js +1 -1
  456. package/es/stories/components/StyledButton.js +1 -1
  457. package/es/stories/lists/baseProps.js +1 -1
  458. package/es/stories/playground/PlaygroundEditor.js +1 -1
  459. package/es/stories/playground/PlaygroundLayout.js +1 -1
  460. package/es/stories/playground/PlaygroundOutput.js +3 -3
  461. package/es/stories/playground/PlaygroundPreview.js +1 -1
  462. package/es/stories/playground/components/Button.js +1 -1
  463. package/es/stories/playground/components/Card.js +1 -1
  464. package/es/stories/playground/components/ScrollProgress.js +1 -1
  465. package/es/stories/playground/examples.js +1 -1
  466. package/es/tasty/chunks/cacheKey.js +1 -1
  467. package/es/tasty/chunks/definitions.js +1 -1
  468. package/es/tasty/chunks/index.js +1 -1
  469. package/es/tasty/chunks/renderChunk.js +1 -1
  470. package/es/tasty/config.js +20 -3
  471. package/es/tasty/debug.js +1 -1
  472. package/es/tasty/hooks/index.js +1 -1
  473. package/es/tasty/hooks/useGlobalStyles.js +1 -1
  474. package/es/tasty/hooks/useKeyframes.js +1 -1
  475. package/es/tasty/hooks/useProperty.js +1 -1
  476. package/es/tasty/hooks/useRawCSS.js +1 -1
  477. package/es/tasty/hooks/useStyles.js +1 -1
  478. package/es/tasty/index.js +1 -1
  479. package/es/tasty/injector/index.js +1 -1
  480. package/es/tasty/injector/injector.js +1 -1
  481. package/es/tasty/injector/sheet-manager.js +1 -1
  482. package/es/tasty/injector/types.js +1 -1
  483. package/es/tasty/keyframes/index.js +1 -1
  484. package/es/tasty/parser/classify.js +1 -1
  485. package/es/tasty/parser/const.js +1 -1
  486. package/es/tasty/parser/lru.js +1 -1
  487. package/es/tasty/parser/parser.js +1 -1
  488. package/es/tasty/parser/tokenizer.js +1 -1
  489. package/es/tasty/parser/types.js +1 -1
  490. package/es/tasty/pipeline/conditions.js +1 -1
  491. package/es/tasty/pipeline/exclusive.js +1 -1
  492. package/es/tasty/pipeline/index.js +1 -1
  493. package/es/tasty/pipeline/materialize.js +1 -1
  494. package/es/tasty/pipeline/parseStateKey.js +1 -1
  495. package/es/tasty/pipeline/simplify.js +1 -1
  496. package/es/tasty/plugins/index.js +1 -1
  497. package/es/tasty/plugins/okhsl-plugin.js +1 -1
  498. package/es/tasty/plugins/types.js +1 -1
  499. package/es/tasty/properties/index.js +1 -1
  500. package/es/tasty/states/index.js +1 -1
  501. package/es/tasty/static/index.js +1 -1
  502. package/es/tasty/static/tastyStatic.js +1 -1
  503. package/es/tasty/static/types.js +1 -1
  504. package/es/tasty/styles/align.js +1 -1
  505. package/es/tasty/styles/border.js +1 -1
  506. package/es/tasty/styles/boxShadow.combinator.js +1 -1
  507. package/es/tasty/styles/color.js +1 -1
  508. package/es/tasty/styles/createStyle.js +1 -1
  509. package/es/tasty/styles/dimension.js +1 -1
  510. package/es/tasty/styles/display.js +1 -1
  511. package/es/tasty/styles/fade.js +1 -1
  512. package/es/tasty/styles/fill.js +12 -3
  513. package/es/tasty/styles/flow.js +1 -1
  514. package/es/tasty/styles/gap.js +1 -1
  515. package/es/tasty/styles/height.js +1 -1
  516. package/es/tasty/styles/index.js +1 -1
  517. package/es/tasty/styles/inset.js +1 -1
  518. package/es/tasty/styles/justify.js +1 -1
  519. package/es/tasty/styles/list.js +1 -1
  520. package/es/tasty/styles/margin.js +1 -1
  521. package/es/tasty/styles/outline.js +1 -1
  522. package/es/tasty/styles/padding.js +1 -1
  523. package/es/tasty/styles/place.js +1 -1
  524. package/es/tasty/styles/predefined.js +1 -1
  525. package/es/tasty/styles/preset.js +1 -1
  526. package/es/tasty/styles/radius.js +1 -1
  527. package/es/tasty/styles/reset.js +1 -1
  528. package/es/tasty/styles/scrollbar.js +1 -1
  529. package/es/tasty/styles/shadow.js +1 -1
  530. package/es/tasty/styles/styledScrollbar.js +1 -1
  531. package/es/tasty/styles/transition.js +19 -7
  532. package/es/tasty/styles/types.js +1 -1
  533. package/es/tasty/styles/width.js +1 -1
  534. package/es/tasty/tasty.js +1 -1
  535. package/es/tasty/types.js +1 -1
  536. package/es/tasty/utils/cache-wrapper.js +1 -1
  537. package/es/tasty/utils/case-converter.js +1 -1
  538. package/es/tasty/utils/colors.js +1 -1
  539. package/es/tasty/utils/dotize.js +1 -1
  540. package/es/tasty/utils/filter-base-props.js +1 -1
  541. package/es/tasty/utils/get-display-name.js +1 -1
  542. package/es/tasty/utils/hsl-to-rgb.js +1 -1
  543. package/es/tasty/utils/is-dev-env.js +1 -1
  544. package/es/tasty/utils/merge-styles.js +1 -1
  545. package/es/tasty/utils/mod-attrs.js +1 -1
  546. package/es/tasty/utils/okhsl-to-rgb.js +1 -1
  547. package/es/tasty/utils/process-tokens.js +1 -1
  548. package/es/tasty/utils/rgb-to-okhsl.js +1 -1
  549. package/es/tasty/utils/string.js +1 -1
  550. package/es/tasty/utils/styles.js +4 -2
  551. package/es/tasty/utils/typography.js +1 -1
  552. package/es/tasty/utils/warnings.js +1 -1
  553. package/es/tasty/zero/babel.js +1 -1
  554. package/es/tasty/zero/css-writer.js +2 -4
  555. package/es/tasty/zero/extractor.js +1 -1
  556. package/es/tasty/zero/index.js +1 -1
  557. package/es/tasty/zero/next.js +1 -1
  558. package/es/tokens/base.js +1 -1
  559. package/es/tokens/colors.js +1 -1
  560. package/es/tokens/index.js +1 -1
  561. package/es/tokens/layout.js +1 -1
  562. package/es/tokens/shadows.js +1 -1
  563. package/es/tokens/sizes.js +1 -1
  564. package/es/tokens/spacing.js +1 -1
  565. package/es/tokens/typography.js +1 -1
  566. package/es/utils/ResizeSensor.js +1 -1
  567. package/es/utils/index.js +1 -1
  568. package/es/utils/modules.js +1 -1
  569. package/es/utils/promise.js +1 -1
  570. package/es/utils/raf.js +1 -1
  571. package/es/utils/random.js +1 -1
  572. package/es/utils/range.js +1 -1
  573. package/es/utils/react/RenderCache.js +1 -1
  574. package/es/utils/react/Slots.js +1 -1
  575. package/es/utils/react/chain.js +1 -1
  576. package/es/utils/react/forwardRefWithGenerics.js +1 -1
  577. package/es/utils/react/index.js +1 -1
  578. package/es/utils/react/interactions.js +1 -1
  579. package/es/utils/react/isTextOnly.js +1 -1
  580. package/es/utils/react/mapProps.js +1 -1
  581. package/es/utils/react/mergeProps.js +1 -1
  582. package/es/utils/react/nullableValue.js +1 -1
  583. package/es/utils/react/resolveIcon.js +1 -1
  584. package/es/utils/react/sharedStore.js +1 -1
  585. package/es/utils/react/useCombinedRefs.js +1 -1
  586. package/es/utils/react/useControlledFocusVisible.js +1 -1
  587. package/es/utils/react/useEventBus.js +1 -1
  588. package/es/utils/react/useId.js +1 -1
  589. package/es/utils/react/useIsDarwin.js +1 -1
  590. package/es/utils/react/useKeySymbols.js +1 -1
  591. package/es/utils/react/useLayoutEffect.js +1 -1
  592. package/es/utils/react/useLocalStorage.js +1 -1
  593. package/es/utils/react/useQaProps.js +1 -1
  594. package/es/utils/react/useViewportSize.js +1 -1
  595. package/es/utils/react/wrapNodeIfPlain.js +1 -1
  596. package/es/utils/tree.js +1 -1
  597. package/es/utils/warnings.js +1 -1
  598. package/es/version.js +2 -2
  599. package/package.json +1 -1
  600. package/types/components/actions/Button/Button.d.ts +1 -0
  601. package/types/components/overlays/Toast/ToastItem.d.ts +14 -0
  602. package/types/components/overlays/Toast/ToastProvider.d.ts +8 -0
  603. package/types/components/overlays/Toast/index.d.ts +49 -0
  604. package/types/components/overlays/Toast/types.d.ts +61 -0
  605. package/types/components/overlays/Toast/useProgressToast.d.ts +23 -0
  606. package/types/components/overlays/Toast/useToast.d.ts +25 -0
  607. package/types/index.d.ts +1 -1
  608. package/types/tasty/config.d.ts +7 -1
  609. package/es/components/overlays/Toasts/Toast.js +0 -37
  610. package/es/components/overlays/Toasts/index.js +0 -11
  611. package/es/components/overlays/Toasts/use-toasts-api.js +0 -42
  612. package/types/components/overlays/Toasts/Toast.d.ts +0 -15
  613. package/types/components/overlays/Toasts/index.d.ts +0 -3
  614. package/types/components/overlays/Toasts/types.d.ts +0 -23
  615. package/types/components/overlays/Toasts/use-toasts-api.d.ts +0 -6
@@ -0,0 +1,360 @@
1
+ /**
2
+ * @license MIT
3
+ * author: Cube Dev Team
4
+ * @cube-dev/ui-kit v0.105.1
5
+ * Released under the MIT license.
6
+ */
7
+
8
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
+ import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, } from 'react';
10
+ import { useEvent } from '../../../_internal/index.js';
11
+ import { tasty } from '../../../tasty/index.js';
12
+ import { DisplayTransition } from '../../helpers/DisplayTransition/DisplayTransition.js';
13
+ import { Portal } from '../../portal/index.js';
14
+ import { ToastItem } from './ToastItem.js';
15
+ const DEFAULT_DURATION = 5000;
16
+ const MAX_TOASTS = 3;
17
+ const COLLAPSE_VISIBLE_HEIGHT = 10;
18
+ const CONTAINER_OFFSET = 16; // Container's top offset from viewport (2x)
19
+ // Generate deduplication key from toast data
20
+ function generateDedupeKey(data) {
21
+ const id = data.id;
22
+ if (id != null) {
23
+ return String(id);
24
+ }
25
+ // Hash based on title + description + theme
26
+ const parts = [
27
+ typeof data.title === 'string' ? data.title : '',
28
+ typeof data.description === 'string' ? data.description : '',
29
+ data.theme ?? 'default',
30
+ ];
31
+ return parts.join('|');
32
+ }
33
+ const ToastContext = createContext(null);
34
+ export function useToastContext() {
35
+ const context = useContext(ToastContext);
36
+ if (!context) {
37
+ throw new Error('useToastContext must be used within a ToastProvider');
38
+ }
39
+ return context;
40
+ }
41
+ const TOAST_GAP = 8; // Gap between toasts in pixels
42
+ const ToastContainerElement = tasty({
43
+ styles: {
44
+ position: 'fixed',
45
+ top: '2x',
46
+ left: '50%',
47
+ transform: 'translateX(-50%)',
48
+ zIndex: 10000,
49
+ padding: '1x',
50
+ height: '0',
51
+ pointerEvents: 'none',
52
+ },
53
+ });
54
+ const ToastWrapper = tasty({
55
+ styles: {
56
+ position: 'absolute',
57
+ top: '0',
58
+ left: '50%',
59
+ transform: 'translateX(-50%)',
60
+ width: 'max-content 50x',
61
+ pointerEvents: 'auto',
62
+ transition: 'top 0.3s, opacity 0.3s',
63
+ opacity: {
64
+ '': 0,
65
+ isShown: 1,
66
+ },
67
+ },
68
+ });
69
+ // Default height used for initial positioning before measurement
70
+ const DEFAULT_TOAST_HEIGHT = 56;
71
+ function ToastContainer({ toasts, onExitComplete }) {
72
+ const [isCollapsed, setIsCollapsed] = useState(false);
73
+ const [heights, setHeights] = useState({});
74
+ const containerRef = useRef(null);
75
+ const boundsRef = useRef(null);
76
+ const toastRefs = useRef(new Map());
77
+ // Track last known positions for exiting toasts to prevent animation to top: 0
78
+ const lastPositionsRef = useRef(new Map());
79
+ // Calculate bounds from all toast elements
80
+ const updateBounds = useCallback(() => {
81
+ const refs = toastRefs.current;
82
+ if (refs.size === 0) {
83
+ boundsRef.current = null;
84
+ return;
85
+ }
86
+ let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
87
+ refs.forEach((el) => {
88
+ const rect = el.getBoundingClientRect();
89
+ minX = Math.min(minX, rect.left);
90
+ minY = Math.min(minY, rect.top);
91
+ maxX = Math.max(maxX, rect.right);
92
+ maxY = Math.max(maxY, rect.bottom);
93
+ });
94
+ // Use DOMRect if available (browser), otherwise create a plain object (test environment)
95
+ if (typeof DOMRect !== 'undefined') {
96
+ boundsRef.current = new DOMRect(minX, minY, maxX - minX, maxY - minY);
97
+ }
98
+ else {
99
+ boundsRef.current = {
100
+ x: minX,
101
+ y: minY,
102
+ width: maxX - minX,
103
+ height: maxY - minY,
104
+ top: minY,
105
+ right: maxX,
106
+ bottom: maxY,
107
+ left: minX,
108
+ toJSON: () => ({}),
109
+ };
110
+ }
111
+ }, []);
112
+ // Track mouse position to detect when it leaves toast area
113
+ useEffect(() => {
114
+ if (!isCollapsed)
115
+ return;
116
+ const handleMouseMove = (e) => {
117
+ const bounds = boundsRef.current;
118
+ if (!bounds) {
119
+ setIsCollapsed(false);
120
+ return;
121
+ }
122
+ // Add some padding to the bounds for smoother UX
123
+ const padding = 20;
124
+ const isInBounds = e.clientX >= bounds.left - padding &&
125
+ e.clientX <= bounds.right + padding &&
126
+ e.clientY >= bounds.top - padding &&
127
+ e.clientY <= bounds.bottom + padding;
128
+ if (!isInBounds) {
129
+ setIsCollapsed(false);
130
+ }
131
+ };
132
+ window.addEventListener('mousemove', handleMouseMove);
133
+ return () => window.removeEventListener('mousemove', handleMouseMove);
134
+ }, [isCollapsed]);
135
+ // Update bounds when toasts change
136
+ useEffect(() => {
137
+ updateBounds();
138
+ }, [toasts, updateBounds]);
139
+ const handleMouseEnter = useCallback(() => {
140
+ updateBounds();
141
+ setIsCollapsed(true);
142
+ }, [updateBounds]);
143
+ // Measure heights after render using useEffect
144
+ useEffect(() => {
145
+ const newHeights = {};
146
+ let hasChanges = false;
147
+ toastRefs.current.forEach((el, id) => {
148
+ const height = el.offsetHeight || DEFAULT_TOAST_HEIGHT;
149
+ newHeights[id] = height;
150
+ if (heights[id] !== height) {
151
+ hasChanges = true;
152
+ }
153
+ });
154
+ // Also check for removed toasts
155
+ for (const id of Object.keys(heights)) {
156
+ if (!toastRefs.current.has(id)) {
157
+ hasChanges = true;
158
+ }
159
+ }
160
+ if (hasChanges) {
161
+ setHeights(newHeights);
162
+ }
163
+ });
164
+ // Create ref callback that stores refs without triggering updates
165
+ const createRefCallback = useCallback((internalId, displayRef) => (el) => {
166
+ displayRef(el);
167
+ if (el) {
168
+ toastRefs.current.set(internalId, el);
169
+ }
170
+ else {
171
+ toastRefs.current.delete(internalId);
172
+ }
173
+ }, []);
174
+ // Calculate top positions for visible (non-exiting) toasts
175
+ const visibleToasts = toasts.filter((t) => !t.isExiting);
176
+ const positions = useMemo(() => {
177
+ const posMap = new Map();
178
+ let currentTop = 0;
179
+ for (const toast of visibleToasts) {
180
+ posMap.set(toast.internalId, currentTop);
181
+ const height = heights[toast.internalId] ?? DEFAULT_TOAST_HEIGHT;
182
+ currentTop += height + TOAST_GAP;
183
+ }
184
+ return posMap;
185
+ }, [visibleToasts, heights]);
186
+ // Update lastPositionsRef with current positions for visible toasts
187
+ // This preserves positions for toasts that will exit later
188
+ useEffect(() => {
189
+ positions.forEach((pos, id) => {
190
+ lastPositionsRef.current.set(id, pos);
191
+ });
192
+ }, [positions]);
193
+ // Clean up lastPositionsRef when toast exit completes
194
+ const handleExitComplete = useCallback((internalId) => {
195
+ lastPositionsRef.current.delete(internalId);
196
+ onExitComplete(internalId);
197
+ }, [onExitComplete]);
198
+ // Calculate collapsed positions
199
+ const getToastStyle = useCallback((toast, index, total) => {
200
+ // Use current position for visible toasts, or last known position for exiting toasts
201
+ const baseTop = positions.get(toast.internalId) ??
202
+ lastPositionsRef.current.get(toast.internalId) ??
203
+ 0;
204
+ const height = heights[toast.internalId] ?? DEFAULT_TOAST_HEIGHT;
205
+ if (!isCollapsed) {
206
+ return { top: `${baseTop}px` };
207
+ }
208
+ // In collapsed state, all toasts overlap completely
209
+ // Only COLLAPSE_VISIBLE_HEIGHT of the toast should be visible from viewport top
210
+ // Container is at CONTAINER_OFFSET from viewport, so we compensate for that
211
+ const isNewest = index === total - 1;
212
+ const collapsedTop = COLLAPSE_VISIBLE_HEIGHT - CONTAINER_OFFSET - height;
213
+ return {
214
+ top: `${collapsedTop}px`,
215
+ zIndex: index, // Newest on top (highest index = highest z)
216
+ opacity: isNewest ? 1 : 0,
217
+ pointerEvents: 'none',
218
+ };
219
+ }, [isCollapsed, positions, heights]);
220
+ if (toasts.length === 0)
221
+ return null;
222
+ return (_jsx(Portal, { children: _jsx(ToastContainerElement, { ref: containerRef, children: toasts.map((toast) => {
223
+ const visibleIndex = visibleToasts.findIndex((t) => t.internalId === toast.internalId);
224
+ return (_jsx(DisplayTransition, { animateOnMount: true, isShown: !toast.isExiting, onRest: (transition) => {
225
+ if (transition === 'exit') {
226
+ handleExitComplete(toast.internalId);
227
+ }
228
+ }, children: ({ isShown, ref }) => (_jsx(ToastWrapper, { ref: createRefCallback(toast.internalId, ref), mods: { isShown }, style: getToastStyle(toast, visibleIndex >= 0 ? visibleIndex : 0, visibleToasts.length), onMouseEnter: handleMouseEnter, children: _jsx(ToastItem, { ...toast.itemProps, title: toast.title, description: toast.description, theme: toast.theme, icon: toast.icon, isLoading: toast.isLoading }) })) }, toast.internalId));
229
+ }) }) }));
230
+ }
231
+ export function ToastProvider({ children }) {
232
+ const [toasts, setToasts] = useState([]);
233
+ const timersRef = useRef(new Map());
234
+ const idCounter = useRef(0);
235
+ const generateId = useCallback(() => {
236
+ idCounter.current += 1;
237
+ return `toast-${idCounter.current}-${Date.now()}`;
238
+ }, []);
239
+ const clearTimer = useCallback((internalId) => {
240
+ const timer = timersRef.current.get(internalId);
241
+ if (timer) {
242
+ clearTimeout(timer);
243
+ timersRef.current.delete(internalId);
244
+ }
245
+ }, []);
246
+ // Mark toast as exiting (triggers exit transition)
247
+ const removeToast = useEvent((id) => {
248
+ setToasts((prev) => {
249
+ const toast = prev.find((t) => t.id === id || t.internalId === String(id));
250
+ if (toast) {
251
+ clearTimer(toast.internalId);
252
+ }
253
+ // Mark as exiting instead of removing immediately
254
+ return prev.map((t) => {
255
+ if (t.id === id || t.internalId === String(id)) {
256
+ return { ...t, isExiting: true };
257
+ }
258
+ return t;
259
+ });
260
+ });
261
+ });
262
+ // Actually remove the toast from the array after exit transition completes
263
+ const finalizeRemoval = useEvent((internalId) => {
264
+ setToasts((prev) => prev.filter((t) => t.internalId !== internalId));
265
+ });
266
+ const addToast = useEvent((data, isProgress = false) => {
267
+ const internalId = generateId();
268
+ const dedupeKey = generateDedupeKey(data);
269
+ const duration = isProgress ? null : data.duration ?? DEFAULT_DURATION;
270
+ // Mark existing toast with same dedupe key as exiting
271
+ setToasts((prev) => {
272
+ const existingIndex = prev.findIndex((t) => t.dedupeKey === dedupeKey && !t.isExiting);
273
+ if (existingIndex !== -1) {
274
+ const existing = prev[existingIndex];
275
+ clearTimer(existing.internalId);
276
+ // Mark as exiting instead of removing immediately
277
+ return prev.map((t, i) => {
278
+ if (i === existingIndex) {
279
+ return { ...t, isExiting: true };
280
+ }
281
+ return t;
282
+ });
283
+ }
284
+ return prev;
285
+ });
286
+ const newToast = {
287
+ ...data,
288
+ internalId,
289
+ isProgress,
290
+ dedupeKey,
291
+ createdAt: Date.now(),
292
+ };
293
+ setToasts((prev) => {
294
+ let newToasts = [...prev, newToast];
295
+ // Enforce max toasts limit (only count non-exiting toasts)
296
+ const activeToasts = newToasts.filter((t) => !t.isExiting);
297
+ const progressToasts = activeToasts.filter((t) => t.isProgress);
298
+ const temporalToasts = activeToasts.filter((t) => !t.isProgress);
299
+ // If we exceed limit, mark oldest temporal toasts as exiting
300
+ while (activeToasts.length > MAX_TOASTS) {
301
+ // Always allow at least 1 temporal toast even with 3 progress toasts
302
+ if (temporalToasts.length > 1 || progressToasts.length < MAX_TOASTS) {
303
+ const oldestTemporal = temporalToasts.shift();
304
+ if (oldestTemporal) {
305
+ clearTimer(oldestTemporal.internalId);
306
+ newToasts = newToasts.map((t) => {
307
+ if (t.internalId === oldestTemporal.internalId) {
308
+ return { ...t, isExiting: true };
309
+ }
310
+ return t;
311
+ });
312
+ // Update activeToasts count
313
+ const idx = activeToasts.findIndex((t) => t.internalId === oldestTemporal.internalId);
314
+ if (idx !== -1)
315
+ activeToasts.splice(idx, 1);
316
+ }
317
+ else {
318
+ break;
319
+ }
320
+ }
321
+ else {
322
+ break;
323
+ }
324
+ }
325
+ return newToasts;
326
+ });
327
+ // Set auto-dismiss timer for non-progress toasts
328
+ if (duration != null && duration > 0) {
329
+ const timer = setTimeout(() => {
330
+ removeToast(data.id ?? internalId);
331
+ }, duration);
332
+ timersRef.current.set(internalId, timer);
333
+ }
334
+ return data.id ?? internalId;
335
+ });
336
+ const updateToast = useEvent((id, data) => {
337
+ setToasts((prev) => prev.map((t) => {
338
+ if (t.id === id || t.internalId === String(id)) {
339
+ return { ...t, ...data };
340
+ }
341
+ return t;
342
+ }));
343
+ });
344
+ // Cleanup timers on unmount
345
+ useEffect(() => {
346
+ return () => {
347
+ timersRef.current.forEach((timer) => clearTimeout(timer));
348
+ timersRef.current.clear();
349
+ };
350
+ }, []);
351
+ const contextValue = useMemo(() => ({
352
+ addToast,
353
+ removeToast,
354
+ updateToast,
355
+ toasts,
356
+ }), [addToast, removeToast, updateToast, toasts]);
357
+ return (_jsxs(ToastContext.Provider, { value: contextValue, children: [children, _jsx(ToastContainer, { toasts: toasts, onExitComplete: finalizeRemoval })] }));
358
+ }
359
+
360
+
@@ -0,0 +1,92 @@
1
+ /**
2
+ * @license MIT
3
+ * author: Cube Dev Team
4
+ * @cube-dev/ui-kit v0.105.1
5
+ * Released under the MIT license.
6
+ */
7
+
8
+ // Declarative Toast component
9
+ import { useEffect, useRef } from 'react';
10
+ import { useToastContext } from './ToastProvider.js';
11
+ import { useProgressToast } from './useProgressToast.js';
12
+ export { ToastProvider, useToastContext } from './ToastProvider.js';
13
+ export { ToastItem } from './ToastItem.js';
14
+ export { useToast } from './useToast.js';
15
+ export { useProgressToast } from './useProgressToast.js';
16
+ /**
17
+ * Declarative Toast component that shows a toast while mounted.
18
+ *
19
+ * @example
20
+ * ```tsx
21
+ * // Simple toast (visible while mounted)
22
+ * <Toast theme="success">Saved successfully</Toast>
23
+ *
24
+ * // With description
25
+ * <Toast title="Success" description="Changes saved" theme="success" />
26
+ * ```
27
+ */
28
+ export function Toast(props) {
29
+ const { children, ...toastData } = props;
30
+ const { addToast, removeToast, updateToast } = useToastContext();
31
+ const toastIdRef = useRef(null);
32
+ useEffect(() => {
33
+ // Add toast on mount
34
+ toastIdRef.current = addToast({
35
+ ...toastData,
36
+ title: toastData.title ?? children,
37
+ duration: null, // Persistent while mounted
38
+ }, true);
39
+ return () => {
40
+ // Remove toast on unmount
41
+ if (toastIdRef.current != null) {
42
+ removeToast(toastIdRef.current);
43
+ toastIdRef.current = null;
44
+ }
45
+ };
46
+ }, []);
47
+ // Update toast when props change
48
+ useEffect(() => {
49
+ if (toastIdRef.current != null) {
50
+ updateToast(toastIdRef.current, {
51
+ ...toastData,
52
+ title: toastData.title ?? children,
53
+ });
54
+ }
55
+ }, [
56
+ children,
57
+ toastData.title,
58
+ toastData.description,
59
+ toastData.theme,
60
+ toastData.icon,
61
+ toastData.isLoading,
62
+ toastData.id,
63
+ // Note: itemProps is intentionally excluded - it's an object that would cause
64
+ // unnecessary re-runs. Users needing dynamic itemProps should remount the component.
65
+ updateToast,
66
+ ]);
67
+ return null;
68
+ }
69
+ /**
70
+ * Declarative Progress Toast component.
71
+ *
72
+ * @example
73
+ * ```tsx
74
+ * <Toast.Progress
75
+ * {...(isLoading
76
+ * ? { isLoading: true, title: 'Saving...' }
77
+ * : { isLoading: false, title: 'Saved!', theme: 'success' }
78
+ * )}
79
+ * />
80
+ * ```
81
+ */
82
+ function ToastProgress(props) {
83
+ const { children, ...progressOptions } = props;
84
+ useProgressToast({
85
+ ...progressOptions,
86
+ title: progressOptions.title ?? children,
87
+ });
88
+ return null;
89
+ }
90
+ Toast.Progress = ToastProgress;
91
+
92
+
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.104.0
4
+ * @cube-dev/ui-kit v0.105.1
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -0,0 +1,177 @@
1
+ /**
2
+ * @license MIT
3
+ * author: Cube Dev Team
4
+ * @cube-dev/ui-kit v0.105.1
5
+ * Released under the MIT license.
6
+ */
7
+
8
+ import { useEffect, useRef } from 'react';
9
+ import { useToastContext } from './ToastProvider.js';
10
+ import { THEME_ICONS } from './useToast.js';
11
+ const RESULT_DURATION = 3000;
12
+ // Get string value for comparison (only strings are compared for re-show logic)
13
+ function getStringValue(value) {
14
+ return typeof value === 'string' ? value : undefined;
15
+ }
16
+ // Get default icon for a theme (only when not loading and no icon provided)
17
+ function getDefaultIcon(isLoading, icon, theme) {
18
+ // Don't apply default icon when loading (loading state has its own indicator)
19
+ if (isLoading)
20
+ return icon;
21
+ // If icon is explicitly provided, use it
22
+ if (icon !== undefined)
23
+ return icon;
24
+ // Apply theme-based default icon
25
+ return theme ? THEME_ICONS[theme] : undefined;
26
+ }
27
+ /**
28
+ * Hook to display a progress toast that persists while loading.
29
+ *
30
+ * @example
31
+ * ```tsx
32
+ * useProgressToast(
33
+ * isLoading
34
+ * ? { isLoading: true, title: 'Saving...', icon: <Spinner /> }
35
+ * : { isLoading: false, title: 'Saved!', icon: <IconCheck />, theme: 'success' }
36
+ * );
37
+ *
38
+ * // Or with error handling:
39
+ * useProgressToast(
40
+ * isLoading
41
+ * ? { isLoading: true, title: 'Saving...', icon: <Spinner /> }
42
+ * : isError
43
+ * ? { isLoading: false, title: 'Error', description: errorMessage, theme: 'danger' }
44
+ * : { isLoading: false, title: 'Saved!', theme: 'success' }
45
+ * );
46
+ * ```
47
+ */
48
+ export function useProgressToast(options) {
49
+ const { isLoading, ...toastData } = options;
50
+ const { addToast, removeToast } = useToastContext();
51
+ const toastIdRef = useRef(null);
52
+ const wasLoadingRef = useRef(null);
53
+ const hideTimerRef = useRef(null);
54
+ const isFirstRenderRef = useRef(true);
55
+ const optionsRef = useRef(options);
56
+ // Track previous string values for re-show comparison
57
+ const prevThemeRef = useRef(undefined);
58
+ const prevTitleRef = useRef(undefined);
59
+ const prevDescriptionRef = useRef(undefined);
60
+ // Always update optionsRef to latest
61
+ optionsRef.current = options;
62
+ // Clear any pending hide timer
63
+ const clearHideTimer = () => {
64
+ if (hideTimerRef.current) {
65
+ clearTimeout(hideTimerRef.current);
66
+ hideTimerRef.current = null;
67
+ }
68
+ };
69
+ // Get current string values for comparison
70
+ const currentTheme = toastData.theme;
71
+ const currentTitle = getStringValue(toastData.title);
72
+ const currentDescription = getStringValue(toastData.description);
73
+ useEffect(() => {
74
+ const wasLoading = wasLoadingRef.current;
75
+ const isFirstRender = isFirstRenderRef.current;
76
+ const currentOptions = optionsRef.current;
77
+ const { isLoading: currentIsLoading, ...currentToastData } = currentOptions;
78
+ // Check if meaningful data changed (only string values)
79
+ const themeChanged = currentTheme !== prevThemeRef.current;
80
+ const titleChanged = currentTitle !== prevTitleRef.current;
81
+ const descriptionChanged = currentDescription !== prevDescriptionRef.current;
82
+ const dataChanged = themeChanged || titleChanged || descriptionChanged;
83
+ // Helper to create a new toast (removes old one first if exists)
84
+ const showToast = () => {
85
+ // Remove existing toast if any
86
+ if (toastIdRef.current != null) {
87
+ removeToast(toastIdRef.current);
88
+ }
89
+ // Get default icon based on theme (only when not loading)
90
+ const icon = getDefaultIcon(currentIsLoading, currentToastData.icon, currentToastData.theme);
91
+ // Create new toast with fresh data
92
+ toastIdRef.current = addToast({
93
+ ...currentToastData,
94
+ icon,
95
+ isLoading: currentIsLoading,
96
+ duration: null, // Persistent - we control removal
97
+ }, true);
98
+ };
99
+ // Helper to show toast and schedule removal
100
+ const showToastWithTimer = () => {
101
+ showToast();
102
+ // Schedule removal after result duration
103
+ hideTimerRef.current = setTimeout(() => {
104
+ if (toastIdRef.current != null) {
105
+ removeToast(toastIdRef.current);
106
+ toastIdRef.current = null;
107
+ }
108
+ }, RESULT_DURATION);
109
+ };
110
+ if (currentIsLoading) {
111
+ // Starting or continuing loading
112
+ clearHideTimer();
113
+ if (toastIdRef.current == null) {
114
+ // Create new toast
115
+ showToast();
116
+ }
117
+ else if (dataChanged) {
118
+ // Toast exists but data changed (e.g., switching back to loading from another state)
119
+ showToast();
120
+ }
121
+ }
122
+ else if (wasLoading === true && !currentIsLoading) {
123
+ // Transitioning from loading to not loading
124
+ clearHideTimer();
125
+ if (currentTitle) {
126
+ // Show result toast with timer
127
+ showToastWithTimer();
128
+ }
129
+ else {
130
+ // No content - just remove the loading toast immediately
131
+ if (toastIdRef.current != null) {
132
+ removeToast(toastIdRef.current);
133
+ toastIdRef.current = null;
134
+ }
135
+ }
136
+ }
137
+ else if (!currentIsLoading && !isFirstRender && dataChanged) {
138
+ // Not loading, data changed - update or re-show toast
139
+ // But only if there's meaningful content (non-empty title)
140
+ if (currentTitle) {
141
+ clearHideTimer();
142
+ showToastWithTimer();
143
+ }
144
+ else if (toastIdRef.current != null) {
145
+ // No content - hide existing toast
146
+ clearHideTimer();
147
+ removeToast(toastIdRef.current);
148
+ toastIdRef.current = null;
149
+ }
150
+ }
151
+ // Update refs for next comparison
152
+ wasLoadingRef.current = currentIsLoading;
153
+ isFirstRenderRef.current = false;
154
+ prevThemeRef.current = currentTheme;
155
+ prevTitleRef.current = currentTitle;
156
+ prevDescriptionRef.current = currentDescription;
157
+ }, [
158
+ isLoading,
159
+ currentTheme,
160
+ currentTitle,
161
+ currentDescription,
162
+ addToast,
163
+ removeToast,
164
+ ]);
165
+ // Cleanup on unmount
166
+ useEffect(() => {
167
+ return () => {
168
+ clearHideTimer();
169
+ if (toastIdRef.current != null) {
170
+ removeToast(toastIdRef.current);
171
+ toastIdRef.current = null;
172
+ }
173
+ };
174
+ }, [removeToast]);
175
+ }
176
+
177
+