@cube-dev/ui-kit 0.113.1 → 0.114.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (678) hide show
  1. package/CHANGELOG.md +10 -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 -4
  23. package/es/components/actions/Action/Action.js +1 -1
  24. package/es/components/actions/Banner/Banner.js +1 -1
  25. package/es/components/actions/Banner/index.js +1 -1
  26. package/es/components/actions/Button/Button.js +1 -1
  27. package/es/components/actions/Button/index.js +1 -1
  28. package/es/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  29. package/es/components/actions/CommandMenu/CommandMenu.js +1 -1
  30. package/es/components/actions/CommandMenu/index.js +1 -1
  31. package/es/components/actions/CommandMenu/styled.js +1 -1
  32. package/es/components/actions/ItemAction/ItemAction.js +5 -1
  33. package/es/components/actions/ItemAction/index.js +1 -1
  34. package/es/components/actions/ItemActionContext.js +1 -1
  35. package/es/components/actions/ItemButton/ItemButton.js +1 -1
  36. package/es/components/actions/ItemButton/index.js +1 -1
  37. package/es/components/actions/Link/Link.js +1 -1
  38. package/es/components/actions/Menu/Menu.js +1 -1
  39. package/es/components/actions/Menu/MenuItem.js +1 -1
  40. package/es/components/actions/Menu/MenuSection.js +1 -1
  41. package/es/components/actions/Menu/MenuTrigger.js +1 -1
  42. package/es/components/actions/Menu/SubMenuTrigger.js +1 -1
  43. package/es/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  44. package/es/components/actions/Menu/context.js +1 -1
  45. package/es/components/actions/Menu/index.js +1 -1
  46. package/es/components/actions/Menu/styled.js +1 -1
  47. package/es/components/actions/index.js +1 -1
  48. package/es/components/actions/use-action.js +1 -1
  49. package/es/components/actions/use-anchored-menu.js +1 -1
  50. package/es/components/actions/use-context-menu.js +1 -1
  51. package/es/components/content/ActiveZone/ActiveZone.js +1 -1
  52. package/es/components/content/Alert/Alert.js +1 -1
  53. package/es/components/content/Alert/index.js +1 -1
  54. package/es/components/content/Alert/types.js +1 -1
  55. package/es/components/content/Alert/use-alert.js +1 -1
  56. package/es/components/content/Avatar/Avatar.js +1 -1
  57. package/es/components/content/Badge/Badge.js +1 -1
  58. package/es/components/content/Card/Card.js +1 -1
  59. package/es/components/content/Content.js +1 -1
  60. package/es/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  61. package/es/components/content/CopyPasteBlock/index.js +1 -1
  62. package/es/components/content/CopySnippet/CopySnippet.js +1 -1
  63. package/es/components/content/CopySnippet/index.js +1 -1
  64. package/es/components/content/Disclosure/Disclosure.js +1 -1
  65. package/es/components/content/Disclosure/index.js +1 -1
  66. package/es/components/content/Divider.js +1 -1
  67. package/es/components/content/Footer.js +1 -1
  68. package/es/components/content/Header.js +1 -1
  69. package/es/components/content/HotKeys/HotKeys.js +1 -1
  70. package/es/components/content/HotKeys/index.js +1 -1
  71. package/es/components/content/Item/Item.js +1 -1
  72. package/es/components/content/Item/index.js +1 -1
  73. package/es/components/content/ItemBadge/ItemBadge.js +1 -1
  74. package/es/components/content/ItemBadge/index.js +1 -1
  75. package/es/components/content/Layout/GridLayout.js +1 -1
  76. package/es/components/content/Layout/Layout.js +1 -1
  77. package/es/components/content/Layout/LayoutBlock.js +1 -1
  78. package/es/components/content/Layout/LayoutCenter.js +1 -1
  79. package/es/components/content/Layout/LayoutContainer.js +1 -1
  80. package/es/components/content/Layout/LayoutContent.js +1 -1
  81. package/es/components/content/Layout/LayoutContext.js +1 -1
  82. package/es/components/content/Layout/LayoutFlex.js +1 -1
  83. package/es/components/content/Layout/LayoutFooter.js +1 -1
  84. package/es/components/content/Layout/LayoutGrid.js +1 -1
  85. package/es/components/content/Layout/LayoutHeader.js +1 -1
  86. package/es/components/content/Layout/LayoutPane.js +1 -1
  87. package/es/components/content/Layout/LayoutPanel.js +1 -1
  88. package/es/components/content/Layout/LayoutPanelHeader.js +1 -1
  89. package/es/components/content/Layout/LayoutToolbar.js +1 -1
  90. package/es/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  91. package/es/components/content/Layout/index.js +1 -1
  92. package/es/components/content/Layout/utils.js +1 -1
  93. package/es/components/content/List/SectionHeading.js +1 -1
  94. package/es/components/content/List/index.js +1 -1
  95. package/es/components/content/Paragraph.js +1 -1
  96. package/es/components/content/Placeholder/Placeholder.js +1 -1
  97. package/es/components/content/PrismCode/PrismCode.js +1 -1
  98. package/es/components/content/PrismCode/prismSetup.js +1 -1
  99. package/es/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  100. package/es/components/content/Result/Result.js +1 -1
  101. package/es/components/content/Skeleton/Skeleton.js +1 -1
  102. package/es/components/content/Tag/Tag.js +1 -1
  103. package/es/components/content/Text.js +1 -1
  104. package/es/components/content/TextItem/TextItem.js +1 -1
  105. package/es/components/content/TextItem/index.js +1 -1
  106. package/es/components/content/Title.js +1 -1
  107. package/es/components/content/highlightText.js +1 -1
  108. package/es/components/content/use-auto-tooltip.js +1 -1
  109. package/es/components/fields/Checkbox/Checkbox.js +1 -1
  110. package/es/components/fields/Checkbox/CheckboxGroup.js +1 -1
  111. package/es/components/fields/Checkbox/context.js +1 -1
  112. package/es/components/fields/Checkbox/index.js +1 -1
  113. package/es/components/fields/ComboBox/ComboBox.js +1 -1
  114. package/es/components/fields/ComboBox/index.js +1 -1
  115. package/es/components/fields/DatePicker/DateInput.js +1 -1
  116. package/es/components/fields/DatePicker/DateInputBase.js +1 -1
  117. package/es/components/fields/DatePicker/DatePicker.js +1 -1
  118. package/es/components/fields/DatePicker/DatePickerButton.js +1 -1
  119. package/es/components/fields/DatePicker/DatePickerElement.js +1 -1
  120. package/es/components/fields/DatePicker/DatePickerInput.js +1 -1
  121. package/es/components/fields/DatePicker/DatePickerSegment.js +1 -1
  122. package/es/components/fields/DatePicker/DateRangePicker.js +1 -1
  123. package/es/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  124. package/es/components/fields/DatePicker/TimeInput.js +1 -1
  125. package/es/components/fields/DatePicker/index.js +1 -1
  126. package/es/components/fields/DatePicker/intl.js +1 -1
  127. package/es/components/fields/DatePicker/parseDate.js +1 -1
  128. package/es/components/fields/DatePicker/props.js +1 -1
  129. package/es/components/fields/DatePicker/types.js +1 -1
  130. package/es/components/fields/DatePicker/utils.js +1 -1
  131. package/es/components/fields/FileInput/FileInput.js +1 -1
  132. package/es/components/fields/FilterListBox/FilterListBox.js +1 -1
  133. package/es/components/fields/FilterListBox/index.js +1 -1
  134. package/es/components/fields/FilterPicker/FilterPicker.js +1 -1
  135. package/es/components/fields/FilterPicker/index.js +1 -1
  136. package/es/components/fields/Input/Input.js +1 -1
  137. package/es/components/fields/Input/index.js +1 -1
  138. package/es/components/fields/ListBox/ListBox.js +1 -1
  139. package/es/components/fields/ListBox/index.js +1 -1
  140. package/es/components/fields/NumberInput/NumberInput.js +1 -1
  141. package/es/components/fields/NumberInput/StepButton.js +1 -1
  142. package/es/components/fields/PasswordInput/PasswordInput.js +1 -1
  143. package/es/components/fields/Picker/Picker.js +1 -1
  144. package/es/components/fields/Picker/index.js +1 -1
  145. package/es/components/fields/RadioGroup/Radio.js +1 -1
  146. package/es/components/fields/RadioGroup/RadioGroup.js +1 -1
  147. package/es/components/fields/RadioGroup/context.js +1 -1
  148. package/es/components/fields/RadioGroup/index.js +1 -1
  149. package/es/components/fields/SearchInput/SearchInput.js +1 -1
  150. package/es/components/fields/SearchInput/index.js +1 -1
  151. package/es/components/fields/Select/Select.js +1 -1
  152. package/es/components/fields/Select/index.js +1 -1
  153. package/es/components/fields/Slider/Gradation.js +1 -1
  154. package/es/components/fields/Slider/Header.js +1 -1
  155. package/es/components/fields/Slider/HueSlider.js +1 -1
  156. package/es/components/fields/Slider/RangeSlider.js +1 -1
  157. package/es/components/fields/Slider/Slider.js +1 -1
  158. package/es/components/fields/Slider/SliderBase.js +1 -1
  159. package/es/components/fields/Slider/SliderInput.js +1 -1
  160. package/es/components/fields/Slider/SliderThumb.js +1 -1
  161. package/es/components/fields/Slider/SliderTrack.js +1 -1
  162. package/es/components/fields/Slider/elements.js +1 -1
  163. package/es/components/fields/Slider/index.js +1 -1
  164. package/es/components/fields/Slider/types.js +1 -1
  165. package/es/components/fields/Switch/Switch.js +1 -1
  166. package/es/components/fields/Switch/index.js +1 -1
  167. package/es/components/fields/TextArea/TextArea.js +1 -1
  168. package/es/components/fields/TextArea/index.js +1 -1
  169. package/es/components/fields/TextInput/TextInput.js +1 -1
  170. package/es/components/fields/TextInput/TextInputBase.js +1 -1
  171. package/es/components/fields/TextInput/index.js +1 -1
  172. package/es/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  173. package/es/components/fields/TextInputMapper/index.js +1 -1
  174. package/es/components/fields/index.js +1 -1
  175. package/es/components/form/FieldWrapper/FieldWrapper.js +1 -1
  176. package/es/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
  177. package/es/components/form/FieldWrapper/index.js +1 -1
  178. package/es/components/form/FieldWrapper/types.js +1 -1
  179. package/es/components/form/Form/Field.js +1 -1
  180. package/es/components/form/Form/Form.js +1 -1
  181. package/es/components/form/Form/ResetButton/ResetButton.js +1 -1
  182. package/es/components/form/Form/ResetButton/index.js +1 -1
  183. package/es/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  184. package/es/components/form/Form/SubmitButton/index.js +1 -1
  185. package/es/components/form/Form/SubmitError.js +1 -1
  186. package/es/components/form/Form/index.js +1 -1
  187. package/es/components/form/Form/types.js +1 -1
  188. package/es/components/form/Form/use-field/index.js +1 -1
  189. package/es/components/form/Form/use-field/types.js +1 -1
  190. package/es/components/form/Form/use-field/use-field-props.js +1 -1
  191. package/es/components/form/Form/use-field/use-field.js +1 -1
  192. package/es/components/form/Form/use-form.js +1 -1
  193. package/es/components/form/Form/validation.js +1 -1
  194. package/es/components/form/Label.js +1 -1
  195. package/es/components/form/index.js +1 -1
  196. package/es/components/form/wrapper.js +1 -1
  197. package/es/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  198. package/es/components/helpers/DisplayTransition/index.js +1 -1
  199. package/es/components/helpers/IconSwitch/IconSwitch.js +1 -1
  200. package/es/components/helpers/index.js +1 -1
  201. package/es/components/layout/Flex.js +1 -1
  202. package/es/components/layout/Flow.js +1 -1
  203. package/es/components/layout/Grid.js +1 -1
  204. package/es/components/layout/Panel.js +1 -1
  205. package/es/components/layout/Prefix.js +1 -1
  206. package/es/components/layout/ResizablePanel.js +1 -1
  207. package/es/components/layout/Space.js +1 -1
  208. package/es/components/layout/Suffix.js +1 -1
  209. package/es/components/navigation/Tabs/DraggableTabList.js +1 -1
  210. package/es/components/navigation/Tabs/EditableTitle.js +1 -1
  211. package/es/components/navigation/Tabs/TabButton.js +1 -1
  212. package/es/components/navigation/Tabs/TabDropIndicator.js +28 -2
  213. package/es/components/navigation/Tabs/TabPanel.js +1 -1
  214. package/es/components/navigation/Tabs/TabPicker.js +1 -1
  215. package/es/components/navigation/Tabs/Tabs.js +1 -1
  216. package/es/components/navigation/Tabs/TabsAction.js +1 -1
  217. package/es/components/navigation/Tabs/TabsContext.js +1 -1
  218. package/es/components/navigation/Tabs/index.js +1 -1
  219. package/es/components/navigation/Tabs/styled.js +1 -1
  220. package/es/components/navigation/Tabs/types.js +1 -1
  221. package/es/components/navigation/Tabs/use-tab-editing.js +1 -1
  222. package/es/components/navigation/Tabs/use-tab-indicator.js +1 -1
  223. package/es/components/navigation/index.js +1 -1
  224. package/es/components/organisms/FileTabs/FileTabs.js +1 -1
  225. package/es/components/organisms/StatsCard/StatsCard.js +1 -1
  226. package/es/components/other/Calendar/Calendar.js +1 -1
  227. package/es/components/other/Calendar/CalendarCell.js +1 -1
  228. package/es/components/other/Calendar/CalendarGrid.js +1 -1
  229. package/es/components/other/Calendar/RangeCalendar.js +1 -1
  230. package/es/components/other/CloudLogo/CloudLogo.js +1 -1
  231. package/es/components/overlays/AlertDialog/AlertDialog.js +1 -1
  232. package/es/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  233. package/es/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  234. package/es/components/overlays/AlertDialog/index.js +1 -1
  235. package/es/components/overlays/AlertDialog/types.js +1 -1
  236. package/es/components/overlays/Dialog/Dialog.js +1 -1
  237. package/es/components/overlays/Dialog/DialogContainer.js +1 -1
  238. package/es/components/overlays/Dialog/DialogForm.js +1 -1
  239. package/es/components/overlays/Dialog/DialogTrigger.js +1 -1
  240. package/es/components/overlays/Dialog/context.js +1 -1
  241. package/es/components/overlays/Dialog/index.js +1 -1
  242. package/es/components/overlays/Dialog/use-dialog-container.js +1 -1
  243. package/es/components/overlays/Modal/Modal.js +1 -1
  244. package/es/components/overlays/Modal/OpenTransition.js +1 -1
  245. package/es/components/overlays/Modal/Overlay.js +1 -1
  246. package/es/components/overlays/Modal/Popover.js +1 -1
  247. package/es/components/overlays/Modal/Tray.js +1 -1
  248. package/es/components/overlays/Modal/Underlay.js +1 -1
  249. package/es/components/overlays/Modal/index.js +1 -1
  250. package/es/components/overlays/Modal/types.js +1 -1
  251. package/es/components/overlays/Notifications/Notification.js +89 -0
  252. package/es/components/overlays/Notifications/NotificationAction.js +82 -0
  253. package/es/components/overlays/Notifications/NotificationCard.js +87 -0
  254. package/es/components/overlays/Notifications/NotificationContext.js +44 -0
  255. package/es/components/overlays/Notifications/NotificationItem.js +63 -0
  256. package/es/components/overlays/Notifications/OverlayContainer.js +346 -0
  257. package/es/components/overlays/Notifications/OverlayProvider.js +69 -0
  258. package/es/components/overlays/Notifications/PersistentNotificationsList.js +120 -0
  259. package/es/components/overlays/Notifications/format-relative-time.js +55 -0
  260. package/es/components/overlays/Notifications/index.js +51 -0
  261. package/es/components/overlays/{NewNotifications/NotificationsList → Notifications}/types.js +1 -1
  262. package/es/components/overlays/Notifications/use-notification-state.js +239 -0
  263. package/es/components/overlays/Notifications/use-notifications.js +175 -0
  264. package/es/components/overlays/Notifications/use-overlay-timers.js +141 -0
  265. package/es/components/overlays/Notifications/use-persistent-notifications.js +63 -0
  266. package/es/components/overlays/Notifications/use-persistent-state.js +85 -0
  267. package/es/components/overlays/Notifications/use-toast-state.js +143 -0
  268. package/es/components/overlays/OverlayWrapper.js +1 -1
  269. package/es/components/overlays/Toast/ToastItem.js +6 -3
  270. package/es/components/overlays/Toast/ToastProvider.js +6 -352
  271. package/es/components/overlays/Toast/index.js +3 -8
  272. package/es/components/overlays/Toast/types.js +1 -1
  273. package/es/components/overlays/Toast/useProgressToast.js +2 -5
  274. package/es/components/overlays/Toast/useToast.js +1 -7
  275. package/es/components/overlays/Tooltip/Tooltip.js +1 -1
  276. package/es/components/overlays/Tooltip/TooltipProvider.js +1 -1
  277. package/es/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  278. package/es/components/overlays/Tooltip/context.js +1 -1
  279. package/es/components/overlays/Tooltip/index.js +1 -1
  280. package/es/components/portal/Portal.js +1 -1
  281. package/es/components/portal/PortalProvider.js +1 -1
  282. package/es/components/portal/index.js +1 -1
  283. package/es/components/portal/types.js +1 -1
  284. package/es/components/portal/usePortal.js +1 -1
  285. package/es/components/shared/InvalidIcon.js +1 -1
  286. package/es/components/shared/ValidIcon.js +1 -1
  287. package/es/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  288. package/es/components/status/LoadingAnimation/index.js +1 -1
  289. package/es/components/status/Spin/Cube.js +1 -1
  290. package/es/components/status/Spin/InternalSpinner.js +1 -1
  291. package/es/components/status/Spin/Spin.js +1 -1
  292. package/es/components/status/Spin/SpinsContainer.js +1 -1
  293. package/es/components/status/Spin/index.js +1 -1
  294. package/es/components/status/Spin/types.js +1 -1
  295. package/es/components/status/index.js +1 -1
  296. package/es/data/item-themes.js +1 -1
  297. package/es/data/themes.js +1 -1
  298. package/es/icons/AdjustmentsHorizontalIcon.js +1 -1
  299. package/es/icons/AdjustmentsIcon.js +1 -1
  300. package/es/icons/AiIcon.js +1 -1
  301. package/es/icons/AreaChartIcon.js +1 -1
  302. package/es/icons/BackwardIcon.js +1 -1
  303. package/es/icons/BarChartIcon.js +1 -1
  304. package/es/icons/BellFilledIcon.js +1 -1
  305. package/es/icons/BellIcon.js +1 -1
  306. package/es/icons/BooleanIcon.js +1 -1
  307. package/es/icons/CalendarEditIcon.js +1 -1
  308. package/es/icons/CalendarIcon.js +1 -1
  309. package/es/icons/CaretDownIcon.js +1 -1
  310. package/es/icons/CaretUpIcon.js +1 -1
  311. package/es/icons/ChartAreaStackedIcon.js +1 -1
  312. package/es/icons/ChartAreaStackedPercentageIcon.js +1 -1
  313. package/es/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  314. package/es/icons/ChartBarGroupedIcon.js +1 -1
  315. package/es/icons/ChartBarHorizontalIcon.js +1 -1
  316. package/es/icons/ChartBarLineIcon.js +1 -1
  317. package/es/icons/ChartBarStackedHorizontalIcon.js +1 -1
  318. package/es/icons/ChartBarStackedIcon.js +1 -1
  319. package/es/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  320. package/es/icons/ChartBarStackedPercentageIcon.js +1 -1
  321. package/es/icons/ChartBoxPlot2Icon.js +1 -1
  322. package/es/icons/ChartBoxPlotIcon.js +1 -1
  323. package/es/icons/ChartBubbleIcon.js +1 -1
  324. package/es/icons/ChartDonut2Icon.js +1 -1
  325. package/es/icons/ChartFunnelIcon.js +1 -1
  326. package/es/icons/ChartHeatmapIcon.js +1 -1
  327. package/es/icons/ChartKPIIcon.js +1 -1
  328. package/es/icons/ChartPie2Icon.js +1 -1
  329. package/es/icons/ChartScatterIcon.js +1 -1
  330. package/es/icons/CheckCircleFilledIcon.js +1 -1
  331. package/es/icons/CheckCircleIcon.js +1 -1
  332. package/es/icons/CheckIcon.js +1 -1
  333. package/es/icons/CircleFilledIcon.js +1 -1
  334. package/es/icons/ClearIcon.js +1 -1
  335. package/es/icons/CloseCircleFilledIcon.js +1 -1
  336. package/es/icons/CloseCircleIcon.js +1 -1
  337. package/es/icons/CloseIcon.js +1 -1
  338. package/es/icons/CodeIcon.js +1 -1
  339. package/es/icons/ColumnTotalIcon.js +1 -1
  340. package/es/icons/CopyIcon.js +1 -1
  341. package/es/icons/CountIcon.js +1 -1
  342. package/es/icons/CubeIcon.js +1 -1
  343. package/es/icons/CubePauseIcon.js +1 -1
  344. package/es/icons/CubePlayIcon.js +1 -1
  345. package/es/icons/CurrencyDollarIcon.js +1 -1
  346. package/es/icons/DangerIcon.js +1 -1
  347. package/es/icons/DashboardIcon.js +1 -1
  348. package/es/icons/DatabaseIcon.js +1 -1
  349. package/es/icons/DecimalDecreaseIcon.js +1 -1
  350. package/es/icons/DecimalIncreaseIcon.js +1 -1
  351. package/es/icons/DirectionIcon.js +1 -1
  352. package/es/icons/DonutIcon.js +1 -1
  353. package/es/icons/DownIcon.js +1 -1
  354. package/es/icons/EditIcon.js +1 -1
  355. package/es/icons/ExclamationCircleFilledIcon.js +1 -1
  356. package/es/icons/ExclamationCircleIcon.js +1 -1
  357. package/es/icons/ExclamationIcon.js +1 -1
  358. package/es/icons/EyeIcon.js +1 -1
  359. package/es/icons/EyeInvisibleIcon.js +1 -1
  360. package/es/icons/FilterIcon.js +1 -1
  361. package/es/icons/FolderFilledIcon.js +1 -1
  362. package/es/icons/FolderIcon.js +1 -1
  363. package/es/icons/FolderOpenFilledIcon.js +1 -1
  364. package/es/icons/FolderOpenIcon.js +1 -1
  365. package/es/icons/ForwardIcon.js +1 -1
  366. package/es/icons/HierarchyIcon.js +1 -1
  367. package/es/icons/HierarchyOpenIcon.js +1 -1
  368. package/es/icons/Icon.js +1 -1
  369. package/es/icons/InfoCircleIcon.js +1 -1
  370. package/es/icons/InfoIcon.js +1 -1
  371. package/es/icons/KeyIcon.js +1 -1
  372. package/es/icons/LeftIcon.js +1 -1
  373. package/es/icons/LineChartIcon.js +1 -1
  374. package/es/icons/LoadingIcon.js +1 -1
  375. package/es/icons/LockFilledIcon.js +1 -1
  376. package/es/icons/LockIcon.js +1 -1
  377. package/es/icons/MoreIcon.js +1 -1
  378. package/es/icons/NotAllowedIcon.js +1 -1
  379. package/es/icons/Number123Icon.js +1 -1
  380. package/es/icons/NumberIcon.js +1 -1
  381. package/es/icons/PauseCircleFilledIcon.js +1 -1
  382. package/es/icons/PauseCircleIcon.js +1 -1
  383. package/es/icons/PauseIcon.js +1 -1
  384. package/es/icons/PercentageIcon.js +1 -1
  385. package/es/icons/PieChartIcon.js +1 -1
  386. package/es/icons/PlayCircleIcon.js +1 -1
  387. package/es/icons/PlayIcon.js +1 -1
  388. package/es/icons/PlusIcon.js +1 -1
  389. package/es/icons/ProgressBarIcon.js +1 -1
  390. package/es/icons/ReloadIcon.js +1 -1
  391. package/es/icons/ReportIcon.js +1 -1
  392. package/es/icons/ReturnIcon.js +1 -1
  393. package/es/icons/RightIcon.js +1 -1
  394. package/es/icons/RowTotalsIcon.js +1 -1
  395. package/es/icons/SchemeIcon.js +1 -1
  396. package/es/icons/SearchIcon.js +1 -1
  397. package/es/icons/SemanticQueryIcon.js +1 -1
  398. package/es/icons/SettingsIcon.js +1 -1
  399. package/es/icons/ShieldFilledIcon.js +1 -1
  400. package/es/icons/ShieldIcon.js +1 -1
  401. package/es/icons/SlashIcon.js +1 -1
  402. package/es/icons/SparklesIcon.js +1 -1
  403. package/es/icons/SqlIcon.js +1 -1
  404. package/es/icons/StatsIcon.js +1 -1
  405. package/es/icons/StopIcon.js +1 -1
  406. package/es/icons/StringIcon.js +1 -1
  407. package/es/icons/SubtotalsIcon.js +1 -1
  408. package/es/icons/SwitchIcon.js +1 -1
  409. package/es/icons/TableIcon.js +1 -1
  410. package/es/icons/ThumbsDownIcon.js +1 -1
  411. package/es/icons/ThumbsUpIcon.js +1 -1
  412. package/es/icons/ThunderboltCrossedIcon.js +1 -1
  413. package/es/icons/ThunderboltFilledIcon.js +1 -1
  414. package/es/icons/ThunderboltIcon.js +1 -1
  415. package/es/icons/TimeIcon.js +1 -1
  416. package/es/icons/TrashIcon.js +1 -1
  417. package/es/icons/UnlockIcon.js +1 -1
  418. package/es/icons/UpIcon.js +1 -1
  419. package/es/icons/UserGroupIcon.js +1 -1
  420. package/es/icons/UserIcon.js +1 -1
  421. package/es/icons/UserLockIcon.js +1 -1
  422. package/es/icons/ViewIcon.js +1 -1
  423. package/es/icons/WarningFilledIcon.js +1 -1
  424. package/es/icons/WarningIcon.js +1 -1
  425. package/es/icons/index.js +1 -1
  426. package/es/icons/wrap-icon.js +1 -1
  427. package/es/index.js +2 -4
  428. package/es/provider.js +1 -1
  429. package/es/providers/TrackingProvider.js +1 -1
  430. package/es/providers/navigation.types.js +1 -1
  431. package/es/providers/navigationAdapter.default.js +1 -1
  432. package/es/shared/form.js +1 -1
  433. package/es/shared/index.js +1 -1
  434. package/es/stories/Form.legacy-stories.js +1 -1
  435. package/es/stories/FormFieldArgs.js +1 -1
  436. package/es/stories/SimpleLayout.stories.js +1 -1
  437. package/es/stories/Tasty.stories.js +1 -1
  438. package/es/stories/components/ConfirmDeletionDialogForm.js +1 -1
  439. package/es/stories/components/DialogFormApp.js +1 -1
  440. package/es/stories/components/StyledButton.js +1 -1
  441. package/es/stories/lists/baseProps.js +1 -1
  442. package/es/stories/playground/PlaygroundEditor.js +1 -1
  443. package/es/stories/playground/PlaygroundLayout.js +1 -1
  444. package/es/stories/playground/PlaygroundOutput.js +1 -1
  445. package/es/stories/playground/PlaygroundPreview.js +1 -1
  446. package/es/stories/playground/components/Button.js +1 -1
  447. package/es/stories/playground/components/Card.js +1 -1
  448. package/es/stories/playground/components/ScrollProgress.js +1 -1
  449. package/es/stories/playground/examples.js +1 -1
  450. package/es/tasty/chunks/cacheKey.js +1 -1
  451. package/es/tasty/chunks/definitions.js +1 -1
  452. package/es/tasty/chunks/index.js +1 -1
  453. package/es/tasty/chunks/renderChunk.js +1 -1
  454. package/es/tasty/config.js +1 -1
  455. package/es/tasty/debug.js +1 -1
  456. package/es/tasty/hooks/index.js +1 -1
  457. package/es/tasty/hooks/useGlobalStyles.js +1 -1
  458. package/es/tasty/hooks/useKeyframes.js +1 -1
  459. package/es/tasty/hooks/useProperty.js +1 -1
  460. package/es/tasty/hooks/useRawCSS.js +1 -1
  461. package/es/tasty/hooks/useStyles.js +1 -1
  462. package/es/tasty/index.js +1 -1
  463. package/es/tasty/injector/index.js +1 -1
  464. package/es/tasty/injector/injector.js +1 -1
  465. package/es/tasty/injector/sheet-manager.js +1 -1
  466. package/es/tasty/injector/types.js +1 -1
  467. package/es/tasty/keyframes/index.js +1 -1
  468. package/es/tasty/parser/classify.js +1 -1
  469. package/es/tasty/parser/const.js +1 -1
  470. package/es/tasty/parser/lru.js +1 -1
  471. package/es/tasty/parser/parser.js +1 -1
  472. package/es/tasty/parser/tokenizer.js +1 -1
  473. package/es/tasty/parser/types.js +1 -1
  474. package/es/tasty/pipeline/conditions.js +1 -1
  475. package/es/tasty/pipeline/exclusive.js +1 -1
  476. package/es/tasty/pipeline/index.js +1 -1
  477. package/es/tasty/pipeline/materialize.js +1 -1
  478. package/es/tasty/pipeline/parseStateKey.js +1 -1
  479. package/es/tasty/pipeline/simplify.js +1 -1
  480. package/es/tasty/plugins/index.js +1 -1
  481. package/es/tasty/plugins/okhsl-plugin.js +1 -1
  482. package/es/tasty/plugins/types.js +1 -1
  483. package/es/tasty/properties/index.js +1 -1
  484. package/es/tasty/states/index.js +1 -1
  485. package/es/tasty/static/index.js +1 -1
  486. package/es/tasty/static/tastyStatic.js +1 -1
  487. package/es/tasty/static/types.js +1 -1
  488. package/es/tasty/styles/align.js +1 -1
  489. package/es/tasty/styles/border.js +1 -1
  490. package/es/tasty/styles/boxShadow.combinator.js +1 -1
  491. package/es/tasty/styles/color.js +1 -1
  492. package/es/tasty/styles/createStyle.js +1 -1
  493. package/es/tasty/styles/dimension.js +1 -1
  494. package/es/tasty/styles/display.js +1 -1
  495. package/es/tasty/styles/fade.js +1 -1
  496. package/es/tasty/styles/fill.js +1 -1
  497. package/es/tasty/styles/flow.js +1 -1
  498. package/es/tasty/styles/gap.js +1 -1
  499. package/es/tasty/styles/height.js +1 -1
  500. package/es/tasty/styles/index.js +1 -1
  501. package/es/tasty/styles/inset.js +1 -1
  502. package/es/tasty/styles/justify.js +1 -1
  503. package/es/tasty/styles/list.js +1 -1
  504. package/es/tasty/styles/margin.js +1 -1
  505. package/es/tasty/styles/outline.js +1 -1
  506. package/es/tasty/styles/padding.js +1 -1
  507. package/es/tasty/styles/place.js +1 -1
  508. package/es/tasty/styles/predefined.js +1 -1
  509. package/es/tasty/styles/preset.js +1 -1
  510. package/es/tasty/styles/radius.js +1 -1
  511. package/es/tasty/styles/reset.js +1 -1
  512. package/es/tasty/styles/scrollbar.js +1 -1
  513. package/es/tasty/styles/shadow.js +1 -1
  514. package/es/tasty/styles/styledScrollbar.js +1 -1
  515. package/es/tasty/styles/transition.js +1 -1
  516. package/es/tasty/styles/types.js +1 -1
  517. package/es/tasty/styles/width.js +1 -1
  518. package/es/tasty/tasty.js +1 -1
  519. package/es/tasty/types.js +1 -1
  520. package/es/tasty/utils/cache-wrapper.js +1 -1
  521. package/es/tasty/utils/case-converter.js +1 -1
  522. package/es/tasty/utils/colors.js +1 -1
  523. package/es/tasty/utils/dotize.js +1 -1
  524. package/es/tasty/utils/filter-base-props.js +1 -1
  525. package/es/tasty/utils/get-display-name.js +1 -1
  526. package/es/tasty/utils/hsl-to-rgb.js +1 -1
  527. package/es/tasty/utils/is-dev-env.js +1 -1
  528. package/es/tasty/utils/merge-styles.js +1 -1
  529. package/es/tasty/utils/mod-attrs.js +1 -1
  530. package/es/tasty/utils/okhsl-to-rgb.js +1 -1
  531. package/es/tasty/utils/process-tokens.js +1 -1
  532. package/es/tasty/utils/resolve-recipes.js +1 -1
  533. package/es/tasty/utils/rgb-to-okhsl.js +1 -1
  534. package/es/tasty/utils/string.js +1 -1
  535. package/es/tasty/utils/styles.js +1 -1
  536. package/es/tasty/utils/typography.js +1 -1
  537. package/es/tasty/utils/warnings.js +1 -1
  538. package/es/tasty/zero/babel.js +1 -1
  539. package/es/tasty/zero/css-writer.js +1 -1
  540. package/es/tasty/zero/extractor.js +1 -1
  541. package/es/tasty/zero/index.js +1 -1
  542. package/es/tasty/zero/next.js +1 -1
  543. package/es/tokens/base.js +1 -1
  544. package/es/tokens/colors.js +1 -1
  545. package/es/tokens/index.js +1 -1
  546. package/es/tokens/layout.js +1 -1
  547. package/es/tokens/shadows.js +1 -1
  548. package/es/tokens/sizes.js +1 -1
  549. package/es/tokens/spacing.js +1 -1
  550. package/es/tokens/typography.js +1 -1
  551. package/es/utils/ResizeSensor.js +1 -1
  552. package/es/utils/index.js +1 -1
  553. package/es/utils/modules.js +1 -1
  554. package/es/utils/promise.js +1 -1
  555. package/es/utils/raf.js +1 -1
  556. package/es/utils/random.js +1 -1
  557. package/es/utils/range.js +1 -1
  558. package/es/utils/react/RenderCache.js +1 -1
  559. package/es/utils/react/Slots.js +1 -1
  560. package/es/utils/react/chain.js +1 -1
  561. package/es/utils/react/forwardRefWithGenerics.js +1 -1
  562. package/es/utils/react/index.js +1 -1
  563. package/es/utils/react/interactions.js +1 -1
  564. package/es/utils/react/isTextOnly.js +1 -1
  565. package/es/utils/react/mapProps.js +1 -1
  566. package/es/utils/react/mergeProps.js +1 -1
  567. package/es/utils/react/nullableValue.js +1 -1
  568. package/es/utils/react/resolveIcon.js +1 -1
  569. package/es/utils/react/sharedStore.js +1 -1
  570. package/es/utils/react/useCombinedRefs.js +1 -1
  571. package/es/utils/react/useControlledFocusVisible.js +1 -1
  572. package/es/utils/react/useEventBus.js +1 -1
  573. package/es/utils/react/useId.js +1 -1
  574. package/es/utils/react/useIsDarwin.js +1 -1
  575. package/es/utils/react/useKeySymbols.js +1 -1
  576. package/es/utils/react/useLayoutEffect.js +1 -1
  577. package/es/utils/react/useLocalStorage.js +1 -1
  578. package/es/utils/react/useMergeStyles.js +1 -1
  579. package/es/utils/react/useQaProps.js +1 -1
  580. package/es/utils/react/useViewportSize.js +1 -1
  581. package/es/utils/react/wrapNodeIfPlain.js +1 -1
  582. package/es/utils/tree.js +1 -1
  583. package/es/utils/warnings.js +1 -1
  584. package/es/version.js +2 -2
  585. package/package.json +1 -1
  586. package/types/components/overlays/Notifications/Notification.d.ts +32 -0
  587. package/types/components/overlays/Notifications/NotificationAction.d.ts +27 -0
  588. package/types/components/overlays/Notifications/NotificationCard.d.ts +37 -0
  589. package/types/components/overlays/Notifications/NotificationContext.d.ts +16 -0
  590. package/types/components/overlays/Notifications/NotificationItem.d.ts +7 -0
  591. package/types/components/overlays/Notifications/OverlayContainer.d.ts +12 -0
  592. package/types/components/overlays/Notifications/OverlayProvider.d.ts +3 -0
  593. package/types/components/overlays/Notifications/PersistentNotificationsList.d.ts +19 -0
  594. package/types/components/overlays/Notifications/format-relative-time.d.ts +14 -0
  595. package/types/components/overlays/Notifications/index.d.ts +40 -0
  596. package/types/components/overlays/Notifications/types.d.ts +154 -0
  597. package/types/components/overlays/Notifications/use-notification-state.d.ts +23 -0
  598. package/types/components/overlays/Notifications/use-notifications.d.ts +36 -0
  599. package/types/components/overlays/Notifications/use-overlay-timers.d.ts +26 -0
  600. package/types/components/overlays/Notifications/use-persistent-notifications.d.ts +48 -0
  601. package/types/components/overlays/Notifications/use-persistent-state.d.ts +23 -0
  602. package/types/components/overlays/Notifications/use-toast-state.d.ts +16 -0
  603. package/types/components/overlays/Toast/ToastItem.d.ts +3 -1
  604. package/types/components/overlays/Toast/ToastProvider.d.ts +5 -8
  605. package/types/components/overlays/Toast/index.d.ts +1 -1
  606. package/types/components/overlays/Toast/types.d.ts +3 -1
  607. package/types/index.d.ts +1 -3
  608. package/es/components/overlays/NewNotifications/Bar/FloatingNotification.js +0 -54
  609. package/es/components/overlays/NewNotifications/Bar/NotificationsBar.js +0 -95
  610. package/es/components/overlays/NewNotifications/Bar/TransitionComponent.js +0 -56
  611. package/es/components/overlays/NewNotifications/Bar/index.js +0 -10
  612. package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogContext.js +0 -19
  613. package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogTrigger.js +0 -38
  614. package/es/components/overlays/NewNotifications/Dialog/index.js +0 -10
  615. package/es/components/overlays/NewNotifications/Notification.js +0 -41
  616. package/es/components/overlays/NewNotifications/NotificationView/NotificationAction.js +0 -41
  617. package/es/components/overlays/NewNotifications/NotificationView/NotificationCloseButton.js +0 -25
  618. package/es/components/overlays/NewNotifications/NotificationView/NotificationDescription.js +0 -36
  619. package/es/components/overlays/NewNotifications/NotificationView/NotificationFooter.js +0 -60
  620. package/es/components/overlays/NewNotifications/NotificationView/NotificationHeader.js +0 -31
  621. package/es/components/overlays/NewNotifications/NotificationView/NotificationIcon.js +0 -69
  622. package/es/components/overlays/NewNotifications/NotificationView/NotificationProvider.js +0 -25
  623. package/es/components/overlays/NewNotifications/NotificationView/NotificationView.js +0 -86
  624. package/es/components/overlays/NewNotifications/NotificationView/index.js +0 -11
  625. package/es/components/overlays/NewNotifications/NotificationView/types.js +0 -10
  626. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsContext.js +0 -11
  627. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsProvider.js +0 -21
  628. package/es/components/overlays/NewNotifications/NotificationsContext/index.js +0 -11
  629. package/es/components/overlays/NewNotifications/NotificationsContext/use-notifications.js +0 -91
  630. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsList.js +0 -45
  631. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsListItem.js +0 -29
  632. package/es/components/overlays/NewNotifications/NotificationsList/index.js +0 -10
  633. package/es/components/overlays/NewNotifications/hooks/index.js +0 -14
  634. package/es/components/overlays/NewNotifications/hooks/types.js +0 -10
  635. package/es/components/overlays/NewNotifications/hooks/use-notification-list-item.js +0 -15
  636. package/es/components/overlays/NewNotifications/hooks/use-notifications-api.js +0 -17
  637. package/es/components/overlays/NewNotifications/hooks/use-notifications-list.js +0 -29
  638. package/es/components/overlays/NewNotifications/hooks/use-notifications-observer.js +0 -17
  639. package/es/components/overlays/NewNotifications/index.js +0 -15
  640. package/es/components/overlays/NewNotifications/types.js +0 -10
  641. package/es/components/overlays/Notification/Notification.js +0 -80
  642. package/es/services/notification.js +0 -71
  643. package/types/components/overlays/NewNotifications/Bar/FloatingNotification.d.ts +0 -15
  644. package/types/components/overlays/NewNotifications/Bar/NotificationsBar.d.ts +0 -21
  645. package/types/components/overlays/NewNotifications/Bar/TransitionComponent.d.ts +0 -4
  646. package/types/components/overlays/NewNotifications/Bar/index.d.ts +0 -1
  647. package/types/components/overlays/NewNotifications/Dialog/NotificationsDialogContext.d.ts +0 -9
  648. package/types/components/overlays/NewNotifications/Dialog/NotificationsDialogTrigger.d.ts +0 -11
  649. package/types/components/overlays/NewNotifications/Dialog/index.d.ts +0 -1
  650. package/types/components/overlays/NewNotifications/Notification.d.ts +0 -18
  651. package/types/components/overlays/NewNotifications/NotificationView/NotificationAction.d.ts +0 -13
  652. package/types/components/overlays/NewNotifications/NotificationView/NotificationCloseButton.d.ts +0 -4
  653. package/types/components/overlays/NewNotifications/NotificationView/NotificationDescription.d.ts +0 -9
  654. package/types/components/overlays/NewNotifications/NotificationView/NotificationFooter.d.ts +0 -13
  655. package/types/components/overlays/NewNotifications/NotificationView/NotificationHeader.d.ts +0 -9
  656. package/types/components/overlays/NewNotifications/NotificationView/NotificationIcon.d.ts +0 -9
  657. package/types/components/overlays/NewNotifications/NotificationView/NotificationProvider.d.ts +0 -10
  658. package/types/components/overlays/NewNotifications/NotificationView/NotificationView.d.ts +0 -10
  659. package/types/components/overlays/NewNotifications/NotificationView/index.d.ts +0 -2
  660. package/types/components/overlays/NewNotifications/NotificationView/types.d.ts +0 -16
  661. package/types/components/overlays/NewNotifications/NotificationsContext/NotificationsContext.d.ts +0 -5
  662. package/types/components/overlays/NewNotifications/NotificationsContext/NotificationsProvider.d.ts +0 -4
  663. package/types/components/overlays/NewNotifications/NotificationsContext/index.d.ts +0 -2
  664. package/types/components/overlays/NewNotifications/NotificationsContext/use-notifications.d.ts +0 -8
  665. package/types/components/overlays/NewNotifications/NotificationsList/NotificationsList.d.ts +0 -21
  666. package/types/components/overlays/NewNotifications/NotificationsList/NotificationsListItem.d.ts +0 -5
  667. package/types/components/overlays/NewNotifications/NotificationsList/index.d.ts +0 -2
  668. package/types/components/overlays/NewNotifications/NotificationsList/types.d.ts +0 -22
  669. package/types/components/overlays/NewNotifications/hooks/index.d.ts +0 -5
  670. package/types/components/overlays/NewNotifications/hooks/types.d.ts +0 -10
  671. package/types/components/overlays/NewNotifications/hooks/use-notification-list-item.d.ts +0 -9
  672. package/types/components/overlays/NewNotifications/hooks/use-notifications-api.d.ts +0 -1
  673. package/types/components/overlays/NewNotifications/hooks/use-notifications-list.d.ts +0 -12
  674. package/types/components/overlays/NewNotifications/hooks/use-notifications-observer.d.ts +0 -2
  675. package/types/components/overlays/NewNotifications/index.d.ts +0 -8
  676. package/types/components/overlays/NewNotifications/types.d.ts +0 -76
  677. package/types/components/overlays/Notification/Notification.d.ts +0 -6
  678. package/types/services/notification.d.ts +0 -28
