@cube-dev/ui-kit 0.117.0 → 0.119.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 (1026) hide show
  1. package/dist/CHANGELOG.md +32 -0
  2. package/dist/_internal/hooks/use-chained-callback.js +1 -1
  3. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  4. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  5. package/dist/_internal/hooks/use-event.js +1 -1
  6. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  7. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  8. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  9. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  10. package/dist/_internal/hooks/use-warn.js +1 -1
  11. package/dist/components/Block.d.ts +1 -2
  12. package/dist/components/Block.js +2 -5
  13. package/dist/components/Block.js.map +1 -1
  14. package/dist/components/CollectionItem.js +1 -1
  15. package/dist/components/GlobalStyles.js +2 -57
  16. package/dist/components/GlobalStyles.js.map +1 -1
  17. package/dist/components/GridProvider.d.ts +1 -2
  18. package/dist/components/GridProvider.js +2 -3
  19. package/dist/components/GridProvider.js.map +1 -1
  20. package/dist/components/HiddenInput.js +2 -2
  21. package/dist/components/HiddenInput.js.map +1 -1
  22. package/dist/components/Root.d.ts +1 -2
  23. package/dist/components/Root.js +2 -6
  24. package/dist/components/Root.js.map +1 -1
  25. package/dist/components/actions/Action/Action.d.ts +1 -2
  26. package/dist/components/actions/Action/Action.js +2 -4
  27. package/dist/components/actions/Action/Action.js.map +1 -1
  28. package/dist/components/actions/Banner/Banner.d.ts +1 -1
  29. package/dist/components/actions/Banner/Banner.js +5 -5
  30. package/dist/components/actions/Banner/Banner.js.map +1 -1
  31. package/dist/components/actions/Button/Button.d.ts +2 -1769
  32. package/dist/components/actions/Button/Button.js +2 -4
  33. package/dist/components/actions/Button/Button.js.map +1 -1
  34. package/dist/components/actions/ButtonGroup/ButtonGroup.js +2 -2
  35. package/dist/components/actions/ButtonGroup/ButtonGroup.js.map +1 -1
  36. package/dist/components/actions/CommandMenu/CommandMenu.d.ts +1 -3
  37. package/dist/components/actions/CommandMenu/CommandMenu.js +2 -4
  38. package/dist/components/actions/CommandMenu/CommandMenu.js.map +1 -1
  39. package/dist/components/actions/CommandMenu/styled.js +3 -3
  40. package/dist/components/actions/CommandMenu/styled.js.map +1 -1
  41. package/dist/components/actions/ItemAction/ItemAction.d.ts +1 -3
  42. package/dist/components/actions/ItemAction/ItemAction.js +2 -2
  43. package/dist/components/actions/ItemAction/ItemAction.js.map +1 -1
  44. package/dist/components/actions/ItemActionContext.js +1 -1
  45. package/dist/components/actions/ItemButton/ItemButton.d.ts +1 -2
  46. package/dist/components/actions/ItemButton/ItemButton.js +2 -2
  47. package/dist/components/actions/ItemButton/ItemButton.js.map +1 -1
  48. package/dist/components/actions/Link/Link.js +1 -1
  49. package/dist/components/actions/Menu/Menu.d.ts +1 -3
  50. package/dist/components/actions/Menu/Menu.js +2 -4
  51. package/dist/components/actions/Menu/Menu.js.map +1 -1
  52. package/dist/components/actions/Menu/MenuItem.d.ts +1 -2
  53. package/dist/components/actions/Menu/MenuItem.js +1 -1
  54. package/dist/components/actions/Menu/MenuItem.js.map +1 -1
  55. package/dist/components/actions/Menu/MenuSection.d.ts +1 -2
  56. package/dist/components/actions/Menu/MenuSection.js +1 -1
  57. package/dist/components/actions/Menu/MenuSection.js.map +1 -1
  58. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  59. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  60. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  61. package/dist/components/actions/Menu/context.js +1 -1
  62. package/dist/components/actions/Menu/styled.js +2 -2
  63. package/dist/components/actions/Menu/styled.js.map +1 -1
  64. package/dist/components/actions/index.js +1 -1
  65. package/dist/components/actions/use-action.d.ts +1 -2
  66. package/dist/components/actions/use-action.js +2 -2
  67. package/dist/components/actions/use-action.js.map +1 -1
  68. package/dist/components/actions/use-anchored-menu.js +1 -1
  69. package/dist/components/actions/use-context-menu.js +1 -1
  70. package/dist/components/content/ActiveZone/ActiveZone.d.ts +1 -2
  71. package/dist/components/content/ActiveZone/ActiveZone.js +2 -5
  72. package/dist/components/content/ActiveZone/ActiveZone.js.map +1 -1
  73. package/dist/components/content/Alert/Alert.js +2 -2
  74. package/dist/components/content/Alert/Alert.js.map +1 -1
  75. package/dist/components/content/Alert/types.d.ts +1 -2
  76. package/dist/components/content/Alert/use-alert.js +2 -4
  77. package/dist/components/content/Alert/use-alert.js.map +1 -1
  78. package/dist/components/content/Avatar/Avatar.d.ts +1 -3
  79. package/dist/components/content/Avatar/Avatar.js +2 -5
  80. package/dist/components/content/Avatar/Avatar.js.map +1 -1
  81. package/dist/components/content/Badge/Badge.js +2 -2
  82. package/dist/components/content/Badge/Badge.js.map +1 -1
  83. package/dist/components/content/Card/Card.d.ts +1 -2
  84. package/dist/components/content/Card/Card.js +2 -5
  85. package/dist/components/content/Card/Card.js.map +1 -1
  86. package/dist/components/content/Content.d.ts +1 -2
  87. package/dist/components/content/Content.js +2 -5
  88. package/dist/components/content/Content.js.map +1 -1
  89. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.d.ts +1 -3
  90. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +2 -4
  91. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js.map +1 -1
  92. package/dist/components/content/CopySnippet/CopySnippet.js +2 -2
  93. package/dist/components/content/CopySnippet/CopySnippet.js.map +1 -1
  94. package/dist/components/content/Disclosure/Disclosure.d.ts +1 -3
  95. package/dist/components/content/Disclosure/Disclosure.js +2 -4
  96. package/dist/components/content/Disclosure/Disclosure.js.map +1 -1
  97. package/dist/components/content/Divider.d.ts +1 -2
  98. package/dist/components/content/Divider.js +2 -4
  99. package/dist/components/content/Divider.js.map +1 -1
  100. package/dist/components/content/Footer.d.ts +1 -2
  101. package/dist/components/content/Footer.js +2 -5
  102. package/dist/components/content/Footer.js.map +1 -1
  103. package/dist/components/content/Header.d.ts +1 -2
  104. package/dist/components/content/Header.js +2 -5
  105. package/dist/components/content/Header.js.map +1 -1
  106. package/dist/components/content/HotKeys/HotKeys.d.ts +1 -2
  107. package/dist/components/content/HotKeys/HotKeys.js +2 -5
  108. package/dist/components/content/HotKeys/HotKeys.js.map +1 -1
  109. package/dist/components/content/Item/Item.d.ts +1 -3
  110. package/dist/components/content/Item/Item.js +2 -3
  111. package/dist/components/content/Item/Item.js.map +1 -1
  112. package/dist/components/content/ItemBadge/ItemBadge.d.ts +1 -2
  113. package/dist/components/content/ItemBadge/ItemBadge.js +2 -2
  114. package/dist/components/content/ItemBadge/ItemBadge.js.map +1 -1
  115. package/dist/components/content/Layout/GridLayout.d.ts +1 -2
  116. package/dist/components/content/Layout/GridLayout.js +2 -2
  117. package/dist/components/content/Layout/GridLayout.js.map +1 -1
  118. package/dist/components/content/Layout/Layout.d.ts +1 -3
  119. package/dist/components/content/Layout/Layout.js +3 -7
  120. package/dist/components/content/Layout/Layout.js.map +1 -1
  121. package/dist/components/content/Layout/LayoutBlock.js +2 -2
  122. package/dist/components/content/Layout/LayoutBlock.js.map +1 -1
  123. package/dist/components/content/Layout/LayoutCenter.js +2 -2
  124. package/dist/components/content/Layout/LayoutCenter.js.map +1 -1
  125. package/dist/components/content/Layout/LayoutContainer.d.ts +1 -3
  126. package/dist/components/content/Layout/LayoutContainer.js +2 -6
  127. package/dist/components/content/Layout/LayoutContainer.js.map +1 -1
  128. package/dist/components/content/Layout/LayoutContent.d.ts +1 -2
  129. package/dist/components/content/Layout/LayoutContent.js +2 -6
  130. package/dist/components/content/Layout/LayoutContent.js.map +1 -1
  131. package/dist/components/content/Layout/LayoutContext.js +1 -1
  132. package/dist/components/content/Layout/LayoutFlex.js +2 -2
  133. package/dist/components/content/Layout/LayoutFlex.js.map +1 -1
  134. package/dist/components/content/Layout/LayoutFooter.js +2 -2
  135. package/dist/components/content/Layout/LayoutFooter.js.map +1 -1
  136. package/dist/components/content/Layout/LayoutGrid.d.ts +1 -2
  137. package/dist/components/content/Layout/LayoutGrid.js +2 -2
  138. package/dist/components/content/Layout/LayoutGrid.js.map +1 -1
  139. package/dist/components/content/Layout/LayoutHeader.js +2 -2
  140. package/dist/components/content/Layout/LayoutHeader.js.map +1 -1
  141. package/dist/components/content/Layout/LayoutPane.d.ts +1 -3
  142. package/dist/components/content/Layout/LayoutPane.js +2 -6
  143. package/dist/components/content/Layout/LayoutPane.js.map +1 -1
  144. package/dist/components/content/Layout/LayoutPanel.d.ts +1 -3
  145. package/dist/components/content/Layout/LayoutPanel.js +2 -6
  146. package/dist/components/content/Layout/LayoutPanel.js.map +1 -1
  147. package/dist/components/content/Layout/LayoutPanelHeader.d.ts +1 -2
  148. package/dist/components/content/Layout/LayoutPanelHeader.js +2 -4
  149. package/dist/components/content/Layout/LayoutPanelHeader.js.map +1 -1
  150. package/dist/components/content/Layout/LayoutToolbar.js +2 -2
  151. package/dist/components/content/Layout/LayoutToolbar.js.map +1 -1
  152. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  153. package/dist/components/content/Layout/index.js +1 -1
  154. package/dist/components/content/Layout/utils.js +1 -1
  155. package/dist/components/content/Paragraph.d.ts +1 -2
  156. package/dist/components/content/Paragraph.js +2 -3
  157. package/dist/components/content/Paragraph.js.map +1 -1
  158. package/dist/components/content/Placeholder/Placeholder.d.ts +1 -3
  159. package/dist/components/content/Placeholder/Placeholder.js +2 -6
  160. package/dist/components/content/Placeholder/Placeholder.js.map +1 -1
  161. package/dist/components/content/PrismCode/PrismCode.d.ts +1 -3
  162. package/dist/components/content/PrismCode/PrismCode.js +2 -3
  163. package/dist/components/content/PrismCode/PrismCode.js.map +1 -1
  164. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  165. package/dist/components/content/PrismDiffCode/PrismDiffCode.d.ts +1 -3
  166. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  167. package/dist/components/content/PrismDiffCode/PrismDiffCode.js.map +1 -1
  168. package/dist/components/content/Result/Result.d.ts +1 -2
  169. package/dist/components/content/Result/Result.js +2 -5
  170. package/dist/components/content/Result/Result.js.map +1 -1
  171. package/dist/components/content/Skeleton/Skeleton.d.ts +1 -2
  172. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  173. package/dist/components/content/Skeleton/Skeleton.js.map +1 -1
  174. package/dist/components/content/Tag/Tag.d.ts +1 -2
  175. package/dist/components/content/Tag/Tag.js +2 -2
  176. package/dist/components/content/Tag/Tag.js.map +1 -1
  177. package/dist/components/content/Text.d.ts +128 -159
  178. package/dist/components/content/Text.js +2 -5
  179. package/dist/components/content/Text.js.map +1 -1
  180. package/dist/components/content/TextItem/TextItem.d.ts +1 -2
  181. package/dist/components/content/TextItem/TextItem.js +2 -5
  182. package/dist/components/content/TextItem/TextItem.js.map +1 -1
  183. package/dist/components/content/Title.d.ts +1 -2
  184. package/dist/components/content/Title.js +2 -5
  185. package/dist/components/content/Title.js.map +1 -1
  186. package/dist/components/content/highlightText.js +1 -1
  187. package/dist/components/content/highlightText.js.map +1 -1
  188. package/dist/components/content/use-auto-tooltip.d.ts +1 -1
  189. package/dist/components/content/use-auto-tooltip.js +1 -1
  190. package/dist/components/content/use-auto-tooltip.js.map +1 -1
  191. package/dist/components/fields/Checkbox/Checkbox.d.ts +1 -3
  192. package/dist/components/fields/Checkbox/Checkbox.js +2 -5
  193. package/dist/components/fields/Checkbox/Checkbox.js.map +1 -1
  194. package/dist/components/fields/Checkbox/CheckboxGroup.d.ts +1 -3
  195. package/dist/components/fields/Checkbox/CheckboxGroup.js +2 -4
  196. package/dist/components/fields/Checkbox/CheckboxGroup.js.map +1 -1
  197. package/dist/components/fields/Checkbox/context.js +1 -1
  198. package/dist/components/fields/ComboBox/ComboBox.d.ts +1 -3
  199. package/dist/components/fields/ComboBox/ComboBox.js +2 -4
  200. package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
  201. package/dist/components/fields/DatePicker/DateInput.d.ts +1 -3
  202. package/dist/components/fields/DatePicker/DateInput.js +2 -3
  203. package/dist/components/fields/DatePicker/DateInput.js.map +1 -1
  204. package/dist/components/fields/DatePicker/DateInputBase.js +2 -4
  205. package/dist/components/fields/DatePicker/DateInputBase.js.map +1 -1
  206. package/dist/components/fields/DatePicker/DatePicker.d.ts +1 -3
  207. package/dist/components/fields/DatePicker/DatePicker.js +2 -3
  208. package/dist/components/fields/DatePicker/DatePicker.js.map +1 -1
  209. package/dist/components/fields/DatePicker/DatePickerButton.js +2 -2
  210. package/dist/components/fields/DatePicker/DatePickerButton.js.map +1 -1
  211. package/dist/components/fields/DatePicker/DatePickerElement.js +2 -2
  212. package/dist/components/fields/DatePicker/DatePickerElement.js.map +1 -1
  213. package/dist/components/fields/DatePicker/DatePickerInput.js +2 -2
  214. package/dist/components/fields/DatePicker/DatePickerInput.js.map +1 -1
  215. package/dist/components/fields/DatePicker/DatePickerSegment.js +2 -2
  216. package/dist/components/fields/DatePicker/DatePickerSegment.js.map +1 -1
  217. package/dist/components/fields/DatePicker/DateRangePicker.d.ts +1 -3
  218. package/dist/components/fields/DatePicker/DateRangePicker.js +2 -4
  219. package/dist/components/fields/DatePicker/DateRangePicker.js.map +1 -1
  220. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.d.ts +1 -3
  221. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +2 -4
  222. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js.map +1 -1
  223. package/dist/components/fields/DatePicker/TimeInput.d.ts +1 -3
  224. package/dist/components/fields/DatePicker/TimeInput.js +2 -3
  225. package/dist/components/fields/DatePicker/TimeInput.js.map +1 -1
  226. package/dist/components/fields/DatePicker/intl.js +1 -1
  227. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  228. package/dist/components/fields/DatePicker/props.js +1 -1
  229. package/dist/components/fields/DatePicker/utils.js +1 -1
  230. package/dist/components/fields/FileInput/FileInput.d.ts +1 -3
  231. package/dist/components/fields/FileInput/FileInput.js +2 -4
  232. package/dist/components/fields/FileInput/FileInput.js.map +1 -1
  233. package/dist/components/fields/FilterListBox/FilterListBox.d.ts +1 -2
  234. package/dist/components/fields/FilterListBox/FilterListBox.js +5 -7
  235. package/dist/components/fields/FilterListBox/FilterListBox.js.map +1 -1
  236. package/dist/components/fields/FilterPicker/FilterPicker.d.ts +1 -3
  237. package/dist/components/fields/FilterPicker/FilterPicker.js +2 -5
  238. package/dist/components/fields/FilterPicker/FilterPicker.js.map +1 -1
  239. package/dist/components/fields/Input/Input.js +1 -1
  240. package/dist/components/fields/ListBox/ListBox.d.ts +1 -3
  241. package/dist/components/fields/ListBox/ListBox.js +2 -5
  242. package/dist/components/fields/ListBox/ListBox.js.map +1 -1
  243. package/dist/components/fields/NumberInput/NumberInput.js +2 -2
  244. package/dist/components/fields/NumberInput/NumberInput.js.map +1 -1
  245. package/dist/components/fields/NumberInput/StepButton.js +2 -2
  246. package/dist/components/fields/NumberInput/StepButton.js.map +1 -1
  247. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  248. package/dist/components/fields/Picker/Picker.d.ts +1 -3
  249. package/dist/components/fields/Picker/Picker.js +2 -5
  250. package/dist/components/fields/Picker/Picker.js.map +1 -1
  251. package/dist/components/fields/RadioGroup/Radio.d.ts +1 -2
  252. package/dist/components/fields/RadioGroup/Radio.js +2 -5
  253. package/dist/components/fields/RadioGroup/Radio.js.map +1 -1
  254. package/dist/components/fields/RadioGroup/RadioGroup.d.ts +1 -3
  255. package/dist/components/fields/RadioGroup/RadioGroup.js +2 -4
  256. package/dist/components/fields/RadioGroup/RadioGroup.js.map +1 -1
  257. package/dist/components/fields/RadioGroup/context.js +1 -1
  258. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  259. package/dist/components/fields/Select/Select.d.ts +834 -836
  260. package/dist/components/fields/Select/Select.js +2 -4
  261. package/dist/components/fields/Select/Select.js.map +1 -1
  262. package/dist/components/fields/Slider/Gradation.js +1 -1
  263. package/dist/components/fields/Slider/HueSlider.js +1 -1
  264. package/dist/components/fields/Slider/HueSlider.js.map +1 -1
  265. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  266. package/dist/components/fields/Slider/Slider.d.ts +1 -3
  267. package/dist/components/fields/Slider/Slider.js +2 -3
  268. package/dist/components/fields/Slider/Slider.js.map +1 -1
  269. package/dist/components/fields/Slider/SliderBase.js +2 -4
  270. package/dist/components/fields/Slider/SliderBase.js.map +1 -1
  271. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  272. package/dist/components/fields/Slider/SliderThumb.js.map +1 -1
  273. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  274. package/dist/components/fields/Slider/SliderTrack.js.map +1 -1
  275. package/dist/components/fields/Slider/elements.js +2 -2
  276. package/dist/components/fields/Slider/elements.js.map +1 -1
  277. package/dist/components/fields/Slider/index.js +1 -1
  278. package/dist/components/fields/Slider/types.d.ts +1 -3
  279. package/dist/components/fields/Switch/Switch.d.ts +1 -3
  280. package/dist/components/fields/Switch/Switch.js +2 -4
  281. package/dist/components/fields/Switch/Switch.js.map +1 -1
  282. package/dist/components/fields/TextArea/TextArea.js +1 -1
  283. package/dist/components/fields/TextInput/TextInput.js +1 -1
  284. package/dist/components/fields/TextInput/TextInputBase.d.ts +1 -3
  285. package/dist/components/fields/TextInput/TextInputBase.js +3 -5
  286. package/dist/components/fields/TextInput/TextInputBase.js.map +1 -1
  287. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  288. package/dist/components/form/FieldWrapper/FieldWrapper.js +2 -2
  289. package/dist/components/form/FieldWrapper/FieldWrapper.js.map +1 -1
  290. package/dist/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
  291. package/dist/components/form/FieldWrapper/types.d.ts +1 -3
  292. package/dist/components/form/Form/Field.d.ts +1 -2
  293. package/dist/components/form/Form/Field.js +1 -1
  294. package/dist/components/form/Form/Field.js.map +1 -1
  295. package/dist/components/form/Form/Form.d.ts +1 -3
  296. package/dist/components/form/Form/Form.js +2 -5
  297. package/dist/components/form/Form/Form.js.map +1 -1
  298. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  299. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  300. package/dist/components/form/Form/SubmitError.js +1 -1
  301. package/dist/components/form/Form/index.js +1 -1
  302. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  303. package/dist/components/form/Form/use-field/use-field.js +1 -1
  304. package/dist/components/form/Form/use-form.js +2 -2
  305. package/dist/components/form/Form/use-form.js.map +1 -1
  306. package/dist/components/form/Form/validation.js +1 -1
  307. package/dist/components/form/Label.d.ts +1 -3
  308. package/dist/components/form/Label.js +2 -5
  309. package/dist/components/form/Label.js.map +1 -1
  310. package/dist/components/form/wrapper.d.ts +1 -2
  311. package/dist/components/form/wrapper.js +1 -1
  312. package/dist/components/form/wrapper.js.map +1 -1
  313. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  314. package/dist/components/helpers/IconSwitch/IconSwitch.js +2 -2
  315. package/dist/components/helpers/IconSwitch/IconSwitch.js.map +1 -1
  316. package/dist/components/layout/Flex.d.ts +1 -2
  317. package/dist/components/layout/Flex.js +2 -5
  318. package/dist/components/layout/Flex.js.map +1 -1
  319. package/dist/components/layout/Flow.d.ts +1 -2
  320. package/dist/components/layout/Flow.js +2 -5
  321. package/dist/components/layout/Flow.js.map +1 -1
  322. package/dist/components/layout/Grid.d.ts +1 -2
  323. package/dist/components/layout/Grid.js +2 -5
  324. package/dist/components/layout/Grid.js.map +1 -1
  325. package/dist/components/layout/Panel.d.ts +1 -3
  326. package/dist/components/layout/Panel.js +2 -3
  327. package/dist/components/layout/Panel.js.map +1 -1
  328. package/dist/components/layout/Prefix.d.ts +1 -2
  329. package/dist/components/layout/Prefix.js +2 -5
  330. package/dist/components/layout/Prefix.js.map +1 -1
  331. package/dist/components/layout/ResizablePanel.d.ts +1 -2
  332. package/dist/components/layout/ResizablePanel.js +2 -2
  333. package/dist/components/layout/ResizablePanel.js.map +1 -1
  334. package/dist/components/layout/Space.d.ts +1 -2
  335. package/dist/components/layout/Space.js +2 -5
  336. package/dist/components/layout/Space.js.map +1 -1
  337. package/dist/components/layout/Suffix.d.ts +1 -2
  338. package/dist/components/layout/Suffix.js +2 -5
  339. package/dist/components/layout/Suffix.js.map +1 -1
  340. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  341. package/dist/components/navigation/Tabs/EditableTitle.js +1 -1
  342. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  343. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  344. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  345. package/dist/components/navigation/Tabs/TabPanel.js.map +1 -1
  346. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  347. package/dist/components/navigation/Tabs/Tabs.js +2 -4
  348. package/dist/components/navigation/Tabs/Tabs.js.map +1 -1
  349. package/dist/components/navigation/Tabs/TabsAction.js +2 -2
  350. package/dist/components/navigation/Tabs/TabsAction.js.map +1 -1
  351. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  352. package/dist/components/navigation/Tabs/styled.js +2 -2
  353. package/dist/components/navigation/Tabs/styled.js.map +1 -1
  354. package/dist/components/navigation/Tabs/types.d.ts +1 -3
  355. package/dist/components/navigation/Tabs/types.js +1 -1
  356. package/dist/components/navigation/Tabs/types.js.map +1 -1
  357. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  358. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  359. package/dist/components/organisms/FileTabs/FileTabs.d.ts +1 -2
  360. package/dist/components/organisms/FileTabs/FileTabs.js +2 -2
  361. package/dist/components/organisms/FileTabs/FileTabs.js.map +1 -1
  362. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  363. package/dist/components/other/Calendar/Calendar.js +2 -2
  364. package/dist/components/other/Calendar/Calendar.js.map +1 -1
  365. package/dist/components/other/Calendar/CalendarCell.js +2 -2
  366. package/dist/components/other/Calendar/CalendarCell.js.map +1 -1
  367. package/dist/components/other/Calendar/CalendarGrid.js +2 -2
  368. package/dist/components/other/Calendar/CalendarGrid.js.map +1 -1
  369. package/dist/components/other/Calendar/RangeCalendar.js +2 -2
  370. package/dist/components/other/Calendar/RangeCalendar.js.map +1 -1
  371. package/dist/components/other/CloudLogo/CloudLogo.js +2 -2
  372. package/dist/components/other/CloudLogo/CloudLogo.js.map +1 -1
  373. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  374. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  375. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  376. package/dist/components/overlays/AlertDialog/types.d.ts +1 -1
  377. package/dist/components/overlays/Dialog/Dialog.d.ts +1 -3
  378. package/dist/components/overlays/Dialog/Dialog.js +2 -4
  379. package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
  380. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  381. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  382. package/dist/components/overlays/Dialog/DialogTrigger.d.ts +1 -2
  383. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  384. package/dist/components/overlays/Dialog/DialogTrigger.js.map +1 -1
  385. package/dist/components/overlays/Dialog/context.js +1 -1
  386. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  387. package/dist/components/overlays/Modal/Modal.d.ts +1 -1
  388. package/dist/components/overlays/Modal/Modal.js +2 -2
  389. package/dist/components/overlays/Modal/Modal.js.map +1 -1
  390. package/dist/components/overlays/Modal/OpenTransition.js +1 -1
  391. package/dist/components/overlays/Modal/Overlay.js +1 -1
  392. package/dist/components/overlays/Modal/Overlay.js.map +1 -1
  393. package/dist/components/overlays/Modal/Popover.d.ts +1 -1
  394. package/dist/components/overlays/Modal/Popover.js +2 -2
  395. package/dist/components/overlays/Modal/Popover.js.map +1 -1
  396. package/dist/components/overlays/Modal/Tray.d.ts +1 -1
  397. package/dist/components/overlays/Modal/Tray.js +2 -2
  398. package/dist/components/overlays/Modal/Tray.js.map +1 -1
  399. package/dist/components/overlays/Modal/Underlay.js +2 -2
  400. package/dist/components/overlays/Modal/Underlay.js.map +1 -1
  401. package/dist/components/overlays/Notifications/Notification.js +2 -2
  402. package/dist/components/overlays/Notifications/Notification.js.map +1 -1
  403. package/dist/components/overlays/Notifications/NotificationAction.js +10 -4
  404. package/dist/components/overlays/Notifications/NotificationAction.js.map +1 -1
  405. package/dist/components/overlays/Notifications/NotificationCard.d.ts +5 -2
  406. package/dist/components/overlays/Notifications/NotificationCard.js +9 -7
  407. package/dist/components/overlays/Notifications/NotificationCard.js.map +1 -1
  408. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  409. package/dist/components/overlays/Notifications/NotificationItem.d.ts +3 -1
  410. package/dist/components/overlays/Notifications/NotificationItem.js +8 -7
  411. package/dist/components/overlays/Notifications/NotificationItem.js.map +1 -1
  412. package/dist/components/overlays/Notifications/OverlayContainer.js +6 -5
  413. package/dist/components/overlays/Notifications/OverlayContainer.js.map +1 -1
  414. package/dist/components/overlays/Notifications/OverlayProvider.js +2 -1
  415. package/dist/components/overlays/Notifications/OverlayProvider.js.map +1 -1
  416. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +3 -3
  417. package/dist/components/overlays/Notifications/PersistentNotificationsList.js.map +1 -1
  418. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  419. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  420. package/dist/components/overlays/Notifications/index.js +1 -1
  421. package/dist/components/overlays/Notifications/types.d.ts +4 -2
  422. package/dist/components/overlays/Notifications/use-notification-state.js +48 -2
  423. package/dist/components/overlays/Notifications/use-notification-state.js.map +1 -1
  424. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  425. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  426. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  427. package/dist/components/overlays/Notifications/use-persistent-state.js +8 -1
  428. package/dist/components/overlays/Notifications/use-persistent-state.js.map +1 -1
  429. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  430. package/dist/components/overlays/Toast/ToastItem.js +2 -2
  431. package/dist/components/overlays/Toast/ToastItem.js.map +1 -1
  432. package/dist/components/overlays/Toast/index.js +1 -1
  433. package/dist/components/overlays/Toast/types.d.ts +2 -0
  434. package/dist/components/overlays/Toast/useProgressToast.js +49 -21
  435. package/dist/components/overlays/Toast/useProgressToast.js.map +1 -1
  436. package/dist/components/overlays/Toast/useToast.js +2 -2
  437. package/dist/components/overlays/Tooltip/Tooltip.d.ts +1 -3
  438. package/dist/components/overlays/Tooltip/Tooltip.js +2 -4
  439. package/dist/components/overlays/Tooltip/Tooltip.js.map +1 -1
  440. package/dist/components/overlays/Tooltip/TooltipProvider.d.ts +1 -2
  441. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  442. package/dist/components/overlays/Tooltip/TooltipProvider.js.map +1 -1
  443. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  444. package/dist/components/overlays/Tooltip/context.js +1 -1
  445. package/dist/components/overlays/Tooltip/context.js.map +1 -1
  446. package/dist/components/portal/Portal.js +1 -1
  447. package/dist/components/portal/PortalProvider.js +1 -1
  448. package/dist/components/portal/usePortal.js +1 -1
  449. package/dist/components/shared/InvalidIcon.js +1 -1
  450. package/dist/components/shared/ValidIcon.js +1 -1
  451. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +2 -2
  452. package/dist/components/status/LoadingAnimation/LoadingAnimation.js.map +1 -1
  453. package/dist/components/status/Spin/Cube.js +2 -2
  454. package/dist/components/status/Spin/Cube.js.map +1 -1
  455. package/dist/components/status/Spin/InternalSpinner.js +2 -2
  456. package/dist/components/status/Spin/InternalSpinner.js.map +1 -1
  457. package/dist/components/status/Spin/Spin.js +2 -2
  458. package/dist/components/status/Spin/Spin.js.map +1 -1
  459. package/dist/components/status/Spin/SpinsContainer.js +2 -2
  460. package/dist/components/status/Spin/SpinsContainer.js.map +1 -1
  461. package/dist/components/status/Spin/types.d.ts +1 -2
  462. package/dist/data/item-themes.d.ts +1 -1
  463. package/dist/data/item-themes.js +1 -1
  464. package/dist/data/item-themes.js.map +1 -1
  465. package/dist/data/themes.js +1 -1
  466. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  467. package/dist/icons/AdjustmentsIcon.js +1 -1
  468. package/dist/icons/AiIcon.js +1 -1
  469. package/dist/icons/AreaChartIcon.js +1 -1
  470. package/dist/icons/BackwardIcon.js +1 -1
  471. package/dist/icons/BarChartIcon.js +1 -1
  472. package/dist/icons/BellFilledIcon.js +1 -1
  473. package/dist/icons/BellIcon.js +1 -1
  474. package/dist/icons/BooleanIcon.js +1 -1
  475. package/dist/icons/CalendarEditIcon.js +1 -1
  476. package/dist/icons/CalendarIcon.js +1 -1
  477. package/dist/icons/CaretDownIcon.js +1 -1
  478. package/dist/icons/CaretUpIcon.js +1 -1
  479. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  480. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  481. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  482. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  483. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  484. package/dist/icons/ChartBarLineIcon.js +1 -1
  485. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  486. package/dist/icons/ChartBarStackedIcon.js +1 -1
  487. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  488. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  489. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  490. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  491. package/dist/icons/ChartBubbleIcon.js +1 -1
  492. package/dist/icons/ChartDonut2Icon.js +1 -1
  493. package/dist/icons/ChartFunnelIcon.js +1 -1
  494. package/dist/icons/ChartHeatmapIcon.js +1 -1
  495. package/dist/icons/ChartKPIIcon.js +1 -1
  496. package/dist/icons/ChartPie2Icon.js +1 -1
  497. package/dist/icons/ChartScatterIcon.js +1 -1
  498. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  499. package/dist/icons/CheckCircleIcon.js +1 -1
  500. package/dist/icons/CheckIcon.js +1 -1
  501. package/dist/icons/CircleFilledIcon.js +1 -1
  502. package/dist/icons/ClearIcon.js +1 -1
  503. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  504. package/dist/icons/CloseCircleIcon.js +1 -1
  505. package/dist/icons/CloseIcon.js +1 -1
  506. package/dist/icons/CodeIcon.js +1 -1
  507. package/dist/icons/ColumnTotalIcon.js +1 -1
  508. package/dist/icons/CopyIcon.js +1 -1
  509. package/dist/icons/CountIcon.js +1 -1
  510. package/dist/icons/CubeIcon.js +1 -1
  511. package/dist/icons/CubePauseIcon.js +1 -1
  512. package/dist/icons/CubePlayIcon.js +1 -1
  513. package/dist/icons/CurrencyDollarIcon.js +1 -1
  514. package/dist/icons/DangerIcon.js +1 -1
  515. package/dist/icons/DashboardIcon.js +1 -1
  516. package/dist/icons/DatabaseIcon.js +1 -1
  517. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  518. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  519. package/dist/icons/DirectionIcon.js +2 -2
  520. package/dist/icons/DirectionIcon.js.map +1 -1
  521. package/dist/icons/DonutIcon.js +1 -1
  522. package/dist/icons/DownIcon.js +1 -1
  523. package/dist/icons/EditIcon.js +1 -1
  524. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  525. package/dist/icons/ExclamationCircleIcon.js +1 -1
  526. package/dist/icons/ExclamationIcon.js +1 -1
  527. package/dist/icons/EyeIcon.js +1 -1
  528. package/dist/icons/EyeInvisibleIcon.js +1 -1
  529. package/dist/icons/FilterIcon.js +1 -1
  530. package/dist/icons/FolderFilledIcon.js +1 -1
  531. package/dist/icons/FolderIcon.js +1 -1
  532. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  533. package/dist/icons/FolderOpenIcon.js +1 -1
  534. package/dist/icons/ForwardIcon.js +1 -1
  535. package/dist/icons/HierarchyIcon.js +1 -1
  536. package/dist/icons/HierarchyOpenIcon.js +1 -1
  537. package/dist/icons/Icon.d.ts +1 -3
  538. package/dist/icons/Icon.js +2 -3
  539. package/dist/icons/Icon.js.map +1 -1
  540. package/dist/icons/InfoCircleIcon.js +1 -1
  541. package/dist/icons/InfoIcon.js +1 -1
  542. package/dist/icons/KeyIcon.js +1 -1
  543. package/dist/icons/LeftIcon.js +1 -1
  544. package/dist/icons/LineChartIcon.js +1 -1
  545. package/dist/icons/LoadingIcon.js +1 -1
  546. package/dist/icons/LockFilledIcon.js +1 -1
  547. package/dist/icons/LockIcon.js +1 -1
  548. package/dist/icons/MoreIcon.js +1 -1
  549. package/dist/icons/NotAllowedIcon.js +1 -1
  550. package/dist/icons/Number123Icon.js +1 -1
  551. package/dist/icons/NumberIcon.js +1 -1
  552. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  553. package/dist/icons/PauseCircleIcon.js +1 -1
  554. package/dist/icons/PauseIcon.js +1 -1
  555. package/dist/icons/PercentageIcon.js +1 -1
  556. package/dist/icons/PieChartIcon.js +1 -1
  557. package/dist/icons/PlayCircleIcon.js +1 -1
  558. package/dist/icons/PlayIcon.js +1 -1
  559. package/dist/icons/PlusIcon.js +1 -1
  560. package/dist/icons/ProgressBarIcon.js +1 -1
  561. package/dist/icons/ReloadIcon.js +1 -1
  562. package/dist/icons/ReportIcon.js +1 -1
  563. package/dist/icons/ReturnIcon.js +1 -1
  564. package/dist/icons/RightIcon.js +1 -1
  565. package/dist/icons/RowTotalsIcon.js +1 -1
  566. package/dist/icons/SchemeIcon.js +1 -1
  567. package/dist/icons/SearchIcon.js +1 -1
  568. package/dist/icons/SemanticQueryIcon.js +1 -1
  569. package/dist/icons/SettingsIcon.js +1 -1
  570. package/dist/icons/ShieldFilledIcon.js +1 -1
  571. package/dist/icons/ShieldIcon.js +1 -1
  572. package/dist/icons/SlashIcon.js +1 -1
  573. package/dist/icons/SparklesIcon.js +1 -1
  574. package/dist/icons/SqlIcon.js +1 -1
  575. package/dist/icons/StatsIcon.js +1 -1
  576. package/dist/icons/StopIcon.js +1 -1
  577. package/dist/icons/StringIcon.js +1 -1
  578. package/dist/icons/SubtotalsIcon.js +1 -1
  579. package/dist/icons/SwitchIcon.js +1 -1
  580. package/dist/icons/TableIcon.js +1 -1
  581. package/dist/icons/ThumbsDownIcon.js +1 -1
  582. package/dist/icons/ThumbsUpIcon.js +1 -1
  583. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  584. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  585. package/dist/icons/ThunderboltIcon.js +1 -1
  586. package/dist/icons/TimeIcon.js +1 -1
  587. package/dist/icons/TrashIcon.js +1 -1
  588. package/dist/icons/UnlockIcon.js +1 -1
  589. package/dist/icons/UpIcon.js +1 -1
  590. package/dist/icons/UserGroupIcon.js +1 -1
  591. package/dist/icons/UserIcon.js +1 -1
  592. package/dist/icons/UserLockIcon.js +1 -1
  593. package/dist/icons/ViewIcon.js +1 -1
  594. package/dist/icons/WarningFilledIcon.js +1 -1
  595. package/dist/icons/WarningIcon.js +1 -1
  596. package/dist/icons/wrap-icon.js +1 -1
  597. package/dist/index.d.ts +4 -35
  598. package/dist/index.js +5 -31
  599. package/dist/index.js.map +1 -1
  600. package/dist/provider.d.ts +1 -2
  601. package/dist/provider.js +1 -1
  602. package/dist/provider.js.map +1 -1
  603. package/dist/providers/TrackingProvider.js +1 -1
  604. package/dist/providers/navigationAdapter.default.js +1 -1
  605. package/dist/shared/form.d.ts +1 -3
  606. package/dist/tokens/base.d.ts +1 -1
  607. package/dist/tokens/base.js +1 -1
  608. package/dist/tokens/base.js.map +1 -1
  609. package/dist/tokens/colors.d.ts +1 -1
  610. package/dist/tokens/colors.js +1 -1
  611. package/dist/tokens/colors.js.map +1 -1
  612. package/dist/tokens/index.d.ts +1 -2
  613. package/dist/tokens/index.js +2 -3
  614. package/dist/tokens/index.js.map +1 -1
  615. package/dist/tokens/layout.d.ts +1 -1
  616. package/dist/tokens/layout.js +1 -1
  617. package/dist/tokens/layout.js.map +1 -1
  618. package/dist/tokens/shadows.d.ts +1 -1
  619. package/dist/tokens/shadows.js +1 -1
  620. package/dist/tokens/shadows.js.map +1 -1
  621. package/dist/tokens/sizes.d.ts +1 -1
  622. package/dist/tokens/sizes.js +1 -1
  623. package/dist/tokens/sizes.js.map +1 -1
  624. package/dist/tokens/spacing.d.ts +1 -1
  625. package/dist/tokens/spacing.js +1 -1
  626. package/dist/tokens/spacing.js.map +1 -1
  627. package/dist/utils/ResizeSensor.js +1 -1
  628. package/dist/utils/index.d.ts +1 -2
  629. package/dist/utils/is-dev-env.js +5 -10
  630. package/dist/utils/is-dev-env.js.map +1 -1
  631. package/dist/utils/modules.js +1 -1
  632. package/dist/utils/promise.js +1 -1
  633. package/dist/utils/raf.js +1 -1
  634. package/dist/utils/random.js +1 -1
  635. package/dist/utils/range.js +1 -1
  636. package/dist/utils/react/RenderCache.js +1 -1
  637. package/dist/utils/react/Slots.js +1 -1
  638. package/dist/utils/react/chain.js +1 -1
  639. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  640. package/dist/utils/react/index.d.ts +3 -3
  641. package/dist/utils/react/index.js +20 -0
  642. package/dist/utils/react/interactions.js +1 -1
  643. package/dist/utils/react/isTextOnly.js +1 -1
  644. package/dist/utils/react/mapProps.js +1 -1
  645. package/dist/utils/react/mergeProps.d.ts +1 -2
  646. package/dist/utils/react/mergeProps.js +2 -2
  647. package/dist/utils/react/mergeProps.js.map +1 -1
  648. package/dist/utils/react/nullableValue.d.ts +1 -2
  649. package/dist/utils/react/nullableValue.js +1 -1
  650. package/dist/utils/react/nullableValue.js.map +1 -1
  651. package/dist/utils/react/resolveIcon.d.ts +1 -2
  652. package/dist/utils/react/resolveIcon.js +1 -1
  653. package/dist/utils/react/resolveIcon.js.map +1 -1
  654. package/dist/utils/react/sharedStore.js +1 -1
  655. package/dist/utils/react/useCombinedRefs.js +1 -1
  656. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  657. package/dist/utils/react/useEventBus.js +1 -1
  658. package/dist/utils/react/useId.js +1 -1
  659. package/dist/utils/react/useIsDarwin.js +1 -1
  660. package/dist/utils/react/useKeySymbols.js +1 -1
  661. package/dist/utils/react/useLayoutEffect.js +1 -1
  662. package/dist/utils/react/useLocalStorage.js +1 -1
  663. package/dist/utils/react/useMergeStyles.d.ts +1 -2
  664. package/dist/utils/react/useMergeStyles.js +2 -2
  665. package/dist/utils/react/useMergeStyles.js.map +1 -1
  666. package/dist/utils/react/useQaProps.js +1 -1
  667. package/dist/utils/react/useViewportSize.js +1 -1
  668. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  669. package/dist/utils/tree.js +1 -1
  670. package/dist/utils/warnings.js +1 -1
  671. package/dist/version.js +2 -2
  672. package/package.json +4 -21
  673. package/dist/_virtual/_rolldown/runtime.js +0 -8
  674. package/dist/chunks/cacheKey.js +0 -71
  675. package/dist/chunks/cacheKey.js.map +0 -1
  676. package/dist/chunks/definitions.js +0 -261
  677. package/dist/chunks/definitions.js.map +0 -1
  678. package/dist/chunks/renderChunk.js +0 -68
  679. package/dist/chunks/renderChunk.js.map +0 -1
  680. package/dist/config.js +0 -232
  681. package/dist/config.js.map +0 -1
  682. package/dist/css-writer.d.ts +0 -46
  683. package/dist/css-writer.js +0 -75
  684. package/dist/css-writer.js.map +0 -1
  685. package/dist/extractor.d.ts +0 -25
  686. package/dist/extractor.js +0 -151
  687. package/dist/extractor.js.map +0 -1
  688. package/dist/injector/injector.js +0 -401
  689. package/dist/injector/injector.js.map +0 -1
  690. package/dist/injector/sheet-manager.js +0 -715
  691. package/dist/injector/sheet-manager.js.map +0 -1
  692. package/dist/injector/types.d.ts +0 -19
  693. package/dist/keyframes/index.js +0 -157
  694. package/dist/keyframes/index.js.map +0 -1
  695. package/dist/parser/classify.js +0 -320
  696. package/dist/parser/classify.js.map +0 -1
  697. package/dist/parser/const.js +0 -34
  698. package/dist/parser/const.js.map +0 -1
  699. package/dist/parser/lru.js +0 -110
  700. package/dist/parser/lru.js.map +0 -1
  701. package/dist/parser/parser.js +0 -117
  702. package/dist/parser/parser.js.map +0 -1
  703. package/dist/parser/tokenizer.js +0 -70
  704. package/dist/parser/tokenizer.js.map +0 -1
  705. package/dist/parser/types.d.ts +0 -38
  706. package/dist/parser/types.js +0 -47
  707. package/dist/parser/types.js.map +0 -1
  708. package/dist/pipeline/conditions.js +0 -378
  709. package/dist/pipeline/conditions.js.map +0 -1
  710. package/dist/pipeline/exclusive.js +0 -232
  711. package/dist/pipeline/exclusive.js.map +0 -1
  712. package/dist/pipeline/index.js +0 -633
  713. package/dist/pipeline/index.js.map +0 -1
  714. package/dist/pipeline/materialize.js +0 -822
  715. package/dist/pipeline/materialize.js.map +0 -1
  716. package/dist/pipeline/parseStateKey.js +0 -422
  717. package/dist/pipeline/parseStateKey.js.map +0 -1
  718. package/dist/pipeline/simplify.js +0 -558
  719. package/dist/pipeline/simplify.js.map +0 -1
  720. package/dist/plugins/okhsl-plugin.js +0 -346
  721. package/dist/plugins/okhsl-plugin.js.map +0 -1
  722. package/dist/plugins/types.d.ts +0 -52
  723. package/dist/properties/index.js +0 -142
  724. package/dist/properties/index.js.map +0 -1
  725. package/dist/states/index.js +0 -162
  726. package/dist/states/index.js.map +0 -1
  727. package/dist/styles/align.js +0 -15
  728. package/dist/styles/align.js.map +0 -1
  729. package/dist/styles/border.js +0 -115
  730. package/dist/styles/border.js.map +0 -1
  731. package/dist/styles/color.js +0 -24
  732. package/dist/styles/color.js.map +0 -1
  733. package/dist/styles/createStyle.js +0 -78
  734. package/dist/styles/createStyle.js.map +0 -1
  735. package/dist/styles/dimension.js +0 -100
  736. package/dist/styles/dimension.js.map +0 -1
  737. package/dist/styles/display.js +0 -68
  738. package/dist/styles/display.js.map +0 -1
  739. package/dist/styles/fade.js +0 -58
  740. package/dist/styles/fade.js.map +0 -1
  741. package/dist/styles/fill.js +0 -52
  742. package/dist/styles/fill.js.map +0 -1
  743. package/dist/styles/flow.js +0 -13
  744. package/dist/styles/flow.js.map +0 -1
  745. package/dist/styles/gap.js +0 -37
  746. package/dist/styles/gap.js.map +0 -1
  747. package/dist/styles/height.js +0 -21
  748. package/dist/styles/height.js.map +0 -1
  749. package/dist/styles/index.js +0 -10
  750. package/dist/styles/index.js.map +0 -1
  751. package/dist/styles/inset.js +0 -143
  752. package/dist/styles/inset.js.map +0 -1
  753. package/dist/styles/justify.js +0 -15
  754. package/dist/styles/justify.js.map +0 -1
  755. package/dist/styles/margin.js +0 -97
  756. package/dist/styles/margin.js.map +0 -1
  757. package/dist/styles/outline.js +0 -66
  758. package/dist/styles/outline.js.map +0 -1
  759. package/dist/styles/padding.js +0 -97
  760. package/dist/styles/padding.js.map +0 -1
  761. package/dist/styles/predefined.js +0 -233
  762. package/dist/styles/predefined.js.map +0 -1
  763. package/dist/styles/preset.js +0 -126
  764. package/dist/styles/preset.js.map +0 -1
  765. package/dist/styles/radius.js +0 -52
  766. package/dist/styles/radius.js.map +0 -1
  767. package/dist/styles/scrollbar.js +0 -109
  768. package/dist/styles/scrollbar.js.map +0 -1
  769. package/dist/styles/shadow.js +0 -28
  770. package/dist/styles/shadow.js.map +0 -1
  771. package/dist/styles/styledScrollbar.js +0 -39
  772. package/dist/styles/styledScrollbar.js.map +0 -1
  773. package/dist/styles/transition.js +0 -139
  774. package/dist/styles/transition.js.map +0 -1
  775. package/dist/styles/types.d.ts +0 -495
  776. package/dist/styles/width.js +0 -21
  777. package/dist/styles/width.js.map +0 -1
  778. package/dist/tasty/chunks/cacheKey.d.ts +0 -2
  779. package/dist/tasty/chunks/cacheKey.js +0 -71
  780. package/dist/tasty/chunks/cacheKey.js.map +0 -1
  781. package/dist/tasty/chunks/definitions.d.ts +0 -38
  782. package/dist/tasty/chunks/definitions.js +0 -261
  783. package/dist/tasty/chunks/definitions.js.map +0 -1
  784. package/dist/tasty/chunks/index.d.ts +0 -4
  785. package/dist/tasty/chunks/renderChunk.d.ts +0 -3
  786. package/dist/tasty/chunks/renderChunk.js +0 -68
  787. package/dist/tasty/chunks/renderChunk.js.map +0 -1
  788. package/dist/tasty/config.d.ts +0 -283
  789. package/dist/tasty/config.js +0 -401
  790. package/dist/tasty/config.js.map +0 -1
  791. package/dist/tasty/debug.d.ts +0 -200
  792. package/dist/tasty/debug.js +0 -734
  793. package/dist/tasty/debug.js.map +0 -1
  794. package/dist/tasty/hooks/index.d.ts +0 -6
  795. package/dist/tasty/hooks/useGlobalStyles.d.ts +0 -28
  796. package/dist/tasty/hooks/useGlobalStyles.js +0 -57
  797. package/dist/tasty/hooks/useGlobalStyles.js.map +0 -1
  798. package/dist/tasty/hooks/useKeyframes.d.ts +0 -57
  799. package/dist/tasty/hooks/useKeyframes.js +0 -55
  800. package/dist/tasty/hooks/useKeyframes.js.map +0 -1
  801. package/dist/tasty/hooks/useProperty.d.ts +0 -80
  802. package/dist/tasty/hooks/useProperty.js +0 -92
  803. package/dist/tasty/hooks/useProperty.js.map +0 -1
  804. package/dist/tasty/hooks/useRawCSS.d.ts +0 -54
  805. package/dist/tasty/hooks/useRawCSS.js +0 -29
  806. package/dist/tasty/hooks/useRawCSS.js.map +0 -1
  807. package/dist/tasty/hooks/useStyles.d.ts +0 -41
  808. package/dist/tasty/hooks/useStyles.js +0 -170
  809. package/dist/tasty/hooks/useStyles.js.map +0 -1
  810. package/dist/tasty/index.d.ts +0 -38
  811. package/dist/tasty/injector/index.d.ts +0 -158
  812. package/dist/tasty/injector/index.js +0 -155
  813. package/dist/tasty/injector/index.js.map +0 -1
  814. package/dist/tasty/injector/injector.d.ts +0 -137
  815. package/dist/tasty/injector/injector.js +0 -401
  816. package/dist/tasty/injector/injector.js.map +0 -1
  817. package/dist/tasty/injector/sheet-manager.d.ts +0 -128
  818. package/dist/tasty/injector/sheet-manager.js +0 -715
  819. package/dist/tasty/injector/sheet-manager.js.map +0 -1
  820. package/dist/tasty/injector/types.d.ts +0 -136
  821. package/dist/tasty/keyframes/index.js +0 -207
  822. package/dist/tasty/keyframes/index.js.map +0 -1
  823. package/dist/tasty/parser/classify.js +0 -320
  824. package/dist/tasty/parser/classify.js.map +0 -1
  825. package/dist/tasty/parser/const.js +0 -34
  826. package/dist/tasty/parser/const.js.map +0 -1
  827. package/dist/tasty/parser/lru.js +0 -110
  828. package/dist/tasty/parser/lru.js.map +0 -1
  829. package/dist/tasty/parser/parser.d.ts +0 -26
  830. package/dist/tasty/parser/parser.js +0 -117
  831. package/dist/tasty/parser/parser.js.map +0 -1
  832. package/dist/tasty/parser/tokenizer.js +0 -70
  833. package/dist/tasty/parser/tokenizer.js.map +0 -1
  834. package/dist/tasty/parser/types.d.ts +0 -47
  835. package/dist/tasty/parser/types.js +0 -47
  836. package/dist/tasty/parser/types.js.map +0 -1
  837. package/dist/tasty/pipeline/conditions.js +0 -378
  838. package/dist/tasty/pipeline/conditions.js.map +0 -1
  839. package/dist/tasty/pipeline/exclusive.d.ts +0 -2
  840. package/dist/tasty/pipeline/exclusive.js +0 -232
  841. package/dist/tasty/pipeline/exclusive.js.map +0 -1
  842. package/dist/tasty/pipeline/index.d.ts +0 -54
  843. package/dist/tasty/pipeline/index.js +0 -639
  844. package/dist/tasty/pipeline/index.js.map +0 -1
  845. package/dist/tasty/pipeline/materialize.js +0 -822
  846. package/dist/tasty/pipeline/materialize.js.map +0 -1
  847. package/dist/tasty/pipeline/parseStateKey.d.ts +0 -2
  848. package/dist/tasty/pipeline/parseStateKey.js +0 -422
  849. package/dist/tasty/pipeline/parseStateKey.js.map +0 -1
  850. package/dist/tasty/pipeline/simplify.js +0 -558
  851. package/dist/tasty/pipeline/simplify.js.map +0 -1
  852. package/dist/tasty/plugins/index.d.ts +0 -3
  853. package/dist/tasty/plugins/okhsl-plugin.d.ts +0 -36
  854. package/dist/tasty/plugins/okhsl-plugin.js +0 -372
  855. package/dist/tasty/plugins/okhsl-plugin.js.map +0 -1
  856. package/dist/tasty/plugins/types.d.ts +0 -72
  857. package/dist/tasty/properties/index.js +0 -159
  858. package/dist/tasty/properties/index.js.map +0 -1
  859. package/dist/tasty/states/index.d.ts +0 -46
  860. package/dist/tasty/states/index.js +0 -390
  861. package/dist/tasty/states/index.js.map +0 -1
  862. package/dist/tasty/static/index.d.ts +0 -6
  863. package/dist/tasty/static/index.js +0 -6
  864. package/dist/tasty/static/tastyStatic.d.ts +0 -47
  865. package/dist/tasty/static/tastyStatic.js +0 -32
  866. package/dist/tasty/static/tastyStatic.js.map +0 -1
  867. package/dist/tasty/static/types.d.ts +0 -50
  868. package/dist/tasty/static/types.js +0 -25
  869. package/dist/tasty/static/types.js.map +0 -1
  870. package/dist/tasty/styles/align.d.ts +0 -16
  871. package/dist/tasty/styles/align.js +0 -15
  872. package/dist/tasty/styles/align.js.map +0 -1
  873. package/dist/tasty/styles/border.d.ts +0 -26
  874. package/dist/tasty/styles/border.js +0 -115
  875. package/dist/tasty/styles/border.js.map +0 -1
  876. package/dist/tasty/styles/color.d.ts +0 -15
  877. package/dist/tasty/styles/color.js +0 -24
  878. package/dist/tasty/styles/color.js.map +0 -1
  879. package/dist/tasty/styles/createStyle.js +0 -78
  880. package/dist/tasty/styles/createStyle.js.map +0 -1
  881. package/dist/tasty/styles/dimension.js +0 -100
  882. package/dist/tasty/styles/dimension.js.map +0 -1
  883. package/dist/tasty/styles/display.d.ts +0 -38
  884. package/dist/tasty/styles/display.js +0 -68
  885. package/dist/tasty/styles/display.js.map +0 -1
  886. package/dist/tasty/styles/fade.d.ts +0 -16
  887. package/dist/tasty/styles/fade.js +0 -58
  888. package/dist/tasty/styles/fade.js.map +0 -1
  889. package/dist/tasty/styles/fill.d.ts +0 -45
  890. package/dist/tasty/styles/fill.js +0 -52
  891. package/dist/tasty/styles/fill.js.map +0 -1
  892. package/dist/tasty/styles/flow.d.ts +0 -17
  893. package/dist/tasty/styles/flow.js +0 -13
  894. package/dist/tasty/styles/flow.js.map +0 -1
  895. package/dist/tasty/styles/gap.d.ts +0 -32
  896. package/dist/tasty/styles/gap.js +0 -37
  897. package/dist/tasty/styles/gap.js.map +0 -1
  898. package/dist/tasty/styles/height.d.ts +0 -18
  899. package/dist/tasty/styles/height.js +0 -21
  900. package/dist/tasty/styles/height.js.map +0 -1
  901. package/dist/tasty/styles/index.d.ts +0 -3
  902. package/dist/tasty/styles/index.js +0 -10
  903. package/dist/tasty/styles/index.js.map +0 -1
  904. package/dist/tasty/styles/inset.d.ts +0 -51
  905. package/dist/tasty/styles/inset.js +0 -143
  906. package/dist/tasty/styles/inset.js.map +0 -1
  907. package/dist/tasty/styles/justify.d.ts +0 -16
  908. package/dist/tasty/styles/justify.js +0 -15
  909. package/dist/tasty/styles/justify.js.map +0 -1
  910. package/dist/tasty/styles/list.d.ts +0 -17
  911. package/dist/tasty/styles/list.js +0 -99
  912. package/dist/tasty/styles/list.js.map +0 -1
  913. package/dist/tasty/styles/margin.d.ts +0 -29
  914. package/dist/tasty/styles/margin.js +0 -97
  915. package/dist/tasty/styles/margin.js.map +0 -1
  916. package/dist/tasty/styles/outline.d.ts +0 -30
  917. package/dist/tasty/styles/outline.js +0 -66
  918. package/dist/tasty/styles/outline.js.map +0 -1
  919. package/dist/tasty/styles/padding.d.ts +0 -29
  920. package/dist/tasty/styles/padding.js +0 -97
  921. package/dist/tasty/styles/padding.js.map +0 -1
  922. package/dist/tasty/styles/predefined.d.ts +0 -75
  923. package/dist/tasty/styles/predefined.js +0 -242
  924. package/dist/tasty/styles/predefined.js.map +0 -1
  925. package/dist/tasty/styles/preset.d.ts +0 -48
  926. package/dist/tasty/styles/preset.js +0 -126
  927. package/dist/tasty/styles/preset.js.map +0 -1
  928. package/dist/tasty/styles/radius.d.ts +0 -15
  929. package/dist/tasty/styles/radius.js +0 -52
  930. package/dist/tasty/styles/radius.js.map +0 -1
  931. package/dist/tasty/styles/scrollbar.d.ts +0 -22
  932. package/dist/tasty/styles/scrollbar.js +0 -109
  933. package/dist/tasty/styles/scrollbar.js.map +0 -1
  934. package/dist/tasty/styles/shadow.d.ts +0 -15
  935. package/dist/tasty/styles/shadow.js +0 -28
  936. package/dist/tasty/styles/shadow.js.map +0 -1
  937. package/dist/tasty/styles/styledScrollbar.d.ts +0 -48
  938. package/dist/tasty/styles/styledScrollbar.js +0 -39
  939. package/dist/tasty/styles/styledScrollbar.js.map +0 -1
  940. package/dist/tasty/styles/transition.d.ts +0 -15
  941. package/dist/tasty/styles/transition.js +0 -139
  942. package/dist/tasty/styles/transition.js.map +0 -1
  943. package/dist/tasty/styles/types.d.ts +0 -499
  944. package/dist/tasty/styles/width.d.ts +0 -18
  945. package/dist/tasty/styles/width.js +0 -21
  946. package/dist/tasty/styles/width.js.map +0 -1
  947. package/dist/tasty/tasty.d.ts +0 -937
  948. package/dist/tasty/tasty.js +0 -191
  949. package/dist/tasty/tasty.js.map +0 -1
  950. package/dist/tasty/types.d.ts +0 -192
  951. package/dist/tasty/utils/cache-wrapper.js +0 -25
  952. package/dist/tasty/utils/cache-wrapper.js.map +0 -1
  953. package/dist/tasty/utils/case-converter.js +0 -9
  954. package/dist/tasty/utils/case-converter.js.map +0 -1
  955. package/dist/tasty/utils/colors.d.ts +0 -6
  956. package/dist/tasty/utils/colors.js +0 -10
  957. package/dist/tasty/utils/colors.js.map +0 -1
  958. package/dist/tasty/utils/dotize.d.ts +0 -27
  959. package/dist/tasty/utils/dotize.js +0 -123
  960. package/dist/tasty/utils/dotize.js.map +0 -1
  961. package/dist/tasty/utils/filter-base-props.d.ts +0 -16
  962. package/dist/tasty/utils/filter-base-props.js +0 -46
  963. package/dist/tasty/utils/filter-base-props.js.map +0 -1
  964. package/dist/tasty/utils/get-display-name.d.ts +0 -8
  965. package/dist/tasty/utils/get-display-name.js +0 -11
  966. package/dist/tasty/utils/get-display-name.js.map +0 -1
  967. package/dist/tasty/utils/hsl-to-rgb.js +0 -39
  968. package/dist/tasty/utils/hsl-to-rgb.js.map +0 -1
  969. package/dist/tasty/utils/is-dev-env.js +0 -20
  970. package/dist/tasty/utils/is-dev-env.js.map +0 -1
  971. package/dist/tasty/utils/merge-styles.d.ts +0 -8
  972. package/dist/tasty/utils/merge-styles.js +0 -147
  973. package/dist/tasty/utils/merge-styles.js.map +0 -1
  974. package/dist/tasty/utils/mod-attrs.d.ts +0 -9
  975. package/dist/tasty/utils/mod-attrs.js +0 -22
  976. package/dist/tasty/utils/mod-attrs.js.map +0 -1
  977. package/dist/tasty/utils/okhsl-to-rgb.js +0 -297
  978. package/dist/tasty/utils/okhsl-to-rgb.js.map +0 -1
  979. package/dist/tasty/utils/process-tokens.d.ts +0 -32
  980. package/dist/tasty/utils/process-tokens.js +0 -172
  981. package/dist/tasty/utils/process-tokens.js.map +0 -1
  982. package/dist/tasty/utils/resolve-recipes.d.ts +0 -18
  983. package/dist/tasty/utils/resolve-recipes.js +0 -144
  984. package/dist/tasty/utils/resolve-recipes.js.map +0 -1
  985. package/dist/tasty/utils/string.js +0 -9
  986. package/dist/tasty/utils/string.js.map +0 -1
  987. package/dist/tasty/utils/styles.d.ts +0 -204
  988. package/dist/tasty/utils/styles.js +0 -577
  989. package/dist/tasty/utils/styles.js.map +0 -1
  990. package/dist/tasty/utils/typography.d.ts +0 -37
  991. package/dist/tasty/utils/typography.js +0 -54
  992. package/dist/tasty/utils/typography.js.map +0 -1
  993. package/dist/tasty/utils/warnings.d.ts +0 -17
  994. package/dist/tasty/utils/warnings.js +0 -17
  995. package/dist/tasty/utils/warnings.js.map +0 -1
  996. package/dist/tasty/zero/babel.d.ts +0 -111
  997. package/dist/tasty/zero/babel.js +0 -283
  998. package/dist/tasty/zero/babel.js.map +0 -1
  999. package/dist/tasty/zero/index.d.ts +0 -4
  1000. package/dist/tasty/zero/index.js +0 -5
  1001. package/dist/tasty/zero/next.d.ts +0 -61
  1002. package/dist/tasty/zero/next.js +0 -79
  1003. package/dist/tasty/zero/next.js.map +0 -1
  1004. package/dist/tasty.config.ts +0 -311
  1005. package/dist/tokens/typography.d.ts +0 -35
  1006. package/dist/tokens/typography.js +0 -238
  1007. package/dist/tokens/typography.js.map +0 -1
  1008. package/dist/utils/cache-wrapper.js +0 -25
  1009. package/dist/utils/cache-wrapper.js.map +0 -1
  1010. package/dist/utils/case-converter.js +0 -9
  1011. package/dist/utils/case-converter.js.map +0 -1
  1012. package/dist/utils/hsl-to-rgb.js +0 -39
  1013. package/dist/utils/hsl-to-rgb.js.map +0 -1
  1014. package/dist/utils/merge-styles.js +0 -147
  1015. package/dist/utils/merge-styles.js.map +0 -1
  1016. package/dist/utils/okhsl-to-rgb.js +0 -297
  1017. package/dist/utils/okhsl-to-rgb.js.map +0 -1
  1018. package/dist/utils/process-tokens.js +0 -29
  1019. package/dist/utils/process-tokens.js.map +0 -1
  1020. package/dist/utils/resolve-recipes.js +0 -144
  1021. package/dist/utils/resolve-recipes.js.map +0 -1
  1022. package/dist/utils/string.js +0 -9
  1023. package/dist/utils/string.js.map +0 -1
  1024. package/dist/utils/styles.d.ts +0 -23
  1025. package/dist/utils/styles.js +0 -338
  1026. package/dist/utils/styles.js.map +0 -1
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.117.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.119.0 | Cube Dev Team */
2
2
  import { useToastContext } from "./NotificationContext.js";
