@cube-dev/ui-kit 0.207.0 → 0.209.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 (869) hide show
  1. package/dist/CHANGELOG.md +26 -0
  2. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  3. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  4. package/dist/_internal/hooks/use-event.js +1 -1
  5. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  6. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  7. package/dist/_internal/hooks/use-sync-ref.js.map +1 -1
  8. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  9. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  10. package/dist/_internal/hooks/use-warn.js +1 -1
  11. package/dist/components/Block.js +1 -1
  12. package/dist/components/CollectionItem.d.ts +0 -2
  13. package/dist/components/CollectionItem.js +1 -1
  14. package/dist/components/CollectionItem.js.map +1 -1
  15. package/dist/components/GlobalStyles.js +1 -1
  16. package/dist/components/GlobalStyles.js.map +1 -1
  17. package/dist/components/GridProvider.js +1 -1
  18. package/dist/components/GridProvider.js.map +1 -1
  19. package/dist/components/HiddenInput.js +1 -1
  20. package/dist/components/Root.js +7 -4
  21. package/dist/components/Root.js.map +1 -1
  22. package/dist/components/actions/Action/Action.js +1 -1
  23. package/dist/components/actions/Banner/Banner.js +1 -1
  24. package/dist/components/actions/Banner/Banner.js.map +1 -1
  25. package/dist/components/actions/Button/AutoCollapseObserver.js +215 -0
  26. package/dist/components/actions/Button/AutoCollapseObserver.js.map +1 -0
  27. package/dist/components/actions/Button/Button.d.ts +38 -1
  28. package/dist/components/actions/Button/Button.js +80 -19
  29. package/dist/components/actions/Button/Button.js.map +1 -1
  30. package/dist/components/actions/Button/index.d.ts +16 -1
  31. package/dist/components/actions/Button/index.js +13 -0
  32. package/dist/components/actions/Button/index.js.map +1 -0
  33. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  34. package/dist/components/actions/ButtonGroup/ButtonGroup.js.map +1 -1
  35. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  36. package/dist/components/actions/ButtonSplit/ButtonSplit.js.map +1 -1
  37. package/dist/components/actions/ButtonSplit/context.js +1 -1
  38. package/dist/components/actions/CommandMenu/CommandMenu.d.ts +1 -1
  39. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  40. package/dist/components/actions/CommandMenu/CommandMenu.js.map +1 -1
  41. package/dist/components/actions/CommandMenu/styled.js +1 -1
  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/ItemActionsWrapper.js +2 -2
  46. package/dist/components/actions/ItemButton/ItemButton.d.ts +0 -2
  47. package/dist/components/actions/ItemButton/ItemButton.js +2 -2
  48. package/dist/components/actions/ItemButton/ItemButton.js.map +1 -1
  49. package/dist/components/actions/Link/Link.js +1 -1
  50. package/dist/components/actions/Menu/Menu.d.ts +1 -1
  51. package/dist/components/actions/Menu/Menu.js +1 -1
  52. package/dist/components/actions/Menu/Menu.js.map +1 -1
  53. package/dist/components/actions/Menu/MenuCollectionItem.js +1 -1
  54. package/dist/components/actions/Menu/MenuItem.js +2 -2
  55. package/dist/components/actions/Menu/MenuItem.js.map +1 -1
  56. package/dist/components/actions/Menu/MenuSection.js +1 -1
  57. package/dist/components/actions/Menu/MenuTrigger.js +3 -3
  58. package/dist/components/actions/Menu/MenuTrigger.js.map +1 -1
  59. package/dist/components/actions/Menu/SubMenuTrigger.js +2 -2
  60. package/dist/components/actions/Menu/SubMenuTrigger.js.map +1 -1
  61. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  62. package/dist/components/actions/Menu/context.js +1 -1
  63. package/dist/components/actions/Menu/index.d.ts +1 -1
  64. package/dist/components/actions/Menu/styled.js +1 -1
  65. package/dist/components/actions/actions-run.js +1 -1
  66. package/dist/components/actions/index.d.ts +6 -18
  67. package/dist/components/actions/use-action.js +2 -2
  68. package/dist/components/actions/use-action.js.map +1 -1
  69. package/dist/components/actions/use-anchored-menu.d.ts +0 -1
  70. package/dist/components/actions/use-anchored-menu.js +2 -2
  71. package/dist/components/actions/use-anchored-menu.js.map +1 -1
  72. package/dist/components/actions/use-context-menu.d.ts +0 -1
  73. package/dist/components/actions/use-context-menu.js +3 -3
  74. package/dist/components/actions/use-context-menu.js.map +1 -1
  75. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  76. package/dist/components/content/ActiveZone/ActiveZone.js.map +1 -1
  77. package/dist/components/content/Alert/Alert.js +1 -1
  78. package/dist/components/content/Alert/use-alert.js +1 -1
  79. package/dist/components/content/Alert/use-alert.js.map +1 -1
  80. package/dist/components/content/Avatar/Avatar.js +1 -1
  81. package/dist/components/content/Badge/Badge.d.ts +0 -1
  82. package/dist/components/content/Badge/Badge.js +1 -1
  83. package/dist/components/content/Badge/Badge.js.map +1 -1
  84. package/dist/components/content/Card/Card.js +1 -1
  85. package/dist/components/content/Content.js +1 -1
  86. package/dist/components/content/Content.js.map +1 -1
  87. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +3 -3
  88. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js.map +1 -1
  89. package/dist/components/content/CopySnippet/CopySnippet.d.ts +2 -18
  90. package/dist/components/content/CopySnippet/CopySnippet.js +2 -2
  91. package/dist/components/content/CopySnippet/CopySnippet.js.map +1 -1
  92. package/dist/components/content/Disclosure/Disclosure.d.ts +0 -1
  93. package/dist/components/content/Disclosure/Disclosure.js +2 -2
  94. package/dist/components/content/Disclosure/Disclosure.js.map +1 -1
  95. package/dist/components/content/Divider/Divider.js +1 -1
  96. package/dist/components/content/Divider/Divider.js.map +1 -1
  97. package/dist/components/content/Footer.js +1 -1
  98. package/dist/components/content/Footer.js.map +1 -1
  99. package/dist/components/content/Header.js +1 -1
  100. package/dist/components/content/Header.js.map +1 -1
  101. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  102. package/dist/components/content/HotKeys/HotKeys.js.map +1 -1
  103. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  104. package/dist/components/content/InfoBadge/InfoBadge.js.map +1 -1
  105. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  106. package/dist/components/content/InlineInput/InlineInput.js.map +1 -1
  107. package/dist/components/content/Item/Item.d.ts +1 -11
  108. package/dist/components/content/Item/Item.js +111 -115
  109. package/dist/components/content/Item/Item.js.map +1 -1
  110. package/dist/components/content/Item/ItemWithNativeLinks.js +2 -2
  111. package/dist/components/content/Item/index.d.ts +1 -1
  112. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  113. package/dist/components/content/ItemBadge/index.d.ts +1 -2
  114. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  115. package/dist/components/content/Layout/GridLayout.js +1 -1
  116. package/dist/components/content/Layout/Layout.js +1 -1
  117. package/dist/components/content/Layout/Layout.js.map +1 -1
  118. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  119. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  120. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  121. package/dist/components/content/Layout/LayoutContainer.js.map +1 -1
  122. package/dist/components/content/Layout/LayoutContent.js +1 -1
  123. package/dist/components/content/Layout/LayoutContent.js.map +1 -1
  124. package/dist/components/content/Layout/LayoutContext.js +1 -1
  125. package/dist/components/content/Layout/LayoutContext.js.map +1 -1
  126. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  127. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  128. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  129. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  130. package/dist/components/content/Layout/LayoutHeader.js.map +1 -1
  131. package/dist/components/content/Layout/LayoutPane.js +2 -2
  132. package/dist/components/content/Layout/LayoutPane.js.map +1 -1
  133. package/dist/components/content/Layout/LayoutPanel.js +4 -4
  134. package/dist/components/content/Layout/LayoutPanel.js.map +1 -1
  135. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  136. package/dist/components/content/Layout/LayoutPanelHeader.js.map +1 -1
  137. package/dist/components/content/Layout/LayoutPanelTransition.js +1 -1
  138. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  139. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  140. package/dist/components/content/Layout/index.js +1 -1
  141. package/dist/components/content/Layout/utils.js +1 -1
  142. package/dist/components/content/Paragraph.js +1 -1
  143. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  144. package/dist/components/content/Placeholder/Placeholder.js.map +1 -1
  145. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  146. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  147. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  148. package/dist/components/content/Result/Result.js +2 -2
  149. package/dist/components/content/Result/Result.js.map +1 -1
  150. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  151. package/dist/components/content/Skeleton/Skeleton.js.map +1 -1
  152. package/dist/components/content/Tag/Tag.d.ts +0 -1
  153. package/dist/components/content/Tag/Tag.js +1 -1
  154. package/dist/components/content/Tag/Tag.js.map +1 -1
  155. package/dist/components/content/Text.js +1 -1
  156. package/dist/components/content/TextItem/TextItem.js +1 -1
  157. package/dist/components/content/Title.js +1 -1
  158. package/dist/components/content/Title.js.map +1 -1
  159. package/dist/components/content/Tree/Tree.js +1 -1
  160. package/dist/components/content/Tree/Tree.js.map +1 -1
  161. package/dist/components/content/Tree/TreeNode.js +5 -5
  162. package/dist/components/content/Tree/TreeNode.js.map +1 -1
  163. package/dist/components/content/Tree/checked-keys.js +1 -1
  164. package/dist/components/content/Tree/rowId.js +1 -1
  165. package/dist/components/content/Tree/styled.js +1 -1
  166. package/dist/components/content/Tree/styled.js.map +1 -1
  167. package/dist/components/content/Tree/tree-index.js +1 -1
  168. package/dist/components/content/Tree/types.d.ts +1 -1
  169. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  170. package/dist/components/content/Tree/use-checkbox-tree.js.map +1 -1
  171. package/dist/components/content/Tree/use-load-data.js +1 -1
  172. package/dist/components/content/Tree/use-load-data.js.map +1 -1
  173. package/dist/components/content/highlightText.js +1 -1
  174. package/dist/components/content/use-auto-tooltip.js +233 -111
  175. package/dist/components/content/use-auto-tooltip.js.map +1 -1
  176. package/dist/components/data/DataTable/DataTable.js +1 -1
  177. package/dist/components/data/DataTable/DataTable.js.map +1 -1
  178. package/dist/components/data/ItemTable/ItemTable.js +1 -1
  179. package/dist/components/data/ItemTable/ItemTable.js.map +1 -1
  180. package/dist/components/data/ItemTable/ItemTableBulkBar.js +2 -2
  181. package/dist/components/data/ItemTable/ItemTableBulkBar.js.map +1 -1
  182. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  183. package/dist/components/data/ItemTable/ItemTableDragPreview.js.map +1 -1
  184. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  185. package/dist/components/data/ItemTable/ItemTableFooter.js.map +1 -1
  186. package/dist/components/data/ItemTable/ItemTableToolbar.js +2 -2
  187. package/dist/components/data/ItemTable/ItemTableToolbar.js.map +1 -1
  188. package/dist/components/data/ItemTable/item-table-sections.js +1 -1
  189. package/dist/components/data/ItemTable/use-item-table-column-widths.js +1 -1
  190. package/dist/components/data/ItemTable/use-item-table-drag-drop.js +1 -1
  191. package/dist/components/data/ItemTable/use-item-table-pagination.js +1 -1
  192. package/dist/components/data/ItemTable/use-item-table-selection.js +1 -1
  193. package/dist/components/data/ItemTable/use-item-table-sort.js +1 -1
  194. package/dist/components/data/ItemTable/use-item-table-tree-model.js +1 -1
  195. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  196. package/dist/components/data/TableBase/ColumnResizer.js.map +1 -1
  197. package/dist/components/data/TableBase/RowCollection.js +1 -1
  198. package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
  199. package/dist/components/data/TableBase/TableHeaderCell.js.map +1 -1
  200. package/dist/components/data/TableBase/TableRow.js +1 -1
  201. package/dist/components/data/TableBase/TableRow.js.map +1 -1
  202. package/dist/components/data/TableBase/TableRowLink.js +1 -1
  203. package/dist/components/data/TableBase/TableView.js +6 -6
  204. package/dist/components/data/TableBase/TableView.js.map +1 -1
  205. package/dist/components/data/TableBase/TreeGridTable.js +1 -1
  206. package/dist/components/data/TableBase/column-header.js +1 -1
  207. package/dist/components/data/TableBase/column-menu.js +1 -1
  208. package/dist/components/data/TableBase/column-menu.js.map +1 -1
  209. package/dist/components/data/TableBase/column-styles.js +1 -1
  210. package/dist/components/data/TableBase/column-tint.js +1 -1
  211. package/dist/components/data/TableBase/row-menu.js +1 -1
  212. package/dist/components/data/TableBase/styled.js +1 -1
  213. package/dist/components/data/TableBase/styled.js.map +1 -1
  214. package/dist/components/data/TableBase/table-body-sections.js +1 -1
  215. package/dist/components/data/TableBase/table-tree.js +1 -1
  216. package/dist/components/data/TableBase/types.js +1 -1
  217. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  218. package/dist/components/data/TableBase/use-cell-selection.js.map +1 -1
  219. package/dist/components/data/TableBase/use-column-menu.js +2 -2
  220. package/dist/components/data/TableBase/use-column-order.js +1 -1
  221. package/dist/components/data/TableBase/use-column-order.js.map +1 -1
  222. package/dist/components/data/TableBase/use-column-window.js +1 -1
  223. package/dist/components/data/TableBase/use-container-width.js +1 -1
  224. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  225. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  226. package/dist/components/data/TableBase/use-table-columns.js +1 -1
  227. package/dist/components/data/TableBase/use-table-search.js +1 -1
  228. package/dist/components/data/TableBase/use-table-selection.js +1 -1
  229. package/dist/components/data/TableBase/use-table-selection.js.map +1 -1
  230. package/dist/components/data/TableBase/use-table-sort.js +1 -1
  231. package/dist/components/data/TableBase/use-table-sort.js.map +1 -1
  232. package/dist/components/data/TableBase/use-table-sorts.js +1 -1
  233. package/dist/components/data/TableBase/use-table-sorts.js.map +1 -1
  234. package/dist/components/data/TableBase/use-table-storage.js +1 -1
  235. package/dist/components/data/TableBase/use-table-tooltip-refresh.js +1 -1
  236. package/dist/components/data/TableBase/use-table-tree-state.js +1 -1
  237. package/dist/components/data/TableBase/use-table-tree-state.js.map +1 -1
  238. package/dist/components/fields/Checkbox/Checkbox.d.ts +0 -1
  239. package/dist/components/fields/Checkbox/Checkbox.js +3 -3
  240. package/dist/components/fields/Checkbox/Checkbox.js.map +1 -1
  241. package/dist/components/fields/Checkbox/CheckboxGroup.d.ts +0 -1
  242. package/dist/components/fields/Checkbox/CheckboxGroup.js +3 -3
  243. package/dist/components/fields/Checkbox/CheckboxGroup.js.map +1 -1
  244. package/dist/components/fields/Checkbox/context.js +1 -1
  245. package/dist/components/fields/ColorInput/ColorInput.d.ts +0 -1
  246. package/dist/components/fields/ColorInput/ColorInput.js +1 -1
  247. package/dist/components/fields/ColorInput/ColorInput.js.map +1 -1
  248. package/dist/components/fields/ColorPicker/ColorPicker.d.ts +0 -3
  249. package/dist/components/fields/ColorPicker/ColorPicker.js +3 -3
  250. package/dist/components/fields/ColorPicker/ColorPicker.js.map +1 -1
  251. package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
  252. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.d.ts +0 -1
  253. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +2 -2
  254. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js.map +1 -1
  255. package/dist/components/fields/ComboBox/ComboBox.d.ts +0 -1
  256. package/dist/components/fields/ComboBox/ComboBox.js +6 -6
  257. package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
  258. package/dist/components/fields/ComboBox/comboBoxOptions.js +1 -1
  259. package/dist/components/fields/CommandTextArea/CommandTextArea.d.ts +1 -2
  260. package/dist/components/fields/CommandTextArea/CommandTextArea.js +2 -2
  261. package/dist/components/fields/CommandTextArea/CommandTextArea.js.map +1 -1
  262. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  263. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  264. package/dist/components/fields/DatePicker/CalendarPopover.js +1 -1
  265. package/dist/components/fields/DatePicker/DateInput.d.ts +0 -1
  266. package/dist/components/fields/DatePicker/DateInput.js +2 -2
  267. package/dist/components/fields/DatePicker/DateInput.js.map +1 -1
  268. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  269. package/dist/components/fields/DatePicker/DateInputBase.js.map +1 -1
  270. package/dist/components/fields/DatePicker/DatePicker.d.ts +0 -1
  271. package/dist/components/fields/DatePicker/DatePicker.js +2 -2
  272. package/dist/components/fields/DatePicker/DatePicker.js.map +1 -1
  273. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  274. package/dist/components/fields/DatePicker/DatePickerButton.js.map +1 -1
  275. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  276. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  277. package/dist/components/fields/DatePicker/DatePickerInput.js.map +1 -1
  278. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  279. package/dist/components/fields/DatePicker/DateRangePicker.d.ts +0 -1
  280. package/dist/components/fields/DatePicker/DateRangePicker.js +2 -2
  281. package/dist/components/fields/DatePicker/DateRangePicker.js.map +1 -1
  282. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.d.ts +0 -1
  283. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +2 -2
  284. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js.map +1 -1
  285. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  286. package/dist/components/fields/DatePicker/PeriodPicker.d.ts +0 -1
  287. package/dist/components/fields/DatePicker/PeriodPicker.js +2 -2
  288. package/dist/components/fields/DatePicker/PeriodPicker.js.map +1 -1
  289. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  290. package/dist/components/fields/DatePicker/TimeInput.d.ts +0 -1
  291. package/dist/components/fields/DatePicker/TimeInput.js +2 -2
  292. package/dist/components/fields/DatePicker/TimeInput.js.map +1 -1
  293. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  294. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  295. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  296. package/dist/components/fields/DatePicker/period.js +1 -1
  297. package/dist/components/fields/DatePicker/props.js +1 -1
  298. package/dist/components/fields/DatePicker/utils.js +1 -1
  299. package/dist/components/fields/FileInput/FileInput.d.ts +0 -1
  300. package/dist/components/fields/FileInput/FileInput.js +207 -185
  301. package/dist/components/fields/FileInput/FileInput.js.map +1 -1
  302. package/dist/components/fields/FilterListBox/FilterListBox.js +3 -3
  303. package/dist/components/fields/FilterListBox/FilterListBox.js.map +1 -1
  304. package/dist/components/fields/FilterListBox/styled.js +1 -1
  305. package/dist/components/fields/FilterPicker/FilterPicker.d.ts +0 -3
  306. package/dist/components/fields/FilterPicker/FilterPicker.js +8 -8
  307. package/dist/components/fields/FilterPicker/FilterPicker.js.map +1 -1
  308. package/dist/components/fields/FilterPicker/FilterTree.js +2 -2
  309. package/dist/components/fields/FilterPicker/FilterTree.js.map +1 -1
  310. package/dist/components/fields/Input/Input.d.ts +0 -1
  311. package/dist/components/fields/Input/Input.js +1 -1
  312. package/dist/components/fields/Input/Input.js.map +1 -1
  313. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  314. package/dist/components/fields/ListBox/ListBox.js +4 -4
  315. package/dist/components/fields/ListBox/ListBox.js.map +1 -1
  316. package/dist/components/fields/ListBox/optionId.js +1 -1
  317. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +2 -2
  318. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js.map +1 -1
  319. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  320. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  321. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js.map +1 -1
  322. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  323. package/dist/components/fields/NumberInput/NumberInput.js.map +1 -1
  324. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  325. package/dist/components/fields/PasswordInput/PasswordInput.js +2 -2
  326. package/dist/components/fields/PasswordInput/PasswordInput.js.map +1 -1
  327. package/dist/components/fields/Picker/Picker.d.ts +0 -2
  328. package/dist/components/fields/Picker/Picker.js +8 -8
  329. package/dist/components/fields/Picker/Picker.js.map +1 -1
  330. package/dist/components/fields/RadioGroup/Radio.d.ts +0 -1
  331. package/dist/components/fields/RadioGroup/Radio.js +3 -5
  332. package/dist/components/fields/RadioGroup/Radio.js.map +1 -1
  333. package/dist/components/fields/RadioGroup/RadioGroup.d.ts +0 -1
  334. package/dist/components/fields/RadioGroup/RadioGroup.js +3 -3
  335. package/dist/components/fields/RadioGroup/RadioGroup.js.map +1 -1
  336. package/dist/components/fields/RadioGroup/context.js +1 -1
  337. package/dist/components/fields/SearchComboBox/SearchComboBox.d.ts +0 -1
  338. package/dist/components/fields/SearchComboBox/SearchComboBox.js +6 -6
  339. package/dist/components/fields/SearchComboBox/SearchComboBox.js.map +1 -1
  340. package/dist/components/fields/SearchInput/SearchInput.js +2 -2
  341. package/dist/components/fields/SearchInput/SearchInput.js.map +1 -1
  342. package/dist/components/fields/Select/Select.d.ts +1 -2
  343. package/dist/components/fields/Select/Select.js +7 -7
  344. package/dist/components/fields/Select/Select.js.map +1 -1
  345. package/dist/components/fields/Slider/Gradation.js +1 -1
  346. package/dist/components/fields/Slider/HueSlider.js +1 -1
  347. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  348. package/dist/components/fields/Slider/Slider.js +1 -1
  349. package/dist/components/fields/Slider/Slider.js.map +1 -1
  350. package/dist/components/fields/Slider/SliderBase.js +2 -2
  351. package/dist/components/fields/Slider/SliderBase.js.map +1 -1
  352. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  353. package/dist/components/fields/Slider/SliderThumb.js.map +1 -1
  354. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  355. package/dist/components/fields/Slider/SliderTrack.js.map +1 -1
  356. package/dist/components/fields/Slider/elements.js +1 -1
  357. package/dist/components/fields/Slider/index.js +2 -2
  358. package/dist/components/fields/Slider/types.d.ts +0 -1
  359. package/dist/components/fields/Switch/Switch.d.ts +0 -1
  360. package/dist/components/fields/Switch/Switch.js +3 -3
  361. package/dist/components/fields/Switch/Switch.js.map +1 -1
  362. package/dist/components/fields/TagInput/TagInput.js +5 -5
  363. package/dist/components/fields/TagInput/TagInput.js.map +1 -1
  364. package/dist/components/fields/TagInput/TagList.js +1 -1
  365. package/dist/components/fields/TagInput/TagList.js.map +1 -1
  366. package/dist/components/fields/TagInput/useActiveOption.js +1 -1
  367. package/dist/components/fields/TagInput/useTagError.js +1 -1
  368. package/dist/components/fields/TextArea/TextArea.js +2 -2
  369. package/dist/components/fields/TextArea/TextArea.js.map +1 -1
  370. package/dist/components/fields/TextInput/TextInput.js +2 -2
  371. package/dist/components/fields/TextInput/TextInput.js.map +1 -1
  372. package/dist/components/fields/TextInput/TextInputBase.d.ts +0 -1
  373. package/dist/components/fields/TextInput/TextInputBase.js +3 -3
  374. package/dist/components/fields/TextInput/TextInputBase.js.map +1 -1
  375. package/dist/components/fields/TextInput/displayed-validation.js +1 -1
  376. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
  377. package/dist/components/fields/TextInput/useAutoSizeTextArea.js.map +1 -1
  378. package/dist/components/fields/TextInputMapper/TextInputMapper.d.ts +0 -1
  379. package/dist/components/fields/TextInputMapper/TextInputMapper.js +3 -3
  380. package/dist/components/fields/TextInputMapper/TextInputMapper.js.map +1 -1
  381. package/dist/components/fields/TriggerActions.js +1 -1
  382. package/dist/components/fields/color/ColorPanel.js +1 -1
  383. package/dist/components/fields/color/ColorPanel.js.map +1 -1
  384. package/dist/components/fields/color/channels.js +1 -1
  385. package/dist/components/fields/color/color.js +1 -1
  386. package/dist/components/fields/color/context.js +1 -1
  387. package/dist/components/fields/index.d.ts +2 -2
  388. package/dist/components/fields/option-origin-press.js +1 -1
  389. package/dist/components/form/FieldWrapper/FieldWrapper.js +2 -2
  390. package/dist/components/form/FieldWrapper/FieldWrapper.js.map +1 -1
  391. package/dist/components/form/FieldWrapper/field-description.js +1 -1
  392. package/dist/components/form/FieldWrapper/types.d.ts +0 -1
  393. package/dist/components/form/Form/Field.d.ts +0 -1
  394. package/dist/components/form/Form/Field.js +3 -3
  395. package/dist/components/form/Form/Field.js.map +1 -1
  396. package/dist/components/form/Form/Form.d.ts +1 -26
  397. package/dist/components/form/Form/Form.js +7 -116
  398. package/dist/components/form/Form/Form.js.map +1 -1
  399. package/dist/components/form/Form/FormContext.d.ts +30 -0
  400. package/dist/components/form/Form/FormContext.js +79 -0
  401. package/dist/components/form/Form/FormContext.js.map +1 -0
  402. package/dist/components/form/Form/FormElement.js +49 -0
  403. package/dist/components/form/Form/FormElement.js.map +1 -0
  404. package/dist/components/form/Form/ModernFormRoot.js +3 -2
  405. package/dist/components/form/Form/ModernFormRoot.js.map +1 -1
  406. package/dist/components/form/Form/ResetButton/ResetButton.js +2 -2
  407. package/dist/components/form/Form/ResetButton/ResetButton.js.map +1 -1
  408. package/dist/components/form/Form/SubmitButton/SubmitButton.js +2 -2
  409. package/dist/components/form/Form/SubmitButton/SubmitButton.js.map +1 -1
  410. package/dist/components/form/Form/SubmitError.d.ts +0 -1
  411. package/dist/components/form/Form/SubmitError.js +3 -3
  412. package/dist/components/form/Form/SubmitError.js.map +1 -1
  413. package/dist/components/form/Form/backend.js +1 -1
  414. package/dist/components/form/Form/index.d.ts +2 -1
  415. package/dist/components/form/Form/index.js +6 -5
  416. package/dist/components/form/Form/index.js.map +1 -1
  417. package/dist/components/form/Form/modern/actions.js +1 -1
  418. package/dist/components/form/Form/modern/context.js +1 -1
  419. package/dist/components/form/Form/modern/controller.js +1 -1
  420. package/dist/components/form/Form/modern/field-binding.js +1 -1
  421. package/dist/components/form/Form/modern/field.js +1 -1
  422. package/dist/components/form/Form/modern/react.js +1 -1
  423. package/dist/components/form/Form/modern/store.js +1 -1
  424. package/dist/components/form/Form/modern/validation.js +1 -1
  425. package/dist/components/form/Form/modern/values.js +1 -1
  426. package/dist/components/form/Form/reset-unbound-controls.js +1 -1
  427. package/dist/components/form/Form/use-field/types.d.ts +0 -1
  428. package/dist/components/form/Form/use-field/use-field-binding.js +2 -2
  429. package/dist/components/form/Form/use-field/use-field-props.js +4 -4
  430. package/dist/components/form/Form/use-field/use-field-props.js.map +1 -1
  431. package/dist/components/form/Form/use-field/use-field.d.ts +0 -1
  432. package/dist/components/form/Form/use-field/use-field.js +2 -2
  433. package/dist/components/form/Form/use-field/use-field.js.map +1 -1
  434. package/dist/components/form/Form/use-form.js +1 -1
  435. package/dist/components/form/Form/validation.js +1 -1
  436. package/dist/components/form/Label.d.ts +0 -1
  437. package/dist/components/form/Label.js +1 -1
  438. package/dist/components/form/Label.js.map +1 -1
  439. package/dist/components/form/field-chrome.js +1 -1
  440. package/dist/components/form/field-layout.js +1 -1
  441. package/dist/components/form/field-layout.js.map +1 -1
  442. package/dist/components/form/index.d.ts +2 -1
  443. package/dist/components/form/legacy-tooltip.js +1 -1
  444. package/dist/components/form/validation/ValidationIndicator.d.ts +0 -1
  445. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  446. package/dist/components/form/validation/ValidationIndicator.js.map +1 -1
  447. package/dist/components/form/validation/resolve-validation-props.d.ts +0 -1
  448. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  449. package/dist/components/form/validation/resolve-validation-props.js.map +1 -1
  450. package/dist/components/form/validation/use-validation-props.js +1 -1
  451. package/dist/components/form/validation/use-validation-props.js.map +1 -1
  452. package/dist/components/form/wrapper.d.ts +0 -1
  453. package/dist/components/form/wrapper.js +1 -1
  454. package/dist/components/form/wrapper.js.map +1 -1
  455. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  456. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  457. package/dist/components/layout/Flex.js +1 -1
  458. package/dist/components/layout/Flow.js +1 -1
  459. package/dist/components/layout/Grid.js +1 -1
  460. package/dist/components/layout/Panel.js +1 -1
  461. package/dist/components/layout/Prefix.js +1 -1
  462. package/dist/components/layout/Prefix.js.map +1 -1
  463. package/dist/components/layout/ResizablePanel.js +2 -2
  464. package/dist/components/layout/Space.js +1 -1
  465. package/dist/components/layout/Suffix.js +1 -1
  466. package/dist/components/layout/Suffix.js.map +1 -1
  467. package/dist/components/navigation/Pagination/Pagination.js +3 -3
  468. package/dist/components/navigation/Pagination/Pagination.js.map +1 -1
  469. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  470. package/dist/components/navigation/Pagination/use-pagination.js.map +1 -1
  471. package/dist/components/navigation/Tabs/BoardDragActiveProvider.js +1 -1
  472. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  473. package/dist/components/navigation/Tabs/TabButton.js +4 -4
  474. package/dist/components/navigation/Tabs/TabButton.js.map +1 -1
  475. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  476. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  477. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  478. package/dist/components/navigation/Tabs/TabPicker.js.map +1 -1
  479. package/dist/components/navigation/Tabs/Tabs.js +2 -2
  480. package/dist/components/navigation/Tabs/Tabs.js.map +1 -1
  481. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  482. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  483. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  484. package/dist/components/navigation/Tabs/segmented-styles.js +1 -1
  485. package/dist/components/navigation/Tabs/styled.js +1 -1
  486. package/dist/components/navigation/Tabs/styled.js.map +1 -1
  487. package/dist/components/navigation/Tabs/types.d.ts +2 -2
  488. package/dist/components/navigation/Tabs/types.js +1 -1
  489. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  490. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  491. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  492. package/dist/components/other/Calendar/Calendar.js +1 -1
  493. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  494. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  495. package/dist/components/other/Calendar/CalendarHeader.js +2 -2
  496. package/dist/components/other/Calendar/CalendarHeader.js.map +1 -1
  497. package/dist/components/other/Calendar/CalendarPanel.js +1 -1
  498. package/dist/components/other/Calendar/CalendarPanel.js.map +1 -1
  499. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  500. package/dist/components/other/Calendar/PeriodCalendar.js.map +1 -1
  501. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  502. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  503. package/dist/components/other/Calendar/styled.js +1 -1
  504. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  505. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  506. package/dist/components/overlays/AlertDialog/AlertDialog.js +2 -2
  507. package/dist/components/overlays/AlertDialog/AlertDialog.js.map +1 -1
  508. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  509. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  510. package/dist/components/overlays/AlertDialog/AlertDialogZone.js.map +1 -1
  511. package/dist/components/overlays/AlertDialog/types.d.ts +0 -1
  512. package/dist/components/overlays/Dialog/Dialog.js +2 -2
  513. package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
  514. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  515. package/dist/components/overlays/Dialog/DialogForm.js +2 -2
  516. package/dist/components/overlays/Dialog/DialogForm.js.map +1 -1
  517. package/dist/components/overlays/Dialog/DialogTrigger.d.ts +0 -1
  518. package/dist/components/overlays/Dialog/DialogTrigger.js +5 -5
  519. package/dist/components/overlays/Dialog/DialogTrigger.js.map +1 -1
  520. package/dist/components/overlays/Dialog/ModernDialogForm.js +2 -2
  521. package/dist/components/overlays/Dialog/ModernDialogForm.js.map +1 -1
  522. package/dist/components/overlays/Dialog/context.js +1 -1
  523. package/dist/components/overlays/Dialog/default-button-text.js +1 -1
  524. package/dist/components/overlays/Dialog/use-content-overflow.js +1 -1
  525. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  526. package/dist/components/overlays/Dialog/use-dialog-container.js.map +1 -1
  527. package/dist/components/overlays/Dialog/use-dialog-open-sync.js +1 -1
  528. package/dist/components/overlays/Dialog/use-dismiss-confirmation.js +1 -1
  529. package/dist/components/overlays/Dialog/use-dismiss-confirmation.js.map +1 -1
  530. package/dist/components/overlays/Dialog/use-retained-dialog-focus.js +1 -1
  531. package/dist/components/overlays/Modal/Modal.js +2 -2
  532. package/dist/components/overlays/Modal/Modal.js.map +1 -1
  533. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  534. package/dist/components/overlays/Modal/OpenTransitionContext.js.map +1 -1
  535. package/dist/components/overlays/Modal/Overlay.js +1 -1
  536. package/dist/components/overlays/Modal/Overlay.js.map +1 -1
  537. package/dist/components/overlays/Modal/Popover.js +2 -2
  538. package/dist/components/overlays/Modal/Popover.js.map +1 -1
  539. package/dist/components/overlays/Modal/Tray.js +2 -2
  540. package/dist/components/overlays/Modal/Tray.js.map +1 -1
  541. package/dist/components/overlays/Modal/Underlay.js +1 -1
  542. package/dist/components/overlays/Modal/modal-containment.js +1 -1
  543. package/dist/components/overlays/Notifications/Notification.js +1 -1
  544. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  545. package/dist/components/overlays/Notifications/NotificationAction.js.map +1 -1
  546. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  547. package/dist/components/overlays/Notifications/NotificationCard.js.map +1 -1
  548. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  549. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  550. package/dist/components/overlays/Notifications/NotificationItem.js.map +1 -1
  551. package/dist/components/overlays/Notifications/OverlayContainer.js +2 -2
  552. package/dist/components/overlays/Notifications/OverlayContainer.js.map +1 -1
  553. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  554. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  555. package/dist/components/overlays/Notifications/PersistentNotificationsList.js.map +1 -1
  556. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  557. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  558. package/dist/components/overlays/Notifications/index.js +1 -1
  559. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  560. package/dist/components/overlays/Notifications/use-notification-state.js.map +1 -1
  561. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  562. package/dist/components/overlays/Notifications/use-notifications.js.map +1 -1
  563. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  564. package/dist/components/overlays/Notifications/use-overlay-timers.js.map +1 -1
  565. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  566. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  567. package/dist/components/overlays/Notifications/use-persistent-state.js.map +1 -1
  568. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  569. package/dist/components/overlays/Notifications/use-toast-state.js.map +1 -1
  570. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  571. package/dist/components/overlays/Toast/index.js +2 -2
  572. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  573. package/dist/components/overlays/Toast/useProgressToast.js.map +1 -1
  574. package/dist/components/overlays/Toast/useToast.js +2 -2
  575. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  576. package/dist/components/overlays/Tooltip/Tooltip.js.map +1 -1
  577. package/dist/components/overlays/Tooltip/TooltipProvider.js +20 -7
  578. package/dist/components/overlays/Tooltip/TooltipProvider.js.map +1 -1
  579. package/dist/components/overlays/Tooltip/TooltipTrigger.d.ts +1 -0
  580. package/dist/components/overlays/Tooltip/TooltipTrigger.js +225 -103
  581. package/dist/components/overlays/Tooltip/TooltipTrigger.js.map +1 -1
  582. package/dist/components/overlays/Tooltip/context.js +1 -1
  583. package/dist/components/overlays/Tooltip/context.js.map +1 -1
  584. package/dist/components/overlays/Tooltip/split-trigger-props.js +1 -1
  585. package/dist/components/portal/Portal.js +1 -1
  586. package/dist/components/portal/PortalProvider.js +1 -1
  587. package/dist/components/portal/usePortal.js +1 -1
  588. package/dist/components/shared/DraggableCollection.js +1 -1
  589. package/dist/components/shared/InvalidIcon.js +1 -1
  590. package/dist/components/shared/ValidIcon.js +1 -1
  591. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  592. package/dist/components/status/LoadingAnimation/LoadingAnimation.js.map +1 -1
  593. package/dist/components/status/Spin/Cube.js +1 -1
  594. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  595. package/dist/components/status/Spin/Spin.js +1 -1
  596. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  597. package/dist/data/item-themes.js +8 -32
  598. package/dist/data/item-themes.js.map +1 -1
  599. package/dist/data/themes.js +1 -1
  600. package/dist/eslint-plugin/defaults.generated.js +1 -1
  601. package/dist/eslint-plugin/index.js +1 -1
  602. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  603. package/dist/i18n/I18nProvider.js +1 -1
  604. package/dist/i18n/createFormatter.js +1 -1
  605. package/dist/i18n/index.js +4 -4
  606. package/dist/i18n/instance.js +3 -3
  607. package/dist/i18n/locales/de-DE/uikit.js +1 -1
  608. package/dist/i18n/locales/en-US/uikit.js +1 -1
  609. package/dist/i18n/locales/es-ES/uikit.js +1 -1
  610. package/dist/i18n/locales/es-MX/uikit.js +1 -1
  611. package/dist/i18n/locales/fr-FR/uikit.js +1 -1
  612. package/dist/i18n/locales/it-IT/uikit.js +1 -1
  613. package/dist/i18n/locales/ja-JP/uikit.js +1 -1
  614. package/dist/i18n/locales/nb-NO/uikit.js +1 -1
  615. package/dist/i18n/locales/pt-BR/uikit.js +1 -1
  616. package/dist/i18n/locales/pt-PT/uikit.js +1 -1
  617. package/dist/i18n/locales/sv-SE/uikit.js +1 -1
  618. package/dist/i18n/locales/vi-VN/uikit.js +1 -1
  619. package/dist/i18n/locales.js +1 -1
  620. package/dist/i18n/namespace.js +1 -1
  621. package/dist/i18n/useFormatter.js +1 -1
  622. package/dist/i18n/useI18n.js +1 -1
  623. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  624. package/dist/icons/AdjustmentsIcon.js +1 -1
  625. package/dist/icons/AiIcon.js +1 -1
  626. package/dist/icons/AreaChartIcon.js +1 -1
  627. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  628. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  629. package/dist/icons/BackwardIcon.js +1 -1
  630. package/dist/icons/BarChartIcon.js +1 -1
  631. package/dist/icons/BellFilledIcon.js +1 -1
  632. package/dist/icons/BellIcon.js +1 -1
  633. package/dist/icons/BooleanIcon.js +1 -1
  634. package/dist/icons/CalendarEditIcon.js +1 -1
  635. package/dist/icons/CalendarIcon.js +1 -1
  636. package/dist/icons/CaretDownIcon.js +1 -1
  637. package/dist/icons/CaretUpIcon.js +1 -1
  638. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  639. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  640. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  641. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  642. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  643. package/dist/icons/ChartBarLineIcon.js +1 -1
  644. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  645. package/dist/icons/ChartBarStackedIcon.js +1 -1
  646. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  647. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  648. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  649. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  650. package/dist/icons/ChartBubbleIcon.js +1 -1
  651. package/dist/icons/ChartDonut2Icon.js +1 -1
  652. package/dist/icons/ChartFunnelIcon.js +1 -1
  653. package/dist/icons/ChartHeatmapIcon.js +1 -1
  654. package/dist/icons/ChartKPIIcon.js +1 -1
  655. package/dist/icons/ChartPie2Icon.js +1 -1
  656. package/dist/icons/ChartScatterIcon.js +1 -1
  657. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  658. package/dist/icons/CheckCircleIcon.js +1 -1
  659. package/dist/icons/CheckIcon.js +1 -1
  660. package/dist/icons/CircleFilledIcon.js +1 -1
  661. package/dist/icons/ClearIcon.js +1 -1
  662. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  663. package/dist/icons/CloseCircleIcon.js +1 -1
  664. package/dist/icons/CloseIcon.js +1 -1
  665. package/dist/icons/CodeIcon.js +1 -1
  666. package/dist/icons/ColumnTotalIcon.js +1 -1
  667. package/dist/icons/CopyIcon.js +1 -1
  668. package/dist/icons/CountIcon.js +1 -1
  669. package/dist/icons/CubeIcon.js +1 -1
  670. package/dist/icons/CubePauseIcon.js +1 -1
  671. package/dist/icons/CubePlayIcon.js +1 -1
  672. package/dist/icons/CurrencyDollarIcon.js +1 -1
  673. package/dist/icons/DangerIcon.js +1 -1
  674. package/dist/icons/DashboardIcon.js +1 -1
  675. package/dist/icons/DatabaseIcon.js +1 -1
  676. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  677. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  678. package/dist/icons/DirectionIcon.js +1 -1
  679. package/dist/icons/DonutIcon.js +1 -1
  680. package/dist/icons/DownIcon.js +1 -1
  681. package/dist/icons/EditIcon.js +1 -1
  682. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  683. package/dist/icons/ExclamationCircleIcon.js +1 -1
  684. package/dist/icons/ExclamationIcon.js +1 -1
  685. package/dist/icons/EyeIcon.js +1 -1
  686. package/dist/icons/EyeInvisibleIcon.js +1 -1
  687. package/dist/icons/FilterIcon.js +1 -1
  688. package/dist/icons/FolderFilledIcon.js +1 -1
  689. package/dist/icons/FolderIcon.js +1 -1
  690. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  691. package/dist/icons/FolderOpenIcon.js +1 -1
  692. package/dist/icons/ForwardIcon.js +1 -1
  693. package/dist/icons/GripVerticalIcon.js +1 -1
  694. package/dist/icons/HierarchyIcon.js +1 -1
  695. package/dist/icons/HierarchyOpenIcon.js +1 -1
  696. package/dist/icons/Icon.js +1 -1
  697. package/dist/icons/InfoCircleIcon.js +1 -1
  698. package/dist/icons/InfoIcon.js +1 -1
  699. package/dist/icons/KeyIcon.js +1 -1
  700. package/dist/icons/LeftIcon.js +1 -1
  701. package/dist/icons/LineChartIcon.js +1 -1
  702. package/dist/icons/LoadingIcon.js +1 -1
  703. package/dist/icons/LockFilledIcon.js +1 -1
  704. package/dist/icons/LockIcon.js +1 -1
  705. package/dist/icons/MoreIcon.js +1 -1
  706. package/dist/icons/NotAllowedIcon.js +1 -1
  707. package/dist/icons/Number123Icon.js +1 -1
  708. package/dist/icons/NumberIcon.js +1 -1
  709. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  710. package/dist/icons/PauseCircleIcon.js +1 -1
  711. package/dist/icons/PauseIcon.js +1 -1
  712. package/dist/icons/PercentageIcon.js +1 -1
  713. package/dist/icons/PieChartIcon.js +1 -1
  714. package/dist/icons/PipetteIcon.js +1 -1
  715. package/dist/icons/PlayCircleIcon.js +1 -1
  716. package/dist/icons/PlayIcon.js +1 -1
  717. package/dist/icons/PlusIcon.js +1 -1
  718. package/dist/icons/ProgressBarIcon.js +1 -1
  719. package/dist/icons/ReloadIcon.js +1 -1
  720. package/dist/icons/ReportIcon.js +1 -1
  721. package/dist/icons/ReturnIcon.js +1 -1
  722. package/dist/icons/RightIcon.js +1 -1
  723. package/dist/icons/RowTotalsIcon.js +1 -1
  724. package/dist/icons/SchemeIcon.js +1 -1
  725. package/dist/icons/SearchIcon.js +1 -1
  726. package/dist/icons/SemanticQueryIcon.js +1 -1
  727. package/dist/icons/SettingsIcon.js +1 -1
  728. package/dist/icons/ShieldFilledIcon.js +1 -1
  729. package/dist/icons/ShieldIcon.js +1 -1
  730. package/dist/icons/SlashIcon.js +1 -1
  731. package/dist/icons/SparklesIcon.js +1 -1
  732. package/dist/icons/SqlIcon.js +1 -1
  733. package/dist/icons/StatsIcon.js +1 -1
  734. package/dist/icons/StopIcon.js +1 -1
  735. package/dist/icons/StringIcon.js +1 -1
  736. package/dist/icons/SubtotalsIcon.js +1 -1
  737. package/dist/icons/SwitchIcon.js +1 -1
  738. package/dist/icons/TableIcon.js +1 -1
  739. package/dist/icons/ThumbsDownIcon.js +1 -1
  740. package/dist/icons/ThumbsUpIcon.js +1 -1
  741. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  742. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  743. package/dist/icons/ThunderboltIcon.js +1 -1
  744. package/dist/icons/TimeIcon.js +1 -1
  745. package/dist/icons/TrashIcon.js +1 -1
  746. package/dist/icons/UnlockIcon.js +1 -1
  747. package/dist/icons/UpIcon.js +1 -1
  748. package/dist/icons/UserGroupIcon.js +1 -1
  749. package/dist/icons/UserIcon.js +1 -1
  750. package/dist/icons/UserLockIcon.js +1 -1
  751. package/dist/icons/ViewIcon.js +1 -1
  752. package/dist/icons/WarningFilledIcon.js +1 -1
  753. package/dist/icons/WarningIcon.js +1 -1
  754. package/dist/icons/wrap-icon.js +1 -1
  755. package/dist/index.d.ts +29 -27
  756. package/dist/index.js +69 -69
  757. package/dist/probe/canonicalize.js +1 -1
  758. package/dist/probe/css.js +1 -1
  759. package/dist/probe/index.js +1 -1
  760. package/dist/provider.js +2 -2
  761. package/dist/providers/TrackingProvider.js +1 -1
  762. package/dist/providers/navigation-url.js +1 -1
  763. package/dist/providers/navigationAdapter.default.js +1 -1
  764. package/dist/providers/use-navigation.js +1 -1
  765. package/dist/tokens/all-tokens.js +1 -1
  766. package/dist/tokens/base.js +1 -1
  767. package/dist/tokens/color-seed.js +1 -1
  768. package/dist/tokens/color-theme.js +1 -1
  769. package/dist/tokens/colors.js +1 -1
  770. package/dist/tokens/layout.js +1 -1
  771. package/dist/tokens/lazy-styles.js +1 -1
  772. package/dist/tokens/legacy-color.js +1 -1
  773. package/dist/tokens/palette-config.js +1 -1
  774. package/dist/tokens/palette.js +23 -11
  775. package/dist/tokens/palette.js.map +1 -1
  776. package/dist/tokens/resolve.js +2 -2
  777. package/dist/tokens/shadows.js +1 -1
  778. package/dist/tokens/sizes.js +1 -1
  779. package/dist/tokens/spacing.js +1 -1
  780. package/dist/tokens/typography.js +1 -1
  781. package/dist/utils/ResizeSensor.js +1 -1
  782. package/dist/utils/colors.js +1 -1
  783. package/dist/utils/dotize.js +1 -1
  784. package/dist/utils/index.d.ts +1 -1
  785. package/dist/utils/is-dev-env.js +1 -1
  786. package/dist/utils/modules.js +1 -1
  787. package/dist/utils/promise.js +1 -1
  788. package/dist/utils/raf.js +1 -1
  789. package/dist/utils/random.js +1 -1
  790. package/dist/utils/range.js +1 -1
  791. package/dist/utils/react/RenderCache.js +1 -1
  792. package/dist/utils/react/Slots.js +1 -1
  793. package/dist/utils/react/chain.js +1 -1
  794. package/dist/utils/react/disabledProps.js +1 -1
  795. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  796. package/dist/utils/react/index.d.ts +3 -3
  797. package/dist/utils/react/index.js +13 -13
  798. package/dist/utils/react/interactions.js +1 -1
  799. package/dist/utils/react/isTextOnly.js +1 -1
  800. package/dist/utils/react/mapProps.js +1 -1
  801. package/dist/utils/react/mergeProps.js +1 -1
  802. package/dist/utils/react/nullableValue.js +1 -1
  803. package/dist/utils/react/overlayKeyPropagation.js +1 -1
  804. package/dist/utils/react/programmaticFocus.js +1 -1
  805. package/dist/utils/react/resolveIcon.js +1 -1
  806. package/dist/utils/react/sharedStore.js +1 -1
  807. package/dist/utils/react/useBufferedValue.js +1 -1
  808. package/dist/utils/react/useCombinedRefs.js +1 -1
  809. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  810. package/dist/utils/react/useEventBus.js +1 -1
  811. package/dist/utils/react/useId.js +1 -1
  812. package/dist/utils/react/useIsDarwin.js +1 -1
  813. package/dist/utils/react/useKeySymbols.js +1 -1
  814. package/dist/utils/react/useLayoutEffect.js +1 -1
  815. package/dist/utils/react/useLocalStorage.js +1 -1
  816. package/dist/utils/react/useMergeStyles.js +1 -1
  817. package/dist/utils/react/useOverlayEscapeGuard.js +1 -1
  818. package/dist/utils/react/useOverlayEscapeGuard.js.map +1 -1
  819. package/dist/utils/react/usePopoverSync.js +1 -1
  820. package/dist/utils/react/useQaProps.js +1 -1
  821. package/dist/utils/react/useScheme.js +1 -1
  822. package/dist/utils/react/useViewportSize.js +1 -1
  823. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  824. package/dist/utils/selection.js +1 -1
  825. package/dist/utils/styles.js +1 -1
  826. package/dist/utils/tree.js +1 -1
  827. package/dist/utils/warnings.js +1 -1
  828. package/dist/version.js +3 -3
  829. package/docs/Usage.md +15 -1
  830. package/docs/components/actions/Button.md +45 -0
  831. package/docs/components/actions/ButtonSplit.md +1 -1
  832. package/docs/components/fields/FileInput.md +18 -5
  833. package/docs/glaze/contrast.mdx +751 -0
  834. package/docs/glaze/exporting.mdx +635 -0
  835. package/docs/glaze/getting-started.mdx +487 -0
  836. package/docs/glaze/hdr.mdx +523 -0
  837. package/docs/glaze/methodology.mdx +979 -0
  838. package/docs/glaze/migration.md +476 -285
  839. package/docs/glaze/mixes.mdx +348 -0
  840. package/docs/glaze/okhst.mdx +692 -0
  841. package/docs/glaze/reference/color-definitions.md +552 -0
  842. package/docs/glaze/reference/color-tokens.md +421 -0
  843. package/docs/glaze/reference/configuration.md +532 -0
  844. package/docs/glaze/reference/contrast.md +279 -0
  845. package/docs/glaze/reference/index.md +225 -0
  846. package/docs/glaze/reference/output.md +714 -0
  847. package/docs/glaze/reference/palette.md +435 -0
  848. package/docs/glaze/reference/theme.md +332 -0
  849. package/docs/glaze/reference/utilities.md +646 -0
  850. package/docs/glaze/schemes.mdx +644 -0
  851. package/docs/glaze/shadows-and-glows.mdx +550 -0
  852. package/docs/tasty/ai-agents.md +1 -1
  853. package/docs/tasty/design-system.md +12 -0
  854. package/docs/tasty/dsl.md +20 -0
  855. package/docs/tasty/pipeline.md +1 -1
  856. package/package.json +5 -5
  857. package/tasty.config.generated.ts +1 -1
  858. package/dist/components/actions/index.js +0 -29
  859. package/dist/components/actions/index.js.map +0 -1
  860. package/dist/components/fields/ListBoxPopover/ListBoxPopover.d.ts +0 -4
  861. package/dist/components/fields/ListBoxPopover/index.d.ts +0 -5
  862. package/dist/components/overlays/Modal/Modal.d.ts +0 -3
  863. package/dist/components/overlays/Modal/Popover.d.ts +0 -7
  864. package/dist/components/overlays/Modal/Tray.d.ts +0 -5
  865. package/dist/components/overlays/Modal/Underlay.d.ts +0 -3
  866. package/dist/components/overlays/Modal/index.d.ts +0 -8
  867. package/docs/glaze/api.md +0 -2021
  868. package/docs/glaze/methodology.md +0 -686
  869. package/docs/glaze/okhst.md +0 -207