@@ -0,0 +1,85 @@
1
+ /**
2
+ * @license MIT
3
+ * author: Cube Dev Team
4
+ * @cube-dev/ui-kit v0.114.0
5
+ * Released under the MIT license.
6
+ */
7
+
8
+ import { useRef, useState } from 'react';
9
+ import { useEvent } from '../../../_internal/index.js';
10
+ // ─── Hook ────────────────────────────────────────────────────────────
11
+ export function usePersistentState(maxItems) {
12
+ const [persistentItems, setPersistentItems] = useState([]);
13
+ // Tracks IDs that have been moved to the persistent list at least once.
14
+ // Used to skip the overlay when the same id reappears.
15
+ const dismissedPersistentIdsRef = useRef(new Set());
16
+ // Tracks IDs that were explicitly removed from the persistent list by the
17
+ // user. These should be completely ignored on subsequent triggers.
18
+ const fullyDismissedIdsRef = useRef(new Set());
19
+ const addPersistentItem = useEvent((item) => {
20
+ // If the user already dismissed this item from the persistent list, don't re-add it.
21
+ if (fullyDismissedIdsRef.current.has(item.id))
22
+ return;
23
+ dismissedPersistentIdsRef.current.add(item.id);
24
+ setPersistentItems((prev) => {
25
+ // Upsert by id
26
+ const existingIndex = prev.findIndex((i) => i.id === item.id);
27
+ let newItems;
28
+ if (existingIndex !== -1) {
29
+ newItems = [...prev];
30
+ // Updated items are marked unread again
31
+ newItems[existingIndex] = {
32
+ ...newItems[existingIndex],
33
+ ...item,
34
+ isRead: false,
35
+ };
36
+ }
37
+ else {
38
+ newItems = [{ ...item, isRead: item.isRead ?? false }, ...prev];
39
+ }
40
+ // Enforce max cap
41
+ if (newItems.length > maxItems) {
42
+ newItems = newItems.slice(0, maxItems);
43
+ }
44
+ // Sort newest first
45
+ newItems.sort((a, b) => b.createdAt - a.createdAt);
46
+ return newItems;
47
+ });
48
+ });
49
+ const removePersistentItem = useEvent((id) => {
50
+ fullyDismissedIdsRef.current.add(id);
51
+ setPersistentItems((prev) => prev.filter((i) => i.id !== id));
52
+ });
53
+ const removePersistentItemsByOwner = useEvent((ownerId) => {
54
+ setPersistentItems((prev) => prev.filter((i) => i.ownerId !== ownerId));
55
+ });
56
+ const clearPersistentItems = useEvent(() => {
57
+ setPersistentItems([]);
58
+ });
59
+ const markAllAsRead = useEvent(() => {
60
+ setPersistentItems((prev) => {
61
+ const hasUnread = prev.some((i) => !i.isRead);
62
+ if (!hasUnread)
63
+ return prev;
64
+ return prev.map((i) => (i.isRead ? i : { ...i, isRead: true }));
65
+ });
66
+ });
67
+ const hasDismissedPersistentId = useEvent((id) => {
68
+ return dismissedPersistentIdsRef.current.has(id);
69
+ });
70
+ const isFullyDismissedId = useEvent((id) => {
71
+ return fullyDismissedIdsRef.current.has(id);
72
+ });
73
+ return {
74
+ persistentItems,
75
+ addPersistentItem,
76
+ removePersistentItem,
77
+ removePersistentItemsByOwner,
78
+ clearPersistentItems,
79
+ markAllAsRead,
80
+ hasDismissedPersistentId,
81
+ isFullyDismissedId,
82
+ };
83
+ }
84
+
85
+
@@ -0,0 +1,143 @@
1
+ /**
2
+ * @license MIT
3
+ * author: Cube Dev Team
4
+ * @cube-dev/ui-kit v0.114.0
5
+ * Released under the MIT license.
6
+ */
7
+
8
+ import { useRef, useState } from 'react';
9
+ import { useEvent } from '../../../_internal/index.js';
10
+ // ─── Constants ───────────────────────────────────────────────────────
11
+ const DEFAULT_TOAST_DURATION = 5000;
12
+ const MAX_TOASTS = 3;
13
+ // ─── Dedupe Key ──────────────────────────────────────────────────────
14
+ /**
15
+ * Generate a deduplication key for a toast.
16
+ * Uses JSON.stringify with alphabetically ordered keys to prevent false
17
+ * collisions when title/description contains separator characters.
18
+ */
19
+ function generateToastDedupeKey(data) {
20
+ if (data.id != null)
21
+ return String(data.id);
22
+ return JSON.stringify({
23
+ description: typeof data.description === 'string' ? data.description : '',
24
+ theme: data.theme ?? 'default',
25
+ title: typeof data.title === 'string' ? data.title : '',
26
+ });
27
+ }
28
+ // ─── Helpers ─────────────────────────────────────────────────────────
29
+ function matchesToastId(item, id) {
30
+ return item.id === id || item.internalId === String(id);
31
+ }
32
+ function findToast(list, id) {
33
+ return list.find((t) => matchesToastId(t, id));
34
+ }
35
+ // ─── Hook ────────────────────────────────────────────────────────────
36
+ /**
37
+ * @param timersRef - Ref to the shared OverlayTimers instance. Accessed only
38
+ * inside callbacks (never during render), so it is guaranteed to be populated.
39
+ */
40
+ export function useToastState(timersRef) {
41
+ const [toasts, setToasts] = useState([]);
42
+ const toastsRef = useRef(toasts);
43
+ toastsRef.current = toasts;
44
+ const idCounter = useRef(0);
45
+ const removeToast = useEvent((id) => {
46
+ // Perform side effects outside the updater (StrictMode-safe).
47
+ const toast = findToast(toastsRef.current, id);
48
+ if (toast) {
49
+ timersRef.current?.clearToastTimer(toast.internalId);
50
+ }
51
+ setToasts((prev) => prev.map((t) => (matchesToastId(t, id) ? { ...t, isExiting: true } : t)));
52
+ });
53
+ const finalizeToastRemoval = useEvent((internalId) => {
54
+ setToasts((prev) => prev.filter((t) => t.internalId !== internalId));
55
+ });
56
+ const addToast = useEvent((data, isProgress = false) => {
57
+ idCounter.current += 1;
58
+ const internalId = `toast-${idCounter.current}-${Date.now()}`;
59
+ const dedupeKey = generateToastDedupeKey(data);
60
+ const duration = isProgress
61
+ ? null
62
+ : data.duration ?? DEFAULT_TOAST_DURATION;
63
+ const newToast = {
64
+ ...data,
65
+ internalId,
66
+ isProgress,
67
+ dedupeKey,
68
+ createdAt: Date.now(),
69
+ };
70
+ // Perform dedupe side effects outside the updater (StrictMode-safe).
71
+ const existingToast = toastsRef.current.find((t) => t.dedupeKey === dedupeKey && !t.isExiting);
72
+ if (existingToast) {
73
+ timersRef.current?.clearToastTimer(existingToast.internalId);
74
+ }
75
+ // Single setState call: mark duplicate as exiting, append new toast,
76
+ // and evict oldest temporal toasts if we exceed MAX_TOASTS.
77
+ // Track evicted IDs so we can clear timers outside the updater (StrictMode-safe).
78
+ let wasEvicted = false;
79
+ const evictedIds = [];
80
+ setToasts((prev) => {
81
+ let newToasts = prev;
82
+ // Mark existing toast with same dedupe key as exiting
83
+ if (existingToast) {
84
+ newToasts = newToasts.map((t) => t.internalId === existingToast.internalId
85
+ ? { ...t, isExiting: true }
86
+ : t);
87
+ }
88
+ // Append the new toast
89
+ newToasts = [...newToasts, newToast];
90
+ // Evict oldest temporal toasts if over the cap
91
+ const activeToasts = newToasts.filter((t) => !t.isExiting);
92
+ const progressToasts = activeToasts.filter((t) => t.isProgress);
93
+ const temporalToasts = activeToasts.filter((t) => !t.isProgress);
94
+ while (activeToasts.length > MAX_TOASTS) {
95
+ if (temporalToasts.length > 1 || progressToasts.length < MAX_TOASTS) {
96
+ const oldestTemporal = temporalToasts.shift();
97
+ if (oldestTemporal) {
98
+ evictedIds.push(oldestTemporal.internalId);
99
+ newToasts = newToasts.map((t) => t.internalId === oldestTemporal.internalId
100
+ ? { ...t, isExiting: true }
101
+ : t);
102
+ const idx = activeToasts.findIndex((t) => t.internalId === oldestTemporal.internalId);
103
+ if (idx !== -1)
104
+ activeToasts.splice(idx, 1);
105
+ // Check if the newly added toast was evicted
106
+ if (oldestTemporal.internalId === internalId) {
107
+ wasEvicted = true;
108
+ }
109
+ }
110
+ else {
111
+ break;
112
+ }
113
+ }
114
+ else {
115
+ break;
116
+ }
117
+ }
118
+ return newToasts;
119
+ });
120
+ // Clear timers for evicted toasts outside the updater (StrictMode-safe)
121
+ for (const evictedId of evictedIds) {
122
+ timersRef.current?.clearToastTimer(evictedId);
123
+ }
124
+ // Start timer only if the toast wasn't immediately evicted
125
+ if (!wasEvicted && duration != null && duration > 0) {
126
+ timersRef.current?.startToastTimer(internalId, data.id ?? internalId, duration);
127
+ }
128
+ return data.id ?? internalId;
129
+ });
130
+ const updateToast = useEvent((id, data) => {
131
+ setToasts((prev) => prev.map((t) => (matchesToastId(t, id) ? { ...t, ...data } : t)));
132
+ });
133
+ return {
134
+ toasts,
135
+ toastsRef,
136
+ addToast,
137
+ removeToast,
138
+ updateToast,
139
+ finalizeToastRemoval,
140
+ };
141
+ }
142
+
143
+
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.113.1
4
+ * @cube-dev/ui-kit v0.114.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.113.1
4
+ * @cube-dev/ui-kit v0.114.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -9,8 +9,10 @@ import { jsx as _jsx } from "react/jsx-runtime";
9
9
  import { forwardRef } from 'react';