3
3
  import { NotificationAction } from "./NotificationAction.js";
4
4
  import { NotificationCard } from "./NotificationCard.js";
@@ -16,7 +16,7 @@ interface OverlayNotificationOptions extends NotificationBaseOptions {
16
16
  * Action buttons rendered below the notification description.
17
17
  * A default "Dismiss" button is auto-appended unless any action has
18
18
  * `isDismiss` set (detected automatically via context).
19
- * When omitted, only the default "Dismiss" button is shown (if `isDismissible`).
19
+ * When omitted, only the default "Dismiss" button is shown (if `isDismissable`).
20
20
  */
21
21
  actions?: ReactNode;
22
22
  /**
@@ -29,7 +29,7 @@ interface OverlayNotificationOptions extends NotificationBaseOptions {
29
29
  *
30
30
  * Default: true
31
31
  */
32
- isDismissible?: boolean;
32
+ isDismissable?: boolean;
33
33
  /**
34
34
  * Duration in ms before auto-dismiss.
35
35
  * Default: 3000ms (non-persistent) or 5000ms (persistent).
@@ -101,6 +101,8 @@ interface InternalNotification extends OverlayNotificationOptions {
101
101
  createdAt: number;
102
102
  updatedAt: number;
103
103
  isExiting?: boolean;
104
+ /** Reason for the most recent dismiss, used to undo persistent side effects on restore. */
105
+ lastDismissReason?: DismissReason;
104
106
  ownerId?: string;
105
107
  }
