@cube-dev/ui-kit 0.0.0-canary-b46ab85 → 0.0.0-canary-6b0df31

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 (689) hide show
  1. package/CHANGELOG.md +8 -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 +2 -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 +1 -1
  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 +63 -0
  253. package/es/components/overlays/Notifications/NotificationCard.js +76 -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 +325 -0
  257. package/es/components/overlays/Notifications/OverlayProvider.js +69 -0
  258. package/es/components/overlays/Notifications/PersistentNotificationsList.js +104 -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 +205 -0
  263. package/es/components/overlays/Notifications/use-notifications.js +175 -0
  264. package/es/components/overlays/Notifications/use-overlay-timers.js +138 -0
  265. package/es/components/overlays/Notifications/use-persistent-notifications.js +63 -0
  266. package/es/components/overlays/Notifications/use-persistent-state.js +66 -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 +5 -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 -6
  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 +9 -2
  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/HiddenInput.d.ts +56 -56
  587. package/types/components/actions/Button/Button.d.ts +64 -64
  588. package/types/components/actions/CommandMenu/styled.d.ts +280 -280
  589. package/types/components/actions/Menu/styled.d.ts +423 -423
  590. package/types/components/content/List/SectionHeading.d.ts +47 -47
  591. package/types/components/content/Text.d.ts +112 -112
  592. package/types/components/fields/DatePicker/DatePickerElement.d.ts +47 -47
  593. package/types/components/fields/Select/Select.d.ts +56 -56
  594. package/types/components/fields/Slider/elements.d.ts +338 -338
  595. package/types/components/navigation/Tabs/styled.d.ts +446 -446
  596. package/types/components/overlays/Notifications/Notification.d.ts +28 -0
  597. package/types/components/overlays/Notifications/NotificationAction.d.ts +20 -0
  598. package/types/components/overlays/Notifications/NotificationCard.d.ts +35 -0
  599. package/types/components/overlays/Notifications/NotificationContext.d.ts +16 -0
  600. package/types/components/overlays/Notifications/NotificationItem.d.ts +7 -0
  601. package/types/components/overlays/Notifications/OverlayContainer.d.ts +12 -0
  602. package/types/components/overlays/Notifications/OverlayProvider.d.ts +3 -0
  603. package/types/components/overlays/Notifications/PersistentNotificationsList.d.ts +18 -0
  604. package/types/components/overlays/Notifications/format-relative-time.d.ts +14 -0
  605. package/types/components/overlays/Notifications/index.d.ts +40 -0
  606. package/types/components/overlays/Notifications/types.d.ts +145 -0
  607. package/types/components/overlays/Notifications/use-notification-state.d.ts +20 -0
  608. package/types/components/overlays/Notifications/use-notifications.d.ts +36 -0
  609. package/types/components/overlays/Notifications/use-overlay-timers.d.ts +26 -0
  610. package/types/components/overlays/Notifications/use-persistent-notifications.d.ts +48 -0
  611. package/types/components/overlays/Notifications/use-persistent-state.d.ts +11 -0
  612. package/types/components/overlays/Notifications/use-toast-state.d.ts +16 -0
  613. package/types/components/overlays/Toast/ToastItem.d.ts +3 -1
  614. package/types/components/overlays/Toast/ToastProvider.d.ts +5 -8
  615. package/types/components/overlays/Toast/index.d.ts +1 -1
  616. package/types/components/overlays/Toast/types.d.ts +3 -1
  617. package/types/index.d.ts +1 -3
  618. package/types/tasty/tasty.d.ts +56 -56
  619. package/es/components/overlays/NewNotifications/Bar/FloatingNotification.js +0 -54
  620. package/es/components/overlays/NewNotifications/Bar/NotificationsBar.js +0 -95
  621. package/es/components/overlays/NewNotifications/Bar/TransitionComponent.js +0 -56
  622. package/es/components/overlays/NewNotifications/Bar/index.js +0 -10
  623. package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogContext.js +0 -19
  624. package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogTrigger.js +0 -38
  625. package/es/components/overlays/NewNotifications/Dialog/index.js +0 -10
  626. package/es/components/overlays/NewNotifications/Notification.js +0 -41
  627. package/es/components/overlays/NewNotifications/NotificationView/NotificationAction.js +0 -41
  628. package/es/components/overlays/NewNotifications/NotificationView/NotificationCloseButton.js +0 -25
  629. package/es/components/overlays/NewNotifications/NotificationView/NotificationDescription.js +0 -36
  630. package/es/components/overlays/NewNotifications/NotificationView/NotificationFooter.js +0 -60
  631. package/es/components/overlays/NewNotifications/NotificationView/NotificationHeader.js +0 -31
  632. package/es/components/overlays/NewNotifications/NotificationView/NotificationIcon.js +0 -69
  633. package/es/components/overlays/NewNotifications/NotificationView/NotificationProvider.js +0 -25
  634. package/es/components/overlays/NewNotifications/NotificationView/NotificationView.js +0 -86
  635. package/es/components/overlays/NewNotifications/NotificationView/index.js +0 -11
  636. package/es/components/overlays/NewNotifications/NotificationView/types.js +0 -10
  637. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsContext.js +0 -11
  638. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsProvider.js +0 -21
  639. package/es/components/overlays/NewNotifications/NotificationsContext/index.js +0 -11
  640. package/es/components/overlays/NewNotifications/NotificationsContext/use-notifications.js +0 -91
  641. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsList.js +0 -45
  642. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsListItem.js +0 -29
  643. package/es/components/overlays/NewNotifications/NotificationsList/index.js +0 -10
  644. package/es/components/overlays/NewNotifications/hooks/index.js +0 -14
  645. package/es/components/overlays/NewNotifications/hooks/types.js +0 -10
  646. package/es/components/overlays/NewNotifications/hooks/use-notification-list-item.js +0 -15
  647. package/es/components/overlays/NewNotifications/hooks/use-notifications-api.js +0 -17
  648. package/es/components/overlays/NewNotifications/hooks/use-notifications-list.js +0 -29
  649. package/es/components/overlays/NewNotifications/hooks/use-notifications-observer.js +0 -17
  650. package/es/components/overlays/NewNotifications/index.js +0 -15
  651. package/es/components/overlays/NewNotifications/types.js +0 -10
  652. package/es/components/overlays/Notification/Notification.js +0 -80
  653. package/es/services/notification.js +0 -71
  654. package/types/components/overlays/NewNotifications/Bar/FloatingNotification.d.ts +0 -15
  655. package/types/components/overlays/NewNotifications/Bar/NotificationsBar.d.ts +0 -21
  656. package/types/components/overlays/NewNotifications/Bar/TransitionComponent.d.ts +0 -4
  657. package/types/components/overlays/NewNotifications/Bar/index.d.ts +0 -1
  658. package/types/components/overlays/NewNotifications/Dialog/NotificationsDialogContext.d.ts +0 -9
  659. package/types/components/overlays/NewNotifications/Dialog/NotificationsDialogTrigger.d.ts +0 -11
  660. package/types/components/overlays/NewNotifications/Dialog/index.d.ts +0 -1
  661. package/types/components/overlays/NewNotifications/Notification.d.ts +0 -18
  662. package/types/components/overlays/NewNotifications/NotificationView/NotificationAction.d.ts +0 -13
  663. package/types/components/overlays/NewNotifications/NotificationView/NotificationCloseButton.d.ts +0 -4
  664. package/types/components/overlays/NewNotifications/NotificationView/NotificationDescription.d.ts +0 -9
  665. package/types/components/overlays/NewNotifications/NotificationView/NotificationFooter.d.ts +0 -13
  666. package/types/components/overlays/NewNotifications/NotificationView/NotificationHeader.d.ts +0 -9
  667. package/types/components/overlays/NewNotifications/NotificationView/NotificationIcon.d.ts +0 -9
  668. package/types/components/overlays/NewNotifications/NotificationView/NotificationProvider.d.ts +0 -10
  669. package/types/components/overlays/NewNotifications/NotificationView/NotificationView.d.ts +0 -10
  670. package/types/components/overlays/NewNotifications/NotificationView/index.d.ts +0 -2
  671. package/types/components/overlays/NewNotifications/NotificationView/types.d.ts +0 -16
  672. package/types/components/overlays/NewNotifications/NotificationsContext/NotificationsContext.d.ts +0 -5
  673. package/types/components/overlays/NewNotifications/NotificationsContext/NotificationsProvider.d.ts +0 -4
  674. package/types/components/overlays/NewNotifications/NotificationsContext/index.d.ts +0 -2
  675. package/types/components/overlays/NewNotifications/NotificationsContext/use-notifications.d.ts +0 -8
  676. package/types/components/overlays/NewNotifications/NotificationsList/NotificationsList.d.ts +0 -21
  677. package/types/components/overlays/NewNotifications/NotificationsList/NotificationsListItem.d.ts +0 -5
  678. package/types/components/overlays/NewNotifications/NotificationsList/index.d.ts +0 -2
  679. package/types/components/overlays/NewNotifications/NotificationsList/types.d.ts +0 -22
  680. package/types/components/overlays/NewNotifications/hooks/index.d.ts +0 -5
  681. package/types/components/overlays/NewNotifications/hooks/types.d.ts +0 -10
  682. package/types/components/overlays/NewNotifications/hooks/use-notification-list-item.d.ts +0 -9
  683. package/types/components/overlays/NewNotifications/hooks/use-notifications-api.d.ts +0 -1
  684. package/types/components/overlays/NewNotifications/hooks/use-notifications-list.d.ts +0 -12
  685. package/types/components/overlays/NewNotifications/hooks/use-notifications-observer.d.ts +0 -2
  686. package/types/components/overlays/NewNotifications/index.d.ts +0 -8
  687. package/types/components/overlays/NewNotifications/types.d.ts +0 -76
  688. package/types/components/overlays/Notification/Notification.d.ts +0 -6
  689. package/types/services/notification.d.ts +0 -28