10
10
  import { tasty } from '../../../tasty/index.js';
11
11
  import { Item } from '../../content/Item/Item.js';
12
+ import { getThemeIcon } from './useToast.js';
12
13
  const StyledItem = tasty(Item, {
13
14
  styles: {
15
+ shadow: '$card-shadow',
14
16
  transition: 'theme, inset',
15
17
  pointerEvents: 'none',
16
18
  Description: {
@@ -19,11 +21,12 @@ const StyledItem = tasty(Item, {
19
21
  },
20
22
  });
21
23
  export const ToastItem = forwardRef(function ToastItem(props, ref) {
22
- const { title, description, theme, isLoading, children, qa, ...itemProps } = props;
24
+ const { title, description, theme, isLoading, icon: providedIcon, children, qa, ...itemProps } = props;
25
+ const icon = getThemeIcon(theme, providedIcon, isLoading);
23
26
  // If only description provided (no title/children), use description as primary content
24
27
  const primaryContent = children ?? title ?? description;
25
28
  const secondaryContent = children || title ? description : undefined;
26
- return (_jsx(StyledItem, { ref: ref, qa: qa ?? 'Toast', type: "card", theme: theme, isLoading: isLoading, description: secondaryContent, ...itemProps, children: primaryContent }));
29
+ return (_jsx(StyledItem, { ref: ref, qa: qa ?? 'Toast', type: "card", theme: theme, icon: icon, isLoading: isLoading, description: secondaryContent, ...itemProps, children: primaryContent }));
27
30
  });
28
31
 
29
32
 
@@ -1,360 +1,14 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.113.1
4
+ * @cube-dev/ui-kit v0.114.0
5
5
  * Released under the MIT license.
6
6
  */
7
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
- }
8
+ /**
9
+ * Toast context is now provided by OverlayProvider.
10
+ * This module re-exports useToastContext for backward compatibility.
11
+ */
12
+ export { useToastContext } from '../Notifications/NotificationContext.js';
359
13
 
360
14
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.113.1
4
+ * @cube-dev/ui-kit v0.114.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -9,8 +9,7 @@
9
9
  import { useEffect, useRef } from 'react';
10
10
  import { useToastContext } from './ToastProvider.js';
11
11
  import { useProgressToast } from './useProgressToast.js';
12
- import { getThemeIcon } from './useToast.js';
13
- export { ToastProvider, useToastContext } from './ToastProvider.js';
12
+ export { useToastContext } from './ToastProvider.js';
14
13
  export { ToastItem } from './ToastItem.js';
15
14
  export { useToast, getThemeIcon } from './useToast.js';
16
15
  export { useProgressToast } from './useProgressToast.js';
@@ -30,14 +29,12 @@ export function Toast(props) {
30
29
  const { children, ...toastData } = props;
31
30
  const { addToast, removeToast, updateToast } = useToastContext();
32
31
  const toastIdRef = useRef(null);
33
- // Apply theme-based icon if not loading and no icon provided
34
- const icon = getThemeIcon(toastData.theme, toastData.icon, toastData.isLoading);
35
32
  useEffect(() => {
36
33
  // Add toast on mount
34
+ // Icon is auto-resolved by ToastItem based on theme/isLoading
37
35
  toastIdRef.current = addToast({
38
36
  ...toastData,
39
37
  title: toastData.title ?? children,
40
- icon,
41
38
  duration: null, // Persistent while mounted
42
39
  }, true);
43
40
  return () => {
@@ -54,7 +51,6 @@ export function Toast(props) {
54
51
  updateToast(toastIdRef.current, {
55
52
  ...toastData,
56
53
  title: toastData.title ?? children,
57
- icon,
58
54
  });
59
55
  }
60
56
  }, [
@@ -65,7 +61,6 @@ export function Toast(props) {
65
61
  toastData.icon,
66
62
  toastData.isLoading,
67
63
  toastData.id,
68
- icon,
69
64
  // Note: itemProps is intentionally excluded - it's an object that would cause
70
65
  // unnecessary re-runs. Users needing dynamic itemProps should remount the component.
71
66
  updateToast,