106
108
  interface PersistentNotificationItem {
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.117.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.119.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { useRef, useState } from "react";
4
4
 
@@ -6,6 +6,8 @@ import { useRef, useState } from "react";
6
6
  const DEFAULT_NOTIFICATION_DURATION = 3e3;
7
7
  const DEFAULT_PERSISTENT_NOTIFICATION_DURATION = 5e3;
8
8
  const MAX_NOTIFICATIONS = 5;
9
+ const MAX_DISMISS_SNAPSHOTS = 50;
10
+ const SNAPSHOT_TTL_MS = 300 * 1e3;
9
11
  function getDuration(notif) {
10
12
  if (notif.duration === null) return null;
11
13
  if (notif.duration !== void 0) return notif.duration;
@@ -26,6 +28,7 @@ function useNotificationState(timersRef, persistent) {
26
28
  const notificationsRef = useRef(notifications);
27
29
  notificationsRef.current = notifications;
28
30
  const idCounter = useRef(0);
31
+ const dismissSnapshotsRef = useRef(/* @__PURE__ */ new Map());
29
32
  /**
30
33
  * Evict the oldest active notification to make room for a new one.
31
34
  * Clears its timer and moves it to the persistent list if applicable.
@@ -54,6 +57,15 @@ function useNotificationState(timersRef, persistent) {
54
57
  const notif = findNotification(notificationsRef.current, id);
55
58
  if (!notif || notif.isExiting) return;
56
59
  timersRef.current?.clearNotificationTimer(notif.internalId);
60
+ dismissSnapshotsRef.current.set(String(notif.id ?? notif.internalId), {
61
+ ...notif,
62
+ lastDismissReason: reason
63
+ });
64
+ while (dismissSnapshotsRef.current.size > MAX_DISMISS_SNAPSHOTS) {
65
+ const oldest = dismissSnapshotsRef.current.keys().next().value;
66
+ if (oldest != null) dismissSnapshotsRef.current.delete(oldest);
67
+ else break;
68
+ }
57
69
  if (notif.persistent) {
58
70
  if (reason === "close" || reason === "timeout") persistent.addPersistentItem({
59
71
  id: notif.id ?? notif.internalId,
@@ -74,11 +86,44 @@ function useNotificationState(timersRef, persistent) {
74
86
  }
75
87
  setNotifications((prev) => prev.map((n) => matchesNotificationId(n, id) ? {
76
88
  ...n,
77
- isExiting: true
89
+ isExiting: true,
90
+ lastDismissReason: reason
78
91
  } : n));
79
92
  });
93
+ const restoreNotification = useEvent((id) => {
94
+ const idStr = String(id);
95
+ const snapshot = dismissSnapshotsRef.current.get(idStr);
96
+ if (!snapshot) return;
97
+ dismissSnapshotsRef.current.delete(idStr);
98
+ if (snapshot.persistent && snapshot.lastDismissReason) {
99
+ const persistentId = snapshot.id ?? snapshot.internalId;
100
+ if (snapshot.lastDismissReason === "close" || snapshot.lastDismissReason === "timeout") persistent.removePersistentItemSilently(persistentId);
101
+ else if (snapshot.lastDismissReason === "action") persistent.undoFullyDismissedId(persistentId);
102
+ }
103
+ const duration = getDuration(snapshot);
104
+ if (duration != null && duration > 0) timersRef.current?.startNotificationTimer(snapshot.internalId, snapshot.id ?? snapshot.internalId, duration);
105
+ if (findNotification(notificationsRef.current, id)) setNotifications((prev) => prev.map((n) => matchesNotificationId(n, id) ? {
106
+ ...n,
107
+ isExiting: false,
108
+ lastDismissReason: void 0
109
+ } : n));
110
+ else {
111
+ const restored = {
112
+ ...snapshot,
113
+ isExiting: false,
114
+ lastDismissReason: void 0
115
+ };
116
+ setNotifications((prev) => [...prev, restored]);
117
+ }
118
+ });
80
119
  const finalizeNotificationRemoval = useEvent((internalId) => {
81
120
  setNotifications((prev) => prev.filter((n) => n.internalId !== internalId));
121
+ setTimeout(() => {
122
+ for (const [key, snap] of dismissSnapshotsRef.current) if (snap.internalId === internalId) {
123
+ dismissSnapshotsRef.current.delete(key);
124
+ break;
125
+ }
126
+ }, SNAPSHOT_TTL_MS);
82
127
  });
83
128
  return {
84
129
  notifications,
@@ -152,6 +197,7 @@ function useNotificationState(timersRef, persistent) {
152
197
  return id;
153
198
  }),
154
199
  removeNotification,
200
+ restoreNotification,
155
201
  updateNotification: useEvent((id, options) => {
156
202
  setNotifications((prev) => prev.map((n) => matchesNotificationId(n, id) ? {
157
203
  ...n,
@@ -1 +1 @@
1
- {"version":3,"file":"use-notification-state.js","names":[],"sources":["../../../../src/components/overlays/Notifications/use-notification-state.ts"],"sourcesContent":["import { Key, useRef, useState } from 'react';\n\nimport { useEvent } from '../../../_internal';\n\nimport type {\n DismissReason,\n InternalNotification,\n OverlayNotificationOptions,\n PersistentNotificationItem,\n} from './types';\nimport type { OverlayTimers } from './use-overlay-timers';\n\n// ─── Constants ───────────────────────────────────────────────────────\n\nconst DEFAULT_NOTIFICATION_DURATION = 3000;\nconst DEFAULT_PERSISTENT_NOTIFICATION_DURATION = 5000;\nconst MAX_NOTIFICATIONS = 5;\n\n// ─── Types ───────────────────────────────────────────────────────────\n\nexport interface PersistentCallbacks {\n addPersistentItem: (item: PersistentNotificationItem) => void;\n removePersistentItem: (id: Key) => void;\n hasDismissedPersistentId: (id: Key) => boolean;\n isFullyDismissedId: (id: Key) => boolean;\n saveDismissedPersistentId: (id: Key) => void;\n}\n\nexport interface NotificationState {\n notifications: InternalNotification[];\n notificationsRef: ReturnType<typeof useRef<InternalNotification[]>>;\n addNotification: (\n options: OverlayNotificationOptions,\n ownerId?: string,\n ) => Key;\n removeNotification: (id: Key, reason?: DismissReason) => void;\n updateNotification: (\n id: Key,\n options: Partial<OverlayNotificationOptions>,\n ) => void;\n finalizeNotificationRemoval: (internalId: string) => void;\n removeByOwner: (ownerId: string) => void;\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────\n\nfunction getDuration(\n notif: OverlayNotificationOptions & { persistent?: boolean },\n): number | null {\n if (notif.duration === null) return null;\n if (notif.duration !== undefined) return notif.duration;\n return notif.persistent\n ? DEFAULT_PERSISTENT_NOTIFICATION_DURATION\n : DEFAULT_NOTIFICATION_DURATION;\n}\n\nfunction matchesNotificationId(item: InternalNotification, id: Key): boolean {\n return item.id === id || item.internalId === String(id);\n}\n\nfunction findNotification(\n list: InternalNotification[],\n id: Key,\n): InternalNotification | undefined {\n return list.find((n) => matchesNotificationId(n, id));\n}\n\n// ─── Hook ────────────────────────────────────────────────────────────\n\n/**\n * @param timersRef - Ref to the shared OverlayTimers instance. Accessed only\n * inside callbacks (never during render), so it is guaranteed to be populated.\n */\nexport function useNotificationState(\n timersRef: ReturnType<typeof useRef<OverlayTimers>>,\n persistent: PersistentCallbacks,\n): NotificationState {\n const [notifications, setNotifications] = useState<InternalNotification[]>(\n [],\n );\n const notificationsRef = useRef(notifications);\n notificationsRef.current = notifications;\n\n const idCounter = useRef(0);\n\n // ─── Evict Helper ──────────────────────────────────────────────\n\n /**\n * Evict the oldest active notification to make room for a new one.\n * Clears its timer and moves it to the persistent list if applicable.\n * Must be called OUTSIDE setState updaters (StrictMode-safe).\n */\n const evictOldest = useEvent((): string | null => {\n const active = notificationsRef.current.filter((n) => !n.isExiting);\n\n if (active.length === 0) return null;\n\n // Oldest by createdAt (active list preserves insertion order)\n const oldest = active[0];\n\n timersRef.current?.clearNotificationTimer(oldest.internalId);\n\n // Eviction counts as a timeout dismissal — move to persistent list if applicable\n if (oldest.persistent) {\n persistent.addPersistentItem({\n id: oldest.id ?? oldest.internalId,\n theme: oldest.theme,\n title: oldest.title,\n description: oldest.description,\n icon: oldest.icon,\n actions: oldest.actions,\n createdAt: oldest.createdAt,\n updatedAt: oldest.updatedAt,\n isRead: false,\n ownerId: oldest.ownerId,\n });\n }\n\n return oldest.internalId;\n });\n\n // ─── Remove ─────────────────────────────────────────────────────\n\n const removeNotification = useEvent(\n (id: Key, reason: DismissReason = 'api') => {\n // Read from ref (synchronous) to perform side effects OUTSIDE the updater.\n // This prevents double-fire in StrictMode and avoids calling setState\n // (addPersistentItem) inside another setState updater.\n const notif = findNotification(notificationsRef.current, id);\n\n if (!notif || notif.isExiting) return;\n\n timersRef.current?.clearNotificationTimer(notif.internalId);\n\n if (notif.persistent) {\n if (reason === 'close' || reason === 'timeout') {\n // Dismiss button, Escape, or auto-dismiss timeout — move to persistent list.\n // If the same id is triggered again, it skips the overlay and updates the\n // persistent list directly.\n persistent.addPersistentItem({\n id: notif.id ?? notif.internalId,\n theme: notif.theme,\n title: notif.title,\n description: notif.description,\n icon: notif.icon,\n actions: notif.actions,\n createdAt: notif.createdAt,\n updatedAt: notif.updatedAt,\n isRead: true,\n ownerId: notif.ownerId,\n });\n } else if (reason === 'action') {\n // User clicked a regular action (not dismiss) — fully dismiss the\n // notification so it never reappears (overlay or persistent list).\n persistent.saveDismissedPersistentId(notif.id ?? notif.internalId);\n persistent.removePersistentItem(notif.id ?? notif.internalId);\n }\n // reason === 'api' — programmatic cleanup (e.g. component unmount).\n // No persistence, no full-dismiss tracking.\n }\n\n setNotifications((prev) =>\n prev.map((n) =>\n matchesNotificationId(n, id) ? { ...n, isExiting: true } : n,\n ),\n );\n },\n );\n\n // ─── Finalize ──────────────────────────────────────────────────\n\n const finalizeNotificationRemoval = useEvent((internalId: string) => {\n setNotifications((prev) => prev.filter((n) => n.internalId !== internalId));\n });\n\n // ─── Add ────────────────────────────────────────────────────────\n\n const addNotification = useEvent(\n (options: OverlayNotificationOptions, ownerId?: string): Key => {\n idCounter.current += 1;\n const internalId = `notif-${idCounter.current}-${Date.now()}`;\n const now = Date.now();\n const id = options.id ?? internalId;\n\n // If the user explicitly removed this notification from the persistent\n // list, completely ignore it — no overlay, no persistent storage.\n if (options.id != null && persistent.isFullyDismissedId(options.id)) {\n return id;\n }\n\n // If this persistent id was previously dismissed to the persistent list,\n // skip the overlay and update the persistent item directly.\n if (\n options.persistent &&\n options.id != null &&\n persistent.hasDismissedPersistentId(options.id)\n ) {\n persistent.addPersistentItem({\n id,\n theme: options.theme,\n title: options.title,\n description: options.description,\n icon: options.icon,\n actions: options.actions,\n createdAt: now,\n updatedAt: now,\n isRead: false,\n ownerId,\n });\n\n return id;\n }\n\n // Check for existing notification with same id via the ref (synchronous read).\n const existingNotif =\n options.id != null\n ? notificationsRef.current.find(\n (n) => n.id === options.id && !n.isExiting,\n )\n : undefined;\n\n if (existingNotif) {\n // In-place update of an existing notification\n const returnId = existingNotif.id ?? existingNotif.internalId;\n\n const prevTitle = existingNotif.title;\n const prevDescription = existingNotif.description;\n\n // Timer reset on string title/description change\n const titleChanged =\n typeof options.title === 'string' &&\n typeof prevTitle === 'string' &&\n options.title !== prevTitle;\n const descriptionChanged =\n typeof options.description === 'string' &&\n typeof prevDescription === 'string' &&\n options.description !== prevDescription;\n\n if (titleChanged || descriptionChanged) {\n const duration = getDuration(options);\n\n if (duration != null && duration > 0) {\n timersRef.current?.startNotificationTimer(\n existingNotif.internalId,\n existingNotif.id ?? existingNotif.internalId,\n duration,\n );\n }\n }\n\n setNotifications((prev) =>\n prev.map((n) => {\n if (n.internalId === existingNotif.internalId) {\n return {\n ...n,\n ...options,\n internalId: n.internalId,\n createdAt: n.createdAt,\n updatedAt: now,\n ownerId: ownerId ?? n.ownerId,\n };\n }\n return n;\n }),\n );\n\n return returnId;\n }\n\n // New notification — always show immediately, evicting the oldest if at cap.\n // Read from ref (synchronous) to perform side effects OUTSIDE the updater.\n const activeCount = notificationsRef.current.filter(\n (n) => !n.isExiting,\n ).length;\n\n const newNotification: InternalNotification = {\n ...options,\n id,\n internalId,\n createdAt: now,\n updatedAt: now,\n ownerId,\n };\n\n // Evict oldest if at cap (side effects outside updater)\n let evictedInternalId: string | null = null;\n\n if (activeCount >= MAX_NOTIFICATIONS) {\n evictedInternalId = evictOldest();\n }\n\n // Start timer for the new notification\n const duration = getDuration(options);\n\n if (duration != null && duration > 0) {\n timersRef.current?.startNotificationTimer(internalId, id, duration);\n }\n\n setNotifications((prev) => {\n let next = prev;\n\n if (evictedInternalId) {\n next = next.map((n) =>\n n.internalId === evictedInternalId ? { ...n, isExiting: true } : n,\n );\n }\n\n return [...next, newNotification];\n });\n\n return id;\n },\n );\n\n // ─── Update ─────────────────────────────────────────────────────\n\n const updateNotification = useEvent(\n (id: Key, options: Partial<OverlayNotificationOptions>) => {\n setNotifications((prev) =>\n prev.map((n) =>\n matchesNotificationId(n, id)\n ? { ...n, ...options, updatedAt: Date.now() }\n : n,\n ),\n );\n },\n );\n\n // ─── Owner Cleanup ──────────────────────────────────────────────\n\n const removeByOwner = useEvent((ownerId: string) => {\n // Clear timers outside the updater (StrictMode-safe).\n const owned = notificationsRef.current.filter(\n (n) => n.ownerId === ownerId && !n.isExiting,\n );\n\n for (const n of owned) {\n timersRef.current?.clearNotificationTimer(n.internalId);\n }\n\n setNotifications((prev) =>\n prev.map((n) => {\n if (n.ownerId === ownerId && !n.isExiting) {\n return { ...n, isExiting: true };\n }\n return n;\n }),\n );\n });\n\n return {\n notifications,\n notificationsRef,\n addNotification,\n removeNotification,\n updateNotification,\n finalizeNotificationRemoval,\n removeByOwner,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-notification-state.js","names":[],"sources":["../../../../src/components/overlays/Notifications/use-notification-state.ts"],"sourcesContent":["import { Key, useRef, useState } from 'react';\n\nimport { useEvent } from '../../../_internal';\n\nimport type {\n DismissReason,\n InternalNotification,\n OverlayNotificationOptions,\n PersistentNotificationItem,\n} from './types';\nimport type { OverlayTimers } from './use-overlay-timers';\n\n// ─── Constants ───────────────────────────────────────────────────────\n\nconst DEFAULT_NOTIFICATION_DURATION = 3000;\nconst DEFAULT_PERSISTENT_NOTIFICATION_DURATION = 5000;\nconst MAX_NOTIFICATIONS = 5;\nconst MAX_DISMISS_SNAPSHOTS = 50;\nconst SNAPSHOT_TTL_MS = 5 * 60 * 1000;\n\n// ─── Types ───────────────────────────────────────────────────────────\n\nexport interface PersistentCallbacks {\n addPersistentItem: (item: PersistentNotificationItem) => void;\n removePersistentItem: (id: Key) => void;\n removePersistentItemSilently: (id: Key) => void;\n hasDismissedPersistentId: (id: Key) => boolean;\n isFullyDismissedId: (id: Key) => boolean;\n saveDismissedPersistentId: (id: Key) => void;\n undoFullyDismissedId: (id: Key) => void;\n}\n\nexport interface NotificationState {\n notifications: InternalNotification[];\n notificationsRef: ReturnType<typeof useRef<InternalNotification[]>>;\n addNotification: (\n options: OverlayNotificationOptions,\n ownerId?: string,\n ) => Key;\n removeNotification: (id: Key, reason?: DismissReason) => void;\n restoreNotification: (id: Key) => void;\n updateNotification: (\n id: Key,\n options: Partial<OverlayNotificationOptions>,\n ) => void;\n finalizeNotificationRemoval: (internalId: string) => void;\n removeByOwner: (ownerId: string) => void;\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────\n\nfunction getDuration(\n notif: OverlayNotificationOptions & { persistent?: boolean },\n): number | null {\n if (notif.duration === null) return null;\n if (notif.duration !== undefined) return notif.duration;\n return notif.persistent\n ? DEFAULT_PERSISTENT_NOTIFICATION_DURATION\n : DEFAULT_NOTIFICATION_DURATION;\n}\n\nfunction matchesNotificationId(item: InternalNotification, id: Key): boolean {\n return item.id === id || item.internalId === String(id);\n}\n\nfunction findNotification(\n list: InternalNotification[],\n id: Key,\n): InternalNotification | undefined {\n return list.find((n) => matchesNotificationId(n, id));\n}\n\n// ─── Hook ────────────────────────────────────────────────────────────\n\n/**\n * @param timersRef - Ref to the shared OverlayTimers instance. Accessed only\n * inside callbacks (never during render), so it is guaranteed to be populated.\n */\nexport function useNotificationState(\n timersRef: ReturnType<typeof useRef<OverlayTimers>>,\n persistent: PersistentCallbacks,\n): NotificationState {\n const [notifications, setNotifications] = useState<InternalNotification[]>(\n [],\n );\n const notificationsRef = useRef(notifications);\n notificationsRef.current = notifications;\n\n const idCounter = useRef(0);\n\n // Snapshots of dismissed notifications, keyed by notification id (string).\n // Saved at dismiss time so restoreNotification can re-add the notification\n // even after finalizeNotificationRemoval has removed it from state.\n const dismissSnapshotsRef = useRef<Map<string, InternalNotification>>(\n new Map(),\n );\n\n // ─── Evict Helper ──────────────────────────────────────────────\n\n /**\n * Evict the oldest active notification to make room for a new one.\n * Clears its timer and moves it to the persistent list if applicable.\n * Must be called OUTSIDE setState updaters (StrictMode-safe).\n */\n const evictOldest = useEvent((): string | null => {\n const active = notificationsRef.current.filter((n) => !n.isExiting);\n\n if (active.length === 0) return null;\n\n // Oldest by createdAt (active list preserves insertion order)\n const oldest = active[0];\n\n timersRef.current?.clearNotificationTimer(oldest.internalId);\n\n // Eviction counts as a timeout dismissal — move to persistent list if applicable\n if (oldest.persistent) {\n persistent.addPersistentItem({\n id: oldest.id ?? oldest.internalId,\n theme: oldest.theme,\n title: oldest.title,\n description: oldest.description,\n icon: oldest.icon,\n actions: oldest.actions,\n createdAt: oldest.createdAt,\n updatedAt: oldest.updatedAt,\n isRead: false,\n ownerId: oldest.ownerId,\n });\n }\n\n return oldest.internalId;\n });\n\n // ─── Remove ─────────────────────────────────────────────────────\n\n const removeNotification = useEvent(\n (id: Key, reason: DismissReason = 'api') => {\n // Read from ref (synchronous) to perform side effects OUTSIDE the updater.\n // This prevents double-fire in StrictMode and avoids calling setState\n // (addPersistentItem) inside another setState updater.\n const notif = findNotification(notificationsRef.current, id);\n\n if (!notif || notif.isExiting) return;\n\n timersRef.current?.clearNotificationTimer(notif.internalId);\n\n // Snapshot the notification for potential restore after finalization.\n dismissSnapshotsRef.current.set(String(notif.id ?? notif.internalId), {\n ...notif,\n lastDismissReason: reason,\n });\n\n // Prevent unbounded growth of dismiss snapshots.\n while (dismissSnapshotsRef.current.size > MAX_DISMISS_SNAPSHOTS) {\n const oldest = dismissSnapshotsRef.current.keys().next().value;\n\n if (oldest != null) {\n dismissSnapshotsRef.current.delete(oldest);\n } else {\n break;\n }\n }\n\n if (notif.persistent) {\n if (reason === 'close' || reason === 'timeout') {\n // Dismiss button, Escape, or auto-dismiss timeout — move to persistent list.\n // If the same id is triggered again, it skips the overlay and updates the\n // persistent list directly.\n persistent.addPersistentItem({\n id: notif.id ?? notif.internalId,\n theme: notif.theme,\n title: notif.title,\n description: notif.description,\n icon: notif.icon,\n actions: notif.actions,\n createdAt: notif.createdAt,\n updatedAt: notif.updatedAt,\n isRead: true,\n ownerId: notif.ownerId,\n });\n } else if (reason === 'action') {\n // User clicked a regular action (not dismiss) — fully dismiss the\n // notification so it never reappears (overlay or persistent list).\n persistent.saveDismissedPersistentId(notif.id ?? notif.internalId);\n persistent.removePersistentItem(notif.id ?? notif.internalId);\n }\n // reason === 'api' — programmatic cleanup (e.g. component unmount).\n // No persistence, no full-dismiss tracking.\n }\n\n setNotifications((prev) =>\n prev.map((n) =>\n matchesNotificationId(n, id)\n ? { ...n, isExiting: true, lastDismissReason: reason }\n : n,\n ),\n );\n },\n );\n\n // ─── Restore ──────────────────────────────────────────────────\n\n const restoreNotification = useEvent((id: Key) => {\n const idStr = String(id);\n const snapshot = dismissSnapshotsRef.current.get(idStr);\n\n if (!snapshot) return;\n\n dismissSnapshotsRef.current.delete(idStr);\n\n // Undo persistent side effects based on how the notification was dismissed.\n if (snapshot.persistent && snapshot.lastDismissReason) {\n const persistentId = snapshot.id ?? snapshot.internalId;\n\n if (\n snapshot.lastDismissReason === 'close' ||\n snapshot.lastDismissReason === 'timeout'\n ) {\n persistent.removePersistentItemSilently(persistentId);\n } else if (snapshot.lastDismissReason === 'action') {\n persistent.undoFullyDismissedId(persistentId);\n }\n }\n\n // Restart the auto-dismiss timer.\n const duration = getDuration(snapshot);\n\n if (duration != null && duration > 0) {\n timersRef.current?.startNotificationTimer(\n snapshot.internalId,\n snapshot.id ?? snapshot.internalId,\n duration,\n );\n }\n\n const stillInState = findNotification(notificationsRef.current, id);\n\n if (stillInState) {\n // Exit animation hasn't completed yet — cancel it.\n setNotifications((prev) =>\n prev.map((n) =>\n matchesNotificationId(n, id)\n ? { ...n, isExiting: false, lastDismissReason: undefined }\n : n,\n ),\n );\n } else {\n // Notification was already finalized (removed from state) — re-add it.\n const restored: InternalNotification = {\n ...snapshot,\n isExiting: false,\n lastDismissReason: undefined,\n };\n\n setNotifications((prev) => [...prev, restored]);\n }\n });\n\n // ─── Finalize ──────────────────────────────────────────────────\n\n const finalizeNotificationRemoval = useEvent((internalId: string) => {\n setNotifications((prev) => prev.filter((n) => n.internalId !== internalId));\n\n // Deferred cleanup of the dismiss snapshot. Kept briefly so async action\n // callbacks can still call restoreNotification after the exit animation.\n setTimeout(() => {\n for (const [key, snap] of dismissSnapshotsRef.current) {\n if (snap.internalId === internalId) {\n dismissSnapshotsRef.current.delete(key);\n break;\n }\n }\n }, SNAPSHOT_TTL_MS);\n });\n\n // ─── Add ────────────────────────────────────────────────────────\n\n const addNotification = useEvent(\n (options: OverlayNotificationOptions, ownerId?: string): Key => {\n idCounter.current += 1;\n const internalId = `notif-${idCounter.current}-${Date.now()}`;\n const now = Date.now();\n const id = options.id ?? internalId;\n\n // If the user explicitly removed this notification from the persistent\n // list, completely ignore it — no overlay, no persistent storage.\n if (options.id != null && persistent.isFullyDismissedId(options.id)) {\n return id;\n }\n\n // If this persistent id was previously dismissed to the persistent list,\n // skip the overlay and update the persistent item directly.\n if (\n options.persistent &&\n options.id != null &&\n persistent.hasDismissedPersistentId(options.id)\n ) {\n persistent.addPersistentItem({\n id,\n theme: options.theme,\n title: options.title,\n description: options.description,\n icon: options.icon,\n actions: options.actions,\n createdAt: now,\n updatedAt: now,\n isRead: false,\n ownerId,\n });\n\n return id;\n }\n\n // Check for existing notification with same id via the ref (synchronous read).\n const existingNotif =\n options.id != null\n ? notificationsRef.current.find(\n (n) => n.id === options.id && !n.isExiting,\n )\n : undefined;\n\n if (existingNotif) {\n // In-place update of an existing notification\n const returnId = existingNotif.id ?? existingNotif.internalId;\n\n const prevTitle = existingNotif.title;\n const prevDescription = existingNotif.description;\n\n // Timer reset on string title/description change\n const titleChanged =\n typeof options.title === 'string' &&\n typeof prevTitle === 'string' &&\n options.title !== prevTitle;\n const descriptionChanged =\n typeof options.description === 'string' &&\n typeof prevDescription === 'string' &&\n options.description !== prevDescription;\n\n if (titleChanged || descriptionChanged) {\n const duration = getDuration(options);\n\n if (duration != null && duration > 0) {\n timersRef.current?.startNotificationTimer(\n existingNotif.internalId,\n existingNotif.id ?? existingNotif.internalId,\n duration,\n );\n }\n }\n\n setNotifications((prev) =>\n prev.map((n) => {\n if (n.internalId === existingNotif.internalId) {\n return {\n ...n,\n ...options,\n internalId: n.internalId,\n createdAt: n.createdAt,\n updatedAt: now,\n ownerId: ownerId ?? n.ownerId,\n };\n }\n return n;\n }),\n );\n\n return returnId;\n }\n\n // New notification — always show immediately, evicting the oldest if at cap.\n // Read from ref (synchronous) to perform side effects OUTSIDE the updater.\n const activeCount = notificationsRef.current.filter(\n (n) => !n.isExiting,\n ).length;\n\n const newNotification: InternalNotification = {\n ...options,\n id,\n internalId,\n createdAt: now,\n updatedAt: now,\n ownerId,\n };\n\n // Evict oldest if at cap (side effects outside updater)\n let evictedInternalId: string | null = null;\n\n if (activeCount >= MAX_NOTIFICATIONS) {\n evictedInternalId = evictOldest();\n }\n\n // Start timer for the new notification\n const duration = getDuration(options);\n\n if (duration != null && duration > 0) {\n timersRef.current?.startNotificationTimer(internalId, id, duration);\n }\n\n setNotifications((prev) => {\n let next = prev;\n\n if (evictedInternalId) {\n next = next.map((n) =>\n n.internalId === evictedInternalId ? { ...n, isExiting: true } : n,\n );\n }\n\n return [...next, newNotification];\n });\n\n return id;\n },\n );\n\n // ─── Update ─────────────────────────────────────────────────────\n\n const updateNotification = useEvent(\n (id: Key, options: Partial<OverlayNotificationOptions>) => {\n setNotifications((prev) =>\n prev.map((n) =>\n matchesNotificationId(n, id)\n ? { ...n, ...options, updatedAt: Date.now() }\n : n,\n ),\n );\n },\n );\n\n // ─── Owner Cleanup ──────────────────────────────────────────────\n\n const removeByOwner = useEvent((ownerId: string) => {\n // Clear timers outside the updater (StrictMode-safe).\n const owned = notificationsRef.current.filter(\n (n) => n.ownerId === ownerId && !n.isExiting,\n );\n\n for (const n of owned) {\n timersRef.current?.clearNotificationTimer(n.internalId);\n }\n\n setNotifications((prev) =>\n prev.map((n) => {\n if (n.ownerId === ownerId && !n.isExiting) {\n return { ...n, isExiting: true };\n }\n return n;\n }),\n );\n });\n\n return {\n notifications,\n notificationsRef,\n addNotification,\n removeNotification,\n restoreNotification,\n updateNotification,\n finalizeNotificationRemoval,\n removeByOwner,\n };\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.117.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.119.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { useWarn } from "../../../_internal/hooks/use-warn.js";
4
4
  import { useNotificationContext } from "./NotificationContext.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.117.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.119.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { useEffect, useRef } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.117.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.119.0 | Cube Dev Team */
2
2
  import { usePersistentNotificationsContext } from "./NotificationContext.js";
3
3
  import { useMemo } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.117.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.119.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { cleanupAndGetValidIds, saveDismissedId } from "./dismissed-storage.js";
4
4
  import { useRef, useState } from "react";
@@ -62,6 +62,13 @@ function usePersistentState(maxItems) {
62
62
  saveDismissedPersistentId: useEvent((id) => {
63
63
  dismissedPersistentIdsRef.current.add(String(id));
64
64
  saveDismissedId(id);
65
+ }),
66
+ undoFullyDismissedId: useEvent((id) => {
67
+ fullyDismissedIdsRef.current.delete(String(id));
68
+ }),
69
+ removePersistentItemSilently: useEvent((id) => {
70
+ dismissedPersistentIdsRef.current.delete(String(id));
71
+ setPersistentItems((prev) => prev.filter((i) => i.id !== id));
65
72
  })
66
73
  };
67
74
  }
@@ -1 +1 @@
1
- {"version":3,"file":"use-persistent-state.js","names":[],"sources":["../../../../src/components/overlays/Notifications/use-persistent-state.ts"],"sourcesContent":["import { Key, useRef, useState } from 'react';\n\nimport { useEvent } from '../../../_internal';\n\nimport { cleanupAndGetValidIds, saveDismissedId } from './dismissed-storage';\n\nimport type { PersistentNotificationItem } from './types';\n\n// ─── Types ───────────────────────────────────────────────────────────\n\nexport interface PersistentState {\n persistentItems: PersistentNotificationItem[];\n addPersistentItem: (item: PersistentNotificationItem) => void;\n removePersistentItem: (id: Key) => void;\n removePersistentItemsByOwner: (ownerId: string) => void;\n clearPersistentItems: () => void;\n markAllAsRead: () => void;\n /**\n * Returns true if the given id was previously moved to the persistent list\n * and has NOT been explicitly removed from it (i.e. still archived, or was\n * auto-dismissed but not yet user-dismissed from the persistent list).\n */\n hasDismissedPersistentId: (id: Key) => boolean;\n /**\n * Returns true if the given id was explicitly removed from the persistent\n * list by the user. Such notifications should be completely ignored on\n * subsequent triggers (no overlay, no persistent storage).\n */\n isFullyDismissedId: (id: Key) => boolean;\n /**\n * Marks an id as dismissed in both the in-memory set and localStorage.\n * Used for `'action'` dismissals that go through `removePersistentItem`\n * instead of `addPersistentItem`.\n */\n saveDismissedPersistentId: (id: Key) => void;\n}\n\n// ─── Hook ────────────────────────────────────────────────────────────\n\nexport function usePersistentState(maxItems: number): PersistentState {\n const [persistentItems, setPersistentItems] = useState<\n PersistentNotificationItem[]\n >([]);\n\n // Tracks IDs that have been moved to the persistent list at least once.\n // Used to skip the overlay when the same id reappears.\n // Lazy-initialized from localStorage so dismissed IDs survive page reloads.\n const dismissedPersistentIdsRef = useRef<Set<string> | null>(null);\n if (dismissedPersistentIdsRef.current === null) {\n dismissedPersistentIdsRef.current = cleanupAndGetValidIds();\n }\n\n // Tracks IDs that were explicitly removed from the persistent list by the\n // user. These should be completely ignored on subsequent triggers.\n const fullyDismissedIdsRef = useRef<Set<string>>(new Set());\n\n const addPersistentItem = useEvent((item: PersistentNotificationItem) => {\n // If the user already dismissed this item from the persistent list, don't re-add it.\n if (fullyDismissedIdsRef.current.has(String(item.id))) return;\n\n dismissedPersistentIdsRef.current!.add(String(item.id));\n saveDismissedId(item.id);\n\n setPersistentItems((prev) => {\n // Upsert by id\n const existingIndex = prev.findIndex((i) => i.id === item.id);\n let newItems: PersistentNotificationItem[];\n\n if (existingIndex !== -1) {\n newItems = [...prev];\n // Updated items are marked unread again\n newItems[existingIndex] = {\n ...newItems[existingIndex],\n ...item,\n isRead: false,\n };\n } else {\n newItems = [{ ...item, isRead: item.isRead ?? false }, ...prev];\n }\n\n // Enforce max cap\n if (newItems.length > maxItems) {\n newItems = newItems.slice(0, maxItems);\n }\n\n // Sort newest first\n newItems.sort((a, b) => b.createdAt - a.createdAt);\n\n return newItems;\n });\n });\n\n const removePersistentItem = useEvent((id: Key) => {\n fullyDismissedIdsRef.current.add(String(id));\n setPersistentItems((prev) => prev.filter((i) => i.id !== id));\n });\n\n const removePersistentItemsByOwner = useEvent((ownerId: string) => {\n setPersistentItems((prev) => prev.filter((i) => i.ownerId !== ownerId));\n });\n\n const clearPersistentItems = useEvent(() => {\n setPersistentItems([]);\n });\n\n const markAllAsRead = useEvent(() => {\n setPersistentItems((prev) => {\n const hasUnread = prev.some((i) => !i.isRead);\n\n if (!hasUnread) return prev;\n\n return prev.map((i) => (i.isRead ? i : { ...i, isRead: true }));\n });\n });\n\n const hasDismissedPersistentId = useEvent((id: Key): boolean => {\n return dismissedPersistentIdsRef.current!.has(String(id));\n });\n\n const isFullyDismissedId = useEvent((id: Key): boolean => {\n return fullyDismissedIdsRef.current.has(String(id));\n });\n\n const saveDismissedPersistentId = useEvent((id: Key): void => {\n dismissedPersistentIdsRef.current!.add(String(id));\n saveDismissedId(id);\n });\n\n return {\n persistentItems,\n addPersistentItem,\n removePersistentItem,\n removePersistentItemsByOwner,\n clearPersistentItems,\n markAllAsRead,\n hasDismissedPersistentId,\n isFullyDismissedId,\n saveDismissedPersistentId,\n };\n}\n"],"mappings":";;;;;;AAuCA,SAAgB,mBAAmB,UAAmC;CACpE,MAAM,CAAC,iBAAiB,sBAAsB,SAE5C,EAAE,CAAC;CAKL,MAAM,4BAA4B,OAA2B,KAAK;AAClE,KAAI,0BAA0B,YAAY,KACxC,2BAA0B,UAAU,uBAAuB;CAK7D,MAAM,uBAAuB,uBAAoB,IAAI,KAAK,CAAC;AA0E3D,QAAO;EACL;EACA,mBA1EwB,UAAU,SAAqC;AAEvE,OAAI,qBAAqB,QAAQ,IAAI,OAAO,KAAK,GAAG,CAAC,CAAE;AAEvD,6BAA0B,QAAS,IAAI,OAAO,KAAK,GAAG,CAAC;AACvD,mBAAgB,KAAK,GAAG;AAExB,uBAAoB,SAAS;IAE3B,MAAM,gBAAgB,KAAK,WAAW,MAAM,EAAE,OAAO,KAAK,GAAG;IAC7D,IAAI;AAEJ,QAAI,kBAAkB,IAAI;AACxB,gBAAW,CAAC,GAAG,KAAK;AAEpB,cAAS,iBAAiB;MACxB,GAAG,SAAS;MACZ,GAAG;MACH,QAAQ;MACT;UAED,YAAW,CAAC;KAAE,GAAG;KAAM,QAAQ,KAAK,UAAU;KAAO,EAAE,GAAG,KAAK;AAIjE,QAAI,SAAS,SAAS,SACpB,YAAW,SAAS,MAAM,GAAG,SAAS;AAIxC,aAAS,MAAM,GAAG,MAAM,EAAE,YAAY,EAAE,UAAU;AAElD,WAAO;KACP;IACF;EAyCA,sBAvC2B,UAAU,OAAY;AACjD,wBAAqB,QAAQ,IAAI,OAAO,GAAG,CAAC;AAC5C,uBAAoB,SAAS,KAAK,QAAQ,MAAM,EAAE,OAAO,GAAG,CAAC;IAC7D;EAqCA,8BAnCmC,UAAU,YAAoB;AACjE,uBAAoB,SAAS,KAAK,QAAQ,MAAM,EAAE,YAAY,QAAQ,CAAC;IACvE;EAkCA,sBAhC2B,eAAe;AAC1C,sBAAmB,EAAE,CAAC;IACtB;EA+BA,eA7BoB,eAAe;AACnC,uBAAoB,SAAS;AAG3B,QAAI,CAFc,KAAK,MAAM,MAAM,CAAC,EAAE,OAAO,CAE7B,QAAO;AAEvB,WAAO,KAAK,KAAK,MAAO,EAAE,SAAS,IAAI;KAAE,GAAG;KAAG,QAAQ;KAAM,CAAE;KAC/D;IACF;EAsBA,0BApB+B,UAAU,OAAqB;AAC9D,UAAO,0BAA0B,QAAS,IAAI,OAAO,GAAG,CAAC;IACzD;EAmBA,oBAjByB,UAAU,OAAqB;AACxD,UAAO,qBAAqB,QAAQ,IAAI,OAAO,GAAG,CAAC;IACnD;EAgBA,2BAdgC,UAAU,OAAkB;AAC5D,6BAA0B,QAAS,IAAI,OAAO,GAAG,CAAC;AAClD,mBAAgB,GAAG;IACnB;EAYD"}
1
+ {"version":3,"file":"use-persistent-state.js","names":[],"sources":["../../../../src/components/overlays/Notifications/use-persistent-state.ts"],"sourcesContent":["import { Key, useRef, useState } from 'react';\n\nimport { useEvent } from '../../../_internal';\n\nimport { cleanupAndGetValidIds, saveDismissedId } from './dismissed-storage';\n\nimport type { PersistentNotificationItem } from './types';\n\n// ─── Types ───────────────────────────────────────────────────────────\n\nexport interface PersistentState {\n persistentItems: PersistentNotificationItem[];\n addPersistentItem: (item: PersistentNotificationItem) => void;\n removePersistentItem: (id: Key) => void;\n removePersistentItemsByOwner: (ownerId: string) => void;\n clearPersistentItems: () => void;\n markAllAsRead: () => void;\n /**\n * Returns true if the given id was previously moved to the persistent list\n * and has NOT been explicitly removed from it (i.e. still archived, or was\n * auto-dismissed but not yet user-dismissed from the persistent list).\n */\n hasDismissedPersistentId: (id: Key) => boolean;\n /**\n * Returns true if the given id was explicitly removed from the persistent\n * list by the user. Such notifications should be completely ignored on\n * subsequent triggers (no overlay, no persistent storage).\n */\n isFullyDismissedId: (id: Key) => boolean;\n /**\n * Marks an id as dismissed in both the in-memory set and localStorage.\n * Used for `'action'` dismissals that go through `removePersistentItem`\n * instead of `addPersistentItem`.\n */\n saveDismissedPersistentId: (id: Key) => void;\n /**\n * Removes an id from the fully-dismissed set.\n * Used to undo an `'action'` dismissal when the async action is cancelled.\n */\n undoFullyDismissedId: (id: Key) => void;\n /**\n * Removes an item from the persistent list without marking it as fully dismissed.\n * Used to undo a `'close'` dismissal that moved the notification to persistent.\n */\n removePersistentItemSilently: (id: Key) => void;\n}\n\n// ─── Hook ────────────────────────────────────────────────────────────\n\nexport function usePersistentState(maxItems: number): PersistentState {\n const [persistentItems, setPersistentItems] = useState<\n PersistentNotificationItem[]\n >([]);\n\n // Tracks IDs that have been moved to the persistent list at least once.\n // Used to skip the overlay when the same id reappears.\n // Lazy-initialized from localStorage so dismissed IDs survive page reloads.\n const dismissedPersistentIdsRef = useRef<Set<string> | null>(null);\n if (dismissedPersistentIdsRef.current === null) {\n dismissedPersistentIdsRef.current = cleanupAndGetValidIds();\n }\n\n // Tracks IDs that were explicitly removed from the persistent list by the\n // user. These should be completely ignored on subsequent triggers.\n const fullyDismissedIdsRef = useRef<Set<string>>(new Set());\n\n const addPersistentItem = useEvent((item: PersistentNotificationItem) => {\n // If the user already dismissed this item from the persistent list, don't re-add it.\n if (fullyDismissedIdsRef.current.has(String(item.id))) return;\n\n dismissedPersistentIdsRef.current!.add(String(item.id));\n saveDismissedId(item.id);\n\n setPersistentItems((prev) => {\n // Upsert by id\n const existingIndex = prev.findIndex((i) => i.id === item.id);\n let newItems: PersistentNotificationItem[];\n\n if (existingIndex !== -1) {\n newItems = [...prev];\n // Updated items are marked unread again\n newItems[existingIndex] = {\n ...newItems[existingIndex],\n ...item,\n isRead: false,\n };\n } else {\n newItems = [{ ...item, isRead: item.isRead ?? false }, ...prev];\n }\n\n // Enforce max cap\n if (newItems.length > maxItems) {\n newItems = newItems.slice(0, maxItems);\n }\n\n // Sort newest first\n newItems.sort((a, b) => b.createdAt - a.createdAt);\n\n return newItems;\n });\n });\n\n const removePersistentItem = useEvent((id: Key) => {\n fullyDismissedIdsRef.current.add(String(id));\n setPersistentItems((prev) => prev.filter((i) => i.id !== id));\n });\n\n const removePersistentItemsByOwner = useEvent((ownerId: string) => {\n setPersistentItems((prev) => prev.filter((i) => i.ownerId !== ownerId));\n });\n\n const clearPersistentItems = useEvent(() => {\n setPersistentItems([]);\n });\n\n const markAllAsRead = useEvent(() => {\n setPersistentItems((prev) => {\n const hasUnread = prev.some((i) => !i.isRead);\n\n if (!hasUnread) return prev;\n\n return prev.map((i) => (i.isRead ? i : { ...i, isRead: true }));\n });\n });\n\n const hasDismissedPersistentId = useEvent((id: Key): boolean => {\n return dismissedPersistentIdsRef.current!.has(String(id));\n });\n\n const isFullyDismissedId = useEvent((id: Key): boolean => {\n return fullyDismissedIdsRef.current.has(String(id));\n });\n\n const saveDismissedPersistentId = useEvent((id: Key): void => {\n dismissedPersistentIdsRef.current!.add(String(id));\n saveDismissedId(id);\n });\n\n const undoFullyDismissedId = useEvent((id: Key): void => {\n fullyDismissedIdsRef.current.delete(String(id));\n });\n\n const removePersistentItemSilently = useEvent((id: Key): void => {\n dismissedPersistentIdsRef.current!.delete(String(id));\n setPersistentItems((prev) => prev.filter((i) => i.id !== id));\n });\n\n return {\n persistentItems,\n addPersistentItem,\n removePersistentItem,\n removePersistentItemsByOwner,\n clearPersistentItems,\n markAllAsRead,\n hasDismissedPersistentId,\n isFullyDismissedId,\n saveDismissedPersistentId,\n undoFullyDismissedId,\n removePersistentItemSilently,\n };\n}\n"],"mappings":";;;;;;AAiDA,SAAgB,mBAAmB,UAAmC;CACpE,MAAM,CAAC,iBAAiB,sBAAsB,SAE5C,EAAE,CAAC;CAKL,MAAM,4BAA4B,OAA2B,KAAK;AAClE,KAAI,0BAA0B,YAAY,KACxC,2BAA0B,UAAU,uBAAuB;CAK7D,MAAM,uBAAuB,uBAAoB,IAAI,KAAK,CAAC;AAmF3D,QAAO;EACL;EACA,mBAnFwB,UAAU,SAAqC;AAEvE,OAAI,qBAAqB,QAAQ,IAAI,OAAO,KAAK,GAAG,CAAC,CAAE;AAEvD,6BAA0B,QAAS,IAAI,OAAO,KAAK,GAAG,CAAC;AACvD,mBAAgB,KAAK,GAAG;AAExB,uBAAoB,SAAS;IAE3B,MAAM,gBAAgB,KAAK,WAAW,MAAM,EAAE,OAAO,KAAK,GAAG;IAC7D,IAAI;AAEJ,QAAI,kBAAkB,IAAI;AACxB,gBAAW,CAAC,GAAG,KAAK;AAEpB,cAAS,iBAAiB;MACxB,GAAG,SAAS;MACZ,GAAG;MACH,QAAQ;MACT;UAED,YAAW,CAAC;KAAE,GAAG;KAAM,QAAQ,KAAK,UAAU;KAAO,EAAE,GAAG,KAAK;AAIjE,QAAI,SAAS,SAAS,SACpB,YAAW,SAAS,MAAM,GAAG,SAAS;AAIxC,aAAS,MAAM,GAAG,MAAM,EAAE,YAAY,EAAE,UAAU;AAElD,WAAO;KACP;IACF;EAkDA,sBAhD2B,UAAU,OAAY;AACjD,wBAAqB,QAAQ,IAAI,OAAO,GAAG,CAAC;AAC5C,uBAAoB,SAAS,KAAK,QAAQ,MAAM,EAAE,OAAO,GAAG,CAAC;IAC7D;EA8CA,8BA5CmC,UAAU,YAAoB;AACjE,uBAAoB,SAAS,KAAK,QAAQ,MAAM,EAAE,YAAY,QAAQ,CAAC;IACvE;EA2CA,sBAzC2B,eAAe;AAC1C,sBAAmB,EAAE,CAAC;IACtB;EAwCA,eAtCoB,eAAe;AACnC,uBAAoB,SAAS;AAG3B,QAAI,CAFc,KAAK,MAAM,MAAM,CAAC,EAAE,OAAO,CAE7B,QAAO;AAEvB,WAAO,KAAK,KAAK,MAAO,EAAE,SAAS,IAAI;KAAE,GAAG;KAAG,QAAQ;KAAM,CAAE;KAC/D;IACF;EA+BA,0BA7B+B,UAAU,OAAqB;AAC9D,UAAO,0BAA0B,QAAS,IAAI,OAAO,GAAG,CAAC;IACzD;EA4BA,oBA1ByB,UAAU,OAAqB;AACxD,UAAO,qBAAqB,QAAQ,IAAI,OAAO,GAAG,CAAC;IACnD;EAyBA,2BAvBgC,UAAU,OAAkB;AAC5D,6BAA0B,QAAS,IAAI,OAAO,GAAG,CAAC;AAClD,mBAAgB,GAAG;IACnB;EAqBA,sBAnB2B,UAAU,OAAkB;AACvD,wBAAqB,QAAQ,OAAO,OAAO,GAAG,CAAC;IAC/C;EAkBA,8BAhBmC,UAAU,OAAkB;AAC/D,6BAA0B,QAAS,OAAO,OAAO,GAAG,CAAC;AACrD,uBAAoB,SAAS,KAAK,QAAQ,MAAM,EAAE,OAAO,GAAG,CAAC;IAC7D;EAcD"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.117.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.119.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { useRef, useState } from "react";
4
4
 
@@ -1,7 +1,7 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.117.0 | Cube Dev Team */
2
- import { tasty } from "../../../tasty/tasty.js";
1
+ /** @license MIT | @cube-dev/ui-kit v0.119.0 | Cube Dev Team */
3
2
  import { _Item } from "../../content/Item/Item.js";
4
3
  import { getThemeIcon } from "./useToast.js";
4
+ import { tasty } from "@tenphi/tasty";
5
5
  import { forwardRef } from "react";
6
6
  import { jsx } from "react/jsx-runtime";
7
7
 
@@ -1 +1 @@
1
- {"version":3,"file":"ToastItem.js","names":["Item"],"sources":["../../../../src/components/overlays/Toast/ToastItem.tsx"],"sourcesContent":["import { forwardRef, ReactNode } from 'react';\n\nimport { tasty } from '../../../tasty';\nimport { CubeItemProps, Item } from '../../content/Item/Item';\n\nimport { getThemeIcon } from './useToast';\n\nimport type { ToastType } from './types';\n\nexport interface ToastItemProps\n extends Partial<Omit<CubeItemProps, 'type' | 'icon'>> {\n /** Primary content (→ Item children). Also supports description-only for migration. */\n title?: ReactNode;\n /** Secondary content (or primary if no title/children) */\n description?: ReactNode;\n /** Visual theme */\n theme?: ToastType;\n /** Whether the toast is in loading state */\n isLoading?: boolean;\n /** Icon to display (resolved ReactNode, not a dynamic icon function) */\n icon?: ReactNode;\n}\n\nconst StyledItem = tasty(Item, {\n styles: {\n shadow: '$shadow',\n transition: 'theme, inset',\n pointerEvents: {\n '': 'none',\n 'has-actions': 'auto',\n },\n\n Description: {\n preset: 't4',\n },\n },\n});\n\nexport const ToastItem = forwardRef<HTMLElement, ToastItemProps>(\n function ToastItem(props, ref) {\n const {\n title,\n description,\n theme,\n isLoading,\n icon: providedIcon,\n children,\n qa,\n ...itemProps\n } = props;\n\n const icon = getThemeIcon(theme, providedIcon, isLoading);\n\n // If only description provided (no title/children), use description as primary content\n const primaryContent = children ?? title ?? description;\n const secondaryContent = children || title ? description : undefined;\n\n return (\n <StyledItem\n ref={ref}\n qa={qa ?? 'Toast'}\n type=\"card\"\n theme={theme}\n icon={icon}\n isLoading={isLoading}\n isDisabled={false}\n description={secondaryContent}\n {...itemProps}\n >\n {primaryContent}\n </StyledItem>\n );\n },\n);\n"],"mappings":";;;;;;;;AAuBA,MAAM,aAAa,MAAMA,OAAM,EAC7B,QAAQ;CACN,QAAQ;CACR,YAAY;CACZ,eAAe;EACb,IAAI;EACJ,eAAe;EAChB;CAED,aAAa,EACX,QAAQ,MACT;CACF,EACF,CAAC;AAEF,MAAa,YAAY,WACvB,SAAS,UAAU,OAAO,KAAK;CAC7B,MAAM,EACJ,OACA,aACA,OACA,WACA,MAAM,cACN,UACA,IACA,GAAG,cACD;CAEJ,MAAM,OAAO,aAAa,OAAO,cAAc,UAAU;CAGzD,MAAM,iBAAiB,YAAY,SAAS;AAG5C,QACE,oBAAC;EACM;EACL,IAAI,MAAM;EACV,MAAK;EACE;EACD;EACK;EACX,YAAY;EACZ,aAXqB,YAAY,QAAQ,cAAc;EAYvD,GAAI;YAEH;GACU;EAGlB"}
1
+ {"version":3,"file":"ToastItem.js","names":["Item"],"sources":["../../../../src/components/overlays/Toast/ToastItem.tsx"],"sourcesContent":["import { tasty } from '@tenphi/tasty';\nimport { forwardRef, ReactNode } from 'react';\n\nimport { CubeItemProps, Item } from '../../content/Item/Item';\n\nimport { getThemeIcon } from './useToast';\n\nimport type { ToastType } from './types';\n\nexport interface ToastItemProps\n extends Partial<Omit<CubeItemProps, 'type' | 'icon'>> {\n /** Primary content (→ Item children). Also supports description-only for migration. */\n title?: ReactNode;\n /** Secondary content (or primary if no title/children) */\n description?: ReactNode;\n /** Visual theme */\n theme?: ToastType;\n /** Whether the toast is in loading state */\n isLoading?: boolean;\n /** Icon to display (resolved ReactNode, not a dynamic icon function) */\n icon?: ReactNode;\n}\n\nconst StyledItem = tasty(Item, {\n styles: {\n shadow: '$shadow',\n transition: 'theme, inset',\n pointerEvents: {\n '': 'none',\n 'has-actions': 'auto',\n },\n\n Description: {\n preset: 't4',\n },\n },\n});\n\nexport const ToastItem = forwardRef<HTMLElement, ToastItemProps>(\n function ToastItem(props, ref) {\n const {\n title,\n description,\n theme,\n isLoading,\n icon: providedIcon,\n children,\n qa,\n ...itemProps\n } = props;\n\n const icon = getThemeIcon(theme, providedIcon, isLoading);\n\n // If only description provided (no title/children), use description as primary content\n const primaryContent = children ?? title ?? description;\n const secondaryContent = children || title ? description : undefined;\n\n return (\n <StyledItem\n ref={ref}\n qa={qa ?? 'Toast'}\n type=\"card\"\n theme={theme}\n icon={icon}\n isLoading={isLoading}\n isDisabled={false}\n description={secondaryContent}\n {...itemProps}\n >\n {primaryContent}\n </StyledItem>\n );\n },\n);\n"],"mappings":";;;;;;;;AAuBA,MAAM,aAAa,MAAMA,OAAM,EAC7B,QAAQ;CACN,QAAQ;CACR,YAAY;CACZ,eAAe;EACb,IAAI;EACJ,eAAe;EAChB;CAED,aAAa,EACX,QAAQ,MACT;CACF,EACF,CAAC;AAEF,MAAa,YAAY,WACvB,SAAS,UAAU,OAAO,KAAK;CAC7B,MAAM,EACJ,OACA,aACA,OACA,WACA,MAAM,cACN,UACA,IACA,GAAG,cACD;CAEJ,MAAM,OAAO,aAAa,OAAO,cAAc,UAAU;CAGzD,MAAM,iBAAiB,YAAY,SAAS;AAG5C,QACE,oBAAC;EACM;EACL,IAAI,MAAM;EACV,MAAK;EACE;EACD;EACK;EACX,YAAY;EACZ,aAXqB,YAAY,QAAQ,cAAc;EAYvD,GAAI;YAEH;GACU;EAGlB"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.117.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.119.0 | Cube Dev Team */
2
2
  import { useToastContext } from "../Notifications/NotificationContext.js";
3
3
  import { useProgressToast } from "./useProgressToast.js";
4
4
  import { getThemeIcon, useToast } from "./useToast.js";
@@ -29,6 +29,8 @@ interface ToastData {
29
29
  interface ProgressToastOptions extends Omit<ToastData, 'duration'> {
30
30
  /** Whether the toast is in loading state */
31
31
  isLoading: boolean;
32
+ /** When true, a "Hide" action is shown during loading so the user can dismiss the toast temporarily. */
33
+ isDismissable?: boolean;
32
34
  }
33
35
  /**
34
36
  * Empty value that indicates no toast should be shown.
@@ -1,8 +1,11 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.117.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.119.0 | Cube Dev Team */
2
+ import { useEvent } from "../../../_internal/hooks/use-event.js";
3
+ import { ItemAction } from "../../actions/ItemAction/ItemAction.js";
2
4
  import { useToastContext } from "../Notifications/NotificationContext.js";
3
5
  import { useEffect, useRef } from "react";
6
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
4
7
 
5
- //#region src/components/overlays/Toast/useProgressToast.ts
8
+ //#region src/components/overlays/Toast/useProgressToast.tsx
6
9
  const RESULT_DURATION = 3e3;
7
10
  /**
8
11
  * Check if the options represent an "empty" value (null, undefined, false, or empty object).
@@ -44,13 +47,14 @@ function getStringValue(value) {
44
47
  * ```
45
48
  */
46
49
  function useProgressToast(options) {
47
- const { addToast, removeToast } = useToastContext();
50
+ const { addToast, removeToast, updateToast } = useToastContext();
48
51
  const toastIdRef = useRef(null);
49
52
  const wasLoadingRef = useRef(null);
50
53
  const hideTimerRef = useRef(null);
51
54
  const isFirstRenderRef = useRef(true);
52
55
  const optionsRef = useRef(options);
53
56
  const hasBeenLoadingRef = useRef(false);
57
+ const hiddenByUserRef = useRef(false);
54
58
  const prevThemeRef = useRef(void 0);
55
59
  const prevTitleRef = useRef(void 0);
56
60
  const prevDescriptionRef = useRef(void 0);
@@ -63,9 +67,17 @@ function useProgressToast(options) {
63
67
  };
64
68
  const isEmpty = isEmptyOptions(options);
65
69
  const isLoading = isEmpty ? false : options.isLoading;
70
+ const isDismissable = isEmpty ? false : !!options.isDismissable;
66
71
  const currentTheme = isEmpty ? void 0 : options.theme;
67
72
  const currentTitle = isEmpty ? void 0 : getStringValue(options.title);
68
73
  const currentDescription = isEmpty ? void 0 : getStringValue(options.description);
74
+ const handleHide = useEvent(() => {
75
+ if (toastIdRef.current != null) {
76
+ removeToast(toastIdRef.current);
77
+ toastIdRef.current = null;
78
+ }
79
+ hiddenByUserRef.current = true;
80
+ });
69
81
  useEffect(() => {
70
82
  const wasLoading = wasLoadingRef.current;
71
83
  const isFirstRender = isFirstRenderRef.current;
@@ -77,6 +89,7 @@ function useProgressToast(options) {
77
89
  toastIdRef.current = null;
78
90
  }
79
91
  hasBeenLoadingRef.current = false;
92
+ hiddenByUserRef.current = false;
80
93
  wasLoadingRef.current = null;
81
94
  isFirstRenderRef.current = false;
82
95
  prevThemeRef.current = void 0;
@@ -84,18 +97,31 @@ function useProgressToast(options) {
84
97
  prevDescriptionRef.current = void 0;
85
98
  return;
86
99
  }
87
- const { isLoading: currentIsLoading, ...currentToastData } = currentOptions;
100
+ const { isLoading: currentIsLoading, isDismissable: _isDismissable, ...currentToastData } = currentOptions;
88
101
  const themeChanged = currentTheme !== prevThemeRef.current;
89
102
  const titleChanged = currentTitle !== prevTitleRef.current;
90
103
  const descriptionChanged = currentDescription !== prevDescriptionRef.current;
91
104
  const dataChanged = themeChanged || titleChanged || descriptionChanged;
105
+ const hideAction = isDismissable && currentIsLoading ? /* @__PURE__ */ jsx(ItemAction, {
106
+ type: "secondary",
107
+ onPress: handleHide,
108
+ children: "Hide"
109
+ }) : null;
110
+ const mergedActions = hideAction ? /* @__PURE__ */ jsxs(Fragment$1, { children: [currentToastData.actions, hideAction] }) : currentToastData.actions;
111
+ const toastData = {
112
+ title: void 0,
113
+ description: void 0,
114
+ theme: void 0,
115
+ icon: void 0,
116
+ itemProps: void 0,
117
+ ...currentToastData,
118
+ actions: mergedActions,
119
+ isLoading: currentIsLoading,
120
+ duration: null
121
+ };
92
122
  const showToast = () => {
93
- if (toastIdRef.current != null) removeToast(toastIdRef.current);
94
- toastIdRef.current = addToast({
95
- ...currentToastData,
96
- isLoading: currentIsLoading,
97
- duration: null
98
- }, true);
123
+ if (toastIdRef.current != null) updateToast(toastIdRef.current, toastData);
124
+ else toastIdRef.current = addToast(toastData, true);
99
125
  };
100
126
  const showToastWithTimer = () => {
101
127
  showToast();
@@ -109,24 +135,23 @@ function useProgressToast(options) {
109
135
  if (currentIsLoading) {
110
136
  hasBeenLoadingRef.current = true;
111
137
  clearHideTimer();
112
- if (toastIdRef.current == null) showToast();
138
+ if (hiddenByUserRef.current) {} else if (toastIdRef.current == null) showToast();
113
139
  else if (dataChanged) showToast();
114
140
  } else if (wasLoading === true && !currentIsLoading) {
141
+ hiddenByUserRef.current = false;
115
142
  clearHideTimer();
116
143
  if (currentTitle) showToastWithTimer();
117
144
  else if (toastIdRef.current != null) {
118
145
  removeToast(toastIdRef.current);
119
146
  toastIdRef.current = null;
120
147
  }
121
- } else if (!currentIsLoading && !isFirstRender && hasBeenLoadingRef.current && dataChanged) {
122
- if (currentTitle) {
123
- clearHideTimer();
124
- showToastWithTimer();
125
- } else if (toastIdRef.current != null) {
126
- clearHideTimer();
127
- removeToast(toastIdRef.current);
128
- toastIdRef.current = null;
129
- }
148
+ } else if (!currentIsLoading && !isFirstRender && hasBeenLoadingRef.current && dataChanged && toastIdRef.current != null) if (currentTitle) {
149
+ clearHideTimer();
150
+ showToastWithTimer();
151
+ } else {
152
+ clearHideTimer();
153
+ removeToast(toastIdRef.current);
154
+ toastIdRef.current = null;
130
155
  }
131
156
  wasLoadingRef.current = currentIsLoading;
132
157
  isFirstRenderRef.current = false;
@@ -136,11 +161,14 @@ function useProgressToast(options) {
136
161
  }, [
137
162
  isEmpty,
138
163
  isLoading,
164
+ isDismissable,
139
165
  currentTheme,
140
166
  currentTitle,
141
167
  currentDescription,
142
168
  addToast,
143
- removeToast
169
+ removeToast,
170
+ updateToast,
171
+ handleHide
144
172
  ]);
145
173
  useEffect(() => {
146
174
  return () => {
@@ -1 +1 @@
1
- {"version":3,"file":"useProgressToast.js","names":[],"sources":["../../../../src/components/overlays/Toast/useProgressToast.ts"],"sourcesContent":["import { Key, useEffect, useRef } from 'react';\n\nimport { useToastContext } from './ToastProvider';\n\nimport type { ProgressToastEmpty, ProgressToastOptions } from './types';\n\nconst RESULT_DURATION = 3000;\n\n/**\n * Check if the options represent an \"empty\" value (null, undefined, false, or empty object).\n * When empty, the hook should immediately remove any existing toast.\n */\nfunction isEmptyOptions(\n options: ProgressToastOptions | ProgressToastEmpty,\n): options is ProgressToastEmpty {\n if (options == null || options === false) return true;\n if (typeof options === 'object' && Object.keys(options).length === 0)\n return true;\n return false;\n}\n\n// Get string value for comparison (only strings are compared for re-show logic)\nfunction getStringValue(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n\n/**\n * Hook to display a progress toast that persists while loading.\n *\n * @example\n * ```tsx\n * useProgressToast(\n * isLoading\n * ? { isLoading: true, title: 'Saving...', icon: <Spinner /> }\n * : { isLoading: false, title: 'Saved!', icon: <IconCheck />, theme: 'success' }\n * );\n *\n * // Or with error handling:\n * useProgressToast(\n * isLoading\n * ? { isLoading: true, title: 'Saving...', icon: <Spinner /> }\n * : isError\n * ? { isLoading: false, title: 'Error', description: errorMessage, theme: 'danger' }\n * : { isLoading: false, title: 'Saved!', theme: 'success' }\n * );\n *\n * // Pass empty value to immediately remove any existing toast:\n * useProgressToast(shouldShow ? { isLoading: true, title: 'Loading...' } : null);\n *\n * // Or call with no argument to dismiss:\n * useProgressToast();\n * ```\n */\nexport function useProgressToast(\n options?: ProgressToastOptions | ProgressToastEmpty,\n): void {\n const { addToast, removeToast } = useToastContext();\n\n const toastIdRef = useRef<Key | null>(null);\n const wasLoadingRef = useRef<boolean | null>(null);\n const hideTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const isFirstRenderRef = useRef(true);\n const optionsRef = useRef(options);\n const hasBeenLoadingRef = useRef(false);\n\n // Track previous string values for re-show comparison\n const prevThemeRef = useRef<string | undefined>(undefined);\n const prevTitleRef = useRef<string | undefined>(undefined);\n const prevDescriptionRef = useRef<string | undefined>(undefined);\n\n // Always update optionsRef to latest\n optionsRef.current = options;\n\n // Clear any pending hide timer\n const clearHideTimer = () => {\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n\n // Check if current options are empty\n const isEmpty = isEmptyOptions(options);\n\n // Extract values only when options are not empty\n const isLoading = isEmpty ? false : options.isLoading;\n const currentTheme = isEmpty ? undefined : options.theme;\n const currentTitle = isEmpty ? undefined : getStringValue(options.title);\n const currentDescription = isEmpty\n ? undefined\n : getStringValue(options.description);\n\n useEffect(() => {\n const wasLoading = wasLoadingRef.current;\n const isFirstRender = isFirstRenderRef.current;\n const currentOptions = optionsRef.current;\n const currentIsEmpty = isEmptyOptions(currentOptions);\n\n // Handle empty options - immediately remove any existing toast\n if (currentIsEmpty) {\n clearHideTimer();\n\n if (toastIdRef.current != null) {\n removeToast(toastIdRef.current);\n toastIdRef.current = null;\n }\n\n // Reset loading gate so the next cycle requires isLoading again\n hasBeenLoadingRef.current = false;\n wasLoadingRef.current = null;\n isFirstRenderRef.current = false;\n prevThemeRef.current = undefined;\n prevTitleRef.current = undefined;\n prevDescriptionRef.current = undefined;\n return;\n }\n\n // From here, we know options is a valid ProgressToastOptions\n const { isLoading: currentIsLoading, ...currentToastData } = currentOptions;\n\n // Check if meaningful data changed (only string values)\n const themeChanged = currentTheme !== prevThemeRef.current;\n const titleChanged = currentTitle !== prevTitleRef.current;\n const descriptionChanged =\n currentDescription !== prevDescriptionRef.current;\n const dataChanged = themeChanged || titleChanged || descriptionChanged;\n\n // Helper to create a new toast (removes old one first if exists)\n const showToast = () => {\n // Remove existing toast if any\n if (toastIdRef.current != null) {\n removeToast(toastIdRef.current);\n }\n\n // Create new toast with fresh data\n // Icon auto-resolved by ToastItem based on theme/isLoading\n toastIdRef.current = addToast(\n {\n ...currentToastData,\n isLoading: currentIsLoading,\n duration: null, // Persistent - we control removal\n },\n true, // isProgress = true\n );\n };\n\n // Helper to show toast and schedule removal\n const showToastWithTimer = () => {\n showToast();\n\n // Schedule removal after result duration\n hideTimerRef.current = setTimeout(() => {\n if (toastIdRef.current != null) {\n removeToast(toastIdRef.current);\n toastIdRef.current = null;\n }\n }, RESULT_DURATION);\n };\n\n if (currentIsLoading) {\n // Starting or continuing loading\n hasBeenLoadingRef.current = true;\n clearHideTimer();\n\n if (toastIdRef.current == null) {\n // Create new toast\n showToast();\n } else if (dataChanged) {\n // Toast exists but data changed (e.g., switching back to loading from another state)\n showToast();\n }\n } else if (wasLoading === true && !currentIsLoading) {\n // Transitioning from loading to not loading\n clearHideTimer();\n\n if (currentTitle) {\n // Show result toast with timer\n showToastWithTimer();\n } else {\n // No content - just remove the loading toast immediately\n if (toastIdRef.current != null) {\n removeToast(toastIdRef.current);\n toastIdRef.current = null;\n }\n }\n } else if (\n !currentIsLoading &&\n !isFirstRender &&\n hasBeenLoadingRef.current &&\n dataChanged\n ) {\n // Not loading, data changed after a loading cycle - update or re-show toast\n if (currentTitle) {\n clearHideTimer();\n showToastWithTimer();\n } else if (toastIdRef.current != null) {\n clearHideTimer();\n removeToast(toastIdRef.current);\n toastIdRef.current = null;\n }\n }\n\n // Update refs for next comparison\n wasLoadingRef.current = currentIsLoading;\n isFirstRenderRef.current = false;\n prevThemeRef.current = currentTheme;\n prevTitleRef.current = currentTitle;\n prevDescriptionRef.current = currentDescription;\n }, [\n isEmpty,\n isLoading,\n currentTheme,\n currentTitle,\n currentDescription,\n addToast,\n removeToast,\n ]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n clearHideTimer();\n\n if (toastIdRef.current != null) {\n removeToast(toastIdRef.current);\n toastIdRef.current = null;\n }\n };\n }, [removeToast]);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useProgressToast.js","names":[],"sources":["../../../../src/components/overlays/Toast/useProgressToast.tsx"],"sourcesContent":["import { Key, useEffect, useRef } from 'react';\n\nimport { useEvent } from '../../../_internal';\nimport { ItemAction } from '../../actions/ItemAction/ItemAction';\n\nimport { useToastContext } from './ToastProvider';\n\nimport type {\n ProgressToastEmpty,\n ProgressToastOptions,\n ToastData,\n} from './types';\n\nconst RESULT_DURATION = 3000;\n\n/**\n * Check if the options represent an \"empty\" value (null, undefined, false, or empty object).\n * When empty, the hook should immediately remove any existing toast.\n */\nfunction isEmptyOptions(\n options: ProgressToastOptions | ProgressToastEmpty,\n): options is ProgressToastEmpty {\n if (options == null || options === false) return true;\n if (typeof options === 'object' && Object.keys(options).length === 0)\n return true;\n return false;\n}\n\n// Get string value for comparison (only strings are compared for re-show logic)\nfunction getStringValue(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n\n/**\n * Hook to display a progress toast that persists while loading.\n *\n * @example\n * ```tsx\n * useProgressToast(\n * isLoading\n * ? { isLoading: true, title: 'Saving...', icon: <Spinner /> }\n * : { isLoading: false, title: 'Saved!', icon: <IconCheck />, theme: 'success' }\n * );\n *\n * // Or with error handling:\n * useProgressToast(\n * isLoading\n * ? { isLoading: true, title: 'Saving...', icon: <Spinner /> }\n * : isError\n * ? { isLoading: false, title: 'Error', description: errorMessage, theme: 'danger' }\n * : { isLoading: false, title: 'Saved!', theme: 'success' }\n * );\n *\n * // Pass empty value to immediately remove any existing toast:\n * useProgressToast(shouldShow ? { isLoading: true, title: 'Loading...' } : null);\n *\n * // Or call with no argument to dismiss:\n * useProgressToast();\n * ```\n */\nexport function useProgressToast(\n options?: ProgressToastOptions | ProgressToastEmpty,\n): void {\n const { addToast, removeToast, updateToast } = useToastContext();\n\n const toastIdRef = useRef<Key | null>(null);\n const wasLoadingRef = useRef<boolean | null>(null);\n const hideTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const isFirstRenderRef = useRef(true);\n const optionsRef = useRef(options);\n const hasBeenLoadingRef = useRef(false);\n const hiddenByUserRef = useRef(false);\n\n // Track previous string values for re-show comparison\n const prevThemeRef = useRef<string | undefined>(undefined);\n const prevTitleRef = useRef<string | undefined>(undefined);\n const prevDescriptionRef = useRef<string | undefined>(undefined);\n\n // Always update optionsRef to latest\n optionsRef.current = options;\n\n // Clear any pending hide timer\n const clearHideTimer = () => {\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n\n // Check if current options are empty\n const isEmpty = isEmptyOptions(options);\n\n // Extract values only when options are not empty\n const isLoading = isEmpty ? false : options.isLoading;\n const isDismissable = isEmpty ? false : !!options.isDismissable;\n const currentTheme = isEmpty ? undefined : options.theme;\n const currentTitle = isEmpty ? undefined : getStringValue(options.title);\n const currentDescription = isEmpty\n ? undefined\n : getStringValue(options.description);\n\n const handleHide = useEvent(() => {\n if (toastIdRef.current != null) {\n removeToast(toastIdRef.current);\n toastIdRef.current = null;\n }\n\n hiddenByUserRef.current = true;\n });\n\n useEffect(() => {\n const wasLoading = wasLoadingRef.current;\n const isFirstRender = isFirstRenderRef.current;\n const currentOptions = optionsRef.current;\n const currentIsEmpty = isEmptyOptions(currentOptions);\n\n // Handle empty options - immediately remove any existing toast\n if (currentIsEmpty) {\n clearHideTimer();\n\n if (toastIdRef.current != null) {\n removeToast(toastIdRef.current);\n toastIdRef.current = null;\n }\n\n // Reset loading gate so the next cycle requires isLoading again\n hasBeenLoadingRef.current = false;\n hiddenByUserRef.current = false;\n wasLoadingRef.current = null;\n isFirstRenderRef.current = false;\n prevThemeRef.current = undefined;\n prevTitleRef.current = undefined;\n prevDescriptionRef.current = undefined;\n return;\n }\n\n // From here, we know options is a valid ProgressToastOptions\n const {\n isLoading: currentIsLoading,\n isDismissable: _isDismissable,\n ...currentToastData\n } = currentOptions;\n\n // Check if meaningful data changed (only string values)\n const themeChanged = currentTheme !== prevThemeRef.current;\n const titleChanged = currentTitle !== prevTitleRef.current;\n const descriptionChanged =\n currentDescription !== prevDescriptionRef.current;\n const dataChanged = themeChanged || titleChanged || descriptionChanged;\n\n const hideAction =\n isDismissable && currentIsLoading ? (\n <ItemAction type=\"secondary\" onPress={handleHide}>\n Hide\n </ItemAction>\n ) : null;\n\n const mergedActions = hideAction ? (\n <>\n {currentToastData.actions}\n {hideAction}\n </>\n ) : (\n currentToastData.actions\n );\n\n const toastData: ToastData = {\n title: undefined,\n description: undefined,\n theme: undefined,\n icon: undefined,\n itemProps: undefined,\n ...currentToastData,\n actions: mergedActions,\n isLoading: currentIsLoading,\n duration: null,\n };\n\n // Show a new toast or update an existing one in-place (no exit/enter animation).\n const showToast = () => {\n if (toastIdRef.current != null) {\n updateToast(toastIdRef.current, toastData);\n } else {\n toastIdRef.current = addToast(toastData, true);\n }\n };\n\n // Show/update toast and schedule removal after RESULT_DURATION.\n const showToastWithTimer = () => {\n showToast();\n\n hideTimerRef.current = setTimeout(() => {\n if (toastIdRef.current != null) {\n removeToast(toastIdRef.current);\n toastIdRef.current = null;\n }\n }, RESULT_DURATION);\n };\n\n if (currentIsLoading) {\n // Starting or continuing loading\n hasBeenLoadingRef.current = true;\n clearHideTimer();\n\n if (hiddenByUserRef.current) {\n // User dismissed the loading toast; don't re-show during this loading cycle.\n } else if (toastIdRef.current == null) {\n // Create new toast\n showToast();\n } else if (dataChanged) {\n // Toast exists but data changed (e.g., switching back to loading from another state)\n showToast();\n }\n } else if (wasLoading === true && !currentIsLoading) {\n // Transitioning from loading to not loading\n hiddenByUserRef.current = false;\n clearHideTimer();\n\n if (currentTitle) {\n // Show result toast with timer\n showToastWithTimer();\n } else {\n // No content - just remove the loading toast immediately\n if (toastIdRef.current != null) {\n removeToast(toastIdRef.current);\n toastIdRef.current = null;\n }\n }\n } else if (\n !currentIsLoading &&\n !isFirstRender &&\n hasBeenLoadingRef.current &&\n dataChanged &&\n toastIdRef.current != null\n ) {\n // Not loading, data changed while toast is still visible — update it.\n if (currentTitle) {\n clearHideTimer();\n showToastWithTimer();\n } else {\n clearHideTimer();\n removeToast(toastIdRef.current);\n toastIdRef.current = null;\n }\n }\n\n // Update refs for next comparison\n wasLoadingRef.current = currentIsLoading;\n isFirstRenderRef.current = false;\n prevThemeRef.current = currentTheme;\n prevTitleRef.current = currentTitle;\n prevDescriptionRef.current = currentDescription;\n }, [\n isEmpty,\n isLoading,\n isDismissable,\n currentTheme,\n currentTitle,\n currentDescription,\n addToast,\n removeToast,\n updateToast,\n handleHide,\n ]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n clearHideTimer();\n\n if (toastIdRef.current != null) {\n removeToast(toastIdRef.current);\n toastIdRef.current = null;\n }\n };\n }, [removeToast]);\n}\n"],"mappings":"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"}
@@ -1,12 +1,12 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.117.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.119.0 | Cube Dev Team */
2
2
  import { CheckIcon } from "../../../icons/CheckIcon.js";
3
3
  import { DangerIcon } from "../../../icons/DangerIcon.js";
4
4
  import { InfoCircleIcon } from "../../../icons/InfoCircleIcon.js";
5
5
  import { WarningIcon } from "../../../icons/WarningIcon.js";
6
6
  import { useToastContext } from "../Notifications/NotificationContext.js";
7
7
  import { isValidElement, useMemo } from "react";
8
- import { isFragment } from "react-is";
9
8
  import { jsx } from "react/jsx-runtime";
9
+ import { isFragment } from "react-is";
10
10
 
11
11
  //#region src/components/overlays/Toast/useToast.tsx
12
12
  const THEME_ICONS = {
@@ -1,8 +1,6 @@
1
1
 
2
- import { Styles } from "../../../tasty/styles/types.js";
3
- import { BaseProps, ContainerStyleProps } from "../../../tasty/types.js";
4
- import "../../../tasty/index.js";
5
2
  import { PlacementAxis } from "../../../shared/index.js";
3
+ import { BaseProps, ContainerStyleProps, Styles } from "@tenphi/tasty";
6
4
  import * as react from "react";
7
5
  import { AriaTooltipProps } from "react-aria";
8
6
  import { DOMRefValue } from "@react-types/shared";
@@ -1,11 +1,9 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.117.0 | Cube Dev Team */
2
- import { extractStyles } from "../../../tasty/utils/styles.js";
3
- import { CONTAINER_STYLES } from "../../../tasty/styles/list.js";
4
- import { tasty } from "../../../tasty/tasty.js";
1
+ /** @license MIT | @cube-dev/ui-kit v0.119.0 | Cube Dev Team */
5
2
  import { useLayoutEffect as useLayoutEffect$1 } from "../../../utils/react/useLayoutEffect.js";
6
3
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
7
4
  import { mergeRefs } from "../../../utils/react/useCombinedRefs.js";
8
5
  import { TooltipContext } from "./context.js";
6
+ import { CONTAINER_STYLES, extractStyles, tasty } from "@tenphi/tasty";
9
7
  import { forwardRef, useContext, useImperativeHandle, useMemo, useRef } from "react";
10
8
  import { jsx, jsxs } from "react/jsx-runtime";
11
9
  import { useTooltip } from "react-aria";