@@ -1 +1 @@
1
- {"version":3,"file":"NotificationAction.js","names":["createContext","Key","ReactNode","useContext","useMemo","useEvent","ItemAction","NotificationActionProps","NotificationActionInterceptorContext","NotificationDismissContextValue","dismiss","reason","restore","NotificationDismissContext","NotificationDismissProviderProps","notificationId","onDismiss","id","onRestore","children","NotificationDismissProvider","t0","$","_c","t1","t2","t3","value","t4","NotificationAction","onPress","closeOnPress","isDisabled","isDismiss","undefined","dismissCtx","actionInterceptor","result","handlePress","_c"],"sources":["../../../../src/components/overlays/Notifications/NotificationAction.tsx"],"sourcesContent":["import { createContext, Key, ReactNode, useContext, useMemo } from 'react';\n\nimport { useEvent } from '../../../_internal';\nimport { ItemAction } from '../../actions/ItemAction/ItemAction';\n\nimport type { NotificationActionProps } from './types';\n\n// ─── Notification Action Interceptor Context ─────────────────────────\n\n/**\n * Optional callback invoked BEFORE any action's onPress handler.\n * Provided by PersistentNotificationsList so the parent (e.g. popover)\n * can close itself when an action is triggered.\n */\nconst NotificationActionInterceptorContext = createContext<(() => void) | null>(\n null,\n);\n\nexport { NotificationActionInterceptorContext };\n\n// ─── Notification Dismiss Context ────────────────────────────────────\n\ninterface NotificationDismissContextValue {\n dismiss: (reason: 'action' | 'close') => void;\n restore: () => void;\n}\n\nconst NotificationDismissContext =\n createContext<NotificationDismissContextValue | null>(null);\n\nexport interface NotificationDismissProviderProps {\n notificationId: Key;\n onDismiss: (id: Key, reason: 'action' | 'close') => void;\n onRestore?: (id: Key) => void;\n children: ReactNode;\n}\n\nexport function NotificationDismissProvider({\n notificationId,\n onDismiss,\n onRestore,\n children,\n}: NotificationDismissProviderProps) {\n const dismiss = useEvent((reason: 'action' | 'close') => {\n onDismiss(notificationId, reason);\n });\n\n const restore = useEvent(() => {\n onRestore?.(notificationId);\n });\n\n const value = useMemo(() => ({ dismiss, restore }), [dismiss, restore]);\n\n return (\n <NotificationDismissContext.Provider value={value}>\n {children}\n </NotificationDismissContext.Provider>\n );\n}\n\n// ─── NotificationAction Component ────────────────────────────────────\n\n/**\n * Action button for use inside Notification components.\n * Wraps ItemAction with auto-dismiss behavior.\n *\n * - `closeOnPress` (default: true) — auto-dismisses the notification after `onPress`.\n * - An action with no `onPress` and `closeOnPress: true` acts as a dismiss-only action.\n * - `isDismiss` — marks this action as the dismiss button; when present, the default\n * \"Dismiss\" button is auto-suppressed (detected statically from the actions tree\n * by NotificationCard).\n * - Type (primary/outline/clear/etc.) is set automatically via ItemActionProvider context.\n */\nexport function NotificationAction({\n children,\n onPress,\n closeOnPress = true,\n isDisabled,\n isDismiss,\n}: NotificationActionProps) {\n const dismissCtx = useContext(NotificationDismissContext);\n const actionInterceptor = useContext(NotificationActionInterceptorContext);\n\n const handlePress = useEvent(async () => {\n actionInterceptor?.();\n\n if (closeOnPress || actionInterceptor) {\n // Dismiss immediately so the notification hides before the async action\n // completes (e.g. opening a confirmation dialog).\n // isDismiss actions use 'close' reason — the notification moves to the\n // persistent list. Regular actions use 'action' reason — the notification\n // is fully dismissed and won't reappear.\n // When an actionInterceptor is present (persistent list), always dismiss\n // regardless of closeOnPress — all actions remove the item permanently.\n dismissCtx?.dismiss(isDismiss ? 'close' : 'action');\n }\n\n const result = await onPress?.();\n\n if (result === false && (closeOnPress || actionInterceptor)) {\n // The async action signalled cancellation — restore the notification.\n dismissCtx?.restore();\n }\n });\n\n return (\n <ItemAction\n isSelected\n type=\"outline\"\n isDisabled={isDisabled}\n onPress={handlePress}\n >\n {children}\n </ItemAction>\n );\n}\n"],"mappings":";;;;;;;;;;;;AAcA,MAAMQ,uCAAuCR,cAC3C,IACF;AAWA,MAAMa,6BACJb,cAAsD,IAAI;AAS5D,SAAOoB,4BAAAC,IAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAqC,MAAA,EAAAR,gBAAAC,WAAAE,WAAAC,aAAAE;CAKT,IAAAG;CAAA,IAAAF,EAAA,OAAAP,kBAAAO,EAAA,OAAAN,WAAA;EACRQ,MAAAb,WAAA;GACvBK,UAAUD,gBAAgBJ,MAAM;EAAC;EAClCW,EAAA,KAAAP;EAAAO,EAAA,KAAAN;EAAAM,EAAA,KAAAE;CAAA,OAAAA,KAAAF,EAAA;CAFD,MAAAZ,UAAgBL,SAASmB,EAExB;CAAE,IAAAC;CAAA,IAAAH,EAAA,OAAAP,kBAAAO,EAAA,OAAAJ,WAAA;EAEsBO,WAAA;GACvBP,YAAYH,cAAc;EAAC;EAC5BO,EAAA,KAAAP;EAAAO,EAAA,KAAAJ;EAAAI,EAAA,KAAAG;CAAA,OAAAA,KAAAH,EAAA;CAFD,MAAAV,UAAgBP,SAASoB,EAExB;CAAE,IAAAC;CAAA,IAAAJ,EAAA,OAAAZ,WAAAY,EAAA,OAAAV,SAAA;EAE0Bc,KAAA;GAAAhB;GAAAE;EAAmB;EAACU,EAAA,KAAAZ;EAAAY,EAAA,KAAAV;EAAAU,EAAA,KAAAI;CAAA,OAAAA,KAAAJ,EAAA;CAAjD,MAAAK,QAA6BD;CAA2C,IAAAE;CAAA,IAAAN,EAAA,OAAAH,YAAAG,EAAA,QAAAK,OAAA;EAGtEC,KAAA,oBAAA,2BAAA,UAAA;GAA4CD;GACzCR;EACH,CAAA;EAAsCG,EAAA,KAAAH;EAAAG,EAAA,MAAAK;EAAAL,EAAA,MAAAM;CAAA,OAAAA,KAAAN,EAAA;CAAA,OAFtCM;AAEsC;;;;;;;;;;;;AAiB1C,SAAOC,mBAAAR,IAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAA4B,MAAA,EAAAJ,UAAAW,SAAAC,cAAAP,IAAAQ,YAAAC,cAAAZ;CAGjC,MAAAU,eAAAP,OAAAU,KAAAA,IAAA,OAAAV;CAIA,MAAAW,aAAmBhC,WAAWU,0BAA0B;CACxD,MAAAuB,oBAA0BjC,WAAWK,oCAAoC;CAAE,IAAAiB;CAAA,IAAAH,EAAA,OAAAc,qBAAAd,EAAA,OAAAS,gBAAAT,EAAA,OAAAa,cAAAb,EAAA,OAAAW,aAAAX,EAAA,OAAAQ,SAAA;EAE9CL,KAAA,YAAA;GAC3BW,oBAAoB;GAEpB,IAAIL,gBAAAK,mBAQFD,YAAUzB,QAAUuB,YAAA,UAAA,QAA8B;GAKpD,IAAII,MAFiBP,UAAU,MAEhB,UAAUC,gBAAAK,oBAEvBD,YAAUvB,QAAU;EACrB;EACFU,EAAA,KAAAc;EAAAd,EAAA,KAAAS;EAAAT,EAAA,KAAAa;EAAAb,EAAA,KAAAW;EAAAX,EAAA,KAAAQ;EAAAR,EAAA,KAAAG;CAAA,OAAAA,KAAAH,EAAA;CApBD,MAAAgB,cAAoBjC,SAASoB,EAoB5B;CAAE,IAAAC;CAAA,IAAAJ,EAAA,OAAAH,YAAAG,EAAA,OAAAgB,eAAAhB,EAAA,OAAAU,YAAA;EAGDN,KAAA,oBAAC,YAAD;GACE,YAAA;GACK,MAAA;GACOM;GACHM,SAAAA;GAERnB;EANQ,CAAA;EAOEG,EAAA,KAAAH;EAAAG,EAAA,KAAAgB;EAAAhB,EAAA,KAAAU;EAAAV,EAAA,KAAAI;CAAA,OAAAA,KAAAJ,EAAA;CAAA,OAPbI;AAOa"}
1
+ {"version":3,"file":"NotificationAction.js","names":["createContext","Key","ReactNode","useContext","useMemo","useEvent","ItemAction","NotificationActionProps","NotificationActionInterceptorContext","NotificationDismissContextValue","dismiss","reason","restore","NotificationDismissContext","NotificationDismissProviderProps","notificationId","onDismiss","id","onRestore","children","NotificationDismissProvider","t0","$","_c","t1","t2","t3","value","t4","NotificationAction","onPress","closeOnPress","isDisabled","isDismiss","undefined","dismissCtx","actionInterceptor","result","handlePress","_c"],"sources":["../../../../src/components/overlays/Notifications/NotificationAction.tsx"],"sourcesContent":["import { createContext, Key, ReactNode, useContext, useMemo } from 'react';\n\nimport { useEvent } from '../../../_internal/hooks/use-event';\nimport { ItemAction } from '../../actions/ItemAction/ItemAction';\n\nimport type { NotificationActionProps } from './types';\n\n// ─── Notification Action Interceptor Context ─────────────────────────\n\n/**\n * Optional callback invoked BEFORE any action's onPress handler.\n * Provided by PersistentNotificationsList so the parent (e.g. popover)\n * can close itself when an action is triggered.\n */\nconst NotificationActionInterceptorContext = createContext<(() => void) | null>(\n null,\n);\n\nexport { NotificationActionInterceptorContext };\n\n// ─── Notification Dismiss Context ────────────────────────────────────\n\ninterface NotificationDismissContextValue {\n dismiss: (reason: 'action' | 'close') => void;\n restore: () => void;\n}\n\nconst NotificationDismissContext =\n createContext<NotificationDismissContextValue | null>(null);\n\nexport interface NotificationDismissProviderProps {\n notificationId: Key;\n onDismiss: (id: Key, reason: 'action' | 'close') => void;\n onRestore?: (id: Key) => void;\n children: ReactNode;\n}\n\nexport function NotificationDismissProvider({\n notificationId,\n onDismiss,\n onRestore,\n children,\n}: NotificationDismissProviderProps) {\n const dismiss = useEvent((reason: 'action' | 'close') => {\n onDismiss(notificationId, reason);\n });\n\n const restore = useEvent(() => {\n onRestore?.(notificationId);\n });\n\n const value = useMemo(() => ({ dismiss, restore }), [dismiss, restore]);\n\n return (\n <NotificationDismissContext.Provider value={value}>\n {children}\n </NotificationDismissContext.Provider>\n );\n}\n\n// ─── NotificationAction Component ────────────────────────────────────\n\n/**\n * Action button for use inside Notification components.\n * Wraps ItemAction with auto-dismiss behavior.\n *\n * - `closeOnPress` (default: true) — auto-dismisses the notification after `onPress`.\n * - An action with no `onPress` and `closeOnPress: true` acts as a dismiss-only action.\n * - `isDismiss` — marks this action as the dismiss button; when present, the default\n * \"Dismiss\" button is auto-suppressed (detected statically from the actions tree\n * by NotificationCard).\n * - Type (primary/outline/clear/etc.) is set automatically via ItemActionProvider context.\n */\nexport function NotificationAction({\n children,\n onPress,\n closeOnPress = true,\n isDisabled,\n isDismiss,\n}: NotificationActionProps) {\n const dismissCtx = useContext(NotificationDismissContext);\n const actionInterceptor = useContext(NotificationActionInterceptorContext);\n\n const handlePress = useEvent(async () => {\n actionInterceptor?.();\n\n if (closeOnPress || actionInterceptor) {\n // Dismiss immediately so the notification hides before the async action\n // completes (e.g. opening a confirmation dialog).\n // isDismiss actions use 'close' reason — the notification moves to the\n // persistent list. Regular actions use 'action' reason — the notification\n // is fully dismissed and won't reappear.\n // When an actionInterceptor is present (persistent list), always dismiss\n // regardless of closeOnPress — all actions remove the item permanently.\n dismissCtx?.dismiss(isDismiss ? 'close' : 'action');\n }\n\n const result = await onPress?.();\n\n if (result === false && (closeOnPress || actionInterceptor)) {\n // The async action signalled cancellation — restore the notification.\n dismissCtx?.restore();\n }\n });\n\n return (\n <ItemAction\n isSelected\n type=\"outline\"\n isDisabled={isDisabled}\n onPress={handlePress}\n >\n {children}\n </ItemAction>\n );\n}\n"],"mappings":";;;;;;;;;;;;AAcA,MAAMQ,uCAAuCR,cAC3C,IACF;AAWA,MAAMa,6BACJb,cAAsD,IAAI;AAS5D,SAAOoB,4BAAAC,IAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAqC,MAAA,EAAAR,gBAAAC,WAAAE,WAAAC,aAAAE;CAKT,IAAAG;CAAA,IAAAF,EAAA,OAAAP,kBAAAO,EAAA,OAAAN,WAAA;EACRQ,MAAAb,WAAA;GACvBK,UAAUD,gBAAgBJ,MAAM;EAAC;EAClCW,EAAA,KAAAP;EAAAO,EAAA,KAAAN;EAAAM,EAAA,KAAAE;CAAA,OAAAA,KAAAF,EAAA;CAFD,MAAAZ,UAAgBL,SAASmB,EAExB;CAAE,IAAAC;CAAA,IAAAH,EAAA,OAAAP,kBAAAO,EAAA,OAAAJ,WAAA;EAEsBO,WAAA;GACvBP,YAAYH,cAAc;EAAC;EAC5BO,EAAA,KAAAP;EAAAO,EAAA,KAAAJ;EAAAI,EAAA,KAAAG;CAAA,OAAAA,KAAAH,EAAA;CAFD,MAAAV,UAAgBP,SAASoB,EAExB;CAAE,IAAAC;CAAA,IAAAJ,EAAA,OAAAZ,WAAAY,EAAA,OAAAV,SAAA;EAE0Bc,KAAA;GAAAhB;GAAAE;EAAmB;EAACU,EAAA,KAAAZ;EAAAY,EAAA,KAAAV;EAAAU,EAAA,KAAAI;CAAA,OAAAA,KAAAJ,EAAA;CAAjD,MAAAK,QAA6BD;CAA2C,IAAAE;CAAA,IAAAN,EAAA,OAAAH,YAAAG,EAAA,QAAAK,OAAA;EAGtEC,KAAA,oBAAA,2BAAA,UAAA;GAA4CD;GACzCR;EACH,CAAA;EAAsCG,EAAA,KAAAH;EAAAG,EAAA,MAAAK;EAAAL,EAAA,MAAAM;CAAA,OAAAA,KAAAN,EAAA;CAAA,OAFtCM;AAEsC;;;;;;;;;;;;AAiB1C,SAAOC,mBAAAR,IAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAA4B,MAAA,EAAAJ,UAAAW,SAAAC,cAAAP,IAAAQ,YAAAC,cAAAZ;CAGjC,MAAAU,eAAAP,OAAAU,KAAAA,IAAA,OAAAV;CAIA,MAAAW,aAAmBhC,WAAWU,0BAA0B;CACxD,MAAAuB,oBAA0BjC,WAAWK,oCAAoC;CAAE,IAAAiB;CAAA,IAAAH,EAAA,OAAAc,qBAAAd,EAAA,OAAAS,gBAAAT,EAAA,OAAAa,cAAAb,EAAA,OAAAW,aAAAX,EAAA,OAAAQ,SAAA;EAE9CL,KAAA,YAAA;GAC3BW,oBAAoB;GAEpB,IAAIL,gBAAAK,mBAQFD,YAAUzB,QAAUuB,YAAA,UAAA,QAA8B;GAKpD,IAAII,MAFiBP,UAAU,MAEhB,UAAUC,gBAAAK,oBAEvBD,YAAUvB,QAAU;EACrB;EACFU,EAAA,KAAAc;EAAAd,EAAA,KAAAS;EAAAT,EAAA,KAAAa;EAAAb,EAAA,KAAAW;EAAAX,EAAA,KAAAQ;EAAAR,EAAA,KAAAG;CAAA,OAAAA,KAAAH,EAAA;CApBD,MAAAgB,cAAoBjC,SAASoB,EAoB5B;CAAE,IAAAC;CAAA,IAAAJ,EAAA,OAAAH,YAAAG,EAAA,OAAAgB,eAAAhB,EAAA,OAAAU,YAAA;EAGDN,KAAA,oBAAC,YAAD;GACE,YAAA;GACK,MAAA;GACOM;GACHM,SAAAA;GAERnB;EANQ,CAAA;EAOEG,EAAA,KAAAH;EAAAG,EAAA,KAAAgB;EAAAhB,EAAA,KAAAU;EAAAV,EAAA,KAAAI;CAAA,OAAAA,KAAAJ,EAAA;CAAA,OAPbI;AAOa"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.207.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
2
2
  import { Block } from "../../Block.js";
3
3
  import { ItemActionProvider } from "../../actions/ItemActionContext.js";
4
4
  import { useI18n } from "../../../i18n/useI18n.js";
@@ -1 +1 @@
1
- {"version":3,"file":"NotificationCard.js","names":["tasty","isValidElement","Key","ReactNode","useI18n","ItemActionProvider","Block","Item","Flex","Space","getThemeIcon","NotificationAction","NotificationDismissProvider","DismissReason","NotificationType","StyledItem","styles","width","flat","shadow","radius","transition","Description","preset","overflowWrap","hasDismissAction","node","found","visit","n","Array","isArray","child","type","props","isDismiss","children","AutoDismissButton","$","_c","t","t0","t1","ActionsSectionProps","actions","theme","showAutoDismiss","hasDismissContext","notificationId","onDismiss","id","reason","onRestore","ActionsSection","hasDismiss","showDefaultDismiss","t2","t3","actionsContent","t4","t5","NotificationCardProps","qa","title","description","icon","isDismissable","elevated","suffix","NotificationCard","providedIcon","undefined","hasActions","descriptionContent","t6","t7","t8","border","t9","Item","_c","hasDismiss"],"sources":["../../../../src/components/overlays/Notifications/NotificationCard.tsx"],"sourcesContent":["import { tasty } from '@tenphi/tasty';\nimport { isValidElement, Key, ReactNode } from 'react';\n\nimport { useI18n } from '../../../i18n';\nimport { ItemActionProvider } from '../../actions/ItemActionContext';\nimport { Block } from '../../Block';\nimport { Item } from '../../content/Item/Item';\nimport { Flex } from '../../layout/Flex';\nimport { Space } from '../../layout/Space';\nimport { getThemeIcon } from '../Toast/useToast';\n\nimport {\n NotificationAction,\n NotificationDismissProvider,\n} from './NotificationAction';\n\nimport type { DismissReason, NotificationType } from './types';\n\n// ─── Styled Components ──────────────────────────────────────────────\n\nconst StyledItem = tasty(Item, {\n styles: {\n // Same cap as OverlayContainer's item wrapper; change both together.\n width: {\n '': 'max min((100vw - 4x), 50x)',\n flat: '100%',\n },\n shadow: {\n '': '$shadow',\n flat: false,\n },\n radius: {\n '': '1cr',\n flat: '0',\n },\n transition: 'theme, inset',\n\n // A word wider than the card, such as a URL, breaks instead of being\n // clipped. The title keeps its one-line ellipsis.\n Description: {\n preset: 't4',\n overflowWrap: 'anywhere',\n },\n },\n});\n\n// ─── Dismiss Action Detection ────────────────────────────────────────\n\n/**\n * Deterministically checks whether any `NotificationAction` with `isDismiss`\n * is present in the `actions` ReactNode tree.\n *\n * Walks the static element tree (arrays, fragments, host elements, and\n * composite wrappers via their `children` prop) instead of relying on\n * render-phase ref mutation, so suppression does not depend on sibling render\n * order or concurrent rendering timing.\n */\nfunction hasDismissAction(node: ReactNode): boolean {\n let found = false;\n\n const visit = (n: ReactNode) => {\n if (found || n == null || typeof n === 'boolean' || typeof n === 'string') {\n return;\n }\n\n if (Array.isArray(n)) {\n for (const child of n) visit(child);\n return;\n }\n\n if (isValidElement(n)) {\n if (n.type === NotificationAction && (n.props as any).isDismiss) {\n found = true;\n return;\n }\n\n // Recurse into any wrapper's children (fragments, host elements like\n // `div`, and composite wrappers like `Flex` that receive the actions as\n // children). Note: a component that creates the NotificationAction\n // internally rather than receiving it via children cannot be detected\n // statically.\n visit((n.props as any).children);\n }\n };\n\n visit(node);\n return found;\n}\n\n/**\n * Renders the default \"Dismiss\" button. Suppression is decided by the caller\n * via `hasDismissAction(actions)` — this component always renders the button.\n */\nfunction AutoDismissButton() {\n const { t } = useI18n();\n\n return (\n <NotificationAction isDismiss>\n {t('notifications.dismiss', 'Dismiss')}\n </NotificationAction>\n );\n}\n\n// ─── ActionsSection ─────────────────────────────────────────────────\n\ninterface ActionsSectionProps {\n actions?: ReactNode;\n theme?: NotificationType;\n /**\n * Whether to show the auto-appended \"Dismiss\" button.\n * Controlled by `isDismissable` on the notification.\n *\n * When false, no default \"Dismiss\" button is rendered, but actions with\n * `closeOnPress` (default `true`) can still close the notification via\n * the dismiss context.\n */\n showAutoDismiss: boolean;\n /** Whether the dismiss context is available (notificationId + onDismiss present) */\n hasDismissContext: boolean;\n notificationId?: Key;\n onDismiss?: (id: Key, reason: DismissReason) => void;\n onRestore?: (id: Key) => void;\n}\n\n/**\n * Extracted sub-component for the actions area of a notification card.\n *\n * The dismiss provider is always rendered when `hasDismissContext` is true,\n * so any action with `closeOnPress` can close the notification — regardless\n * of `isDismissable`. The `showAutoDismiss` flag only controls the\n * auto-appended \"Dismiss\" button.\n */\nfunction ActionsSection({\n actions,\n theme,\n showAutoDismiss,\n hasDismissContext,\n notificationId,\n onDismiss,\n onRestore,\n}: ActionsSectionProps) {\n // Suppress the auto-appended \"Dismiss\" when any provided action is already\n // marked `isDismiss`. Determined statically from the element tree so it does\n // not depend on render order or concurrent rendering timing.\n const hasDismiss = hasDismissAction(actions);\n const showDefaultDismiss = showAutoDismiss && !hasDismiss;\n\n const actionsContent = (\n <Space placeSelf=\"end\" placeContent=\"end\" flexGrow={1}>\n {actions}\n {showDefaultDismiss && <AutoDismissButton />}\n </Space>\n );\n\n return (\n <ItemActionProvider type=\"card\" theme={theme}>\n {hasDismissContext ? (\n <NotificationDismissProvider\n notificationId={notificationId!}\n onDismiss={onDismiss!}\n onRestore={onRestore}\n >\n {actionsContent}\n </NotificationDismissProvider>\n ) : (\n actionsContent\n )}\n </ItemActionProvider>\n );\n}\n\n// ─── NotificationCard ────────────────────────────────────────────────\n\nexport interface NotificationCardProps {\n qa?: string;\n /** Notification theme */\n theme?: NotificationType;\n /** Primary text */\n title?: ReactNode;\n /** Secondary text */\n description?: ReactNode;\n /** Custom icon override (theme default used if omitted) */\n icon?: ReactNode;\n /** Action buttons rendered below description */\n actions?: ReactNode;\n /**\n * Whether the notification shows the default dismiss UI (auto-appended\n * \"Dismiss\" button and Escape key). Default: true.\n *\n * When false, no default \"Dismiss\" button is rendered and Escape does\n * nothing, but actions with `closeOnPress` (default) can still close\n * the notification.\n */\n isDismissable?: boolean;\n /** When false the card drops its shadow (e.g. inside a list). Default: true. */\n elevated?: boolean;\n /** Notification id */\n notificationId?: Key;\n /** Called when the notification is dismissed */\n onDismiss?: (id: Key, reason: DismissReason) => void;\n /** Called when a dismissed notification should be restored (async action returned false) */\n onRestore?: (id: Key) => void;\n /** Suffix content (e.g. timestamp) */\n suffix?: ReactNode;\n}\n\n/**\n * Shared presentational card used by both overlay NotificationItem\n * and PersistentNotificationListItem.\n */\nexport function NotificationCard({\n qa = 'Notification',\n theme,\n title,\n description,\n icon: providedIcon,\n actions,\n isDismissable = true,\n elevated = true,\n notificationId,\n onDismiss,\n onRestore,\n suffix,\n}: NotificationCardProps) {\n const icon = getThemeIcon(theme, providedIcon);\n\n const hasDismissContext = notificationId != null && onDismiss != null;\n const showAutoDismiss = isDismissable && hasDismissContext;\n const hasActions = !!(actions || showAutoDismiss);\n\n const descriptionContent: ReactNode =\n description || hasActions ? (\n <Flex flow=\"row wrap\" gap=\"0.5x 1x\" placeItems=\"center stretch\">\n {description && <Block>{description}</Block>}\n {hasActions && (\n <ActionsSection\n actions={actions}\n theme={theme}\n showAutoDismiss={showAutoDismiss}\n hasDismissContext={hasDismissContext}\n notificationId={notificationId}\n onDismiss={onDismiss}\n onRestore={onRestore}\n />\n )}\n </Flex>\n ) : undefined;\n\n return (\n <StyledItem\n qa={qa}\n type=\"card\"\n theme={theme}\n icon={icon}\n description={descriptionContent}\n suffix={suffix}\n mods={{ flat: !elevated }}\n styles={!elevated ? { border: '0' } : undefined}\n >\n {title}\n </StyledItem>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"NotificationCard.js","names":["tasty","isValidElement","Key","ReactNode","useI18n","ItemActionProvider","Block","Item","Flex","Space","getThemeIcon","NotificationAction","NotificationDismissProvider","DismissReason","NotificationType","StyledItem","styles","width","flat","shadow","radius","transition","Description","preset","overflowWrap","hasDismissAction","node","found","visit","n","Array","isArray","child","type","props","isDismiss","children","AutoDismissButton","$","_c","t","t0","t1","ActionsSectionProps","actions","theme","showAutoDismiss","hasDismissContext","notificationId","onDismiss","id","reason","onRestore","ActionsSection","hasDismiss","showDefaultDismiss","t2","t3","actionsContent","t4","t5","NotificationCardProps","qa","title","description","icon","isDismissable","elevated","suffix","NotificationCard","providedIcon","undefined","hasActions","descriptionContent","t6","t7","t8","border","t9","Item","_c","hasDismiss"],"sources":["../../../../src/components/overlays/Notifications/NotificationCard.tsx"],"sourcesContent":["import { tasty } from '@tenphi/tasty';\nimport { isValidElement, Key, ReactNode } from 'react';\n\nimport { useI18n } from '../../../i18n/useI18n';\nimport { ItemActionProvider } from '../../actions/ItemActionContext';\nimport { Block } from '../../Block';\nimport { Item } from '../../content/Item/Item';\nimport { Flex } from '../../layout/Flex';\nimport { Space } from '../../layout/Space';\nimport { getThemeIcon } from '../Toast/useToast';\n\nimport {\n NotificationAction,\n NotificationDismissProvider,\n} from './NotificationAction';\n\nimport type { DismissReason, NotificationType } from './types';\n\n// ─── Styled Components ──────────────────────────────────────────────\n\nconst StyledItem = tasty(Item, {\n styles: {\n // Same cap as OverlayContainer's item wrapper; change both together.\n width: {\n '': 'max min((100vw - 4x), 50x)',\n flat: '100%',\n },\n shadow: {\n '': '$shadow',\n flat: false,\n },\n radius: {\n '': '1cr',\n flat: '0',\n },\n transition: 'theme, inset',\n\n // A word wider than the card, such as a URL, breaks instead of being\n // clipped. The title keeps its one-line ellipsis.\n Description: {\n preset: 't4',\n overflowWrap: 'anywhere',\n },\n },\n});\n\n// ─── Dismiss Action Detection ────────────────────────────────────────\n\n/**\n * Deterministically checks whether any `NotificationAction` with `isDismiss`\n * is present in the `actions` ReactNode tree.\n *\n * Walks the static element tree (arrays, fragments, host elements, and\n * composite wrappers via their `children` prop) instead of relying on\n * render-phase ref mutation, so suppression does not depend on sibling render\n * order or concurrent rendering timing.\n */\nfunction hasDismissAction(node: ReactNode): boolean {\n let found = false;\n\n const visit = (n: ReactNode) => {\n if (found || n == null || typeof n === 'boolean' || typeof n === 'string') {\n return;\n }\n\n if (Array.isArray(n)) {\n for (const child of n) visit(child);\n return;\n }\n\n if (isValidElement(n)) {\n if (n.type === NotificationAction && (n.props as any).isDismiss) {\n found = true;\n return;\n }\n\n // Recurse into any wrapper's children (fragments, host elements like\n // `div`, and composite wrappers like `Flex` that receive the actions as\n // children). Note: a component that creates the NotificationAction\n // internally rather than receiving it via children cannot be detected\n // statically.\n visit((n.props as any).children);\n }\n };\n\n visit(node);\n return found;\n}\n\n/**\n * Renders the default \"Dismiss\" button. Suppression is decided by the caller\n * via `hasDismissAction(actions)` — this component always renders the button.\n */\nfunction AutoDismissButton() {\n const { t } = useI18n();\n\n return (\n <NotificationAction isDismiss>\n {t('notifications.dismiss', 'Dismiss')}\n </NotificationAction>\n );\n}\n\n// ─── ActionsSection ─────────────────────────────────────────────────\n\ninterface ActionsSectionProps {\n actions?: ReactNode;\n theme?: NotificationType;\n /**\n * Whether to show the auto-appended \"Dismiss\" button.\n * Controlled by `isDismissable` on the notification.\n *\n * When false, no default \"Dismiss\" button is rendered, but actions with\n * `closeOnPress` (default `true`) can still close the notification via\n * the dismiss context.\n */\n showAutoDismiss: boolean;\n /** Whether the dismiss context is available (notificationId + onDismiss present) */\n hasDismissContext: boolean;\n notificationId?: Key;\n onDismiss?: (id: Key, reason: DismissReason) => void;\n onRestore?: (id: Key) => void;\n}\n\n/**\n * Extracted sub-component for the actions area of a notification card.\n *\n * The dismiss provider is always rendered when `hasDismissContext` is true,\n * so any action with `closeOnPress` can close the notification — regardless\n * of `isDismissable`. The `showAutoDismiss` flag only controls the\n * auto-appended \"Dismiss\" button.\n */\nfunction ActionsSection({\n actions,\n theme,\n showAutoDismiss,\n hasDismissContext,\n notificationId,\n onDismiss,\n onRestore,\n}: ActionsSectionProps) {\n // Suppress the auto-appended \"Dismiss\" when any provided action is already\n // marked `isDismiss`. Determined statically from the element tree so it does\n // not depend on render order or concurrent rendering timing.\n const hasDismiss = hasDismissAction(actions);\n const showDefaultDismiss = showAutoDismiss && !hasDismiss;\n\n const actionsContent = (\n <Space placeSelf=\"end\" placeContent=\"end\" flexGrow={1}>\n {actions}\n {showDefaultDismiss && <AutoDismissButton />}\n </Space>\n );\n\n return (\n <ItemActionProvider type=\"card\" theme={theme}>\n {hasDismissContext ? (\n <NotificationDismissProvider\n notificationId={notificationId!}\n onDismiss={onDismiss!}\n onRestore={onRestore}\n >\n {actionsContent}\n </NotificationDismissProvider>\n ) : (\n actionsContent\n )}\n </ItemActionProvider>\n );\n}\n\n// ─── NotificationCard ────────────────────────────────────────────────\n\nexport interface NotificationCardProps {\n qa?: string;\n /** Notification theme */\n theme?: NotificationType;\n /** Primary text */\n title?: ReactNode;\n /** Secondary text */\n description?: ReactNode;\n /** Custom icon override (theme default used if omitted) */\n icon?: ReactNode;\n /** Action buttons rendered below description */\n actions?: ReactNode;\n /**\n * Whether the notification shows the default dismiss UI (auto-appended\n * \"Dismiss\" button and Escape key). Default: true.\n *\n * When false, no default \"Dismiss\" button is rendered and Escape does\n * nothing, but actions with `closeOnPress` (default) can still close\n * the notification.\n */\n isDismissable?: boolean;\n /** When false the card drops its shadow (e.g. inside a list). Default: true. */\n elevated?: boolean;\n /** Notification id */\n notificationId?: Key;\n /** Called when the notification is dismissed */\n onDismiss?: (id: Key, reason: DismissReason) => void;\n /** Called when a dismissed notification should be restored (async action returned false) */\n onRestore?: (id: Key) => void;\n /** Suffix content (e.g. timestamp) */\n suffix?: ReactNode;\n}\n\n/**\n * Shared presentational card used by both overlay NotificationItem\n * and PersistentNotificationListItem.\n */\nexport function NotificationCard({\n qa = 'Notification',\n theme,\n title,\n description,\n icon: providedIcon,\n actions,\n isDismissable = true,\n elevated = true,\n notificationId,\n onDismiss,\n onRestore,\n suffix,\n}: NotificationCardProps) {\n const icon = getThemeIcon(theme, providedIcon);\n\n const hasDismissContext = notificationId != null && onDismiss != null;\n const showAutoDismiss = isDismissable && hasDismissContext;\n const hasActions = !!(actions || showAutoDismiss);\n\n const descriptionContent: ReactNode =\n description || hasActions ? (\n <Flex flow=\"row wrap\" gap=\"0.5x 1x\" placeItems=\"center stretch\">\n {description && <Block>{description}</Block>}\n {hasActions && (\n <ActionsSection\n actions={actions}\n theme={theme}\n showAutoDismiss={showAutoDismiss}\n hasDismissContext={hasDismissContext}\n notificationId={notificationId}\n onDismiss={onDismiss}\n onRestore={onRestore}\n />\n )}\n </Flex>\n ) : undefined;\n\n return (\n <StyledItem\n qa={qa}\n type=\"card\"\n theme={theme}\n icon={icon}\n description={descriptionContent}\n suffix={suffix}\n mods={{ flat: !elevated }}\n styles={!elevated ? { border: '0' } : undefined}\n >\n {title}\n </StyledItem>\n );\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.207.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
2
2
  import { createContext, useContext } from "react";
3
3
  //#region src/components/overlays/Notifications/NotificationContext.ts
4
4
  const ToastContext = createContext(null);
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.207.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { NotificationCard } from "./NotificationCard.js";
4
4
  import { c } from "react/compiler-runtime";
@@ -1 +1 @@
1
- {"version":3,"file":"NotificationItem.js","names":["tasty","Key","KeyboardEvent","useEvent","NotificationCard","DismissReason","InternalNotification","NotificationType","getAriaRole","theme","getAriaLive","NotificationItemWrapper","as","tabIndex","styles","outline","NotificationItemProps","notification","onDismiss","id","reason","onRestore","NotificationItem","t0","$","_c","title","description","icon","actions","isDismissable","t1","internalId","undefined","notificationId","t2","e","key","stopPropagation","handleKeyDown","t3","t4","t5","t6","_c"],"sources":["../../../../src/components/overlays/Notifications/NotificationItem.tsx"],"sourcesContent":["import { tasty } from '@tenphi/tasty';\nimport { Key, KeyboardEvent } from 'react';\n\nimport { useEvent } from '../../../_internal';\n\nimport { NotificationCard } from './NotificationCard';\n\nimport type {\n DismissReason,\n InternalNotification,\n NotificationType,\n} from './types';\n\n// ─── ARIA Helpers ────────────────────────────────────────────────────\n\nfunction getAriaRole(theme?: NotificationType): 'alert' | 'status' {\n if (theme === 'danger' || theme === 'warning') {\n return 'alert';\n }\n\n return 'status';\n}\n\nfunction getAriaLive(theme?: NotificationType): 'assertive' | 'polite' {\n if (theme === 'danger' || theme === 'warning') {\n return 'assertive';\n }\n\n return 'polite';\n}\n\n// ─── Styled Wrapper ──────────────────────────────────────────────────\n\n/**\n * Wrapper element for overlay notification items.\n *\n * Accessibility attributes are set as static defaults:\n * - `tabIndex={0}`: Makes the notification focusable via keyboard, allowing\n * users to Tab to it and press Escape to dismiss.\n * - `aria-atomic=\"true\"`: Ensures screen readers announce the entire notification\n * when content changes (not just the diff).\n * - `aria-relevant=\"additions text\"`: Announces when new content is added or\n * text changes, but not when elements are removed (e.g., during exit animation).\n *\n * The `role` and `aria-live` are set dynamically per-instance based on theme\n * (see `getAriaRole` and `getAriaLive` above).\n */\nconst NotificationItemWrapper = tasty({\n as: 'div',\n tabIndex: 0,\n 'aria-atomic': 'true',\n 'aria-relevant': 'additions text',\n styles: {\n outline: {\n '': 'none',\n },\n },\n});\n\n// ─── NotificationItem Component ─────────────────────────────────────\n\nexport interface NotificationItemProps {\n notification: InternalNotification;\n onDismiss: (id: Key, reason: DismissReason) => void;\n onRestore?: (id: Key) => void;\n}\n\nexport function NotificationItem({\n notification,\n onDismiss,\n onRestore,\n}: NotificationItemProps) {\n const {\n theme,\n title,\n description,\n icon,\n actions,\n isDismissable = true,\n id,\n internalId,\n } = notification;\n\n const notificationId = id ?? internalId;\n\n const handleKeyDown = useEvent((e: KeyboardEvent) => {\n if (e.key === 'Escape' && isDismissable) {\n e.stopPropagation();\n onDismiss(notificationId, 'close');\n }\n });\n\n return (\n <NotificationItemWrapper\n role={getAriaRole(theme)}\n aria-live={getAriaLive(theme)}\n onKeyDown={handleKeyDown}\n >\n <NotificationCard\n qa=\"Notification\"\n theme={theme}\n title={title}\n description={description}\n icon={icon}\n actions={actions}\n isDismissable={isDismissable}\n notificationId={notificationId}\n onDismiss={onDismiss}\n onRestore={onRestore}\n />\n </NotificationItemWrapper>\n );\n}\n"],"mappings":";;;;;;;AAeA,SAASQ,YAAYC,OAA8C;CACjE,IAAIA,UAAU,YAAYA,UAAU,WAClC,OAAO;CAGT,OAAO;AACT;AAEA,SAASC,YAAYD,OAAkD;CACrE,IAAIA,UAAU,YAAYA,UAAU,WAClC,OAAO;CAGT,OAAO;AACT;;;;;;;;;;;;;;;AAkBA,MAAME,0BAA0BX,MAAM;CACpCY,IAAI;CACJC,UAAU;CACV,eAAe;CACf,iBAAiB;CACjBC,QAAQ,EACNC,SAAS,EACP,IAAI,OACN,EACF;AACF,CAAC;AAUD,SAAOO,iBAAAC,IAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAA0B,MAAA,EAAAR,cAAAC,WAAAG,cAAAE;CAK/B,MAAA,EAAAd,OAAAiB,OAAAC,aAAAC,MAAAC,SAAAC,eAAAC,IAAAZ,IAAAa,eASIf;CAHF,MAAAa,gBAAAC,OAAAE,KAAAA,IAAA,OAAAF;CAKF,MAAAG,iBAAuBf,MAAAa;CAAiB,IAAAG;CAAA,IAAAX,EAAA,OAAAM,iBAAAN,EAAA,OAAAU,kBAAAV,EAAA,OAAAN,WAAA;EAETiB,MAAAC,MAAA;GAC7B,IAAIA,EAACC,QAAS,YAAVP,eAAmC;IACrCM,EAACE,gBAAiB;IAClBpB,UAAUgB,gBAAgB,OAAO;GAAC;EACnC;EACFV,EAAA,KAAAM;EAAAN,EAAA,KAAAU;EAAAV,EAAA,KAAAN;EAAAM,EAAA,KAAAW;CAAA,OAAAA,KAAAX,EAAA;CALD,MAAAe,gBAAsBpC,SAASgC,EAK9B;CAAE,IAAAK;CAAA,IAAAhB,EAAA,OAAAf,OAAA;EAIO+B,KAAAhC,YAAYC,KAAK;EAACe,EAAA,KAAAf;EAAAe,EAAA,KAAAgB;CAAA,OAAAA,KAAAhB,EAAA;CAAA,IAAAiB;CAAA,IAAAjB,EAAA,OAAAf,OAAA;EACbgC,KAAA/B,YAAYD,KAAK;EAACe,EAAA,KAAAf;EAAAe,EAAA,KAAAiB;CAAA,OAAAA,KAAAjB,EAAA;CAAA,IAAAkB;CAAA,IAAAlB,EAAA,OAAAK,WAAAL,EAAA,OAAAG,eAAAH,EAAA,QAAAI,QAAAJ,EAAA,QAAAM,iBAAAN,EAAA,QAAAU,kBAAAV,EAAA,QAAAN,aAAAM,EAAA,QAAAH,aAAAG,EAAA,QAAAf,SAAAe,EAAA,QAAAE,OAAA;EAG7BgB,KAAA,oBAAC,kBAAD;GACK,IAAA;GACIjC;GACAiB;GACMC;GACPC;GACGC;GACMC;GACCI;GACLhB;GACAG;EAAS,CAAA;EACpBG,EAAA,KAAAK;EAAAL,EAAA,KAAAG;EAAAH,EAAA,MAAAI;EAAAJ,EAAA,MAAAM;EAAAN,EAAA,MAAAU;EAAAV,EAAA,MAAAN;EAAAM,EAAA,MAAAH;EAAAG,EAAA,MAAAf;EAAAe,EAAA,MAAAE;EAAAF,EAAA,MAAAkB;CAAA,OAAAA,KAAAlB,EAAA;CAAA,IAAAmB;CAAA,IAAAnB,EAAA,QAAAe,iBAAAf,EAAA,QAAAgB,MAAAhB,EAAA,QAAAiB,MAAAjB,EAAA,QAAAkB,IAAA;EAhBJC,KAAA,oBAAC,yBAAD;GACQ,MAAAH;GACK,aAAAC;GACAF,WAAAA;GAEXG,UAAAA;EALsB,CAAA;EAiBElB,EAAA,MAAAe;EAAAf,EAAA,MAAAgB;EAAAhB,EAAA,MAAAiB;EAAAjB,EAAA,MAAAkB;EAAAlB,EAAA,MAAAmB;CAAA,OAAAA,KAAAnB,EAAA;CAAA,OAjB1BmB;AAiB0B"}
1
+ {"version":3,"file":"NotificationItem.js","names":["tasty","Key","KeyboardEvent","useEvent","NotificationCard","DismissReason","InternalNotification","NotificationType","getAriaRole","theme","getAriaLive","NotificationItemWrapper","as","tabIndex","styles","outline","NotificationItemProps","notification","onDismiss","id","reason","onRestore","NotificationItem","t0","$","_c","title","description","icon","actions","isDismissable","t1","internalId","undefined","notificationId","t2","e","key","stopPropagation","handleKeyDown","t3","t4","t5","t6","_c"],"sources":["../../../../src/components/overlays/Notifications/NotificationItem.tsx"],"sourcesContent":["import { tasty } from '@tenphi/tasty';\nimport { Key, KeyboardEvent } from 'react';\n\nimport { useEvent } from '../../../_internal/hooks/use-event';\n\nimport { NotificationCard } from './NotificationCard';\n\nimport type {\n DismissReason,\n InternalNotification,\n NotificationType,\n} from './types';\n\n// ─── ARIA Helpers ────────────────────────────────────────────────────\n\nfunction getAriaRole(theme?: NotificationType): 'alert' | 'status' {\n if (theme === 'danger' || theme === 'warning') {\n return 'alert';\n }\n\n return 'status';\n}\n\nfunction getAriaLive(theme?: NotificationType): 'assertive' | 'polite' {\n if (theme === 'danger' || theme === 'warning') {\n return 'assertive';\n }\n\n return 'polite';\n}\n\n// ─── Styled Wrapper ──────────────────────────────────────────────────\n\n/**\n * Wrapper element for overlay notification items.\n *\n * Accessibility attributes are set as static defaults:\n * - `tabIndex={0}`: Makes the notification focusable via keyboard, allowing\n * users to Tab to it and press Escape to dismiss.\n * - `aria-atomic=\"true\"`: Ensures screen readers announce the entire notification\n * when content changes (not just the diff).\n * - `aria-relevant=\"additions text\"`: Announces when new content is added or\n * text changes, but not when elements are removed (e.g., during exit animation).\n *\n * The `role` and `aria-live` are set dynamically per-instance based on theme\n * (see `getAriaRole` and `getAriaLive` above).\n */\nconst NotificationItemWrapper = tasty({\n as: 'div',\n tabIndex: 0,\n 'aria-atomic': 'true',\n 'aria-relevant': 'additions text',\n styles: {\n outline: {\n '': 'none',\n },\n },\n});\n\n// ─── NotificationItem Component ─────────────────────────────────────\n\nexport interface NotificationItemProps {\n notification: InternalNotification;\n onDismiss: (id: Key, reason: DismissReason) => void;\n onRestore?: (id: Key) => void;\n}\n\nexport function NotificationItem({\n notification,\n onDismiss,\n onRestore,\n}: NotificationItemProps) {\n const {\n theme,\n title,\n description,\n icon,\n actions,\n isDismissable = true,\n id,\n internalId,\n } = notification;\n\n const notificationId = id ?? internalId;\n\n const handleKeyDown = useEvent((e: KeyboardEvent) => {\n if (e.key === 'Escape' && isDismissable) {\n e.stopPropagation();\n onDismiss(notificationId, 'close');\n }\n });\n\n return (\n <NotificationItemWrapper\n role={getAriaRole(theme)}\n aria-live={getAriaLive(theme)}\n onKeyDown={handleKeyDown}\n >\n <NotificationCard\n qa=\"Notification\"\n theme={theme}\n title={title}\n description={description}\n icon={icon}\n actions={actions}\n isDismissable={isDismissable}\n notificationId={notificationId}\n onDismiss={onDismiss}\n onRestore={onRestore}\n />\n </NotificationItemWrapper>\n );\n}\n"],"mappings":";;;;;;;AAeA,SAASQ,YAAYC,OAA8C;CACjE,IAAIA,UAAU,YAAYA,UAAU,WAClC,OAAO;CAGT,OAAO;AACT;AAEA,SAASC,YAAYD,OAAkD;CACrE,IAAIA,UAAU,YAAYA,UAAU,WAClC,OAAO;CAGT,OAAO;AACT;;;;;;;;;;;;;;;AAkBA,MAAME,0BAA0BX,MAAM;CACpCY,IAAI;CACJC,UAAU;CACV,eAAe;CACf,iBAAiB;CACjBC,QAAQ,EACNC,SAAS,EACP,IAAI,OACN,EACF;AACF,CAAC;AAUD,SAAOO,iBAAAC,IAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAA0B,MAAA,EAAAR,cAAAC,WAAAG,cAAAE;CAK/B,MAAA,EAAAd,OAAAiB,OAAAC,aAAAC,MAAAC,SAAAC,eAAAC,IAAAZ,IAAAa,eASIf;CAHF,MAAAa,gBAAAC,OAAAE,KAAAA,IAAA,OAAAF;CAKF,MAAAG,iBAAuBf,MAAAa;CAAiB,IAAAG;CAAA,IAAAX,EAAA,OAAAM,iBAAAN,EAAA,OAAAU,kBAAAV,EAAA,OAAAN,WAAA;EAETiB,MAAAC,MAAA;GAC7B,IAAIA,EAACC,QAAS,YAAVP,eAAmC;IACrCM,EAACE,gBAAiB;IAClBpB,UAAUgB,gBAAgB,OAAO;GAAC;EACnC;EACFV,EAAA,KAAAM;EAAAN,EAAA,KAAAU;EAAAV,EAAA,KAAAN;EAAAM,EAAA,KAAAW;CAAA,OAAAA,KAAAX,EAAA;CALD,MAAAe,gBAAsBpC,SAASgC,EAK9B;CAAE,IAAAK;CAAA,IAAAhB,EAAA,OAAAf,OAAA;EAIO+B,KAAAhC,YAAYC,KAAK;EAACe,EAAA,KAAAf;EAAAe,EAAA,KAAAgB;CAAA,OAAAA,KAAAhB,EAAA;CAAA,IAAAiB;CAAA,IAAAjB,EAAA,OAAAf,OAAA;EACbgC,KAAA/B,YAAYD,KAAK;EAACe,EAAA,KAAAf;EAAAe,EAAA,KAAAiB;CAAA,OAAAA,KAAAjB,EAAA;CAAA,IAAAkB;CAAA,IAAAlB,EAAA,OAAAK,WAAAL,EAAA,OAAAG,eAAAH,EAAA,QAAAI,QAAAJ,EAAA,QAAAM,iBAAAN,EAAA,QAAAU,kBAAAV,EAAA,QAAAN,aAAAM,EAAA,QAAAH,aAAAG,EAAA,QAAAf,SAAAe,EAAA,QAAAE,OAAA;EAG7BgB,KAAA,oBAAC,kBAAD;GACK,IAAA;GACIjC;GACAiB;GACMC;GACPC;GACGC;GACMC;GACCI;GACLhB;GACAG;EAAS,CAAA;EACpBG,EAAA,KAAAK;EAAAL,EAAA,KAAAG;EAAAH,EAAA,MAAAI;EAAAJ,EAAA,MAAAM;EAAAN,EAAA,MAAAU;EAAAV,EAAA,MAAAN;EAAAM,EAAA,MAAAH;EAAAG,EAAA,MAAAf;EAAAe,EAAA,MAAAE;EAAAF,EAAA,MAAAkB;CAAA,OAAAA,KAAAlB,EAAA;CAAA,IAAAmB;CAAA,IAAAnB,EAAA,QAAAe,iBAAAf,EAAA,QAAAgB,MAAAhB,EAAA,QAAAiB,MAAAjB,EAAA,QAAAkB,IAAA;EAhBJC,KAAA,oBAAC,yBAAD;GACQ,MAAAH;GACK,aAAAC;GACAF,WAAAA;GAEXG,UAAAA;EALsB,CAAA;EAiBElB,EAAA,MAAAe;EAAAf,EAAA,MAAAgB;EAAAhB,EAAA,MAAAiB;EAAAjB,EAAA,MAAAkB;EAAAlB,EAAA,MAAAmB;CAAA,OAAAA,KAAAnB,EAAA;CAAA,OAjB1BmB;AAiB0B"}
@@ -1,9 +1,9 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.207.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
2
2
  import { useLayoutEffect as useLayoutEffect$1 } from "../../../utils/react/useLayoutEffect.js";
3
- import { useViewportSize } from "../../../utils/react/useViewportSize.js";
4
3
  import { useEvent } from "../../../_internal/hooks/use-event.js";
5
4
  import { DisplayTransition } from "../../helpers/DisplayTransition/DisplayTransition.js";
6
5
  import { Portal } from "../../portal/Portal.js";
6
+ import { useViewportSize } from "../../../utils/react/useViewportSize.js";
7
7
  import { ToastItem } from "../Toast/ToastItem.js";
8
8
  import { NotificationItem } from "./NotificationItem.js";
9
9
  import { c } from "react/compiler-runtime";
@@ -1 +1 @@
1
- {"version":3,"file":"OverlayContainer.js","names":["tasty","FocusEvent","Key","RefObject","useCallback","useEffect","useMemo","useRef","useState","useEvent","useLayoutEffect","useViewportSize","DisplayTransition","Portal","ToastItem","NotificationItem","InternalToast","DismissReason","InternalNotification","COLLAPSE_VISIBLE_HEIGHT","CONTAINER_OFFSET","ITEM_GAP","DEFAULT_ITEM_HEIGHT","OverlayContainerElement","styles","position","top","left","transform","zIndex","padding","height","pointerEvents","OverlayItemWrapper","isCollapsed","width","transition","isMeasured","opacity","isShown","OverlayItem","kind","data","getItemId","item","internalId","isItemExiting","isExiting","getItemCreatedAt","createdAt","ItemPositionsResult","heights","Record","settledIds","Set","positions","Map","lastPositionsRef","ReturnType","itemRefs","HTMLDivElement","createRefCallback","itemId","displayRef","el","HTMLElement","useItemPositions","visibleItems","$","_c","t0","Symbol","for","setHeights","t1","t2","t3","setSettledIds","t4","newHeights","hasChanges","hasRemovals","current","forEach","id","offsetHeight","id_0","Object","keys","has","prev","next","filter","id_1","size","t5","heightKeys","newIds","id_2","length","frame","requestAnimationFrame","prev_0","cancelAnimationFrame","t6","t7","el_0","set","delete","posMap","currentTop","id_3","height_0","t8","t9","pos","id_4","t10","CollapseStateResult","handleMouseEnter","handleMouseMove","handleMouseLeave","handleFocus","handleBlur","e","containerRef","useCollapseState","canCollapse","allItems","onPauseChange","setIsCollapsed","boundsRef","refs","minX","Infinity","minY","maxX","maxY","rect","getBoundingClientRect","Math","min","max","right","bottom","DOMRect","x","y","toJSON","_temp","updateBounds","bounds","isInBounds","clientX","clientY","window","addEventListener","removeEventListener","handleMouseMove_0","e_0","contains","relatedTarget","Node","OverlayContainerProps","toasts","notifications","onToastExitComplete","onNotificationExitComplete","onNotificationDismiss","reason","onNotificationRestore","paused","OverlayContainer","items","map","_temp2","_temp3","sort","_temp4","_temp5","some","_temp6","hasNotifications","_temp7","hasActionableToasts","handleNotificationDismiss","item_0","handleExitComplete","T0","T1","t11","bb0","getItemLayout","item_1","index","total","baseTop","get","tokens","collapsedTop","isNewest","visibleIndexMap","_temp8","item_3","visibleIndex","t12","ref","layoutMods","itemProps","title","description","theme","icon","isLoading","actions","t13","item_2","index_0","t_0","t","n_0","n","a","b","_c","hasActionableToasts"],"sources":["../../../../src/components/overlays/Notifications/OverlayContainer.tsx"],"sourcesContent":["import { tasty } from '@tenphi/tasty';\nimport {\n FocusEvent,\n Key,\n RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { useEvent } from '../../../_internal';\nimport { useLayoutEffect } from '../../../utils/react/useLayoutEffect';\nimport { useViewportSize } from '../../../utils/react/useViewportSize';\nimport { DisplayTransition } from '../../helpers/DisplayTransition/DisplayTransition';\nimport { Portal } from '../../portal';\nimport { ToastItem } from '../Toast/ToastItem';\n\nimport { NotificationItem } from './NotificationItem';\n\nimport type { InternalToast } from '../Toast/types';\nimport type { DismissReason, InternalNotification } from './types';\n\n// ─── Constants ───────────────────────────────────────────────────────\n\nconst COLLAPSE_VISIBLE_HEIGHT = 10;\nconst CONTAINER_OFFSET = 16;\nconst ITEM_GAP = 8;\nconst DEFAULT_ITEM_HEIGHT = 56;\n\n// ─── Styled Elements ─────────────────────────────────────────────────\n\nconst OverlayContainerElement = tasty({\n styles: {\n position: 'fixed',\n // `$overlay-inset-top` lets an app keep the stack below a fixed bar of its own.\n top: '(2x + ($overlay-inset-top, 0px))',\n left: '50%',\n transform: 'translateX(-50%)',\n zIndex: 100,\n padding: '1x',\n height: '0',\n pointerEvents: 'none',\n },\n});\n\nconst OverlayItemWrapper = tasty({\n styles: {\n position: 'absolute',\n // A collapsed stack still peeks from the viewport's top edge, above any inset.\n top: {\n '': '$item-top',\n isCollapsed: '($item-top - ($overlay-inset-top, 0px))',\n },\n left: '50%',\n zIndex: {\n '': 'auto',\n isCollapsed: '$item-index',\n },\n transform: {\n '': 'translateX(-50%) translateY(-50%)',\n 'isMeasured & isShown': 'translateX(-50%) translateY(0)',\n },\n // Sized to its content: the container has no width of its own. Capped,\n // never floored, so a long toast wraps inside the viewport. The cap\n // matches NotificationCard's own width.\n width: 'initial max-content min((100vw - 4x), 50x)',\n pointerEvents: {\n '': 'auto',\n isCollapsed: 'none',\n },\n transition: {\n '': 'opacity $transition ease-in, transform $transition ease-in',\n isMeasured:\n 'top $transition ease-in, opacity $transition ease-in, transform $transition ease-in',\n },\n // A collapsed stack shows only its newest item, whether or not it is\n // still shown, so the collapsed states outrank `isShown`.\n opacity: {\n '': 0,\n isShown: 1,\n isCollapsed: 0,\n 'isCollapsed & isNewest': 1,\n },\n },\n});\n\n// ─── Unified Item Type ───────────────────────────────────────────────\n\ntype OverlayItem =\n | { kind: 'toast'; data: InternalToast }\n | { kind: 'notification'; data: InternalNotification };\n\nfunction getItemId(item: OverlayItem): string {\n return item.data.internalId;\n}\n\nfunction isItemExiting(item: OverlayItem): boolean {\n return item.data.isExiting === true;\n}\n\nfunction getItemCreatedAt(item: OverlayItem): number {\n return item.data.createdAt;\n}\n\n// ─── useItemPositions Hook ───────────────────────────────────────────\n\ninterface ItemPositionsResult {\n heights: Record<string, number>;\n /** Set of item IDs that have been measured AND painted at their correct position. */\n settledIds: Set<string>;\n positions: Map<string, number>;\n lastPositionsRef: ReturnType<typeof useRef<Map<string, number>>>;\n itemRefs: ReturnType<typeof useRef<Map<string, HTMLDivElement>>>;\n createRefCallback: (\n itemId: string,\n displayRef: (el: HTMLElement | null) => void,\n ) => (el: HTMLDivElement | null) => void;\n}\n\n/**\n * Manages height measurement, position calculation, and ref tracking\n * for overlay items. Extracted from OverlayContainer for readability.\n */\nfunction useItemPositions(visibleItems: OverlayItem[]): ItemPositionsResult {\n const [heights, setHeights] = useState<Record<string, number>>({});\n const itemRefs = useRef<Map<string, HTMLDivElement>>(new Map());\n const lastPositionsRef = useRef<Map<string, number>>(new Map());\n\n // Items that have been measured AND painted at their correct position.\n // Lags one frame behind `heights` so the browser paints the item at\n // its final `top` before the CSS `top` transition is enabled.\n const [settledIds, setSettledIds] = useState<Set<string>>(new Set());\n\n // Measure heights using layout effect to avoid visible layout shifts.\n // Runs every render but bails early if nothing changed.\n useLayoutEffect(() => {\n const newHeights: Record<string, number> = {};\n let hasChanges = false;\n let hasRemovals = false;\n\n itemRefs.current.forEach((el, id) => {\n const height = el.offsetHeight || DEFAULT_ITEM_HEIGHT;\n newHeights[id] = height;\n\n if (heights[id] !== height) {\n hasChanges = true;\n }\n });\n\n for (const id of Object.keys(heights)) {\n if (!itemRefs.current.has(id)) {\n hasRemovals = true;\n }\n }\n\n if (hasChanges || hasRemovals) {\n setHeights(newHeights);\n }\n\n // Drop a removed item's settled id with its height, so a restored\n // notification settles again under its old id. Pruning later, from the\n // `heights` effect, left an update pending after each removal's sync\n // commit, which React 19 counts as nested (\"Maximum update depth\").\n if (hasRemovals) {\n setSettledIds((prev) => {\n const next = new Set([...prev].filter((id) => id in newHeights));\n\n return next.size === prev.size ? prev : next;\n });\n }\n });\n\n // A wrapped toast changes height with the viewport, not only on a render.\n // Re-rendering on a viewport resize lets the measurement above restack the\n // items. A height change from content that re-renders on its own, outside\n // this container, still waits for the container's next render.\n useViewportSize();\n\n // After heights change, schedule settledIds update for the next frame.\n // This ensures the item is painted at its correct position (with no top\n // transition) before we enable the transition.\n useEffect(() => {\n const heightKeys = Object.keys(heights);\n const newIds = heightKeys.filter((id) => !settledIds.has(id));\n\n if (newIds.length === 0) return;\n\n // A removal changes `heights`, which cancels this frame, so the ids to\n // add are still current when it runs.\n const frame = requestAnimationFrame(() => {\n setSettledIds((prev) => new Set([...prev, ...newIds]));\n });\n\n return () => cancelAnimationFrame(frame);\n }, [heights]);\n\n const createRefCallback =\n (itemId: string, displayRef: (el: HTMLElement | null) => void) =>\n (el: HTMLDivElement | null) => {\n displayRef(el);\n\n if (el) {\n itemRefs.current.set(itemId, el);\n } else {\n itemRefs.current.delete(itemId);\n }\n };\n\n const positions = useMemo(() => {\n const posMap = new Map<string, number>();\n let currentTop = 0;\n\n for (const item of visibleItems) {\n const id = getItemId(item);\n posMap.set(id, currentTop);\n const height = heights[id] ?? DEFAULT_ITEM_HEIGHT;\n currentTop += height + ITEM_GAP;\n }\n\n return posMap;\n }, [visibleItems, heights]);\n\n useEffect(() => {\n positions.forEach((pos, id) => {\n lastPositionsRef.current.set(id, pos);\n });\n }, [positions]);\n\n return {\n heights,\n settledIds,\n positions,\n lastPositionsRef,\n itemRefs,\n createRefCallback,\n };\n}\n\n// ─── useCollapseState Hook ───────────────────────────────────────────\n\ninterface CollapseStateResult {\n isCollapsed: boolean;\n handleMouseEnter: () => void;\n handleMouseMove: () => void;\n handleMouseLeave: () => void;\n handleFocus: () => void;\n handleBlur: (e: FocusEvent) => void;\n containerRef: RefObject<HTMLDivElement | null>;\n}\n\n/**\n * Manages collapse/expand behavior and pause state for the overlay container.\n * Extracted from OverlayContainer for readability.\n */\nfunction useCollapseState(\n canCollapse: boolean,\n allItems: OverlayItem[],\n itemRefs: ReturnType<typeof useRef<Map<string, HTMLDivElement>>>,\n onPauseChange: (paused: boolean) => void,\n): CollapseStateResult {\n const [isCollapsed, setIsCollapsed] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const boundsRef = useRef<DOMRect | null>(null);\n\n const updateBounds = () => {\n const refs = itemRefs.current;\n\n if (!refs || refs.size === 0) {\n boundsRef.current = null;\n return;\n }\n\n let minX = Infinity,\n minY = Infinity,\n maxX = -Infinity,\n maxY = -Infinity;\n\n refs.forEach((el) => {\n const rect = el.getBoundingClientRect();\n minX = Math.min(minX, rect.left);\n minY = Math.min(minY, rect.top);\n maxX = Math.max(maxX, rect.right);\n maxY = Math.max(maxY, rect.bottom);\n });\n\n if (typeof DOMRect !== 'undefined') {\n boundsRef.current = new DOMRect(minX, minY, maxX - minX, maxY - minY);\n } else {\n boundsRef.current = {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY,\n top: minY,\n right: maxX,\n bottom: maxY,\n left: minX,\n toJSON: () => ({}),\n } as DOMRect;\n }\n };\n\n // Track mouse for collapse — expand when mouse leaves bounds\n useEffect(() => {\n if (!isCollapsed) return;\n\n const handleMouseMove = (e: MouseEvent) => {\n const bounds = boundsRef.current;\n\n if (!bounds) {\n setIsCollapsed(false);\n onPauseChange(false);\n return;\n }\n\n const padding = 20;\n const isInBounds =\n e.clientX >= bounds.left - padding &&\n e.clientX <= bounds.right + padding &&\n e.clientY >= bounds.top - padding &&\n e.clientY <= bounds.bottom + padding;\n\n if (!isInBounds) {\n setIsCollapsed(false);\n onPauseChange(false);\n }\n };\n\n window.addEventListener('mousemove', handleMouseMove);\n return () => window.removeEventListener('mousemove', handleMouseMove);\n }, [isCollapsed, onPauseChange]);\n\n // An empty container must not carry hover state into the next toast stack.\n useEffect(() => {\n updateBounds();\n\n if (allItems.length === 0) {\n setIsCollapsed(false);\n onPauseChange(false);\n }\n }, [allItems, updateBounds, onPauseChange]);\n\n const handleMouseEnter = () => {\n onPauseChange(true);\n };\n\n // Layout and enter animations can put an item under a stationary pointer\n // and fire mouseenter. Collapse only after the user moves over the stack.\n const handleMouseMove = () => {\n if (canCollapse && !isCollapsed) {\n updateBounds();\n setIsCollapsed(true);\n }\n };\n\n const handleMouseLeave = () => {\n if (!isCollapsed) {\n onPauseChange(false);\n }\n };\n\n const handleFocus = () => {\n onPauseChange(true);\n };\n\n const handleBlur = (e: FocusEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(e.relatedTarget as Node)\n ) {\n onPauseChange(false);\n }\n };\n\n return {\n isCollapsed,\n handleMouseEnter,\n handleMouseMove,\n handleMouseLeave,\n handleFocus,\n handleBlur,\n containerRef,\n };\n}\n\n// ─── Overlay Container ───────────────────────────────────────────────\n//\n// INTENTIONAL: Position calculations are done manually (absolute positioning + JS\n// height tracking) rather than relying on CSS flexbox/grid layout. This is\n// deliberate — the container mixes enter/exit animations, collapse behavior, and\n// heterogeneous item sizes (toasts vs notifications) which require per-item\n// position control. CSS-only solutions (e.g., flex column with gap) break when\n// items exit asynchronously or when collapse transforms need to be computed per-item.\n\nexport interface OverlayContainerProps {\n toasts: InternalToast[];\n notifications: InternalNotification[];\n onToastExitComplete: (internalId: string) => void;\n onNotificationExitComplete: (internalId: string) => void;\n onNotificationDismiss: (id: Key, reason: DismissReason) => void;\n onNotificationRestore: (id: Key) => void;\n onPauseChange: (paused: boolean) => void;\n}\n\nexport function OverlayContainer({\n toasts,\n notifications,\n onToastExitComplete,\n onNotificationExitComplete,\n onNotificationDismiss,\n onNotificationRestore,\n onPauseChange,\n}: OverlayContainerProps) {\n // Merge toasts and notifications into a single ordered list\n const allItems: OverlayItem[] = useMemo(() => {\n const items: OverlayItem[] = [\n ...toasts.map((t): OverlayItem => ({ kind: 'toast', data: t })),\n ...notifications.map((n): OverlayItem => ({\n kind: 'notification',\n data: n,\n })),\n ];\n\n // Sort by createdAt ascending (oldest first = bottom of stack, newest last = top)\n items.sort((a, b) => getItemCreatedAt(a) - getItemCreatedAt(b));\n\n return items;\n }, [toasts, notifications]);\n\n const visibleItems = useMemo(\n () => allItems.filter((item) => !isItemExiting(item)),\n [allItems],\n );\n const hasNotifications = notifications.some((n) => !n.isExiting);\n const hasActionableToasts = toasts.some((t) => !t.isExiting && t.actions);\n const canCollapse = !hasNotifications && !hasActionableToasts;\n\n const {\n heights,\n settledIds,\n positions,\n lastPositionsRef,\n itemRefs,\n createRefCallback,\n } = useItemPositions(visibleItems);\n\n const {\n isCollapsed,\n handleMouseEnter,\n handleMouseMove,\n handleMouseLeave,\n handleFocus,\n handleBlur,\n containerRef,\n } = useCollapseState(canCollapse, allItems, itemRefs, onPauseChange);\n\n // ─── Callbacks ─────────────────────────────────────────────────────\n\n // When the user dismisses a notification they were hovering, the element\n // is removed from the DOM so mouseLeave never fires. Explicitly unpause\n // so remaining notifications' timers resume.\n const handleNotificationDismiss = useEvent(\n (id: Key, reason: DismissReason) => {\n onNotificationDismiss(id, reason);\n onPauseChange(false);\n },\n );\n\n const handleExitComplete = useEvent((item: OverlayItem) => {\n const id = getItemId(item);\n lastPositionsRef.current?.delete(id);\n\n if (item.kind === 'toast') {\n onToastExitComplete(item.data.internalId);\n } else {\n onNotificationExitComplete(item.data.internalId);\n }\n });\n\n // A plain function (not useEvent) because this is called during render.\n // useEvent defers the ref update to useLayoutEffect, so during render\n // it would still read the previous closure's positions/heights.\n const getItemLayout = (item: OverlayItem, index: number, total: number) => {\n const id = getItemId(item);\n const baseTop = positions.get(id) ?? lastPositionsRef.current?.get(id) ?? 0;\n const height = heights[id] ?? DEFAULT_ITEM_HEIGHT;\n\n if (!isCollapsed || !canCollapse) {\n return { tokens: { '$item-top': `${baseTop}px` }, isCollapsed: false };\n }\n\n const collapsedTop = COLLAPSE_VISIBLE_HEIGHT - CONTAINER_OFFSET - height;\n\n return {\n tokens: { '$item-top': `${collapsedTop}px`, '$item-index': index },\n isCollapsed: true,\n isNewest: index === total - 1,\n };\n };\n\n // Build a visibleIndex lookup map to avoid O(n²) findIndex inside render loop\n const visibleIndexMap = new Map<string, number>(\n visibleItems.map((item, index) => [getItemId(item), index]),\n );\n\n if (allItems.length === 0) return null;\n\n return (\n <Portal>\n <OverlayContainerElement\n ref={containerRef}\n // Portaled outside any open Dialog, so React Aria would count a press\n // on a toast as a press outside it: the Dialog closed and the action\n // never ran. A top layer is never \"outside\", stays reachable by focus\n // from a Dialog's contained scope and visible to screen readers, as\n // React Aria's own toast region does.\n data-react-aria-top-layer=\"\"\n onFocus={handleFocus}\n onBlur={handleBlur}\n >\n {allItems.map((item) => {\n const itemId = getItemId(item);\n const visibleIndex = visibleIndexMap.get(itemId) ?? 0;\n const isExiting = isItemExiting(item);\n\n return (\n <DisplayTransition\n key={itemId}\n isShown={!isExiting}\n onRest={(transition) => {\n if (transition === 'exit') {\n handleExitComplete(item);\n }\n }}\n >\n {({ isShown, ref }) => {\n const { tokens, ...layoutMods } = getItemLayout(\n item,\n visibleIndex,\n visibleItems.length,\n );\n\n return (\n <OverlayItemWrapper\n ref={createRefCallback(itemId, ref)}\n mods={{\n isShown,\n isMeasured: settledIds.has(itemId),\n ...layoutMods,\n }}\n tokens={tokens}\n onMouseEnter={handleMouseEnter}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n >\n {item.kind === 'toast' ? (\n <ToastItem\n {...item.data.itemProps}\n title={item.data.title}\n description={item.data.description}\n theme={item.data.theme}\n icon={item.data.icon}\n isLoading={item.data.isLoading}\n actions={item.data.actions}\n />\n ) : (\n <NotificationItem\n notification={item.data}\n onDismiss={handleNotificationDismiss}\n onRestore={onNotificationRestore}\n />\n )}\n </OverlayItemWrapper>\n );\n }}\n </DisplayTransition>\n );\n })}\n </OverlayContainerElement>\n </Portal>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"OverlayContainer.js","names":["tasty","FocusEvent","Key","RefObject","useCallback","useEffect","useMemo","useRef","useState","useEvent","useLayoutEffect","useViewportSize","DisplayTransition","Portal","ToastItem","NotificationItem","InternalToast","DismissReason","InternalNotification","COLLAPSE_VISIBLE_HEIGHT","CONTAINER_OFFSET","ITEM_GAP","DEFAULT_ITEM_HEIGHT","OverlayContainerElement","styles","position","top","left","transform","zIndex","padding","height","pointerEvents","OverlayItemWrapper","isCollapsed","width","transition","isMeasured","opacity","isShown","OverlayItem","kind","data","getItemId","item","internalId","isItemExiting","isExiting","getItemCreatedAt","createdAt","ItemPositionsResult","heights","Record","settledIds","Set","positions","Map","lastPositionsRef","ReturnType","itemRefs","HTMLDivElement","createRefCallback","itemId","displayRef","el","HTMLElement","useItemPositions","visibleItems","$","_c","t0","Symbol","for","setHeights","t1","t2","t3","setSettledIds","t4","newHeights","hasChanges","hasRemovals","current","forEach","id","offsetHeight","id_0","Object","keys","has","prev","next","filter","id_1","size","t5","heightKeys","newIds","id_2","length","frame","requestAnimationFrame","prev_0","cancelAnimationFrame","t6","t7","el_0","set","delete","posMap","currentTop","id_3","height_0","t8","t9","pos","id_4","t10","CollapseStateResult","handleMouseEnter","handleMouseMove","handleMouseLeave","handleFocus","handleBlur","e","containerRef","useCollapseState","canCollapse","allItems","onPauseChange","setIsCollapsed","boundsRef","refs","minX","Infinity","minY","maxX","maxY","rect","getBoundingClientRect","Math","min","max","right","bottom","DOMRect","x","y","toJSON","_temp","updateBounds","bounds","isInBounds","clientX","clientY","window","addEventListener","removeEventListener","handleMouseMove_0","e_0","contains","relatedTarget","Node","OverlayContainerProps","toasts","notifications","onToastExitComplete","onNotificationExitComplete","onNotificationDismiss","reason","onNotificationRestore","paused","OverlayContainer","items","map","_temp2","_temp3","sort","_temp4","_temp5","some","_temp6","hasNotifications","_temp7","hasActionableToasts","handleNotificationDismiss","item_0","handleExitComplete","T0","T1","t11","bb0","getItemLayout","item_1","index","total","baseTop","get","tokens","collapsedTop","isNewest","visibleIndexMap","_temp8","item_3","visibleIndex","t12","ref","layoutMods","itemProps","title","description","theme","icon","isLoading","actions","t13","item_2","index_0","t_0","t","n_0","n","a","b","_c","hasActionableToasts"],"sources":["../../../../src/components/overlays/Notifications/OverlayContainer.tsx"],"sourcesContent":["import { tasty } from '@tenphi/tasty';\nimport {\n FocusEvent,\n Key,\n RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { useEvent } from '../../../_internal/hooks/use-event';\nimport { useLayoutEffect } from '../../../utils/react/useLayoutEffect';\nimport { useViewportSize } from '../../../utils/react/useViewportSize';\nimport { DisplayTransition } from '../../helpers/DisplayTransition/DisplayTransition';\nimport { Portal } from '../../portal/Portal';\nimport { ToastItem } from '../Toast/ToastItem';\n\nimport { NotificationItem } from './NotificationItem';\n\nimport type { InternalToast } from '../Toast/types';\nimport type { DismissReason, InternalNotification } from './types';\n\n// ─── Constants ───────────────────────────────────────────────────────\n\nconst COLLAPSE_VISIBLE_HEIGHT = 10;\nconst CONTAINER_OFFSET = 16;\nconst ITEM_GAP = 8;\nconst DEFAULT_ITEM_HEIGHT = 56;\n\n// ─── Styled Elements ─────────────────────────────────────────────────\n\nconst OverlayContainerElement = tasty({\n styles: {\n position: 'fixed',\n // `$overlay-inset-top` lets an app keep the stack below a fixed bar of its own.\n top: '(2x + ($overlay-inset-top, 0px))',\n left: '50%',\n transform: 'translateX(-50%)',\n zIndex: 100,\n padding: '1x',\n height: '0',\n pointerEvents: 'none',\n },\n});\n\nconst OverlayItemWrapper = tasty({\n styles: {\n position: 'absolute',\n // A collapsed stack still peeks from the viewport's top edge, above any inset.\n top: {\n '': '$item-top',\n isCollapsed: '($item-top - ($overlay-inset-top, 0px))',\n },\n left: '50%',\n zIndex: {\n '': 'auto',\n isCollapsed: '$item-index',\n },\n transform: {\n '': 'translateX(-50%) translateY(-50%)',\n 'isMeasured & isShown': 'translateX(-50%) translateY(0)',\n },\n // Sized to its content: the container has no width of its own. Capped,\n // never floored, so a long toast wraps inside the viewport. The cap\n // matches NotificationCard's own width.\n width: 'initial max-content min((100vw - 4x), 50x)',\n pointerEvents: {\n '': 'auto',\n isCollapsed: 'none',\n },\n transition: {\n '': 'opacity $transition ease-in, transform $transition ease-in',\n isMeasured:\n 'top $transition ease-in, opacity $transition ease-in, transform $transition ease-in',\n },\n // A collapsed stack shows only its newest item, whether or not it is\n // still shown, so the collapsed states outrank `isShown`.\n opacity: {\n '': 0,\n isShown: 1,\n isCollapsed: 0,\n 'isCollapsed & isNewest': 1,\n },\n },\n});\n\n// ─── Unified Item Type ───────────────────────────────────────────────\n\ntype OverlayItem =\n | { kind: 'toast'; data: InternalToast }\n | { kind: 'notification'; data: InternalNotification };\n\nfunction getItemId(item: OverlayItem): string {\n return item.data.internalId;\n}\n\nfunction isItemExiting(item: OverlayItem): boolean {\n return item.data.isExiting === true;\n}\n\nfunction getItemCreatedAt(item: OverlayItem): number {\n return item.data.createdAt;\n}\n\n// ─── useItemPositions Hook ───────────────────────────────────────────\n\ninterface ItemPositionsResult {\n heights: Record<string, number>;\n /** Set of item IDs that have been measured AND painted at their correct position. */\n settledIds: Set<string>;\n positions: Map<string, number>;\n lastPositionsRef: ReturnType<typeof useRef<Map<string, number>>>;\n itemRefs: ReturnType<typeof useRef<Map<string, HTMLDivElement>>>;\n createRefCallback: (\n itemId: string,\n displayRef: (el: HTMLElement | null) => void,\n ) => (el: HTMLDivElement | null) => void;\n}\n\n/**\n * Manages height measurement, position calculation, and ref tracking\n * for overlay items. Extracted from OverlayContainer for readability.\n */\nfunction useItemPositions(visibleItems: OverlayItem[]): ItemPositionsResult {\n const [heights, setHeights] = useState<Record<string, number>>({});\n const itemRefs = useRef<Map<string, HTMLDivElement>>(new Map());\n const lastPositionsRef = useRef<Map<string, number>>(new Map());\n\n // Items that have been measured AND painted at their correct position.\n // Lags one frame behind `heights` so the browser paints the item at\n // its final `top` before the CSS `top` transition is enabled.\n const [settledIds, setSettledIds] = useState<Set<string>>(new Set());\n\n // Measure heights using layout effect to avoid visible layout shifts.\n // Runs every render but bails early if nothing changed.\n useLayoutEffect(() => {\n const newHeights: Record<string, number> = {};\n let hasChanges = false;\n let hasRemovals = false;\n\n itemRefs.current.forEach((el, id) => {\n const height = el.offsetHeight || DEFAULT_ITEM_HEIGHT;\n newHeights[id] = height;\n\n if (heights[id] !== height) {\n hasChanges = true;\n }\n });\n\n for (const id of Object.keys(heights)) {\n if (!itemRefs.current.has(id)) {\n hasRemovals = true;\n }\n }\n\n if (hasChanges || hasRemovals) {\n setHeights(newHeights);\n }\n\n // Drop a removed item's settled id with its height, so a restored\n // notification settles again under its old id. Pruning later, from the\n // `heights` effect, left an update pending after each removal's sync\n // commit, which React 19 counts as nested (\"Maximum update depth\").\n if (hasRemovals) {\n setSettledIds((prev) => {\n const next = new Set([...prev].filter((id) => id in newHeights));\n\n return next.size === prev.size ? prev : next;\n });\n }\n });\n\n // A wrapped toast changes height with the viewport, not only on a render.\n // Re-rendering on a viewport resize lets the measurement above restack the\n // items. A height change from content that re-renders on its own, outside\n // this container, still waits for the container's next render.\n useViewportSize();\n\n // After heights change, schedule settledIds update for the next frame.\n // This ensures the item is painted at its correct position (with no top\n // transition) before we enable the transition.\n useEffect(() => {\n const heightKeys = Object.keys(heights);\n const newIds = heightKeys.filter((id) => !settledIds.has(id));\n\n if (newIds.length === 0) return;\n\n // A removal changes `heights`, which cancels this frame, so the ids to\n // add are still current when it runs.\n const frame = requestAnimationFrame(() => {\n setSettledIds((prev) => new Set([...prev, ...newIds]));\n });\n\n return () => cancelAnimationFrame(frame);\n }, [heights]);\n\n const createRefCallback =\n (itemId: string, displayRef: (el: HTMLElement | null) => void) =>\n (el: HTMLDivElement | null) => {\n displayRef(el);\n\n if (el) {\n itemRefs.current.set(itemId, el);\n } else {\n itemRefs.current.delete(itemId);\n }\n };\n\n const positions = useMemo(() => {\n const posMap = new Map<string, number>();\n let currentTop = 0;\n\n for (const item of visibleItems) {\n const id = getItemId(item);\n posMap.set(id, currentTop);\n const height = heights[id] ?? DEFAULT_ITEM_HEIGHT;\n currentTop += height + ITEM_GAP;\n }\n\n return posMap;\n }, [visibleItems, heights]);\n\n useEffect(() => {\n positions.forEach((pos, id) => {\n lastPositionsRef.current.set(id, pos);\n });\n }, [positions]);\n\n return {\n heights,\n settledIds,\n positions,\n lastPositionsRef,\n itemRefs,\n createRefCallback,\n };\n}\n\n// ─── useCollapseState Hook ───────────────────────────────────────────\n\ninterface CollapseStateResult {\n isCollapsed: boolean;\n handleMouseEnter: () => void;\n handleMouseMove: () => void;\n handleMouseLeave: () => void;\n handleFocus: () => void;\n handleBlur: (e: FocusEvent) => void;\n containerRef: RefObject<HTMLDivElement | null>;\n}\n\n/**\n * Manages collapse/expand behavior and pause state for the overlay container.\n * Extracted from OverlayContainer for readability.\n */\nfunction useCollapseState(\n canCollapse: boolean,\n allItems: OverlayItem[],\n itemRefs: ReturnType<typeof useRef<Map<string, HTMLDivElement>>>,\n onPauseChange: (paused: boolean) => void,\n): CollapseStateResult {\n const [isCollapsed, setIsCollapsed] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const boundsRef = useRef<DOMRect | null>(null);\n\n const updateBounds = () => {\n const refs = itemRefs.current;\n\n if (!refs || refs.size === 0) {\n boundsRef.current = null;\n return;\n }\n\n let minX = Infinity,\n minY = Infinity,\n maxX = -Infinity,\n maxY = -Infinity;\n\n refs.forEach((el) => {\n const rect = el.getBoundingClientRect();\n minX = Math.min(minX, rect.left);\n minY = Math.min(minY, rect.top);\n maxX = Math.max(maxX, rect.right);\n maxY = Math.max(maxY, rect.bottom);\n });\n\n if (typeof DOMRect !== 'undefined') {\n boundsRef.current = new DOMRect(minX, minY, maxX - minX, maxY - minY);\n } else {\n boundsRef.current = {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY,\n top: minY,\n right: maxX,\n bottom: maxY,\n left: minX,\n toJSON: () => ({}),\n } as DOMRect;\n }\n };\n\n // Track mouse for collapse — expand when mouse leaves bounds\n useEffect(() => {\n if (!isCollapsed) return;\n\n const handleMouseMove = (e: MouseEvent) => {\n const bounds = boundsRef.current;\n\n if (!bounds) {\n setIsCollapsed(false);\n onPauseChange(false);\n return;\n }\n\n const padding = 20;\n const isInBounds =\n e.clientX >= bounds.left - padding &&\n e.clientX <= bounds.right + padding &&\n e.clientY >= bounds.top - padding &&\n e.clientY <= bounds.bottom + padding;\n\n if (!isInBounds) {\n setIsCollapsed(false);\n onPauseChange(false);\n }\n };\n\n window.addEventListener('mousemove', handleMouseMove);\n return () => window.removeEventListener('mousemove', handleMouseMove);\n }, [isCollapsed, onPauseChange]);\n\n // An empty container must not carry hover state into the next toast stack.\n useEffect(() => {\n updateBounds();\n\n if (allItems.length === 0) {\n setIsCollapsed(false);\n onPauseChange(false);\n }\n }, [allItems, updateBounds, onPauseChange]);\n\n const handleMouseEnter = () => {\n onPauseChange(true);\n };\n\n // Layout and enter animations can put an item under a stationary pointer\n // and fire mouseenter. Collapse only after the user moves over the stack.\n const handleMouseMove = () => {\n if (canCollapse && !isCollapsed) {\n updateBounds();\n setIsCollapsed(true);\n }\n };\n\n const handleMouseLeave = () => {\n if (!isCollapsed) {\n onPauseChange(false);\n }\n };\n\n const handleFocus = () => {\n onPauseChange(true);\n };\n\n const handleBlur = (e: FocusEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(e.relatedTarget as Node)\n ) {\n onPauseChange(false);\n }\n };\n\n return {\n isCollapsed,\n handleMouseEnter,\n handleMouseMove,\n handleMouseLeave,\n handleFocus,\n handleBlur,\n containerRef,\n };\n}\n\n// ─── Overlay Container ───────────────────────────────────────────────\n//\n// INTENTIONAL: Position calculations are done manually (absolute positioning + JS\n// height tracking) rather than relying on CSS flexbox/grid layout. This is\n// deliberate — the container mixes enter/exit animations, collapse behavior, and\n// heterogeneous item sizes (toasts vs notifications) which require per-item\n// position control. CSS-only solutions (e.g., flex column with gap) break when\n// items exit asynchronously or when collapse transforms need to be computed per-item.\n\nexport interface OverlayContainerProps {\n toasts: InternalToast[];\n notifications: InternalNotification[];\n onToastExitComplete: (internalId: string) => void;\n onNotificationExitComplete: (internalId: string) => void;\n onNotificationDismiss: (id: Key, reason: DismissReason) => void;\n onNotificationRestore: (id: Key) => void;\n onPauseChange: (paused: boolean) => void;\n}\n\nexport function OverlayContainer({\n toasts,\n notifications,\n onToastExitComplete,\n onNotificationExitComplete,\n onNotificationDismiss,\n onNotificationRestore,\n onPauseChange,\n}: OverlayContainerProps) {\n // Merge toasts and notifications into a single ordered list\n const allItems: OverlayItem[] = useMemo(() => {\n const items: OverlayItem[] = [\n ...toasts.map((t): OverlayItem => ({ kind: 'toast', data: t })),\n ...notifications.map((n): OverlayItem => ({\n kind: 'notification',\n data: n,\n })),\n ];\n\n // Sort by createdAt ascending (oldest first = bottom of stack, newest last = top)\n items.sort((a, b) => getItemCreatedAt(a) - getItemCreatedAt(b));\n\n return items;\n }, [toasts, notifications]);\n\n const visibleItems = useMemo(\n () => allItems.filter((item) => !isItemExiting(item)),\n [allItems],\n );\n const hasNotifications = notifications.some((n) => !n.isExiting);\n const hasActionableToasts = toasts.some((t) => !t.isExiting && t.actions);\n const canCollapse = !hasNotifications && !hasActionableToasts;\n\n const {\n heights,\n settledIds,\n positions,\n lastPositionsRef,\n itemRefs,\n createRefCallback,\n } = useItemPositions(visibleItems);\n\n const {\n isCollapsed,\n handleMouseEnter,\n handleMouseMove,\n handleMouseLeave,\n handleFocus,\n handleBlur,\n containerRef,\n } = useCollapseState(canCollapse, allItems, itemRefs, onPauseChange);\n\n // ─── Callbacks ─────────────────────────────────────────────────────\n\n // When the user dismisses a notification they were hovering, the element\n // is removed from the DOM so mouseLeave never fires. Explicitly unpause\n // so remaining notifications' timers resume.\n const handleNotificationDismiss = useEvent(\n (id: Key, reason: DismissReason) => {\n onNotificationDismiss(id, reason);\n onPauseChange(false);\n },\n );\n\n const handleExitComplete = useEvent((item: OverlayItem) => {\n const id = getItemId(item);\n lastPositionsRef.current?.delete(id);\n\n if (item.kind === 'toast') {\n onToastExitComplete(item.data.internalId);\n } else {\n onNotificationExitComplete(item.data.internalId);\n }\n });\n\n // A plain function (not useEvent) because this is called during render.\n // useEvent defers the ref update to useLayoutEffect, so during render\n // it would still read the previous closure's positions/heights.\n const getItemLayout = (item: OverlayItem, index: number, total: number) => {\n const id = getItemId(item);\n const baseTop = positions.get(id) ?? lastPositionsRef.current?.get(id) ?? 0;\n const height = heights[id] ?? DEFAULT_ITEM_HEIGHT;\n\n if (!isCollapsed || !canCollapse) {\n return { tokens: { '$item-top': `${baseTop}px` }, isCollapsed: false };\n }\n\n const collapsedTop = COLLAPSE_VISIBLE_HEIGHT - CONTAINER_OFFSET - height;\n\n return {\n tokens: { '$item-top': `${collapsedTop}px`, '$item-index': index },\n isCollapsed: true,\n isNewest: index === total - 1,\n };\n };\n\n // Build a visibleIndex lookup map to avoid O(n²) findIndex inside render loop\n const visibleIndexMap = new Map<string, number>(\n visibleItems.map((item, index) => [getItemId(item), index]),\n );\n\n if (allItems.length === 0) return null;\n\n return (\n <Portal>\n <OverlayContainerElement\n ref={containerRef}\n // Portaled outside any open Dialog, so React Aria would count a press\n // on a toast as a press outside it: the Dialog closed and the action\n // never ran. A top layer is never \"outside\", stays reachable by focus\n // from a Dialog's contained scope and visible to screen readers, as\n // React Aria's own toast region does.\n data-react-aria-top-layer=\"\"\n onFocus={handleFocus}\n onBlur={handleBlur}\n >\n {allItems.map((item) => {\n const itemId = getItemId(item);\n const visibleIndex = visibleIndexMap.get(itemId) ?? 0;\n const isExiting = isItemExiting(item);\n\n return (\n <DisplayTransition\n key={itemId}\n isShown={!isExiting}\n onRest={(transition) => {\n if (transition === 'exit') {\n handleExitComplete(item);\n }\n }}\n >\n {({ isShown, ref }) => {\n const { tokens, ...layoutMods } = getItemLayout(\n item,\n visibleIndex,\n visibleItems.length,\n );\n\n return (\n <OverlayItemWrapper\n ref={createRefCallback(itemId, ref)}\n mods={{\n isShown,\n isMeasured: settledIds.has(itemId),\n ...layoutMods,\n }}\n tokens={tokens}\n onMouseEnter={handleMouseEnter}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n >\n {item.kind === 'toast' ? (\n <ToastItem\n {...item.data.itemProps}\n title={item.data.title}\n description={item.data.description}\n theme={item.data.theme}\n icon={item.data.icon}\n isLoading={item.data.isLoading}\n actions={item.data.actions}\n />\n ) : (\n <NotificationItem\n notification={item.data}\n onDismiss={handleNotificationDismiss}\n onRestore={onNotificationRestore}\n />\n )}\n </OverlayItemWrapper>\n );\n }}\n </DisplayTransition>\n );\n })}\n </OverlayContainerElement>\n </Portal>\n );\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.207.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
2
2
  import { NotificationContext, PersistentNotificationsContext, ToastContext } from "./NotificationContext.js";
3
3
  import { OverlayContainer } from "./OverlayContainer.js";
4
4
  import { useNotificationState } from "./use-notification-state.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.207.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
2
2
  import { Text as _Text } from "../../content/Text.js";
3
3
  import { useEvent } from "../../../_internal/hooks/use-event.js";
4
4
  import { useI18n } from "../../../i18n/useI18n.js";
@@ -1 +1 @@
1
- {"version":3,"file":"PersistentNotificationsList.js","names":["tasty","Fragment","Key","useContext","useEffect","useRef","useState","useEvent","useI18n","Divider","Text","formatRelativeTime","NotificationActionInterceptorContext","NotificationCard","usePersistentNotifications","DismissReason","PersistentNotificationItem","PersistentNotificationsListProps","MARK_READ_DELAY","TIMESTAMP_REFRESH_INTERVAL","ListContainer","qa","role","styles","display","flow","EmptyStateContainer","placeItems","placeContent","padding","color","preset","PersistentNotificationsList","t0","$","_c","onDismissItem","onAction","emptyState","t","items","remove","markAllAsRead","t1","listAriaLabel","t2","item","id","handleDismiss","markReadTimerRef","now","setNow","_temp","t3","t4","length","interval","setInterval","Date","clearInterval","t5","t6","hasUnread","some","_temp2","current","setTimeout","clearTimeout","t7","t8","t9","item_0","index","String","map","t10","i","isRead","PersistentNotificationListItemProps","onDismiss","PersistentNotificationListItem","createdAt","suffix","_id","_reason","parentInterceptor","handleItemAction","undefined","actions","description","icon","theme","title","_c","Text"],"sources":["../../../../src/components/overlays/Notifications/PersistentNotificationsList.tsx"],"sourcesContent":["import { tasty } from '@tenphi/tasty';\nimport { Fragment, Key, useContext, useEffect, useRef, useState } from 'react';\n\nimport { useEvent } from '../../../_internal';\nimport { useI18n } from '../../../i18n';\nimport { Divider } from '../../content/Divider/Divider';\nimport { Text } from '../../content/Text';\n\nimport { formatRelativeTime } from './format-relative-time';\nimport { NotificationActionInterceptorContext } from './NotificationAction';\nimport { NotificationCard } from './NotificationCard';\nimport { usePersistentNotifications } from './use-persistent-notifications';\n\nimport type {\n DismissReason,\n PersistentNotificationItem,\n PersistentNotificationsListProps,\n} from './types';\n\n// ─── Constants ───────────────────────────────────────────────────────\n\nconst MARK_READ_DELAY = 2000;\n/** Interval (ms) at which relative timestamps refresh while the list is mounted. */\nconst TIMESTAMP_REFRESH_INTERVAL = 10_000;\n\n// ─── Styled Components ──────────────────────────────────────────────\n\nconst ListContainer = tasty({\n qa: 'PersistentNotificationsList',\n role: 'log',\n styles: {\n display: 'flex',\n flow: 'column',\n },\n});\n\nconst EmptyStateContainer = tasty({\n styles: {\n display: 'flex',\n placeItems: 'center',\n placeContent: 'center',\n padding: '4x',\n color: '#dark.5',\n preset: 't3',\n },\n});\n\n// ─── PersistentNotificationsList Component ───────────────────────────\n\n/**\n * Standardized rendering for archived/persistent notifications.\n * Always reads items from the notification context.\n * Composable with app-specific shells (popover, dialog, page section).\n *\n * Marks all items as read after being visible for 2 seconds.\n * Relative timestamps refresh every 10 seconds while the list is mounted.\n *\n * Items are always dismissible. Dismissing an item removes it from the\n * persistent list and marks its ID as \"fully dismissed\" — subsequent triggers\n * with the same ID will be completely ignored (no overlay, no re-archival).\n *\n * @example\n * ```tsx\n * <PersistentNotificationsList emptyState=\"No notifications\" />\n * ```\n */\nexport function PersistentNotificationsList({\n onDismissItem,\n onAction,\n emptyState,\n}: PersistentNotificationsListProps) {\n const { t } = useI18n();\n const { items, remove, markAllAsRead } = usePersistentNotifications();\n const listAriaLabel = t('notifications.ariaLabel', 'Notifications');\n\n // Default dismiss handler removes the item from the persistent list (which\n // also marks the id as \"fully dismissed\" so it won't reappear).\n // If a consumer provides `onDismissItem`, it is called *after* the built-in removal.\n const handleDismiss = useEvent((item: PersistentNotificationItem) => {\n remove(item.id);\n onDismissItem?.(item);\n });\n const markReadTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Time is a reactive input, so memoized rows also refresh their labels.\n const [now, setNow] = useState(() => Date.now());\n\n useEffect(() => {\n if (items.length === 0) return;\n\n const interval = setInterval(() => {\n setNow(Date.now());\n }, TIMESTAMP_REFRESH_INTERVAL);\n\n return () => clearInterval(interval);\n }, [items.length]);\n\n // Mark all persistent notifications as read after a 2s delay.\n // Re-starts the timer whenever items change (e.g. new unread items arrive\n // while the list is already visible).\n useEffect(() => {\n const hasUnread = items.some((i) => !i.isRead);\n\n if (!hasUnread) return;\n\n markReadTimerRef.current = setTimeout(() => {\n markAllAsRead();\n }, MARK_READ_DELAY);\n\n return () => {\n if (markReadTimerRef.current) {\n clearTimeout(markReadTimerRef.current);\n markReadTimerRef.current = null;\n }\n };\n }, [markAllAsRead, items]);\n\n if (items.length === 0) {\n return (\n <ListContainer aria-label={listAriaLabel}>\n <EmptyStateContainer>\n {emptyState ?? t('notifications.empty', 'No notifications')}\n </EmptyStateContainer>\n </ListContainer>\n );\n }\n\n return (\n <NotificationActionInterceptorContext.Provider value={onAction ?? null}>\n <ListContainer aria-label={listAriaLabel}>\n {items.map((item, index) => (\n <Fragment key={String(item.id)}>\n {index > 0 && <Divider />}\n <PersistentNotificationListItem\n item={item}\n now={now}\n onDismiss={handleDismiss}\n />\n </Fragment>\n ))}\n </ListContainer>\n </NotificationActionInterceptorContext.Provider>\n );\n}\n\n// ─── List Item ───────────────────────────────────────────────────────\n\ninterface PersistentNotificationListItemProps {\n item: PersistentNotificationItem;\n now: number;\n onDismiss?: (item: PersistentNotificationItem) => void;\n}\n\nfunction PersistentNotificationListItem({\n item,\n now,\n onDismiss,\n}: PersistentNotificationListItemProps) {\n const { t } = useI18n();\n const suffix = (\n <Text opacity={0.5} preset=\"c2\">\n {formatRelativeTime(item.createdAt, t, now)}\n </Text>\n );\n\n // useEvent keeps the callback stable across re-renders regardless of\n // item reference changes (avoids unnecessary NotificationCard re-renders).\n const handleDismiss = useEvent((_id: Key, _reason: DismissReason) => {\n onDismiss?.(item);\n });\n\n const parentInterceptor = useContext(NotificationActionInterceptorContext);\n\n // Chains with the list-level interceptor (e.g. closing the parent popover).\n // Dismissal itself is handled by NotificationAction via the dismiss context\n // to avoid double-firing onDismiss.\n const handleItemAction = useEvent(() => {\n parentInterceptor?.();\n });\n\n return (\n <NotificationActionInterceptorContext.Provider value={handleItemAction}>\n <NotificationCard\n qa=\"PersistentNotificationItem\"\n theme={item.theme}\n title={item.title}\n description={item.description}\n icon={item.icon}\n actions={item.actions}\n isDismissable={!!onDismiss}\n elevated={false}\n notificationId={item.id}\n suffix={suffix}\n onDismiss={onDismiss ? handleDismiss : undefined}\n />\n </NotificationActionInterceptorContext.Provider>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"PersistentNotificationsList.js","names":["tasty","Fragment","Key","useContext","useEffect","useRef","useState","useEvent","useI18n","Divider","Text","formatRelativeTime","NotificationActionInterceptorContext","NotificationCard","usePersistentNotifications","DismissReason","PersistentNotificationItem","PersistentNotificationsListProps","MARK_READ_DELAY","TIMESTAMP_REFRESH_INTERVAL","ListContainer","qa","role","styles","display","flow","EmptyStateContainer","placeItems","placeContent","padding","color","preset","PersistentNotificationsList","t0","$","_c","onDismissItem","onAction","emptyState","t","items","remove","markAllAsRead","t1","listAriaLabel","t2","item","id","handleDismiss","markReadTimerRef","now","setNow","_temp","t3","t4","length","interval","setInterval","Date","clearInterval","t5","t6","hasUnread","some","_temp2","current","setTimeout","clearTimeout","t7","t8","t9","item_0","index","String","map","t10","i","isRead","PersistentNotificationListItemProps","onDismiss","PersistentNotificationListItem","createdAt","suffix","_id","_reason","parentInterceptor","handleItemAction","undefined","actions","description","icon","theme","title","_c","Text"],"sources":["../../../../src/components/overlays/Notifications/PersistentNotificationsList.tsx"],"sourcesContent":["import { tasty } from '@tenphi/tasty';\nimport { Fragment, Key, useContext, useEffect, useRef, useState } from 'react';\n\nimport { useEvent } from '../../../_internal/hooks/use-event';\nimport { useI18n } from '../../../i18n/useI18n';\nimport { Divider } from '../../content/Divider/Divider';\nimport { Text } from '../../content/Text';\n\nimport { formatRelativeTime } from './format-relative-time';\nimport { NotificationActionInterceptorContext } from './NotificationAction';\nimport { NotificationCard } from './NotificationCard';\nimport { usePersistentNotifications } from './use-persistent-notifications';\n\nimport type {\n DismissReason,\n PersistentNotificationItem,\n PersistentNotificationsListProps,\n} from './types';\n\n// ─── Constants ───────────────────────────────────────────────────────\n\nconst MARK_READ_DELAY = 2000;\n/** Interval (ms) at which relative timestamps refresh while the list is mounted. */\nconst TIMESTAMP_REFRESH_INTERVAL = 10_000;\n\n// ─── Styled Components ──────────────────────────────────────────────\n\nconst ListContainer = tasty({\n qa: 'PersistentNotificationsList',\n role: 'log',\n styles: {\n display: 'flex',\n flow: 'column',\n },\n});\n\nconst EmptyStateContainer = tasty({\n styles: {\n display: 'flex',\n placeItems: 'center',\n placeContent: 'center',\n padding: '4x',\n color: '#dark.5',\n preset: 't3',\n },\n});\n\n// ─── PersistentNotificationsList Component ───────────────────────────\n\n/**\n * Standardized rendering for archived/persistent notifications.\n * Always reads items from the notification context.\n * Composable with app-specific shells (popover, dialog, page section).\n *\n * Marks all items as read after being visible for 2 seconds.\n * Relative timestamps refresh every 10 seconds while the list is mounted.\n *\n * Items are always dismissible. Dismissing an item removes it from the\n * persistent list and marks its ID as \"fully dismissed\" — subsequent triggers\n * with the same ID will be completely ignored (no overlay, no re-archival).\n *\n * @example\n * ```tsx\n * <PersistentNotificationsList emptyState=\"No notifications\" />\n * ```\n */\nexport function PersistentNotificationsList({\n onDismissItem,\n onAction,\n emptyState,\n}: PersistentNotificationsListProps) {\n const { t } = useI18n();\n const { items, remove, markAllAsRead } = usePersistentNotifications();\n const listAriaLabel = t('notifications.ariaLabel', 'Notifications');\n\n // Default dismiss handler removes the item from the persistent list (which\n // also marks the id as \"fully dismissed\" so it won't reappear).\n // If a consumer provides `onDismissItem`, it is called *after* the built-in removal.\n const handleDismiss = useEvent((item: PersistentNotificationItem) => {\n remove(item.id);\n onDismissItem?.(item);\n });\n const markReadTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Time is a reactive input, so memoized rows also refresh their labels.\n const [now, setNow] = useState(() => Date.now());\n\n useEffect(() => {\n if (items.length === 0) return;\n\n const interval = setInterval(() => {\n setNow(Date.now());\n }, TIMESTAMP_REFRESH_INTERVAL);\n\n return () => clearInterval(interval);\n }, [items.length]);\n\n // Mark all persistent notifications as read after a 2s delay.\n // Re-starts the timer whenever items change (e.g. new unread items arrive\n // while the list is already visible).\n useEffect(() => {\n const hasUnread = items.some((i) => !i.isRead);\n\n if (!hasUnread) return;\n\n markReadTimerRef.current = setTimeout(() => {\n markAllAsRead();\n }, MARK_READ_DELAY);\n\n return () => {\n if (markReadTimerRef.current) {\n clearTimeout(markReadTimerRef.current);\n markReadTimerRef.current = null;\n }\n };\n }, [markAllAsRead, items]);\n\n if (items.length === 0) {\n return (\n <ListContainer aria-label={listAriaLabel}>\n <EmptyStateContainer>\n {emptyState ?? t('notifications.empty', 'No notifications')}\n </EmptyStateContainer>\n </ListContainer>\n );\n }\n\n return (\n <NotificationActionInterceptorContext.Provider value={onAction ?? null}>\n <ListContainer aria-label={listAriaLabel}>\n {items.map((item, index) => (\n <Fragment key={String(item.id)}>\n {index > 0 && <Divider />}\n <PersistentNotificationListItem\n item={item}\n now={now}\n onDismiss={handleDismiss}\n />\n </Fragment>\n ))}\n </ListContainer>\n </NotificationActionInterceptorContext.Provider>\n );\n}\n\n// ─── List Item ───────────────────────────────────────────────────────\n\ninterface PersistentNotificationListItemProps {\n item: PersistentNotificationItem;\n now: number;\n onDismiss?: (item: PersistentNotificationItem) => void;\n}\n\nfunction PersistentNotificationListItem({\n item,\n now,\n onDismiss,\n}: PersistentNotificationListItemProps) {\n const { t } = useI18n();\n const suffix = (\n <Text opacity={0.5} preset=\"c2\">\n {formatRelativeTime(item.createdAt, t, now)}\n </Text>\n );\n\n // useEvent keeps the callback stable across re-renders regardless of\n // item reference changes (avoids unnecessary NotificationCard re-renders).\n const handleDismiss = useEvent((_id: Key, _reason: DismissReason) => {\n onDismiss?.(item);\n });\n\n const parentInterceptor = useContext(NotificationActionInterceptorContext);\n\n // Chains with the list-level interceptor (e.g. closing the parent popover).\n // Dismissal itself is handled by NotificationAction via the dismiss context\n // to avoid double-firing onDismiss.\n const handleItemAction = useEvent(() => {\n parentInterceptor?.();\n });\n\n return (\n <NotificationActionInterceptorContext.Provider value={handleItemAction}>\n <NotificationCard\n qa=\"PersistentNotificationItem\"\n theme={item.theme}\n title={item.title}\n description={item.description}\n icon={item.icon}\n actions={item.actions}\n isDismissable={!!onDismiss}\n elevated={false}\n notificationId={item.id}\n suffix={suffix}\n onDismiss={onDismiss ? handleDismiss : undefined}\n />\n </NotificationActionInterceptorContext.Provider>\n );\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.207.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
2
2
  //#region src/components/overlays/Notifications/dismissed-storage.ts
3
3
  const STORAGE_KEY = "cube-ui-dismissed-notifications";
4
4
  const TTL_MS = 864e5;
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.207.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
2
2
  //#region src/components/overlays/Notifications/format-relative-time.ts
3
3
  /**
4
4
  * Lightweight relative time formatter.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.207.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
2
2
  import "./NotificationContext.js";
3
3
  import { NotificationAction } from "./NotificationAction.js";
4
4
  import { NotificationCard } from "./NotificationCard.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.207.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { useRef, useState } from "react";
4
4
  //#region src/components/overlays/Notifications/use-notification-state.ts