@@ -0,0 +1,89 @@
1
+ /**
2
+ * @license MIT
3
+ * author: Cube Dev Team
4
+ * @cube-dev/ui-kit v0.0.0-canary-6b0df31
5
+ * Released under the MIT license.
6
+ */
7
+
8
+ import { useEffect, useRef } from 'react';
9
+ import { useNotificationContext } from './NotificationContext.js';
10
+ /**
11
+ * Declarative Notification component that shows a notification while mounted.
12
+ * Only supports `mode: 'overlay'` (the default).
13
+ *
14
+ * Semantics:
15
+ * - mount → show or update by `id`
16
+ * - unmount → dismiss unless `disableRemoveOnUnmount`
17
+ *
18
+ * @example
19
+ * ```tsx
20
+ * <Notification
21
+ * id="release:new-version"
22
+ * theme="warning"
23
+ * title="New release available"
24
+ * description="2.0.0 can be installed now."
25
+ * actions={
26
+ * <>
27
+ * <Notification.Action>Later</Notification.Action>
28
+ * <Notification.Action onPress={() => openUpgradeDialog()}>
29
+ * Upgrade
30
+ * </Notification.Action>
31
+ * </>
32
+ * }
33
+ * />
34
+ * ```
35
+ */
36
+ export function Notification(props) {
37
+ const { disableRemoveOnUnmount, ...notificationOptions } = props;
38
+ const { addNotification, removeNotification, updateNotification } = useNotificationContext();
39
+ const notificationIdRef = useRef(null);
40
+ // Tracks how many times the update effect has run. The first run (0 → 1)
41
+ // coincides with mount and must be skipped because addNotification already
42
+ // handles the initial state.
43
+ const renderCountRef = useRef(0);
44
+ const disableRemoveRef = useRef(disableRemoveOnUnmount);
45
+ disableRemoveRef.current = disableRemoveOnUnmount;
46
+ // Show notification on mount
47
+ useEffect(() => {
48
+ const id = addNotification({
49
+ ...notificationOptions,
50
+ mode: 'overlay',
51
+ duration: notificationOptions.duration ?? null, // Persistent while mounted
52
+ });
53
+ notificationIdRef.current = id;
54
+ return () => {
55
+ if (!disableRemoveRef.current && notificationIdRef.current != null) {
56
+ removeNotification(notificationIdRef.current, 'api');
57
+ notificationIdRef.current = null;
58
+ }
59
+ };
60
+ }, []);
61
+ // Update notification when props change (skip initial mount)
62
+ useEffect(() => {
63
+ // Skip the first run — it coincides with the mount effect above
64
+ if (renderCountRef.current === 0) {
65
+ renderCountRef.current = 1;
66
+ return;
67
+ }
68
+ if (notificationIdRef.current != null) {
69
+ updateNotification(notificationIdRef.current, {
70
+ ...notificationOptions,
71
+ mode: 'overlay',
72
+ duration: notificationOptions.duration ?? null,
73
+ });
74
+ }
75
+ }, [
76
+ notificationOptions.id,
77
+ notificationOptions.theme,
78
+ notificationOptions.title,
79
+ notificationOptions.description,
80
+ notificationOptions.icon,
81
+ notificationOptions.actions,
82
+ notificationOptions.isDismissible,
83
+ notificationOptions.persistent,
84
+ notificationOptions.duration,
85
+ ]);
86
+ return null;
87
+ }
88
+
89
+
@@ -0,0 +1,63 @@
1
+ /**
2
+ * @license MIT
3
+ * author: Cube Dev Team
4
+ * @cube-dev/ui-kit v0.0.0-canary-6b0df31
5
+ * Released under the MIT license.
6
+ */
7
+
8
+ import { jsx as _jsx } from "react/jsx-runtime";
9
+ import { createContext, useContext, useMemo, } from 'react';
10
+ import { useEvent } from '../../../_internal/index.js';
11
+ import { ItemAction } from '../../actions/ItemAction/ItemAction.js';
12
+ const NotificationDismissContext = createContext(null);
13
+ export function NotificationDismissProvider({ notificationId, onDismiss, children, }) {
14
+ const dismiss = useEvent(() => {
15
+ onDismiss(notificationId, 'action');
16
+ });
17
+ const value = useMemo(() => ({ dismiss }), [dismiss]);
18
+ return (_jsx(NotificationDismissContext.Provider, { value: value, children: children }));
19
+ }
20
+ // ─── Dismiss Action Detection Context ────────────────────────────────
21
+ //
22
+ // Allows NotificationCard to detect whether any child NotificationAction
23
+ // has `isDismiss` set, without requiring a separate `hasDismissAction` prop.
24
+ //
25
+ // Mechanism:
26
+ // - DismissActionDetector provides a ref via context and resets it each render.
27
+ // - NotificationAction writes to the ref during render when isDismiss is true.
28
+ // - DefaultDismissGuard reads the ref to decide whether to show the default button.
29
+ //
30
+ // This relies on React's left-to-right sibling render order: {actions}
31
+ // children render before <DefaultDismissGuard />, so the ref is populated
32
+ // before it's read. The ref is reset at the provider level each render,
33
+ // making it safe under StrictMode double-rendering.
34
+ export const DismissActionDetectedContext = createContext(null);
35
+ // ─── NotificationAction Component ────────────────────────────────────
36
+ /**
37
+ * Action button for use inside Notification components.
38
+ * Wraps ItemAction with auto-dismiss behavior.
39
+ *
40
+ * - `closeOnPress` (default: true) — auto-dismisses the notification after `onPress`.
41
+ * - An action with no `onPress` and `closeOnPress: true` acts as a dismiss-only action.
42
+ * - `isDismiss` — marks this action as the dismiss button; when present, the default
43
+ * "Dismiss" button is auto-suppressed via context detection.
44
+ * - Type (primary/secondary/etc.) is set automatically via ItemActionProvider context.
45
+ */
46
+ export function NotificationAction({ children, onPress, closeOnPress = true, isDisabled, isDismiss, }) {
47
+ const dismissCtx = useContext(NotificationDismissContext);
48
+ const dismissDetectedRef = useContext(DismissActionDetectedContext);
49
+ // Register isDismiss during render (synchronous, before DefaultDismissGuard renders).
50
+ // Safe under StrictMode: the ref is reset at the DismissActionDetector level each render.
51
+ if (isDismiss && dismissDetectedRef) {
52
+ dismissDetectedRef.current = true;
53
+ }
54
+ const handlePress = useEvent(() => {
55
+ onPress?.();
56
+ if (closeOnPress) {
57
+ dismissCtx?.dismiss('action');
58
+ }
59
+ });
60
+ return (_jsx(ItemAction, { type: "secondary", isDisabled: isDisabled, onPress: handlePress, children: children }));
61
+ }
62
+
63
+
@@ -0,0 +1,76 @@
1
+ /**
2
+ * @license MIT
3
+ * author: Cube Dev Team
4
+ * @cube-dev/ui-kit v0.0.0-canary-6b0df31
5
+ * Released under the MIT license.
6
+ */
7
+
8
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
+ import { useContext, useRef } from 'react';
10
+ import { tasty } from '../../../tasty/index.js';
11
+ import { ItemActionProvider } from '../../actions/ItemActionContext.js';
12
+ import { Block } from '../../Block.js';
13
+ import { Item } from '../../content/Item/Item.js';
14
+ import { Flex } from '../../layout/Flex.js';
15
+ import { Space } from '../../layout/Space.js';
16
+ import { getThemeIcon } from '../Toast/useToast.js';
17
+ import { DismissActionDetectedContext, NotificationAction, NotificationDismissProvider, } from './NotificationAction.js';
18
+ // ─── Styled Components ──────────────────────────────────────────────
19
+ const StyledItem = tasty(Item, {
20
+ styles: {
21
+ width: 'max min((100vw - 4x), 50x)',
22
+ transition: 'theme, inset',
23
+ Description: {
24
+ preset: 't4',
25
+ },
26
+ },
27
+ });
28
+ // ─── Dismiss Action Detection ────────────────────────────────────────
29
+ /**
30
+ * Provides a ref via context that NotificationAction children write to
31
+ * during render when `isDismiss` is set. The ref is reset each render.
32
+ */
33
+ function DismissActionDetector({ children }) {
34
+ const ref = useRef(false);
35
+ // Reset each render so detection is fresh
36
+ ref.current = false;
37
+ return (_jsx(DismissActionDetectedContext.Provider, { value: ref, children: children }));
38
+ }
39
+ /**
40
+ * Renders the default "Dismiss" button only if no sibling NotificationAction
41
+ * has `isDismiss` set. Reads from DismissActionDetectedContext ref which is
42
+ * populated by actions that rendered before this component (left-to-right order).
43
+ */
44
+ function AutoDismissButton() {
45
+ const dismissDetectedRef = useContext(DismissActionDetectedContext);
46
+ if (dismissDetectedRef?.current)
47
+ return null;
48
+ return _jsx(NotificationAction, { isDismiss: true, children: "Dismiss" });
49
+ }
50
+ /**
51
+ * Extracted sub-component for the actions area of a notification card.
52
+ *
53
+ * The dismiss provider is always rendered when `hasDismissContext` is true,
54
+ * so any action with `closeOnPress` can close the notification — regardless
55
+ * of `isDismissible`. The `showAutoDismiss` flag only controls the
56
+ * auto-appended "Dismiss" button.
57
+ */
58
+ function ActionsSection({ actions, theme, showAutoDismiss, hasDismissContext, notificationId, onDismiss, }) {
59
+ const actionsContent = (_jsxs(Space, { placeContent: "end", gap: "1x", flexGrow: 1, children: [actions, showAutoDismiss && _jsx(AutoDismissButton, {})] }));
60
+ const wrappedContent = showAutoDismiss ? (_jsx(DismissActionDetector, { children: actionsContent })) : (actionsContent);
61
+ return (_jsx(ItemActionProvider, { type: "card", theme: theme, children: hasDismissContext ? (_jsx(NotificationDismissProvider, { notificationId: notificationId, onDismiss: onDismiss, children: wrappedContent })) : (wrappedContent) }));
62
+ }
63
+ /**
64
+ * Shared presentational card used by both overlay NotificationItem
65
+ * and PersistentNotificationListItem.
66
+ */
67
+ export function NotificationCard({ qa = 'Notification', theme, title, description, icon: providedIcon, actions, isDismissible = true, notificationId, onDismiss, suffix, }) {
68
+ const icon = getThemeIcon(theme, providedIcon);
69
+ const hasDismissContext = notificationId != null && onDismiss != null;
70
+ const showAutoDismiss = isDismissible && hasDismissContext;
71
+ const hasActions = !!(actions || showAutoDismiss);
72
+ const descriptionContent = description || hasActions ? (_jsxs(Flex, { flow: "row wrap", gap: "0.5x 1x", placeItems: "center stretch", children: [description && _jsx(Block, { children: description }), hasActions && (_jsx(ActionsSection, { actions: actions, theme: theme, showAutoDismiss: showAutoDismiss, hasDismissContext: hasDismissContext, notificationId: notificationId, onDismiss: onDismiss }))] })) : undefined;
73
+ return (_jsx(StyledItem, { qa: qa, type: "card", theme: theme, icon: icon, description: descriptionContent, suffix: suffix, children: title }));
74
+ }
75
+
76
+
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @license MIT
3
+ * author: Cube Dev Team
4
+ * @cube-dev/ui-kit v0.0.0-canary-6b0df31
5
+ * Released under the MIT license.
6
+ */
7
+
8
+ import { createContext, useContext } from 'react';
9
+ // ─── Contexts ─────────────────────────────────────────────────────────
10
+ export const ToastContext = createContext(null);
11
+ /**
12
+ * Internal context for overlay notification machinery.
13
+ * Not exported publicly — consumers should use `useNotifications` hook.
14
+ */
15
+ export const NotificationContext = createContext(null);
16
+ /**
17
+ * Public context for persistent notifications.
18
+ * Used by `usePersistentNotifications` and `useNotificationsCount` hooks.
19
+ */
20
+ export const PersistentNotificationsContext = createContext(null);
21
+ // ─── Context Hooks ────────────────────────────────────────────────────
22
+ export function useToastContext() {
23
+ const context = useContext(ToastContext);
24
+ if (!context) {
25
+ throw new Error('useToastContext must be used within an OverlayProvider');
26
+ }
27
+ return context;
28
+ }
29
+ export function useNotificationContext() {
30
+ const context = useContext(NotificationContext);
31
+ if (!context) {
32
+ throw new Error('useNotificationContext must be used within an OverlayProvider');
33
+ }
34
+ return context;
35
+ }
36
+ export function usePersistentNotificationsContext() {
37
+ const context = useContext(PersistentNotificationsContext);
38
+ if (!context) {
39
+ throw new Error('usePersistentNotificationsContext must be used within an OverlayProvider');
40
+ }
41
+ return context;
42
+ }
43
+
44
+
@@ -0,0 +1,63 @@
1
+ /**
2
+ * @license MIT
3
+ * author: Cube Dev Team
4
+ * @cube-dev/ui-kit v0.0.0-canary-6b0df31
5
+ * Released under the MIT license.
6
+ */
7
+
8
+ import { jsx as _jsx } from "react/jsx-runtime";
9
+ import { useEvent } from '../../../_internal/index.js';
10
+ import { tasty } from '../../../tasty/index.js';
11
+ import { NotificationCard } from './NotificationCard.js';
12
+ // ─── ARIA Helpers ────────────────────────────────────────────────────
13
+ function getAriaRole(theme) {
14
+ if (theme === 'danger' || theme === 'warning') {
15
+ return 'alert';
16
+ }
17
+ return 'status';
18
+ }
19
+ function getAriaLive(theme) {
20
+ if (theme === 'danger' || theme === 'warning') {
21
+ return 'assertive';
22
+ }
23
+ return 'polite';
24
+ }
25
+ // ─── Styled Wrapper ──────────────────────────────────────────────────
26
+ /**
27
+ * Wrapper element for overlay notification items.
28
+ *
29
+ * Accessibility attributes are set as static defaults:
30
+ * - `tabIndex={0}`: Makes the notification focusable via keyboard, allowing
31
+ * users to Tab to it and press Escape to dismiss.
32
+ * - `aria-atomic="true"`: Ensures screen readers announce the entire notification
33
+ * when content changes (not just the diff).
34
+ * - `aria-relevant="additions text"`: Announces when new content is added or
35
+ * text changes, but not when elements are removed (e.g., during exit animation).
36
+ *
37
+ * The `role` and `aria-live` are set dynamically per-instance based on theme
38
+ * (see `getAriaRole` and `getAriaLive` above).
39
+ */
40
+ const NotificationItemWrapper = tasty({
41
+ as: 'div',
42
+ tabIndex: 0,
43
+ 'aria-atomic': 'true',
44
+ 'aria-relevant': 'additions text',
45
+ styles: {
46
+ outline: {
47
+ '': 'none',
48
+ },
49
+ },
50
+ });
51
+ export function NotificationItem({ notification, onDismiss, }) {
52
+ const { theme, title, description, icon, actions, isDismissible = true, id, internalId, } = notification;
53
+ const notificationId = id ?? internalId;
54
+ const handleKeyDown = useEvent((e) => {
55
+ if (e.key === 'Escape' && isDismissible) {
56
+ e.stopPropagation();
57
+ onDismiss(notificationId, 'close');
58
+ }
59
+ });
60
+ return (_jsx(NotificationItemWrapper, { role: getAriaRole(theme), "aria-live": getAriaLive(theme), onKeyDown: handleKeyDown, children: _jsx(NotificationCard, { qa: "Notification", theme: theme, title: title, description: description, icon: icon, actions: actions, isDismissible: isDismissible, notificationId: notificationId, onDismiss: onDismiss }) }));
61
+ }
62
+
63
+
@@ -0,0 +1,325 @@
1
+ /**
2
+ * @license MIT
3
+ * author: Cube Dev Team
4
+ * @cube-dev/ui-kit v0.0.0-canary-6b0df31
5
+ * Released under the MIT license.
6
+ */
7
+
8
+ import { jsx as _jsx } from "react/jsx-runtime";
9
+ import { useCallback, useEffect, useMemo, useRef, useState, } from 'react';
10
+ import { useEvent } from '../../../_internal/index.js';
11
+ import { tasty } from '../../../tasty/index.js';
12
+ import { useLayoutEffect } from '../../../utils/react/useLayoutEffect.js';
13
+ import { DisplayTransition } from '../../helpers/DisplayTransition/DisplayTransition.js';
14
+ import { Portal } from '../../portal/index.js';
15
+ import { ToastItem } from '../Toast/ToastItem.js';
16
+ import { NotificationItem } from './NotificationItem.js';
17
+ // ─── Constants ───────────────────────────────────────────────────────
18
+ const COLLAPSE_VISIBLE_HEIGHT = 10;
19
+ const CONTAINER_OFFSET = 16;
20
+ const ITEM_GAP = 8;
21
+ const DEFAULT_ITEM_HEIGHT = 56;
22
+ // ─── Styled Elements ─────────────────────────────────────────────────
23
+ const OverlayContainerElement = tasty({
24
+ styles: {
25
+ position: 'fixed',
26
+ top: '2x',
27
+ left: '50%',
28
+ transform: 'translateX(-50%)',
29
+ zIndex: 10000,
30
+ padding: '1x',
31
+ height: '0',
32
+ pointerEvents: 'none',
33
+ },
34
+ });
35
+ const OverlayItemWrapper = tasty({
36
+ styles: {
37
+ position: 'absolute',
38
+ top: '0',
39
+ left: '50%',
40
+ transform: {
41
+ '': 'translateX(-50%) translateY(-50%)',
42
+ 'isMeasured & isShown': 'translateX(-50%) translateY(0)',
43
+ },
44
+ width: 'max-content 50x',
45
+ pointerEvents: 'auto',
46
+ transition: {
47
+ '': 'opacity $transition ease-in, transform $transition ease-in',
48
+ isMeasured: 'top $transition ease-in, opacity $transition ease-in, transform $transition ease-in',
49
+ },
50
+ opacity: {
51
+ '': 0,
52
+ isShown: 1,
53
+ },
54
+ },
55
+ });
56
+ function getItemId(item) {
57
+ return item.data.internalId;
58
+ }
59
+ function isItemExiting(item) {
60
+ return item.data.isExiting === true;
61
+ }
62
+ function getItemCreatedAt(item) {
63
+ return item.data.createdAt;
64
+ }
65
+ /**
66
+ * Manages height measurement, position calculation, and ref tracking
67
+ * for overlay items. Extracted from OverlayContainer for readability.
68
+ */
69
+ function useItemPositions(visibleItems) {
70
+ const [heights, setHeights] = useState({});
71
+ const itemRefs = useRef(new Map());
72
+ const lastPositionsRef = useRef(new Map());
73
+ // Items that have been measured AND painted at their correct position.
74
+ // Lags one frame behind `heights` so the browser paints the item at
75
+ // its final `top` before the CSS `top` transition is enabled.
76
+ const [settledIds, setSettledIds] = useState(new Set());
77
+ const rafRef = useRef(null);
78
+ // Measure heights using layout effect to avoid visible layout shifts.
79
+ // Runs every render but bails early if nothing changed.
80
+ useLayoutEffect(() => {
81
+ const newHeights = {};
82
+ let hasChanges = false;
83
+ itemRefs.current.forEach((el, id) => {
84
+ const height = el.offsetHeight || DEFAULT_ITEM_HEIGHT;
85
+ newHeights[id] = height;
86
+ if (heights[id] !== height) {
87
+ hasChanges = true;
88
+ }
89
+ });
90
+ for (const id of Object.keys(heights)) {
91
+ if (!itemRefs.current.has(id)) {
92
+ hasChanges = true;
93
+ }
94
+ }
95
+ if (hasChanges) {
96
+ setHeights(newHeights);
97
+ }
98
+ });
99
+ // After heights change, schedule settledIds update for the next frame.
100
+ // This ensures the item is painted at its correct position (with no top
101
+ // transition) before we enable the transition.
102
+ useEffect(() => {
103
+ const newIds = Object.keys(heights).filter((id) => !settledIds.has(id));
104
+ if (newIds.length === 0)
105
+ return;
106
+ if (rafRef.current != null) {
107
+ cancelAnimationFrame(rafRef.current);
108
+ }
109
+ rafRef.current = requestAnimationFrame(() => {
110
+ rafRef.current = null;
111
+ setSettledIds((prev) => {
112
+ const next = new Set(prev);
113
+ for (const id of newIds) {
114
+ next.add(id);
115
+ }
116
+ return next;
117
+ });
118
+ });
119
+ return () => {
120
+ if (rafRef.current != null) {
121
+ cancelAnimationFrame(rafRef.current);
122
+ rafRef.current = null;
123
+ }
124
+ };
125
+ }, [heights]);
126
+ const createRefCallback = useCallback((itemId, displayRef) => (el) => {
127
+ displayRef(el);
128
+ if (el) {
129
+ itemRefs.current.set(itemId, el);
130
+ }
131
+ else {
132
+ itemRefs.current.delete(itemId);
133
+ }
134
+ }, []);
135
+ const positions = useMemo(() => {
136
+ const posMap = new Map();
137
+ let currentTop = 0;
138
+ for (const item of visibleItems) {
139
+ const id = getItemId(item);
140
+ posMap.set(id, currentTop);
141
+ const height = heights[id] ?? DEFAULT_ITEM_HEIGHT;
142
+ currentTop += height + ITEM_GAP;
143
+ }
144
+ return posMap;
145
+ }, [visibleItems, heights]);
146
+ useEffect(() => {
147
+ positions.forEach((pos, id) => {
148
+ lastPositionsRef.current.set(id, pos);
149
+ });
150
+ }, [positions]);
151
+ return {
152
+ heights,
153
+ settledIds,
154
+ positions,
155
+ lastPositionsRef,
156
+ itemRefs,
157
+ createRefCallback,
158
+ };
159
+ }
160
+ /**
161
+ * Manages collapse/expand behavior and pause state for the overlay container.
162
+ * Extracted from OverlayContainer for readability.
163
+ */
164
+ function useCollapseState(canCollapse, allItems, itemRefs, onPauseChange) {
165
+ const [isCollapsed, setIsCollapsed] = useState(false);
166
+ const containerRef = useRef(null);
167
+ const boundsRef = useRef(null);
168
+ const updateBounds = useCallback(() => {
169
+ const refs = itemRefs.current;
170
+ if (!refs || refs.size === 0) {
171
+ boundsRef.current = null;
172
+ return;
173
+ }
174
+ let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
175
+ refs.forEach((el) => {
176
+ const rect = el.getBoundingClientRect();
177
+ minX = Math.min(minX, rect.left);
178
+ minY = Math.min(minY, rect.top);
179
+ maxX = Math.max(maxX, rect.right);
180
+ maxY = Math.max(maxY, rect.bottom);
181
+ });
182
+ if (typeof DOMRect !== 'undefined') {
183
+ boundsRef.current = new DOMRect(minX, minY, maxX - minX, maxY - minY);
184
+ }
185
+ else {
186
+ boundsRef.current = {
187
+ x: minX,
188
+ y: minY,
189
+ width: maxX - minX,
190
+ height: maxY - minY,
191
+ top: minY,
192
+ right: maxX,
193
+ bottom: maxY,
194
+ left: minX,
195
+ toJSON: () => ({}),
196
+ };
197
+ }
198
+ }, [itemRefs]);
199
+ // Track mouse for collapse — expand when mouse leaves bounds
200
+ useEffect(() => {
201
+ if (!isCollapsed)
202
+ return;
203
+ const handleMouseMove = (e) => {
204
+ const bounds = boundsRef.current;
205
+ if (!bounds) {
206
+ setIsCollapsed(false);
207
+ onPauseChange(false);
208
+ return;
209
+ }
210
+ const padding = 20;
211
+ const isInBounds = e.clientX >= bounds.left - padding &&
212
+ e.clientX <= bounds.right + padding &&
213
+ e.clientY >= bounds.top - padding &&
214
+ e.clientY <= bounds.bottom + padding;
215
+ if (!isInBounds) {
216
+ setIsCollapsed(false);
217
+ onPauseChange(false);
218
+ }
219
+ };
220
+ window.addEventListener('mousemove', handleMouseMove);
221
+ return () => window.removeEventListener('mousemove', handleMouseMove);
222
+ }, [isCollapsed, onPauseChange]);
223
+ // Update bounds when items change
224
+ useEffect(() => {
225
+ updateBounds();
226
+ }, [allItems, updateBounds]);
227
+ const handleMouseEnter = useCallback(() => {
228
+ updateBounds();
229
+ onPauseChange(true);
230
+ if (canCollapse) {
231
+ setIsCollapsed(true);
232
+ }
233
+ }, [updateBounds, canCollapse, onPauseChange]);
234
+ const handleMouseLeave = useCallback(() => {
235
+ if (!isCollapsed) {
236
+ onPauseChange(false);
237
+ }
238
+ }, [isCollapsed, onPauseChange]);
239
+ const handleFocus = useCallback(() => {
240
+ onPauseChange(true);
241
+ }, [onPauseChange]);
242
+ const handleBlur = useCallback((e) => {
243
+ if (containerRef.current &&
244
+ !containerRef.current.contains(e.relatedTarget)) {
245
+ onPauseChange(false);
246
+ }
247
+ }, [onPauseChange]);
248
+ return {
249
+ isCollapsed,
250
+ handleMouseEnter,
251
+ handleMouseLeave,
252
+ handleFocus,
253
+ handleBlur,
254
+ containerRef,
255
+ };
256
+ }
257
+ export function OverlayContainer({ toasts, notifications, onToastExitComplete, onNotificationExitComplete, onNotificationDismiss, onPauseChange, }) {
258
+ // Merge toasts and notifications into a single ordered list
259
+ const allItems = useMemo(() => {
260
+ const items = [
261
+ ...toasts.map((t) => ({ kind: 'toast', data: t })),
262
+ ...notifications.map((n) => ({ kind: 'notification', data: n })),
263
+ ];
264
+ // Sort by createdAt ascending (oldest first = bottom of stack, newest last = top)
265
+ items.sort((a, b) => getItemCreatedAt(a) - getItemCreatedAt(b));
266
+ return items;
267
+ }, [toasts, notifications]);
268
+ const visibleItems = useMemo(() => allItems.filter((item) => !isItemExiting(item)), [allItems]);
269
+ const hasNotifications = notifications.some((n) => !n.isExiting);
270
+ const canCollapse = !hasNotifications;
271
+ const { heights, settledIds, positions, lastPositionsRef, itemRefs, createRefCallback, } = useItemPositions(visibleItems);
272
+ const { isCollapsed, handleMouseEnter, handleMouseLeave, handleFocus, handleBlur, containerRef, } = useCollapseState(canCollapse, allItems, itemRefs, onPauseChange);
273
+ // ─── Callbacks ─────────────────────────────────────────────────────
274
+ const handleExitComplete = useEvent((item) => {
275
+ const id = getItemId(item);
276
+ lastPositionsRef.current?.delete(id);
277
+ if (item.kind === 'toast') {
278
+ onToastExitComplete(item.data.internalId);
279
+ }
280
+ else {
281
+ onNotificationExitComplete(item.data.internalId);
282
+ }
283
+ });
284
+ // useCallback (not useEvent) because this is called during render.
285
+ // useEvent defers the ref update to useLayoutEffect, so during render
286
+ // it would still read the previous closure's positions/heights.
287
+ const getItemStyle = useCallback((item, index, total) => {
288
+ const id = getItemId(item);
289
+ const baseTop = positions.get(id) ?? lastPositionsRef.current?.get(id) ?? 0;
290
+ const height = heights[id] ?? DEFAULT_ITEM_HEIGHT;
291
+ if (!isCollapsed || !canCollapse) {
292
+ return { top: `${baseTop}px` };
293
+ }
294
+ const isNewest = index === total - 1;
295
+ const collapsedTop = COLLAPSE_VISIBLE_HEIGHT - CONTAINER_OFFSET - height;
296
+ return {
297
+ top: `${collapsedTop}px`,
298
+ zIndex: index,
299
+ opacity: isNewest ? 1 : 0,
300
+ pointerEvents: 'none',
301
+ };
302
+ }, [isCollapsed, canCollapse, positions, heights, lastPositionsRef]);
303
+ // Build a visibleIndex lookup map to avoid O(n²) findIndex inside render loop
304
+ const visibleIndexMap = useMemo(() => {
305
+ const map = new Map();
306
+ visibleItems.forEach((item, index) => {
307
+ map.set(getItemId(item), index);
308
+ });
309
+ return map;
310
+ }, [visibleItems]);
311
+ if (allItems.length === 0)
312
+ return null;
313
+ return (_jsx(Portal, { children: _jsx(OverlayContainerElement, { ref: containerRef, onFocus: handleFocus, onBlur: handleBlur, children: allItems.map((item) => {
314
+ const itemId = getItemId(item);
315
+ const visibleIndex = visibleIndexMap.get(itemId) ?? 0;
316
+ const isExiting = isItemExiting(item);
317
+ return (_jsx(DisplayTransition, { animateOnMount: true, isShown: !isExiting, onRest: (transition) => {
318
+ if (transition === 'exit') {
319
+ handleExitComplete(item);
320
+ }
321
+ }, children: ({ isShown, ref }) => (_jsx(OverlayItemWrapper, { ref: createRefCallback(itemId, ref), mods: { isShown, isMeasured: settledIds.has(itemId) }, style: getItemStyle(item, visibleIndex, visibleItems.length), onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, children: item.kind === 'toast' ? (_jsx(ToastItem, { ...item.data.itemProps, title: item.data.title, description: item.data.description, theme: item.data.theme, icon: item.data.icon, isLoading: item.data.isLoading })) : (_jsx(NotificationItem, { notification: item.data, onDismiss: onNotificationDismiss })) })) }, itemId));
322
+ }) }) }));
323
+ }
324
+
325
+