@cube-dev/ui-kit 0.182.0 → 0.183.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 (1124) hide show
  1. package/dist/CHANGELOG.md +10 -0
  2. package/dist/_internal/hooks/use-debounced-value.js +48 -31
  3. package/dist/_internal/hooks/use-debounced-value.js.map +1 -1
  4. package/dist/_internal/hooks/use-deprecation-warning.js +22 -7
  5. package/dist/_internal/hooks/use-deprecation-warning.js.map +1 -1
  6. package/dist/_internal/hooks/use-event.js +1 -1
  7. package/dist/_internal/hooks/use-event.js.map +1 -1
  8. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  9. package/dist/_internal/hooks/use-is-first-render.js.map +1 -1
  10. package/dist/_internal/hooks/use-sync-ref.js +12 -4
  11. package/dist/_internal/hooks/use-sync-ref.js.map +1 -1
  12. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  13. package/dist/_internal/hooks/use-timer/timer.js.map +1 -1
  14. package/dist/_internal/hooks/use-timer/use-timer.js +90 -20
  15. package/dist/_internal/hooks/use-timer/use-timer.js.map +1 -1
  16. package/dist/_internal/hooks/use-warn.js +4 -4
  17. package/dist/_internal/hooks/use-warn.js.map +1 -1
  18. package/dist/components/Block.js +29 -7
  19. package/dist/components/Block.js.map +1 -1
  20. package/dist/components/CollectionItem.js +1 -1
  21. package/dist/components/CollectionItem.js.map +1 -1
  22. package/dist/components/GlobalStyles.js +33 -9
  23. package/dist/components/GlobalStyles.js.map +1 -1
  24. package/dist/components/GridProvider.js +4 -4
  25. package/dist/components/GridProvider.js.map +1 -1
  26. package/dist/components/HiddenInput.js +1 -1
  27. package/dist/components/HiddenInput.js.map +1 -1
  28. package/dist/components/Root.js +137 -42
  29. package/dist/components/Root.js.map +1 -1
  30. package/dist/components/actions/Action/Action.js +20 -8
  31. package/dist/components/actions/Action/Action.js.map +1 -1
  32. package/dist/components/actions/Banner/Banner.js +91 -22
  33. package/dist/components/actions/Banner/Banner.js.map +1 -1
  34. package/dist/components/actions/Button/Button.js +5 -5
  35. package/dist/components/actions/Button/Button.js.map +1 -1
  36. package/dist/components/actions/ButtonGroup/ButtonGroup.js +15 -5
  37. package/dist/components/actions/ButtonGroup/ButtonGroup.js.map +1 -1
  38. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  39. package/dist/components/actions/ButtonSplit/ButtonSplit.js.map +1 -1
  40. package/dist/components/actions/ButtonSplit/context.js +1 -1
  41. package/dist/components/actions/ButtonSplit/context.js.map +1 -1
  42. package/dist/components/actions/CommandMenu/CommandMenu.js +76 -76
  43. package/dist/components/actions/CommandMenu/CommandMenu.js.map +1 -1
  44. package/dist/components/actions/CommandMenu/styled.js +1 -1
  45. package/dist/components/actions/CommandMenu/styled.js.map +1 -1
  46. package/dist/components/actions/ItemAction/ItemAction.js +205 -68
  47. package/dist/components/actions/ItemAction/ItemAction.js.map +1 -1
  48. package/dist/components/actions/ItemActionContext.js +26 -7
  49. package/dist/components/actions/ItemActionContext.js.map +1 -1
  50. package/dist/components/actions/ItemActionsWrapper.js +215 -84
  51. package/dist/components/actions/ItemActionsWrapper.js.map +1 -1
  52. package/dist/components/actions/ItemButton/ItemButton.js +2 -2
  53. package/dist/components/actions/ItemButton/ItemButton.js.map +1 -1
  54. package/dist/components/actions/Link/Link.js +16 -7
  55. package/dist/components/actions/Link/Link.js.map +1 -1
  56. package/dist/components/actions/Menu/Menu.js +127 -72
  57. package/dist/components/actions/Menu/Menu.js.map +1 -1
  58. package/dist/components/actions/Menu/MenuItem.js +116 -43
  59. package/dist/components/actions/Menu/MenuItem.js.map +1 -1
  60. package/dist/components/actions/Menu/MenuSection.js +85 -30
  61. package/dist/components/actions/Menu/MenuSection.js.map +1 -1
  62. package/dist/components/actions/Menu/MenuTrigger.js +316 -112
  63. package/dist/components/actions/Menu/MenuTrigger.js.map +1 -1
  64. package/dist/components/actions/Menu/SubMenuTrigger.js +6 -6
  65. package/dist/components/actions/Menu/SubMenuTrigger.js.map +1 -1
  66. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  67. package/dist/components/actions/Menu/SubmenuTriggerContext.js.map +1 -1
  68. package/dist/components/actions/Menu/context.js +1 -1
  69. package/dist/components/actions/Menu/context.js.map +1 -1
  70. package/dist/components/actions/Menu/styled.js +1 -1
  71. package/dist/components/actions/Menu/styled.js.map +1 -1
  72. package/dist/components/actions/actions-run.js +1 -1
  73. package/dist/components/actions/actions-run.js.map +1 -1
  74. package/dist/components/actions/index.js +1 -1
  75. package/dist/components/actions/index.js.map +1 -1
  76. package/dist/components/actions/use-action.js +3 -3
  77. package/dist/components/actions/use-action.js.map +1 -1
  78. package/dist/components/actions/use-anchored-menu.js +6 -6
  79. package/dist/components/actions/use-anchored-menu.js.map +1 -1
  80. package/dist/components/actions/use-context-menu.js +12 -12
  81. package/dist/components/actions/use-context-menu.js.map +1 -1
  82. package/dist/components/content/ActiveZone/ActiveZone.js +84 -18
  83. package/dist/components/content/ActiveZone/ActiveZone.js.map +1 -1
  84. package/dist/components/content/Alert/Alert.js +18 -7
  85. package/dist/components/content/Alert/Alert.js.map +1 -1
  86. package/dist/components/content/Alert/use-alert.js +53 -15
  87. package/dist/components/content/Alert/use-alert.js.map +1 -1
  88. package/dist/components/content/Avatar/Avatar.js +51 -13
  89. package/dist/components/content/Avatar/Avatar.js.map +1 -1
  90. package/dist/components/content/Badge/Badge.js +43 -10
  91. package/dist/components/content/Badge/Badge.js.map +1 -1
  92. package/dist/components/content/Card/Card.js +29 -7
  93. package/dist/components/content/Card/Card.js.map +1 -1
  94. package/dist/components/content/Content.js +29 -7
  95. package/dist/components/content/Content.js.map +1 -1
  96. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +2 -2
  97. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js.map +1 -1
  98. package/dist/components/content/CopySnippet/CopySnippet.js +220 -60
  99. package/dist/components/content/CopySnippet/CopySnippet.js.map +1 -1
  100. package/dist/components/content/Disclosure/Disclosure.js +453 -194
  101. package/dist/components/content/Disclosure/Disclosure.js.map +1 -1
  102. package/dist/components/content/Divider.js +52 -14
  103. package/dist/components/content/Divider.js.map +1 -1
  104. package/dist/components/content/Footer.js +29 -7
  105. package/dist/components/content/Footer.js.map +1 -1
  106. package/dist/components/content/Header.js +29 -7
  107. package/dist/components/content/Header.js.map +1 -1
  108. package/dist/components/content/HotKeys/HotKeys.js +55 -27
  109. package/dist/components/content/HotKeys/HotKeys.js.map +1 -1
  110. package/dist/components/content/InfoBadge/InfoBadge.js +8 -8
  111. package/dist/components/content/InfoBadge/InfoBadge.js.map +1 -1
  112. package/dist/components/content/InlineInput/InlineInput.js +429 -188
  113. package/dist/components/content/InlineInput/InlineInput.js.map +1 -1
  114. package/dist/components/content/Item/Item.js +408 -151
  115. package/dist/components/content/Item/Item.js.map +1 -1
  116. package/dist/components/content/ItemBadge/ItemBadge.js +173 -59
  117. package/dist/components/content/ItemBadge/ItemBadge.js.map +1 -1
  118. package/dist/components/content/ItemCard/ItemCard.js +34 -9
  119. package/dist/components/content/ItemCard/ItemCard.js.map +1 -1
  120. package/dist/components/content/Layout/GridLayout.js +38 -10
  121. package/dist/components/content/Layout/GridLayout.js.map +1 -1
  122. package/dist/components/content/Layout/Layout.js +30 -13
  123. package/dist/components/content/Layout/Layout.js.map +1 -1
  124. package/dist/components/content/Layout/LayoutBlock.js +33 -8
  125. package/dist/components/content/Layout/LayoutBlock.js.map +1 -1
  126. package/dist/components/content/Layout/LayoutCenter.js +48 -11
  127. package/dist/components/content/Layout/LayoutCenter.js.map +1 -1
  128. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  129. package/dist/components/content/Layout/LayoutContainer.js.map +1 -1
  130. package/dist/components/content/Layout/LayoutContent.js +1 -1
  131. package/dist/components/content/Layout/LayoutContent.js.map +1 -1
  132. package/dist/components/content/Layout/LayoutContext.js +30 -21
  133. package/dist/components/content/Layout/LayoutContext.js.map +1 -1
  134. package/dist/components/content/Layout/LayoutFlex.js +33 -8
  135. package/dist/components/content/Layout/LayoutFlex.js.map +1 -1
  136. package/dist/components/content/Layout/LayoutFooter.js +53 -14
  137. package/dist/components/content/Layout/LayoutFooter.js.map +1 -1
  138. package/dist/components/content/Layout/LayoutGrid.js +48 -11
  139. package/dist/components/content/Layout/LayoutGrid.js.map +1 -1
  140. package/dist/components/content/Layout/LayoutHeader.js +211 -57
  141. package/dist/components/content/Layout/LayoutHeader.js.map +1 -1
  142. package/dist/components/content/Layout/LayoutPane.js +60 -14
  143. package/dist/components/content/Layout/LayoutPane.js.map +1 -1
  144. package/dist/components/content/Layout/LayoutPanel.js +59 -17
  145. package/dist/components/content/Layout/LayoutPanel.js.map +1 -1
  146. package/dist/components/content/Layout/LayoutPanelHeader.js +89 -27
  147. package/dist/components/content/Layout/LayoutPanelHeader.js.map +1 -1
  148. package/dist/components/content/Layout/LayoutToolbar.js +33 -8
  149. package/dist/components/content/Layout/LayoutToolbar.js.map +1 -1
  150. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +206 -119
  151. package/dist/components/content/Layout/hooks/useTinyScrollbar.js.map +1 -1
  152. package/dist/components/content/Layout/index.js +1 -1
  153. package/dist/components/content/Layout/index.js.map +1 -1
  154. package/dist/components/content/Layout/utils.js +1 -1
  155. package/dist/components/content/Layout/utils.js.map +1 -1
  156. package/dist/components/content/Paragraph.js +25 -9
  157. package/dist/components/content/Paragraph.js.map +1 -1
  158. package/dist/components/content/Placeholder/Placeholder.js +52 -14
  159. package/dist/components/content/Placeholder/Placeholder.js.map +1 -1
  160. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  161. package/dist/components/content/PrismCode/PrismCode.js.map +1 -1
  162. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  163. package/dist/components/content/PrismCode/prismSetup.js.map +1 -1
  164. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +52 -17
  165. package/dist/components/content/PrismDiffCode/PrismDiffCode.js.map +1 -1
  166. package/dist/components/content/Result/Result.js +117 -38
  167. package/dist/components/content/Result/Result.js.map +1 -1
  168. package/dist/components/content/Skeleton/Skeleton.js +26 -17
  169. package/dist/components/content/Skeleton/Skeleton.js.map +1 -1
  170. package/dist/components/content/Tag/Tag.js +68 -13
  171. package/dist/components/content/Tag/Tag.js.map +1 -1
  172. package/dist/components/content/Text.d.ts +14 -14
  173. package/dist/components/content/Text.js +61 -14
  174. package/dist/components/content/Text.js.map +1 -1
  175. package/dist/components/content/TextItem/TextItem.js +37 -16
  176. package/dist/components/content/TextItem/TextItem.js.map +1 -1
  177. package/dist/components/content/Title.js +98 -23
  178. package/dist/components/content/Title.js.map +1 -1
  179. package/dist/components/content/Tree/Tree.js +32 -32
  180. package/dist/components/content/Tree/Tree.js.map +1 -1
  181. package/dist/components/content/Tree/TreeNode.js +10 -10
  182. package/dist/components/content/Tree/TreeNode.js.map +1 -1
  183. package/dist/components/content/Tree/styled.js +1 -1
  184. package/dist/components/content/Tree/styled.js.map +1 -1
  185. package/dist/components/content/Tree/tree-index.js +1 -1
  186. package/dist/components/content/Tree/tree-index.js.map +1 -1
  187. package/dist/components/content/Tree/use-checkbox-tree.js +123 -89
  188. package/dist/components/content/Tree/use-checkbox-tree.js.map +1 -1
  189. package/dist/components/content/Tree/use-load-data.js +52 -21
  190. package/dist/components/content/Tree/use-load-data.js.map +1 -1
  191. package/dist/components/content/highlightText.js +1 -1
  192. package/dist/components/content/highlightText.js.map +1 -1
  193. package/dist/components/content/use-auto-tooltip.js +1 -1
  194. package/dist/components/content/use-auto-tooltip.js.map +1 -1
  195. package/dist/components/data/DataTable/DataTable.js +31 -31
  196. package/dist/components/data/DataTable/DataTable.js.map +1 -1
  197. package/dist/components/data/ItemTable/ItemTable.js +41 -41
  198. package/dist/components/data/ItemTable/ItemTable.js.map +1 -1
  199. package/dist/components/data/ItemTable/ItemTableBulkBar.js +11 -11
  200. package/dist/components/data/ItemTable/ItemTableBulkBar.js.map +1 -1
  201. package/dist/components/data/ItemTable/ItemTableDragPreview.js +41 -4
  202. package/dist/components/data/ItemTable/ItemTableDragPreview.js.map +1 -1
  203. package/dist/components/data/ItemTable/ItemTableFooter.js +67 -30
  204. package/dist/components/data/ItemTable/ItemTableFooter.js.map +1 -1
  205. package/dist/components/data/ItemTable/ItemTableToolbar.js +95 -28
  206. package/dist/components/data/ItemTable/ItemTableToolbar.js.map +1 -1
  207. package/dist/components/data/TableBase/ColumnResizer.js +90 -41
  208. package/dist/components/data/TableBase/ColumnResizer.js.map +1 -1
  209. package/dist/components/data/TableBase/RowCollection.js +1 -1
  210. package/dist/components/data/TableBase/RowCollection.js.map +1 -1
  211. package/dist/components/data/TableBase/TableHeaderCell.js +154 -64
  212. package/dist/components/data/TableBase/TableHeaderCell.js.map +1 -1
  213. package/dist/components/data/TableBase/TableRow.js +211 -69
  214. package/dist/components/data/TableBase/TableRow.js.map +1 -1
  215. package/dist/components/data/TableBase/TableView.js +119 -80
  216. package/dist/components/data/TableBase/TableView.js.map +1 -1
  217. package/dist/components/data/TableBase/column-menu.js +1 -1
  218. package/dist/components/data/TableBase/column-menu.js.map +1 -1
  219. package/dist/components/data/TableBase/column-tint.js +1 -1
  220. package/dist/components/data/TableBase/column-tint.js.map +1 -1
  221. package/dist/components/data/TableBase/row-menu.js +1 -1
  222. package/dist/components/data/TableBase/row-menu.js.map +1 -1
  223. package/dist/components/data/TableBase/styled.js +1 -1
  224. package/dist/components/data/TableBase/styled.js.map +1 -1
  225. package/dist/components/data/TableBase/table-tree.js +1 -1
  226. package/dist/components/data/TableBase/table-tree.js.map +1 -1
  227. package/dist/components/data/TableBase/types.js +1 -1
  228. package/dist/components/data/TableBase/types.js.map +1 -1
  229. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  230. package/dist/components/data/TableBase/use-cell-selection.js.map +1 -1
  231. package/dist/components/data/TableBase/use-column-order.js +56 -12
  232. package/dist/components/data/TableBase/use-column-order.js.map +1 -1
  233. package/dist/components/data/TableBase/use-container-width.js +24 -10
  234. package/dist/components/data/TableBase/use-container-width.js.map +1 -1
  235. package/dist/components/data/TableBase/use-row-move-animation.js +68 -49
  236. package/dist/components/data/TableBase/use-row-move-animation.js.map +1 -1
  237. package/dist/components/data/TableBase/use-scrollability.js +32 -18
  238. package/dist/components/data/TableBase/use-scrollability.js.map +1 -1
  239. package/dist/components/data/TableBase/use-table-columns.js +130 -60
  240. package/dist/components/data/TableBase/use-table-columns.js.map +1 -1
  241. package/dist/components/data/TableBase/use-table-search.js +1 -1
  242. package/dist/components/data/TableBase/use-table-search.js.map +1 -1
  243. package/dist/components/data/TableBase/use-table-selection.js +39 -39
  244. package/dist/components/data/TableBase/use-table-selection.js.map +1 -1
  245. package/dist/components/data/TableBase/use-table-sort.js +132 -68
  246. package/dist/components/data/TableBase/use-table-sort.js.map +1 -1
  247. package/dist/components/data/TableBase/use-table-sorts.js +168 -101
  248. package/dist/components/data/TableBase/use-table-sorts.js.map +1 -1
  249. package/dist/components/data/TableBase/use-table-storage.js +2 -2
  250. package/dist/components/data/TableBase/use-table-storage.js.map +1 -1
  251. package/dist/components/data/TableBase/use-table-tree-state.js +181 -86
  252. package/dist/components/data/TableBase/use-table-tree-state.js.map +1 -1
  253. package/dist/components/fields/Checkbox/Checkbox.js +2 -2
  254. package/dist/components/fields/Checkbox/Checkbox.js.map +1 -1
  255. package/dist/components/fields/Checkbox/CheckboxGroup.js +101 -33
  256. package/dist/components/fields/Checkbox/CheckboxGroup.js.map +1 -1
  257. package/dist/components/fields/Checkbox/context.js +1 -1
  258. package/dist/components/fields/Checkbox/context.js.map +1 -1
  259. package/dist/components/fields/ColorInput/ColorInput.js +329 -150
  260. package/dist/components/fields/ColorInput/ColorInput.js.map +1 -1
  261. package/dist/components/fields/ColorPicker/ColorPicker.js +16 -16
  262. package/dist/components/fields/ColorPicker/ColorPicker.js.map +1 -1
  263. package/dist/components/fields/ColorSwatch/ColorSwatch.js +52 -13
  264. package/dist/components/fields/ColorSwatch/ColorSwatch.js.map +1 -1
  265. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +90 -28
  266. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js.map +1 -1
  267. package/dist/components/fields/ComboBox/ComboBox.js +216 -134
  268. package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
  269. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  270. package/dist/components/fields/CommandTextArea/CommandTextArea.js.map +1 -1
  271. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  272. package/dist/components/fields/CommandTextArea/caretPosition.js.map +1 -1
  273. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +88 -49
  274. package/dist/components/fields/CommandTextArea/useCaretAnchor.js.map +1 -1
  275. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  276. package/dist/components/fields/DatePicker/DateInput.js.map +1 -1
  277. package/dist/components/fields/DatePicker/DateInputBase.js +129 -34
  278. package/dist/components/fields/DatePicker/DateInputBase.js.map +1 -1
  279. package/dist/components/fields/DatePicker/DatePicker.js +194 -69
  280. package/dist/components/fields/DatePicker/DatePicker.js.map +1 -1
  281. package/dist/components/fields/DatePicker/DatePickerButton.js +39 -8
  282. package/dist/components/fields/DatePicker/DatePickerButton.js.map +1 -1
  283. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  284. package/dist/components/fields/DatePicker/DatePickerElement.js.map +1 -1
  285. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  286. package/dist/components/fields/DatePicker/DatePickerInput.js.map +1 -1
  287. package/dist/components/fields/DatePicker/DatePickerSegment.js +109 -29
  288. package/dist/components/fields/DatePicker/DatePickerSegment.js.map +1 -1
  289. package/dist/components/fields/DatePicker/DateRangePicker.js +224 -88
  290. package/dist/components/fields/DatePicker/DateRangePicker.js.map +1 -1
  291. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +473 -180
  292. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js.map +1 -1
  293. package/dist/components/fields/DatePicker/MonthPicker.js +15 -6
  294. package/dist/components/fields/DatePicker/MonthPicker.js.map +1 -1
  295. package/dist/components/fields/DatePicker/PeriodPicker.js +288 -91
  296. package/dist/components/fields/DatePicker/PeriodPicker.js.map +1 -1
  297. package/dist/components/fields/DatePicker/QuarterPicker.js +15 -6
  298. package/dist/components/fields/DatePicker/QuarterPicker.js.map +1 -1
  299. package/dist/components/fields/DatePicker/TimeInput.js +15 -7
  300. package/dist/components/fields/DatePicker/TimeInput.js.map +1 -1
  301. package/dist/components/fields/DatePicker/WeekPicker.js +15 -6
  302. package/dist/components/fields/DatePicker/WeekPicker.js.map +1 -1
  303. package/dist/components/fields/DatePicker/YearPicker.js +15 -6
  304. package/dist/components/fields/DatePicker/YearPicker.js.map +1 -1
  305. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  306. package/dist/components/fields/DatePicker/parseDate.js.map +1 -1
  307. package/dist/components/fields/DatePicker/period.js +1 -1
  308. package/dist/components/fields/DatePicker/period.js.map +1 -1
  309. package/dist/components/fields/DatePicker/props.js +1 -1
  310. package/dist/components/fields/DatePicker/props.js.map +1 -1
  311. package/dist/components/fields/DatePicker/utils.js +15 -8
  312. package/dist/components/fields/DatePicker/utils.js.map +1 -1
  313. package/dist/components/fields/FileInput/FileInput.js +3 -3
  314. package/dist/components/fields/FileInput/FileInput.js.map +1 -1
  315. package/dist/components/fields/FilterListBox/FilterListBox.js +87 -87
  316. package/dist/components/fields/FilterListBox/FilterListBox.js.map +1 -1
  317. package/dist/components/fields/FilterPicker/FilterPicker.js +22 -22
  318. package/dist/components/fields/FilterPicker/FilterPicker.js.map +1 -1
  319. package/dist/components/fields/Input/Input.js +1 -1
  320. package/dist/components/fields/Input/Input.js.map +1 -1
  321. package/dist/components/fields/ListBox/DraggableListBox.js +23 -10
  322. package/dist/components/fields/ListBox/DraggableListBox.js.map +1 -1
  323. package/dist/components/fields/ListBox/ListBox.js +138 -53
  324. package/dist/components/fields/ListBox/ListBox.js.map +1 -1
  325. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +156 -37
  326. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js.map +1 -1
  327. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  328. package/dist/components/fields/ListBoxPopover/listNavigation.js.map +1 -1
  329. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +61 -33
  330. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js.map +1 -1
  331. package/dist/components/fields/NumberInput/NumberInput.js +123 -33
  332. package/dist/components/fields/NumberInput/NumberInput.js.map +1 -1
  333. package/dist/components/fields/NumberInput/StepButton.js +53 -15
  334. package/dist/components/fields/NumberInput/StepButton.js.map +1 -1
  335. package/dist/components/fields/PasswordInput/PasswordInput.js +149 -45
  336. package/dist/components/fields/PasswordInput/PasswordInput.js.map +1 -1
  337. package/dist/components/fields/Picker/Picker.js +8 -8
  338. package/dist/components/fields/Picker/Picker.js.map +1 -1
  339. package/dist/components/fields/RadioGroup/Radio.js +273 -104
  340. package/dist/components/fields/RadioGroup/Radio.js.map +1 -1
  341. package/dist/components/fields/RadioGroup/RadioGroup.js +149 -48
  342. package/dist/components/fields/RadioGroup/RadioGroup.js.map +1 -1
  343. package/dist/components/fields/RadioGroup/context.js +1 -1
  344. package/dist/components/fields/RadioGroup/context.js.map +1 -1
  345. package/dist/components/fields/SearchComboBox/SearchComboBox.js +80 -65
  346. package/dist/components/fields/SearchComboBox/SearchComboBox.js.map +1 -1
  347. package/dist/components/fields/SearchInput/SearchInput.js +91 -28
  348. package/dist/components/fields/SearchInput/SearchInput.js.map +1 -1
  349. package/dist/components/fields/Select/Select.js +369 -117
  350. package/dist/components/fields/Select/Select.js.map +1 -1
  351. package/dist/components/fields/Slider/Gradation.js +45 -10
  352. package/dist/components/fields/Slider/Gradation.js.map +1 -1
  353. package/dist/components/fields/Slider/HueSlider.js +121 -32
  354. package/dist/components/fields/Slider/HueSlider.js.map +1 -1
  355. package/dist/components/fields/Slider/RangeSlider.js +46 -10
  356. package/dist/components/fields/Slider/RangeSlider.js.map +1 -1
  357. package/dist/components/fields/Slider/Slider.js +108 -23
  358. package/dist/components/fields/Slider/Slider.js.map +1 -1
  359. package/dist/components/fields/Slider/SliderBase.js +2 -2
  360. package/dist/components/fields/Slider/SliderBase.js.map +1 -1
  361. package/dist/components/fields/Slider/SliderThumb.js +96 -37
  362. package/dist/components/fields/Slider/SliderThumb.js.map +1 -1
  363. package/dist/components/fields/Slider/SliderTrack.js +64 -23
  364. package/dist/components/fields/Slider/SliderTrack.js.map +1 -1
  365. package/dist/components/fields/Slider/elements.js +1 -1
  366. package/dist/components/fields/Slider/elements.js.map +1 -1
  367. package/dist/components/fields/Slider/index.js +1 -1
  368. package/dist/components/fields/Switch/Switch.js +190 -66
  369. package/dist/components/fields/Switch/Switch.js.map +1 -1
  370. package/dist/components/fields/TextArea/TextArea.js +137 -47
  371. package/dist/components/fields/TextArea/TextArea.js.map +1 -1
  372. package/dist/components/fields/TextInput/TextInput.js +80 -27
  373. package/dist/components/fields/TextInput/TextInput.js.map +1 -1
  374. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  375. package/dist/components/fields/TextInput/TextInputBase.js.map +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.js +156 -83
  379. package/dist/components/fields/TextInputMapper/TextInputMapper.js.map +1 -1
  380. package/dist/components/fields/TriggerActions.js +11 -2
  381. package/dist/components/fields/TriggerActions.js.map +1 -1
  382. package/dist/components/fields/color/ColorPanel.js +237 -59
  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/channels.js.map +1 -1
  386. package/dist/components/fields/color/color.js +1 -1
  387. package/dist/components/fields/color/color.js.map +1 -1
  388. package/dist/components/fields/color/context.js +1 -1
  389. package/dist/components/fields/color/context.js.map +1 -1
  390. package/dist/components/form/FieldWrapper/FieldWrapper.js +195 -72
  391. package/dist/components/form/FieldWrapper/FieldWrapper.js.map +1 -1
  392. package/dist/components/form/Form/Field.js +23 -9
  393. package/dist/components/form/Form/Field.js.map +1 -1
  394. package/dist/components/form/Form/Form.js +76 -30
  395. package/dist/components/form/Form/Form.js.map +1 -1
  396. package/dist/components/form/Form/ModernFormRoot.js +294 -81
  397. package/dist/components/form/Form/ModernFormRoot.js.map +1 -1
  398. package/dist/components/form/Form/ResetButton/ResetButton.js +32 -10
  399. package/dist/components/form/Form/ResetButton/ResetButton.js.map +1 -1
  400. package/dist/components/form/Form/SubmitButton/SubmitButton.js +32 -10
  401. package/dist/components/form/Form/SubmitButton/SubmitButton.js.map +1 -1
  402. package/dist/components/form/Form/SubmitError.js +130 -32
  403. package/dist/components/form/Form/SubmitError.js.map +1 -1
  404. package/dist/components/form/Form/backend.js +1 -1
  405. package/dist/components/form/Form/backend.js.map +1 -1
  406. package/dist/components/form/Form/index.js +1 -1
  407. package/dist/components/form/Form/index.js.map +1 -1
  408. package/dist/components/form/Form/modern/actions.js +140 -45
  409. package/dist/components/form/Form/modern/actions.js.map +1 -1
  410. package/dist/components/form/Form/modern/context.js +1 -1
  411. package/dist/components/form/Form/modern/context.js.map +1 -1
  412. package/dist/components/form/Form/modern/controller.js +1 -1
  413. package/dist/components/form/Form/modern/controller.js.map +1 -1
  414. package/dist/components/form/Form/modern/field-binding.js +1 -1
  415. package/dist/components/form/Form/modern/field-binding.js.map +1 -1
  416. package/dist/components/form/Form/modern/field.js +1 -1
  417. package/dist/components/form/Form/modern/field.js.map +1 -1
  418. package/dist/components/form/Form/modern/react.js +102 -19
  419. package/dist/components/form/Form/modern/react.js.map +1 -1
  420. package/dist/components/form/Form/modern/store.js +13 -3
  421. package/dist/components/form/Form/modern/store.js.map +1 -1
  422. package/dist/components/form/Form/modern/types.d.ts +3 -1
  423. package/dist/components/form/Form/modern/validation.js +1 -1
  424. package/dist/components/form/Form/modern/validation.js.map +1 -1
  425. package/dist/components/form/Form/modern/values.js +1 -1
  426. package/dist/components/form/Form/modern/values.js.map +1 -1
  427. package/dist/components/form/Form/use-field/use-field-binding.js +236 -63
  428. package/dist/components/form/Form/use-field/use-field-binding.js.map +1 -1
  429. package/dist/components/form/Form/use-field/use-field-props.js +106 -61
  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.js +5 -4
  432. package/dist/components/form/Form/use-field/use-field.js.map +1 -1
  433. package/dist/components/form/Form/use-form.js +2 -1
  434. package/dist/components/form/Form/use-form.js.map +1 -1
  435. package/dist/components/form/Form/validation.js +1 -1
  436. package/dist/components/form/Form/validation.js.map +1 -1
  437. package/dist/components/form/Label.js +127 -37
  438. package/dist/components/form/Label.js.map +1 -1
  439. package/dist/components/form/validation/ValidationIndicator.js +20 -5
  440. package/dist/components/form/validation/ValidationIndicator.js.map +1 -1
  441. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  442. package/dist/components/form/validation/resolve-validation-props.js.map +1 -1
  443. package/dist/components/form/validation/use-validation-props.js +36 -10
  444. package/dist/components/form/validation/use-validation-props.js.map +1 -1
  445. package/dist/components/form/wrapper.js +1 -1
  446. package/dist/components/form/wrapper.js.map +1 -1
  447. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +49 -29
  448. package/dist/components/helpers/DisplayTransition/DisplayTransition.js.map +1 -1
  449. package/dist/components/helpers/IconSwitch/IconSwitch.js +8 -8
  450. package/dist/components/helpers/IconSwitch/IconSwitch.js.map +1 -1
  451. package/dist/components/layout/Board/Board.js +27 -9
  452. package/dist/components/layout/Board/Board.js.map +1 -1
  453. package/dist/components/layout/Board/BoardProvider.js +1 -1
  454. package/dist/components/layout/Board/BoardProvider.js.map +1 -1
  455. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  456. package/dist/components/layout/Board/BoardResponsive.js.map +1 -1
  457. package/dist/components/layout/Board/Widget.js +1 -1
  458. package/dist/components/layout/Board/Widget.js.map +1 -1
  459. package/dist/components/layout/Board/WidgetHost.js +159 -121
  460. package/dist/components/layout/Board/WidgetHost.js.map +1 -1
  461. package/dist/components/layout/Board/board-context.js +14 -5
  462. package/dist/components/layout/Board/board-context.js.map +1 -1
  463. package/dist/components/layout/Board/board-store.js +1 -1
  464. package/dist/components/layout/Board/board-store.js.map +1 -1
  465. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  466. package/dist/components/layout/Board/grid-core/calculate.js.map +1 -1
  467. package/dist/components/layout/Board/grid-core/collision-modes.js +1 -1
  468. package/dist/components/layout/Board/grid-core/collision-modes.js.map +1 -1
  469. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  470. package/dist/components/layout/Board/grid-core/collision.js.map +1 -1
  471. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  472. package/dist/components/layout/Board/grid-core/compactors.js.map +1 -1
  473. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  474. package/dist/components/layout/Board/grid-core/constraints.js.map +1 -1
  475. package/dist/components/layout/Board/grid-core/group-move.js +1 -1
  476. package/dist/components/layout/Board/grid-core/group-move.js.map +1 -1
  477. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  478. package/dist/components/layout/Board/grid-core/layout.js.map +1 -1
  479. package/dist/components/layout/Board/grid-core/placement.js +1 -1
  480. package/dist/components/layout/Board/grid-core/placement.js.map +1 -1
  481. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  482. package/dist/components/layout/Board/grid-core/sort.js.map +1 -1
  483. package/dist/components/layout/Board/index.js +1 -1
  484. package/dist/components/layout/Board/index.js.map +1 -1
  485. package/dist/components/layout/Board/responsive-utils.js +1 -1
  486. package/dist/components/layout/Board/responsive-utils.js.map +1 -1
  487. package/dist/components/layout/Board/use-board-layout.js +8 -8
  488. package/dist/components/layout/Board/use-board-layout.js.map +1 -1
  489. package/dist/components/layout/Board/use-board-registry.js +257 -257
  490. package/dist/components/layout/Board/use-board-registry.js.map +1 -1
  491. package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
  492. package/dist/components/layout/Board/use-board-select-modifier-key.js.map +1 -1
  493. package/dist/components/layout/Board/use-board-selection.js +16 -16
  494. package/dist/components/layout/Board/use-board-selection.js.map +1 -1
  495. package/dist/components/layout/Flex.js +29 -7
  496. package/dist/components/layout/Flex.js.map +1 -1
  497. package/dist/components/layout/Flow.js +29 -7
  498. package/dist/components/layout/Flow.js.map +1 -1
  499. package/dist/components/layout/Grid.js +30 -7
  500. package/dist/components/layout/Grid.js.map +1 -1
  501. package/dist/components/layout/Panel.js +9 -9
  502. package/dist/components/layout/Panel.js.map +1 -1
  503. package/dist/components/layout/Prefix.js +59 -16
  504. package/dist/components/layout/Prefix.js.map +1 -1
  505. package/dist/components/layout/ResizablePanel.js +62 -32
  506. package/dist/components/layout/ResizablePanel.js.map +1 -1
  507. package/dist/components/layout/Space.js +55 -11
  508. package/dist/components/layout/Space.js.map +1 -1
  509. package/dist/components/layout/Suffix.js +59 -16
  510. package/dist/components/layout/Suffix.js.map +1 -1
  511. package/dist/components/navigation/Pagination/Pagination.js +394 -164
  512. package/dist/components/navigation/Pagination/Pagination.js.map +1 -1
  513. package/dist/components/navigation/Pagination/use-pagination.js +69 -26
  514. package/dist/components/navigation/Pagination/use-pagination.js.map +1 -1
  515. package/dist/components/navigation/Tabs/DraggableTabList.js +25 -10
  516. package/dist/components/navigation/Tabs/DraggableTabList.js.map +1 -1
  517. package/dist/components/navigation/Tabs/TabButton.js +604 -235
  518. package/dist/components/navigation/Tabs/TabButton.js.map +1 -1
  519. package/dist/components/navigation/Tabs/TabDropIndicator.js +65 -23
  520. package/dist/components/navigation/Tabs/TabDropIndicator.js.map +1 -1
  521. package/dist/components/navigation/Tabs/TabPanel.js +47 -19
  522. package/dist/components/navigation/Tabs/TabPanel.js.map +1 -1
  523. package/dist/components/navigation/Tabs/TabPicker.js +105 -33
  524. package/dist/components/navigation/Tabs/TabPicker.js.map +1 -1
  525. package/dist/components/navigation/Tabs/Tabs.js +45 -45
  526. package/dist/components/navigation/Tabs/Tabs.js.map +1 -1
  527. package/dist/components/navigation/Tabs/TabsAction.js +53 -19
  528. package/dist/components/navigation/Tabs/TabsAction.js.map +1 -1
  529. package/dist/components/navigation/Tabs/TabsContext.js +16 -6
  530. package/dist/components/navigation/Tabs/TabsContext.js.map +1 -1
  531. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  532. package/dist/components/navigation/Tabs/popover-placement.js.map +1 -1
  533. package/dist/components/navigation/Tabs/styled.js +1 -1
  534. package/dist/components/navigation/Tabs/styled.js.map +1 -1
  535. package/dist/components/navigation/Tabs/types.js +1 -1
  536. package/dist/components/navigation/Tabs/types.js.map +1 -1
  537. package/dist/components/navigation/Tabs/use-tab-editing.js +50 -13
  538. package/dist/components/navigation/Tabs/use-tab-editing.js.map +1 -1
  539. package/dist/components/navigation/Tabs/use-tab-indicator.js +111 -63
  540. package/dist/components/navigation/Tabs/use-tab-indicator.js.map +1 -1
  541. package/dist/components/organisms/StatsCard/StatsCard.js +54 -14
  542. package/dist/components/organisms/StatsCard/StatsCard.js.map +1 -1
  543. package/dist/components/other/Calendar/Calendar.js +79 -31
  544. package/dist/components/other/Calendar/Calendar.js.map +1 -1
  545. package/dist/components/other/Calendar/CalendarCell.js +66 -20
  546. package/dist/components/other/Calendar/CalendarCell.js.map +1 -1
  547. package/dist/components/other/Calendar/CalendarGrid.js +90 -40
  548. package/dist/components/other/Calendar/CalendarGrid.js.map +1 -1
  549. package/dist/components/other/Calendar/CalendarHeader.js +80 -17
  550. package/dist/components/other/Calendar/CalendarHeader.js.map +1 -1
  551. package/dist/components/other/Calendar/CalendarPanel.js +568 -144
  552. package/dist/components/other/Calendar/CalendarPanel.js.map +1 -1
  553. package/dist/components/other/Calendar/PeriodCalendar.js +425 -134
  554. package/dist/components/other/Calendar/PeriodCalendar.js.map +1 -1
  555. package/dist/components/other/Calendar/PeriodGrid.js +6 -6
  556. package/dist/components/other/Calendar/PeriodGrid.js.map +1 -1
  557. package/dist/components/other/Calendar/RangeCalendar.js +50 -24
  558. package/dist/components/other/Calendar/RangeCalendar.js.map +1 -1
  559. package/dist/components/other/Calendar/styled.js +1 -1
  560. package/dist/components/other/Calendar/styled.js.map +1 -1
  561. package/dist/components/other/CubeLogo/CubeLogo.js +95 -34
  562. package/dist/components/other/CubeLogo/CubeLogo.js.map +1 -1
  563. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  564. package/dist/components/other/NoDataIcon/NoDataIcon.js.map +1 -1
  565. package/dist/components/overlays/AlertDialog/AlertDialog.js +153 -42
  566. package/dist/components/overlays/AlertDialog/AlertDialog.js.map +1 -1
  567. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +76 -54
  568. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js.map +1 -1
  569. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +146 -39
  570. package/dist/components/overlays/AlertDialog/AlertDialogZone.js.map +1 -1
  571. package/dist/components/overlays/Dialog/Dialog.js +26 -10
  572. package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
  573. package/dist/components/overlays/Dialog/DialogContainer.js +13 -13
  574. package/dist/components/overlays/Dialog/DialogContainer.js.map +1 -1
  575. package/dist/components/overlays/Dialog/DialogForm.d.ts +12 -7
  576. package/dist/components/overlays/Dialog/DialogForm.js +18 -7
  577. package/dist/components/overlays/Dialog/DialogForm.js.map +1 -1
  578. package/dist/components/overlays/Dialog/DialogTrigger.d.ts +1 -1
  579. package/dist/components/overlays/Dialog/DialogTrigger.js +214 -59
  580. package/dist/components/overlays/Dialog/DialogTrigger.js.map +1 -1
  581. package/dist/components/overlays/Dialog/ModernDialogForm.js +350 -0
  582. package/dist/components/overlays/Dialog/ModernDialogForm.js.map +1 -0
  583. package/dist/components/overlays/Dialog/context.js +1 -1
  584. package/dist/components/overlays/Dialog/context.js.map +1 -1
  585. package/dist/components/overlays/Dialog/index.d.ts +1 -1
  586. package/dist/components/overlays/Dialog/use-dialog-container.js +6 -6
  587. package/dist/components/overlays/Dialog/use-dialog-container.js.map +1 -1
  588. package/dist/components/overlays/Modal/Modal.js +140 -27
  589. package/dist/components/overlays/Modal/Modal.js.map +1 -1
  590. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  591. package/dist/components/overlays/Modal/OpenTransitionContext.js.map +1 -1
  592. package/dist/components/overlays/Modal/Overlay.js +4 -4
  593. package/dist/components/overlays/Modal/Overlay.js.map +1 -1
  594. package/dist/components/overlays/Modal/Popover.js +131 -29
  595. package/dist/components/overlays/Modal/Popover.js.map +1 -1
  596. package/dist/components/overlays/Modal/Tray.js +142 -30
  597. package/dist/components/overlays/Modal/Tray.js.map +1 -1
  598. package/dist/components/overlays/Modal/Underlay.js +36 -7
  599. package/dist/components/overlays/Modal/Underlay.js.map +1 -1
  600. package/dist/components/overlays/Notifications/Notification.js +69 -32
  601. package/dist/components/overlays/Notifications/Notification.js.map +1 -1
  602. package/dist/components/overlays/Notifications/NotificationAction.js +79 -26
  603. package/dist/components/overlays/Notifications/NotificationAction.js.map +1 -1
  604. package/dist/components/overlays/Notifications/NotificationCard.js +138 -33
  605. package/dist/components/overlays/Notifications/NotificationCard.js.map +1 -1
  606. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  607. package/dist/components/overlays/Notifications/NotificationContext.js.map +1 -1
  608. package/dist/components/overlays/Notifications/NotificationItem.js +63 -16
  609. package/dist/components/overlays/Notifications/NotificationItem.js.map +1 -1
  610. package/dist/components/overlays/Notifications/OverlayContainer.js +312 -151
  611. package/dist/components/overlays/Notifications/OverlayContainer.js.map +1 -1
  612. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  613. package/dist/components/overlays/Notifications/OverlayProvider.js.map +1 -1
  614. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +210 -58
  615. package/dist/components/overlays/Notifications/PersistentNotificationsList.js.map +1 -1
  616. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  617. package/dist/components/overlays/Notifications/dismissed-storage.js.map +1 -1
  618. package/dist/components/overlays/Notifications/format-relative-time.d.ts +1 -1
  619. package/dist/components/overlays/Notifications/format-relative-time.js +3 -3
  620. package/dist/components/overlays/Notifications/format-relative-time.js.map +1 -1
  621. package/dist/components/overlays/Notifications/index.js +1 -1
  622. package/dist/components/overlays/Notifications/index.js.map +1 -1
  623. package/dist/components/overlays/Notifications/use-notification-state.js +51 -51
  624. package/dist/components/overlays/Notifications/use-notification-state.js.map +1 -1
  625. package/dist/components/overlays/Notifications/use-notifications.js +12 -12
  626. package/dist/components/overlays/Notifications/use-notifications.js.map +1 -1
  627. package/dist/components/overlays/Notifications/use-overlay-timers.js +10 -10
  628. package/dist/components/overlays/Notifications/use-overlay-timers.js.map +1 -1
  629. package/dist/components/overlays/Notifications/use-persistent-notifications.js +24 -5
  630. package/dist/components/overlays/Notifications/use-persistent-notifications.js.map +1 -1
  631. package/dist/components/overlays/Notifications/use-persistent-state.js +145 -43
  632. package/dist/components/overlays/Notifications/use-persistent-state.js.map +1 -1
  633. package/dist/components/overlays/Notifications/use-toast-state.js +25 -25
  634. package/dist/components/overlays/Notifications/use-toast-state.js.map +1 -1
  635. package/dist/components/overlays/Toast/ToastItem.js +68 -15
  636. package/dist/components/overlays/Toast/ToastItem.js.map +1 -1
  637. package/dist/components/overlays/Toast/index.js +100 -34
  638. package/dist/components/overlays/Toast/index.js.map +1 -1
  639. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  640. package/dist/components/overlays/Toast/useProgressToast.js.map +1 -1
  641. package/dist/components/overlays/Toast/useToast.js +9 -9
  642. package/dist/components/overlays/Toast/useToast.js.map +1 -1
  643. package/dist/components/overlays/Tooltip/Tooltip.js +88 -31
  644. package/dist/components/overlays/Tooltip/Tooltip.js.map +1 -1
  645. package/dist/components/overlays/Tooltip/TooltipProvider.js +75 -10
  646. package/dist/components/overlays/Tooltip/TooltipProvider.js.map +1 -1
  647. package/dist/components/overlays/Tooltip/TooltipTrigger.js +186 -77
  648. package/dist/components/overlays/Tooltip/TooltipTrigger.js.map +1 -1
  649. package/dist/components/overlays/Tooltip/context.js +1 -1
  650. package/dist/components/overlays/Tooltip/context.js.map +1 -1
  651. package/dist/components/portal/Portal.js +18 -3
  652. package/dist/components/portal/Portal.js.map +1 -1
  653. package/dist/components/portal/PortalProvider.js +11 -2
  654. package/dist/components/portal/PortalProvider.js.map +1 -1
  655. package/dist/components/portal/usePortal.js +1 -1
  656. package/dist/components/portal/usePortal.js.map +1 -1
  657. package/dist/components/shared/DraggableCollection.js +23 -23
  658. package/dist/components/shared/DraggableCollection.js.map +1 -1
  659. package/dist/components/shared/InvalidIcon.js +1 -1
  660. package/dist/components/shared/InvalidIcon.js.map +1 -1
  661. package/dist/components/shared/ValidIcon.js +1 -1
  662. package/dist/components/shared/ValidIcon.js.map +1 -1
  663. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +156 -48
  664. package/dist/components/status/LoadingAnimation/LoadingAnimation.js.map +1 -1
  665. package/dist/components/status/Spin/Cube.js +12 -3
  666. package/dist/components/status/Spin/Cube.js.map +1 -1
  667. package/dist/components/status/Spin/InternalSpinner.js +21 -6
  668. package/dist/components/status/Spin/InternalSpinner.js.map +1 -1
  669. package/dist/components/status/Spin/Spin.js +31 -7
  670. package/dist/components/status/Spin/Spin.js.map +1 -1
  671. package/dist/components/status/Spin/SpinsContainer.js +23 -6
  672. package/dist/components/status/Spin/SpinsContainer.js.map +1 -1
  673. package/dist/data/item-themes.js +1 -1
  674. package/dist/data/item-themes.js.map +1 -1
  675. package/dist/data/themes.js +1 -1
  676. package/dist/data/themes.js.map +1 -1
  677. package/dist/eslint-plugin/defaults.generated.js +15 -5
  678. package/dist/eslint-plugin/defaults.generated.js.map +1 -1
  679. package/dist/eslint-plugin/index.js +1 -1
  680. package/dist/eslint-plugin/index.js.map +1 -1
  681. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  682. package/dist/eslint-plugin/rules/no-redundant-default-prop.js.map +1 -1
  683. package/dist/i18n/I18nProvider.js +54 -13
  684. package/dist/i18n/I18nProvider.js.map +1 -1
  685. package/dist/i18n/createFormatter.js +1 -1
  686. package/dist/i18n/createFormatter.js.map +1 -1
  687. package/dist/i18n/index.js +1 -1
  688. package/dist/i18n/index.js.map +1 -1
  689. package/dist/i18n/instance.js +1 -1
  690. package/dist/i18n/instance.js.map +1 -1
  691. package/dist/i18n/locales/de-DE/uikit.js +1 -1
  692. package/dist/i18n/locales/en-US/uikit.js +1 -1
  693. package/dist/i18n/locales/es-ES/uikit.js +1 -1
  694. package/dist/i18n/locales/es-MX/uikit.js +1 -1
  695. package/dist/i18n/locales/fr-FR/uikit.js +1 -1
  696. package/dist/i18n/locales/it-IT/uikit.js +1 -1
  697. package/dist/i18n/locales/ja-JP/uikit.js +1 -1
  698. package/dist/i18n/locales/nb-NO/uikit.js +1 -1
  699. package/dist/i18n/locales/pt-BR/uikit.js +1 -1
  700. package/dist/i18n/locales/pt-PT/uikit.js +1 -1
  701. package/dist/i18n/locales/sv-SE/uikit.js +1 -1
  702. package/dist/i18n/locales/vi-VN/uikit.js +1 -1
  703. package/dist/i18n/locales.js +1 -1
  704. package/dist/i18n/locales.js.map +1 -1
  705. package/dist/i18n/useFormatter.js +10 -3
  706. package/dist/i18n/useFormatter.js.map +1 -1
  707. package/dist/i18n/useI18n.js +1 -1
  708. package/dist/i18n/useI18n.js.map +1 -1
  709. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  710. package/dist/icons/AdjustmentsHorizontalIcon.js.map +1 -1
  711. package/dist/icons/AdjustmentsIcon.js +1 -1
  712. package/dist/icons/AdjustmentsIcon.js.map +1 -1
  713. package/dist/icons/AiIcon.js +1 -1
  714. package/dist/icons/AiIcon.js.map +1 -1
  715. package/dist/icons/AreaChartIcon.js +1 -1
  716. package/dist/icons/AreaChartIcon.js.map +1 -1
  717. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  718. package/dist/icons/ArrowNarrowDownIcon.js.map +1 -1
  719. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  720. package/dist/icons/ArrowNarrowUpIcon.js.map +1 -1
  721. package/dist/icons/BackwardIcon.js +1 -1
  722. package/dist/icons/BackwardIcon.js.map +1 -1
  723. package/dist/icons/BarChartIcon.js +1 -1
  724. package/dist/icons/BarChartIcon.js.map +1 -1
  725. package/dist/icons/BellFilledIcon.js +1 -1
  726. package/dist/icons/BellFilledIcon.js.map +1 -1
  727. package/dist/icons/BellIcon.js +1 -1
  728. package/dist/icons/BellIcon.js.map +1 -1
  729. package/dist/icons/BooleanIcon.js +1 -1
  730. package/dist/icons/BooleanIcon.js.map +1 -1
  731. package/dist/icons/CalendarEditIcon.js +1 -1
  732. package/dist/icons/CalendarEditIcon.js.map +1 -1
  733. package/dist/icons/CalendarIcon.js +1 -1
  734. package/dist/icons/CalendarIcon.js.map +1 -1
  735. package/dist/icons/CaretDownIcon.js +1 -1
  736. package/dist/icons/CaretDownIcon.js.map +1 -1
  737. package/dist/icons/CaretUpIcon.js +1 -1
  738. package/dist/icons/CaretUpIcon.js.map +1 -1
  739. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  740. package/dist/icons/ChartAreaStackedIcon.js.map +1 -1
  741. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  742. package/dist/icons/ChartAreaStackedPercentageIcon.js.map +1 -1
  743. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  744. package/dist/icons/ChartBarGroupedHorizontalIcon.js.map +1 -1
  745. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  746. package/dist/icons/ChartBarGroupedIcon.js.map +1 -1
  747. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  748. package/dist/icons/ChartBarHorizontalIcon.js.map +1 -1
  749. package/dist/icons/ChartBarLineIcon.js +1 -1
  750. package/dist/icons/ChartBarLineIcon.js.map +1 -1
  751. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  752. package/dist/icons/ChartBarStackedHorizontalIcon.js.map +1 -1
  753. package/dist/icons/ChartBarStackedIcon.js +1 -1
  754. package/dist/icons/ChartBarStackedIcon.js.map +1 -1
  755. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  756. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js.map +1 -1
  757. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  758. package/dist/icons/ChartBarStackedPercentageIcon.js.map +1 -1
  759. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  760. package/dist/icons/ChartBoxPlot2Icon.js.map +1 -1
  761. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  762. package/dist/icons/ChartBoxPlotIcon.js.map +1 -1
  763. package/dist/icons/ChartBubbleIcon.js +1 -1
  764. package/dist/icons/ChartBubbleIcon.js.map +1 -1
  765. package/dist/icons/ChartDonut2Icon.js +1 -1
  766. package/dist/icons/ChartDonut2Icon.js.map +1 -1
  767. package/dist/icons/ChartFunnelIcon.js +1 -1
  768. package/dist/icons/ChartFunnelIcon.js.map +1 -1
  769. package/dist/icons/ChartHeatmapIcon.js +1 -1
  770. package/dist/icons/ChartHeatmapIcon.js.map +1 -1
  771. package/dist/icons/ChartKPIIcon.js +1 -1
  772. package/dist/icons/ChartKPIIcon.js.map +1 -1
  773. package/dist/icons/ChartPie2Icon.js +1 -1
  774. package/dist/icons/ChartPie2Icon.js.map +1 -1
  775. package/dist/icons/ChartScatterIcon.js +1 -1
  776. package/dist/icons/ChartScatterIcon.js.map +1 -1
  777. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  778. package/dist/icons/CheckCircleFilledIcon.js.map +1 -1
  779. package/dist/icons/CheckCircleIcon.js +1 -1
  780. package/dist/icons/CheckCircleIcon.js.map +1 -1
  781. package/dist/icons/CheckIcon.js +1 -1
  782. package/dist/icons/CheckIcon.js.map +1 -1
  783. package/dist/icons/CircleFilledIcon.js +1 -1
  784. package/dist/icons/CircleFilledIcon.js.map +1 -1
  785. package/dist/icons/ClearIcon.js +1 -1
  786. package/dist/icons/ClearIcon.js.map +1 -1
  787. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  788. package/dist/icons/CloseCircleFilledIcon.js.map +1 -1
  789. package/dist/icons/CloseCircleIcon.js +1 -1
  790. package/dist/icons/CloseCircleIcon.js.map +1 -1
  791. package/dist/icons/CloseIcon.js +1 -1
  792. package/dist/icons/CloseIcon.js.map +1 -1
  793. package/dist/icons/CodeIcon.js +1 -1
  794. package/dist/icons/CodeIcon.js.map +1 -1
  795. package/dist/icons/ColumnTotalIcon.js +1 -1
  796. package/dist/icons/ColumnTotalIcon.js.map +1 -1
  797. package/dist/icons/CopyIcon.js +1 -1
  798. package/dist/icons/CopyIcon.js.map +1 -1
  799. package/dist/icons/CountIcon.js +1 -1
  800. package/dist/icons/CountIcon.js.map +1 -1
  801. package/dist/icons/CubeIcon.js +1 -1
  802. package/dist/icons/CubeIcon.js.map +1 -1
  803. package/dist/icons/CubePauseIcon.js +1 -1
  804. package/dist/icons/CubePauseIcon.js.map +1 -1
  805. package/dist/icons/CubePlayIcon.js +1 -1
  806. package/dist/icons/CubePlayIcon.js.map +1 -1
  807. package/dist/icons/CurrencyDollarIcon.js +1 -1
  808. package/dist/icons/CurrencyDollarIcon.js.map +1 -1
  809. package/dist/icons/DangerIcon.js +1 -1
  810. package/dist/icons/DangerIcon.js.map +1 -1
  811. package/dist/icons/DashboardIcon.js +1 -1
  812. package/dist/icons/DashboardIcon.js.map +1 -1
  813. package/dist/icons/DatabaseIcon.js +1 -1
  814. package/dist/icons/DatabaseIcon.js.map +1 -1
  815. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  816. package/dist/icons/DecimalDecreaseIcon.js.map +1 -1
  817. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  818. package/dist/icons/DecimalIncreaseIcon.js.map +1 -1
  819. package/dist/icons/DirectionIcon.js +67 -22
  820. package/dist/icons/DirectionIcon.js.map +1 -1
  821. package/dist/icons/DonutIcon.js +1 -1
  822. package/dist/icons/DonutIcon.js.map +1 -1
  823. package/dist/icons/DownIcon.js +1 -1
  824. package/dist/icons/DownIcon.js.map +1 -1
  825. package/dist/icons/EditIcon.js +1 -1
  826. package/dist/icons/EditIcon.js.map +1 -1
  827. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  828. package/dist/icons/ExclamationCircleFilledIcon.js.map +1 -1
  829. package/dist/icons/ExclamationCircleIcon.js +1 -1
  830. package/dist/icons/ExclamationCircleIcon.js.map +1 -1
  831. package/dist/icons/ExclamationIcon.js +1 -1
  832. package/dist/icons/ExclamationIcon.js.map +1 -1
  833. package/dist/icons/EyeIcon.js +1 -1
  834. package/dist/icons/EyeIcon.js.map +1 -1
  835. package/dist/icons/EyeInvisibleIcon.js +1 -1
  836. package/dist/icons/EyeInvisibleIcon.js.map +1 -1
  837. package/dist/icons/FilterIcon.js +1 -1
  838. package/dist/icons/FilterIcon.js.map +1 -1
  839. package/dist/icons/FolderFilledIcon.js +1 -1
  840. package/dist/icons/FolderFilledIcon.js.map +1 -1
  841. package/dist/icons/FolderIcon.js +1 -1
  842. package/dist/icons/FolderIcon.js.map +1 -1
  843. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  844. package/dist/icons/FolderOpenFilledIcon.js.map +1 -1
  845. package/dist/icons/FolderOpenIcon.js +1 -1
  846. package/dist/icons/FolderOpenIcon.js.map +1 -1
  847. package/dist/icons/ForwardIcon.js +1 -1
  848. package/dist/icons/ForwardIcon.js.map +1 -1
  849. package/dist/icons/GripVerticalIcon.js +1 -1
  850. package/dist/icons/GripVerticalIcon.js.map +1 -1
  851. package/dist/icons/HierarchyIcon.js +1 -1
  852. package/dist/icons/HierarchyIcon.js.map +1 -1
  853. package/dist/icons/HierarchyOpenIcon.js +1 -1
  854. package/dist/icons/HierarchyOpenIcon.js.map +1 -1
  855. package/dist/icons/Icon.js +60 -16
  856. package/dist/icons/Icon.js.map +1 -1
  857. package/dist/icons/InfoCircleIcon.js +1 -1
  858. package/dist/icons/InfoCircleIcon.js.map +1 -1
  859. package/dist/icons/InfoIcon.js +1 -1
  860. package/dist/icons/InfoIcon.js.map +1 -1
  861. package/dist/icons/KeyIcon.js +1 -1
  862. package/dist/icons/KeyIcon.js.map +1 -1
  863. package/dist/icons/LeftIcon.js +1 -1
  864. package/dist/icons/LeftIcon.js.map +1 -1
  865. package/dist/icons/LineChartIcon.js +1 -1
  866. package/dist/icons/LineChartIcon.js.map +1 -1
  867. package/dist/icons/LoadingIcon.js +1 -1
  868. package/dist/icons/LoadingIcon.js.map +1 -1
  869. package/dist/icons/LockFilledIcon.js +1 -1
  870. package/dist/icons/LockFilledIcon.js.map +1 -1
  871. package/dist/icons/LockIcon.js +1 -1
  872. package/dist/icons/LockIcon.js.map +1 -1
  873. package/dist/icons/MoreIcon.js +1 -1
  874. package/dist/icons/MoreIcon.js.map +1 -1
  875. package/dist/icons/NotAllowedIcon.js +1 -1
  876. package/dist/icons/NotAllowedIcon.js.map +1 -1
  877. package/dist/icons/Number123Icon.js +1 -1
  878. package/dist/icons/Number123Icon.js.map +1 -1
  879. package/dist/icons/NumberIcon.js +1 -1
  880. package/dist/icons/NumberIcon.js.map +1 -1
  881. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  882. package/dist/icons/PauseCircleFilledIcon.js.map +1 -1
  883. package/dist/icons/PauseCircleIcon.js +1 -1
  884. package/dist/icons/PauseCircleIcon.js.map +1 -1
  885. package/dist/icons/PauseIcon.js +1 -1
  886. package/dist/icons/PauseIcon.js.map +1 -1
  887. package/dist/icons/PercentageIcon.js +1 -1
  888. package/dist/icons/PercentageIcon.js.map +1 -1
  889. package/dist/icons/PieChartIcon.js +1 -1
  890. package/dist/icons/PieChartIcon.js.map +1 -1
  891. package/dist/icons/PipetteIcon.js +1 -1
  892. package/dist/icons/PipetteIcon.js.map +1 -1
  893. package/dist/icons/PlayCircleIcon.js +1 -1
  894. package/dist/icons/PlayCircleIcon.js.map +1 -1
  895. package/dist/icons/PlayIcon.js +1 -1
  896. package/dist/icons/PlayIcon.js.map +1 -1
  897. package/dist/icons/PlusIcon.js +1 -1
  898. package/dist/icons/PlusIcon.js.map +1 -1
  899. package/dist/icons/ProgressBarIcon.js +1 -1
  900. package/dist/icons/ProgressBarIcon.js.map +1 -1
  901. package/dist/icons/ReloadIcon.js +1 -1
  902. package/dist/icons/ReloadIcon.js.map +1 -1
  903. package/dist/icons/ReportIcon.js +1 -1
  904. package/dist/icons/ReportIcon.js.map +1 -1
  905. package/dist/icons/ReturnIcon.js +1 -1
  906. package/dist/icons/ReturnIcon.js.map +1 -1
  907. package/dist/icons/RightIcon.js +1 -1
  908. package/dist/icons/RightIcon.js.map +1 -1
  909. package/dist/icons/RowTotalsIcon.js +1 -1
  910. package/dist/icons/RowTotalsIcon.js.map +1 -1
  911. package/dist/icons/SchemeIcon.js +1 -1
  912. package/dist/icons/SchemeIcon.js.map +1 -1
  913. package/dist/icons/SearchIcon.js +1 -1
  914. package/dist/icons/SearchIcon.js.map +1 -1
  915. package/dist/icons/SemanticQueryIcon.js +1 -1
  916. package/dist/icons/SemanticQueryIcon.js.map +1 -1
  917. package/dist/icons/SettingsIcon.js +1 -1
  918. package/dist/icons/SettingsIcon.js.map +1 -1
  919. package/dist/icons/ShieldFilledIcon.js +1 -1
  920. package/dist/icons/ShieldFilledIcon.js.map +1 -1
  921. package/dist/icons/ShieldIcon.js +1 -1
  922. package/dist/icons/ShieldIcon.js.map +1 -1
  923. package/dist/icons/SlashIcon.js +1 -1
  924. package/dist/icons/SlashIcon.js.map +1 -1
  925. package/dist/icons/SparklesIcon.js +1 -1
  926. package/dist/icons/SparklesIcon.js.map +1 -1
  927. package/dist/icons/SqlIcon.js +1 -1
  928. package/dist/icons/SqlIcon.js.map +1 -1
  929. package/dist/icons/StatsIcon.js +1 -1
  930. package/dist/icons/StatsIcon.js.map +1 -1
  931. package/dist/icons/StopIcon.js +1 -1
  932. package/dist/icons/StopIcon.js.map +1 -1
  933. package/dist/icons/StringIcon.js +1 -1
  934. package/dist/icons/StringIcon.js.map +1 -1
  935. package/dist/icons/SubtotalsIcon.js +1 -1
  936. package/dist/icons/SubtotalsIcon.js.map +1 -1
  937. package/dist/icons/SwitchIcon.js +1 -1
  938. package/dist/icons/SwitchIcon.js.map +1 -1
  939. package/dist/icons/TableIcon.js +1 -1
  940. package/dist/icons/TableIcon.js.map +1 -1
  941. package/dist/icons/ThumbsDownIcon.js +1 -1
  942. package/dist/icons/ThumbsDownIcon.js.map +1 -1
  943. package/dist/icons/ThumbsUpIcon.js +1 -1
  944. package/dist/icons/ThumbsUpIcon.js.map +1 -1
  945. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  946. package/dist/icons/ThunderboltCrossedIcon.js.map +1 -1
  947. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  948. package/dist/icons/ThunderboltFilledIcon.js.map +1 -1
  949. package/dist/icons/ThunderboltIcon.js +1 -1
  950. package/dist/icons/ThunderboltIcon.js.map +1 -1
  951. package/dist/icons/TimeIcon.js +1 -1
  952. package/dist/icons/TimeIcon.js.map +1 -1
  953. package/dist/icons/TrashIcon.js +1 -1
  954. package/dist/icons/TrashIcon.js.map +1 -1
  955. package/dist/icons/UnlockIcon.js +1 -1
  956. package/dist/icons/UnlockIcon.js.map +1 -1
  957. package/dist/icons/UpIcon.js +1 -1
  958. package/dist/icons/UpIcon.js.map +1 -1
  959. package/dist/icons/UserGroupIcon.js +1 -1
  960. package/dist/icons/UserGroupIcon.js.map +1 -1
  961. package/dist/icons/UserIcon.js +1 -1
  962. package/dist/icons/UserIcon.js.map +1 -1
  963. package/dist/icons/UserLockIcon.js +1 -1
  964. package/dist/icons/UserLockIcon.js.map +1 -1
  965. package/dist/icons/ViewIcon.js +1 -1
  966. package/dist/icons/ViewIcon.js.map +1 -1
  967. package/dist/icons/WarningFilledIcon.js +1 -1
  968. package/dist/icons/WarningFilledIcon.js.map +1 -1
  969. package/dist/icons/WarningIcon.js +1 -1
  970. package/dist/icons/WarningIcon.js.map +1 -1
  971. package/dist/icons/wrap-icon.js +15 -7
  972. package/dist/icons/wrap-icon.js.map +1 -1
  973. package/dist/index.d.ts +22 -22
  974. package/dist/index.js +1 -1
  975. package/dist/index.js.map +1 -1
  976. package/dist/probe/canonicalize.js +2 -2
  977. package/dist/probe/canonicalize.js.map +1 -1
  978. package/dist/probe/css.js +1 -1
  979. package/dist/probe/css.js.map +1 -1
  980. package/dist/probe/index.js +1 -1
  981. package/dist/provider.js +17 -7
  982. package/dist/provider.js.map +1 -1
  983. package/dist/providers/TrackingProvider.js +33 -9
  984. package/dist/providers/TrackingProvider.js.map +1 -1
  985. package/dist/providers/navigationAdapter.default.js +1 -1
  986. package/dist/providers/navigationAdapter.default.js.map +1 -1
  987. package/dist/tokens/all-tokens.js +1 -1
  988. package/dist/tokens/all-tokens.js.map +1 -1
  989. package/dist/tokens/base.js +1 -1
  990. package/dist/tokens/base.js.map +1 -1
  991. package/dist/tokens/color-seed.js +1 -1
  992. package/dist/tokens/color-seed.js.map +1 -1
  993. package/dist/tokens/color-theme.js +18 -3
  994. package/dist/tokens/color-theme.js.map +1 -1
  995. package/dist/tokens/colors.js +1 -1
  996. package/dist/tokens/colors.js.map +1 -1
  997. package/dist/tokens/layout.js +1 -1
  998. package/dist/tokens/layout.js.map +1 -1
  999. package/dist/tokens/lazy-styles.js +1 -1
  1000. package/dist/tokens/lazy-styles.js.map +1 -1
  1001. package/dist/tokens/legacy-color.js +1 -1
  1002. package/dist/tokens/legacy-color.js.map +1 -1
  1003. package/dist/tokens/palette-config.js +9 -2
  1004. package/dist/tokens/palette-config.js.map +1 -1
  1005. package/dist/tokens/palette.js +1 -1
  1006. package/dist/tokens/palette.js.map +1 -1
  1007. package/dist/tokens/resolve.js +85 -21
  1008. package/dist/tokens/resolve.js.map +1 -1
  1009. package/dist/tokens/shadows.js +1 -1
  1010. package/dist/tokens/shadows.js.map +1 -1
  1011. package/dist/tokens/sizes.js +1 -1
  1012. package/dist/tokens/sizes.js.map +1 -1
  1013. package/dist/tokens/spacing.js +1 -1
  1014. package/dist/tokens/spacing.js.map +1 -1
  1015. package/dist/tokens/typography.js +1 -1
  1016. package/dist/tokens/typography.js.map +1 -1
  1017. package/dist/utils/ResizeSensor.js +1 -1
  1018. package/dist/utils/ResizeSensor.js.map +1 -1
  1019. package/dist/utils/colors.js +1 -1
  1020. package/dist/utils/colors.js.map +1 -1
  1021. package/dist/utils/dotize.js +1 -1
  1022. package/dist/utils/dotize.js.map +1 -1
  1023. package/dist/utils/is-dev-env.js +1 -1
  1024. package/dist/utils/is-dev-env.js.map +1 -1
  1025. package/dist/utils/modules.js +1 -1
  1026. package/dist/utils/modules.js.map +1 -1
  1027. package/dist/utils/promise.js +1 -1
  1028. package/dist/utils/promise.js.map +1 -1
  1029. package/dist/utils/raf.js +1 -1
  1030. package/dist/utils/raf.js.map +1 -1
  1031. package/dist/utils/random.js +1 -1
  1032. package/dist/utils/random.js.map +1 -1
  1033. package/dist/utils/range.js +1 -1
  1034. package/dist/utils/range.js.map +1 -1
  1035. package/dist/utils/react/RenderCache.js +2 -2
  1036. package/dist/utils/react/RenderCache.js.map +1 -1
  1037. package/dist/utils/react/Slots.js +67 -24
  1038. package/dist/utils/react/Slots.js.map +1 -1
  1039. package/dist/utils/react/chain.js +1 -1
  1040. package/dist/utils/react/chain.js.map +1 -1
  1041. package/dist/utils/react/disabledProps.js +1 -1
  1042. package/dist/utils/react/disabledProps.js.map +1 -1
  1043. package/dist/utils/react/escapePropagation.js +1 -1
  1044. package/dist/utils/react/escapePropagation.js.map +1 -1
  1045. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  1046. package/dist/utils/react/forwardRefWithGenerics.js.map +1 -1
  1047. package/dist/utils/react/index.js +1 -1
  1048. package/dist/utils/react/interactions.js +35 -12
  1049. package/dist/utils/react/interactions.js.map +1 -1
  1050. package/dist/utils/react/isTextOnly.js +1 -1
  1051. package/dist/utils/react/isTextOnly.js.map +1 -1
  1052. package/dist/utils/react/mapProps.js +1 -1
  1053. package/dist/utils/react/mapProps.js.map +1 -1
  1054. package/dist/utils/react/mergeProps.js +1 -1
  1055. package/dist/utils/react/mergeProps.js.map +1 -1
  1056. package/dist/utils/react/nullableValue.js +1 -1
  1057. package/dist/utils/react/nullableValue.js.map +1 -1
  1058. package/dist/utils/react/programmaticFocus.js +1 -1
  1059. package/dist/utils/react/programmaticFocus.js.map +1 -1
  1060. package/dist/utils/react/resolveIcon.js +1 -1
  1061. package/dist/utils/react/resolveIcon.js.map +1 -1
  1062. package/dist/utils/react/sharedStore.js +13 -2
  1063. package/dist/utils/react/sharedStore.js.map +1 -1
  1064. package/dist/utils/react/useBufferedValue.js +5 -5
  1065. package/dist/utils/react/useBufferedValue.js.map +1 -1
  1066. package/dist/utils/react/useCombinedRefs.js +20 -5
  1067. package/dist/utils/react/useCombinedRefs.js.map +1 -1
  1068. package/dist/utils/react/useControlledFocusVisible.js +53 -17
  1069. package/dist/utils/react/useControlledFocusVisible.js.map +1 -1
  1070. package/dist/utils/react/useEventBus.js +43 -18
  1071. package/dist/utils/react/useEventBus.js.map +1 -1
  1072. package/dist/utils/react/useId.js +2 -1
  1073. package/dist/utils/react/useId.js.map +1 -1
  1074. package/dist/utils/react/useIsDarwin.js +29 -16
  1075. package/dist/utils/react/useIsDarwin.js.map +1 -1
  1076. package/dist/utils/react/useKeySymbols.js +23 -9
  1077. package/dist/utils/react/useKeySymbols.js.map +1 -1
  1078. package/dist/utils/react/useLayoutEffect.js +1 -1
  1079. package/dist/utils/react/useLayoutEffect.js.map +1 -1
  1080. package/dist/utils/react/useLocalStorage.js +75 -30
  1081. package/dist/utils/react/useLocalStorage.js.map +1 -1
  1082. package/dist/utils/react/useMergeStyles.js +1 -1
  1083. package/dist/utils/react/useMergeStyles.js.map +1 -1
  1084. package/dist/utils/react/useOverlayEscapeGuard.js +25 -9
  1085. package/dist/utils/react/useOverlayEscapeGuard.js.map +1 -1
  1086. package/dist/utils/react/usePopoverSync.js +175 -73
  1087. package/dist/utils/react/usePopoverSync.js.map +1 -1
  1088. package/dist/utils/react/useQaProps.js +1 -1
  1089. package/dist/utils/react/useQaProps.js.map +1 -1
  1090. package/dist/utils/react/useScheme.js +1 -1
  1091. package/dist/utils/react/useScheme.js.map +1 -1
  1092. package/dist/utils/react/useViewportSize.js +43 -19
  1093. package/dist/utils/react/useViewportSize.js.map +1 -1
  1094. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  1095. package/dist/utils/react/wrapNodeIfPlain.js.map +1 -1
  1096. package/dist/utils/selection.js +1 -1
  1097. package/dist/utils/selection.js.map +1 -1
  1098. package/dist/utils/styles.js +1 -1
  1099. package/dist/utils/styles.js.map +1 -1
  1100. package/dist/utils/tree.js +1 -1
  1101. package/dist/utils/tree.js.map +1 -1
  1102. package/dist/utils/warnings.js +1 -1
  1103. package/dist/utils/warnings.js.map +1 -1
  1104. package/dist/version.js +2 -2
  1105. package/dist/version.js.map +1 -1
  1106. package/docs/Usage.md +9 -1
  1107. package/docs/components/content/InlineInput.md +1 -1
  1108. package/docs/components/fields/ColorInput.md +13 -8
  1109. package/docs/components/fields/ColorPicker.md +13 -8
  1110. package/docs/components/fields/ComboBox.md +16 -12
  1111. package/docs/components/fields/FilterListBox.md +24 -19
  1112. package/docs/components/fields/FilterPicker.md +24 -19
  1113. package/docs/components/fields/ListBox.md +36 -26
  1114. package/docs/components/fields/Picker.md +27 -21
  1115. package/docs/components/fields/Select.md +16 -12
  1116. package/docs/components/form/Field.md +2 -2
  1117. package/docs/components/form/Form.md +60 -579
  1118. package/docs/components/form/ModernForm.md +22 -1
  1119. package/docs/components/overlays/DialogForm.md +121 -263
  1120. package/docs/components/overlays/DialogTrigger.md +1 -1
  1121. package/docs/components/overlays/UseDialogContainer.md +11 -13
  1122. package/docs/modern-form-guide.md +22 -1
  1123. package/docs/modern-form-migration.md +1 -1
  1124. package/package.json +7 -2
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.182.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.183.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { useRef, useState } from "react";
4
4
 
@@ -62,8 +62,8 @@ function useNotificationState(timersRef, persistent) {
62
62
  lastDismissReason: reason
63
63
  });
64
64
  while (dismissSnapshotsRef.current.size > MAX_DISMISS_SNAPSHOTS) {
65
- const oldest = dismissSnapshotsRef.current.keys().next().value;
66
- if (oldest != null) dismissSnapshotsRef.current.delete(oldest);
65
+ const oldest_0 = dismissSnapshotsRef.current.keys().next().value;
66
+ if (oldest_0 != null) dismissSnapshotsRef.current.delete(oldest_0);
67
67
  else break;
68
68
  }
69
69
  if (notif.persistent) {
@@ -84,14 +84,14 @@ function useNotificationState(timersRef, persistent) {
84
84
  persistent.removePersistentItem(notif.id ?? notif.internalId);
85
85
  }
86
86
  }
87
- setNotifications((prev) => prev.map((n) => matchesNotificationId(n, id) ? {
88
- ...n,
87
+ setNotifications((prev) => prev.map((n_0) => matchesNotificationId(n_0, id) ? {
88
+ ...n_0,
89
89
  isExiting: true,
90
90
  lastDismissReason: reason
91
- } : n));
91
+ } : n_0));
92
92
  });
93
- const restoreNotification = useEvent((id) => {
94
- const idStr = String(id);
93
+ const restoreNotification = useEvent((id_0) => {
94
+ const idStr = String(id_0);
95
95
  const snapshot = dismissSnapshotsRef.current.get(idStr);
96
96
  if (!snapshot) return;
97
97
  dismissSnapshotsRef.current.delete(idStr);
@@ -102,22 +102,22 @@ function useNotificationState(timersRef, persistent) {
102
102
  }
103
103
  const duration = getDuration(snapshot);
104
104
  if (duration != null && duration > 0) timersRef.current?.startNotificationTimer(snapshot.internalId, snapshot.id ?? snapshot.internalId, duration);
105
- if (findNotification(notificationsRef.current, id)) setNotifications((prev) => prev.map((n) => matchesNotificationId(n, id) ? {
106
- ...n,
105
+ if (findNotification(notificationsRef.current, id_0)) setNotifications((prev_0) => prev_0.map((n_1) => matchesNotificationId(n_1, id_0) ? {
106
+ ...n_1,
107
107
  isExiting: false,
108
108
  lastDismissReason: void 0
109
- } : n));
109
+ } : n_1));
110
110
  else {
111
111
  const restored = {
112
112
  ...snapshot,
113
113
  isExiting: false,
114
114
  lastDismissReason: void 0
115
115
  };
116
- setNotifications((prev) => [...prev, restored]);
116
+ setNotifications((prev_1) => [...prev_1, restored]);
117
117
  }
118
118
  });
119
119
  const finalizeNotificationRemoval = useEvent((internalId) => {
120
- setNotifications((prev) => prev.filter((n) => n.internalId !== internalId));
120
+ setNotifications((prev_2) => prev_2.filter((n_2) => n_2.internalId !== internalId));
121
121
  setTimeout(() => {
122
122
  for (const [key, snap] of dismissSnapshotsRef.current) if (snap.internalId === internalId) {
123
123
  dismissSnapshotsRef.current.delete(key);
@@ -130,13 +130,13 @@ function useNotificationState(timersRef, persistent) {
130
130
  notificationsRef,
131
131
  addNotification: useEvent((options, ownerId) => {
132
132
  idCounter.current += 1;
133
- const internalId = `notif-${idCounter.current}-${Date.now()}`;
133
+ const internalId_0 = `notif-${idCounter.current}-${Date.now()}`;
134
134
  const now = Date.now();
135
- const id = options.id ?? internalId;
136
- if (options.id != null && persistent.isFullyDismissedId(options.id)) return id;
135
+ const id_1 = options.id ?? internalId_0;
136
+ if (options.id != null && persistent.isFullyDismissedId(options.id)) return id_1;
137
137
  if (options.persistent && options.id != null && persistent.hasDismissedPersistentId(options.id)) {
138
138
  persistent.addPersistentItem({
139
- id,
139
+ id: id_1,
140
140
  theme: options.theme,
141
141
  title: options.title,
142
142
  description: options.description,
@@ -147,9 +147,9 @@ function useNotificationState(timersRef, persistent) {
147
147
  isRead: false,
148
148
  ownerId
149
149
  });
150
- return id;
150
+ return id_1;
151
151
  }
152
- const existingNotif = options.id != null ? notificationsRef.current.find((n) => n.id === options.id && !n.isExiting) : void 0;
152
+ const existingNotif = options.id != null ? notificationsRef.current.find((n_3) => n_3.id === options.id && !n_3.isExiting) : void 0;
153
153
  if (existingNotif) {
154
154
  const returnId = existingNotif.id ?? existingNotif.internalId;
155
155
  const prevTitle = existingNotif.title;
@@ -157,64 +157,64 @@ function useNotificationState(timersRef, persistent) {
157
157
  const titleChanged = typeof options.title === "string" && typeof prevTitle === "string" && options.title !== prevTitle;
158
158
  const descriptionChanged = typeof options.description === "string" && typeof prevDescription === "string" && options.description !== prevDescription;
159
159
  if (titleChanged || descriptionChanged) {
160
- const duration = getDuration(options);
161
- if (duration != null && duration > 0) timersRef.current?.startNotificationTimer(existingNotif.internalId, existingNotif.id ?? existingNotif.internalId, duration);
160
+ const duration_0 = getDuration(options);
161
+ if (duration_0 != null && duration_0 > 0) timersRef.current?.startNotificationTimer(existingNotif.internalId, existingNotif.id ?? existingNotif.internalId, duration_0);
162
162
  }
163
- setNotifications((prev) => prev.map((n) => {
164
- if (n.internalId === existingNotif.internalId) return {
165
- ...n,
163
+ setNotifications((prev_3) => prev_3.map((n_4) => {
164
+ if (n_4.internalId === existingNotif.internalId) return {
165
+ ...n_4,
166
166
  ...options,
167
- internalId: n.internalId,
168
- createdAt: n.createdAt,
167
+ internalId: n_4.internalId,
168
+ createdAt: n_4.createdAt,
169
169
  updatedAt: now,
170
- ownerId: ownerId ?? n.ownerId
170
+ ownerId: ownerId ?? n_4.ownerId
171
171
  };
172
- return n;
172
+ return n_4;
173
173
  }));
174
174
  return returnId;
175
175
  }
176
- const activeCount = notificationsRef.current.filter((n) => !n.isExiting).length;
176
+ const activeCount = notificationsRef.current.filter((n_5) => !n_5.isExiting).length;
177
177
  const newNotification = {
178
178
  ...options,
179
- id,
180
- internalId,
179
+ id: id_1,
180
+ internalId: internalId_0,
181
181
  createdAt: now,
182
182
  updatedAt: now,
183
183
  ownerId
184
184
  };
185
185
  let evictedInternalId = null;
186
186
  if (activeCount >= MAX_NOTIFICATIONS) evictedInternalId = evictOldest();
187
- const duration = getDuration(options);
188
- if (duration != null && duration > 0) timersRef.current?.startNotificationTimer(internalId, id, duration);
189
- setNotifications((prev) => {
190
- let next = prev;
191
- if (evictedInternalId) next = next.map((n) => n.internalId === evictedInternalId ? {
192
- ...n,
187
+ const duration_1 = getDuration(options);
188
+ if (duration_1 != null && duration_1 > 0) timersRef.current?.startNotificationTimer(internalId_0, id_1, duration_1);
189
+ setNotifications((prev_4) => {
190
+ let next = prev_4;
191
+ if (evictedInternalId) next = next.map((n_6) => n_6.internalId === evictedInternalId ? {
192
+ ...n_6,
193
193
  isExiting: true
194
- } : n);
194
+ } : n_6);
195
195
  return [...next, newNotification];
196
196
  });
197
- return id;
197
+ return id_1;
198
198
  }),
199
199
  removeNotification,
200
200
  restoreNotification,
201
- updateNotification: useEvent((id, options) => {
202
- setNotifications((prev) => prev.map((n) => matchesNotificationId(n, id) ? {
203
- ...n,
204
- ...options,
201
+ updateNotification: useEvent((id_2, options_0) => {
202
+ setNotifications((prev_5) => prev_5.map((n_7) => matchesNotificationId(n_7, id_2) ? {
203
+ ...n_7,
204
+ ...options_0,
205
205
  updatedAt: Date.now()
206
- } : n));
206
+ } : n_7));
207
207
  }),
208
208
  finalizeNotificationRemoval,
209
- removeByOwner: useEvent((ownerId) => {
210
- const owned = notificationsRef.current.filter((n) => n.ownerId === ownerId && !n.isExiting);
211
- for (const n of owned) timersRef.current?.clearNotificationTimer(n.internalId);
212
- setNotifications((prev) => prev.map((n) => {
213
- if (n.ownerId === ownerId && !n.isExiting) return {
214
- ...n,
209
+ removeByOwner: useEvent((ownerId_0) => {
210
+ const owned = notificationsRef.current.filter((n_8) => n_8.ownerId === ownerId_0 && !n_8.isExiting);
211
+ for (const n_9 of owned) timersRef.current?.clearNotificationTimer(n_9.internalId);
212
+ setNotifications((prev_6) => prev_6.map((n_10) => {
213
+ if (n_10.ownerId === ownerId_0 && !n_10.isExiting) return {
214
+ ...n_10,
215
215
  isExiting: true
216
216
  };
217
- return n;
217
+ return n_10;
218
218
  }));
219
219
  })
220
220
  };
@@ -1 +1 @@
1
- {"version":3,"file":"use-notification-state.js","names":[],"sources":["../../../../src/components/overlays/Notifications/use-notification-state.ts"],"sourcesContent":["import { Key, useRef, useState } from 'react';\n\nimport { useEvent } from '../../../_internal';\n\nimport type {\n DismissReason,\n InternalNotification,\n OverlayNotificationOptions,\n PersistentNotificationItem,\n} from './types';\nimport type { OverlayTimers } from './use-overlay-timers';\n\n// ─── Constants ───────────────────────────────────────────────────────\n\nconst DEFAULT_NOTIFICATION_DURATION = 3000;\nconst DEFAULT_PERSISTENT_NOTIFICATION_DURATION = 5000;\nconst MAX_NOTIFICATIONS = 5;\nconst MAX_DISMISS_SNAPSHOTS = 50;\nconst SNAPSHOT_TTL_MS = 5 * 60 * 1000;\n\n// ─── Types ───────────────────────────────────────────────────────────\n\nexport interface PersistentCallbacks {\n addPersistentItem: (item: PersistentNotificationItem) => void;\n removePersistentItem: (id: Key) => void;\n removePersistentItemSilently: (id: Key) => void;\n hasDismissedPersistentId: (id: Key) => boolean;\n isFullyDismissedId: (id: Key) => boolean;\n saveDismissedPersistentId: (id: Key) => void;\n undoFullyDismissedId: (id: Key) => void;\n}\n\nexport interface NotificationState {\n notifications: InternalNotification[];\n notificationsRef: ReturnType<typeof useRef<InternalNotification[]>>;\n addNotification: (\n options: OverlayNotificationOptions,\n ownerId?: string,\n ) => Key;\n removeNotification: (id: Key, reason?: DismissReason) => void;\n restoreNotification: (id: Key) => void;\n updateNotification: (\n id: Key,\n options: Partial<OverlayNotificationOptions>,\n ) => void;\n finalizeNotificationRemoval: (internalId: string) => void;\n removeByOwner: (ownerId: string) => void;\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────\n\nfunction getDuration(\n notif: OverlayNotificationOptions & { persistent?: boolean },\n): number | null {\n if (notif.duration === null) return null;\n if (notif.duration !== undefined) return notif.duration;\n return notif.persistent\n ? DEFAULT_PERSISTENT_NOTIFICATION_DURATION\n : DEFAULT_NOTIFICATION_DURATION;\n}\n\nfunction matchesNotificationId(item: InternalNotification, id: Key): boolean {\n return item.id === id || item.internalId === String(id);\n}\n\nfunction findNotification(\n list: InternalNotification[],\n id: Key,\n): InternalNotification | undefined {\n return list.find((n) => matchesNotificationId(n, id));\n}\n\n// ─── Hook ────────────────────────────────────────────────────────────\n\n/**\n * @param timersRef - Ref to the shared OverlayTimers instance. Accessed only\n * inside callbacks (never during render), so it is guaranteed to be populated.\n */\nexport function useNotificationState(\n timersRef: ReturnType<typeof useRef<OverlayTimers>>,\n persistent: PersistentCallbacks,\n): NotificationState {\n const [notifications, setNotifications] = useState<InternalNotification[]>(\n [],\n );\n const notificationsRef = useRef(notifications);\n notificationsRef.current = notifications;\n\n const idCounter = useRef(0);\n\n // Snapshots of dismissed notifications, keyed by notification id (string).\n // Saved at dismiss time so restoreNotification can re-add the notification\n // even after finalizeNotificationRemoval has removed it from state.\n const dismissSnapshotsRef = useRef<Map<string, InternalNotification>>(\n new Map(),\n );\n\n // ─── Evict Helper ──────────────────────────────────────────────\n\n /**\n * Evict the oldest active notification to make room for a new one.\n * Clears its timer and moves it to the persistent list if applicable.\n * Must be called OUTSIDE setState updaters (StrictMode-safe).\n */\n const evictOldest = useEvent((): string | null => {\n const active = notificationsRef.current.filter((n) => !n.isExiting);\n\n if (active.length === 0) return null;\n\n // Oldest by createdAt (active list preserves insertion order)\n const oldest = active[0];\n\n timersRef.current?.clearNotificationTimer(oldest.internalId);\n\n // Eviction counts as a timeout dismissal — move to persistent list if applicable\n if (oldest.persistent) {\n persistent.addPersistentItem({\n id: oldest.id ?? oldest.internalId,\n theme: oldest.theme,\n title: oldest.title,\n description: oldest.description,\n icon: oldest.icon,\n actions: oldest.actions,\n createdAt: oldest.createdAt,\n updatedAt: oldest.updatedAt,\n isRead: false,\n ownerId: oldest.ownerId,\n });\n }\n\n return oldest.internalId;\n });\n\n // ─── Remove ─────────────────────────────────────────────────────\n\n const removeNotification = useEvent(\n (id: Key, reason: DismissReason = 'api') => {\n // Read from ref (synchronous) to perform side effects OUTSIDE the updater.\n // This prevents double-fire in StrictMode and avoids calling setState\n // (addPersistentItem) inside another setState updater.\n const notif = findNotification(notificationsRef.current, id);\n\n if (!notif || notif.isExiting) return;\n\n timersRef.current?.clearNotificationTimer(notif.internalId);\n\n // Snapshot the notification for potential restore after finalization.\n dismissSnapshotsRef.current.set(String(notif.id ?? notif.internalId), {\n ...notif,\n lastDismissReason: reason,\n });\n\n // Prevent unbounded growth of dismiss snapshots.\n while (dismissSnapshotsRef.current.size > MAX_DISMISS_SNAPSHOTS) {\n const oldest = dismissSnapshotsRef.current.keys().next().value;\n\n if (oldest != null) {\n dismissSnapshotsRef.current.delete(oldest);\n } else {\n break;\n }\n }\n\n if (notif.persistent) {\n if (reason === 'close' || reason === 'timeout') {\n // Dismiss button, Escape, or auto-dismiss timeout — move to persistent list.\n // If the same id is triggered again, it skips the overlay and updates the\n // persistent list directly.\n persistent.addPersistentItem({\n id: notif.id ?? notif.internalId,\n theme: notif.theme,\n title: notif.title,\n description: notif.description,\n icon: notif.icon,\n actions: notif.actions,\n createdAt: notif.createdAt,\n updatedAt: notif.updatedAt,\n isRead: true,\n ownerId: notif.ownerId,\n });\n } else if (reason === 'action') {\n // User clicked a regular action (not dismiss) — fully dismiss the\n // notification so it never reappears (overlay or persistent list).\n persistent.saveDismissedPersistentId(notif.id ?? notif.internalId);\n persistent.removePersistentItem(notif.id ?? notif.internalId);\n }\n // reason === 'api' — programmatic cleanup (e.g. component unmount).\n // No persistence, no full-dismiss tracking.\n }\n\n setNotifications((prev) =>\n prev.map((n) =>\n matchesNotificationId(n, id)\n ? { ...n, isExiting: true, lastDismissReason: reason }\n : n,\n ),\n );\n },\n );\n\n // ─── Restore ──────────────────────────────────────────────────\n\n const restoreNotification = useEvent((id: Key) => {\n const idStr = String(id);\n const snapshot = dismissSnapshotsRef.current.get(idStr);\n\n if (!snapshot) return;\n\n dismissSnapshotsRef.current.delete(idStr);\n\n // Undo persistent side effects based on how the notification was dismissed.\n if (snapshot.persistent && snapshot.lastDismissReason) {\n const persistentId = snapshot.id ?? snapshot.internalId;\n\n if (\n snapshot.lastDismissReason === 'close' ||\n snapshot.lastDismissReason === 'timeout'\n ) {\n persistent.removePersistentItemSilently(persistentId);\n } else if (snapshot.lastDismissReason === 'action') {\n persistent.undoFullyDismissedId(persistentId);\n }\n }\n\n // Restart the auto-dismiss timer.\n const duration = getDuration(snapshot);\n\n if (duration != null && duration > 0) {\n timersRef.current?.startNotificationTimer(\n snapshot.internalId,\n snapshot.id ?? snapshot.internalId,\n duration,\n );\n }\n\n const stillInState = findNotification(notificationsRef.current, id);\n\n if (stillInState) {\n // Exit animation hasn't completed yet — cancel it.\n setNotifications((prev) =>\n prev.map((n) =>\n matchesNotificationId(n, id)\n ? { ...n, isExiting: false, lastDismissReason: undefined }\n : n,\n ),\n );\n } else {\n // Notification was already finalized (removed from state) — re-add it.\n const restored: InternalNotification = {\n ...snapshot,\n isExiting: false,\n lastDismissReason: undefined,\n };\n\n setNotifications((prev) => [...prev, restored]);\n }\n });\n\n // ─── Finalize ──────────────────────────────────────────────────\n\n const finalizeNotificationRemoval = useEvent((internalId: string) => {\n setNotifications((prev) => prev.filter((n) => n.internalId !== internalId));\n\n // Deferred cleanup of the dismiss snapshot. Kept briefly so async action\n // callbacks can still call restoreNotification after the exit animation.\n setTimeout(() => {\n for (const [key, snap] of dismissSnapshotsRef.current) {\n if (snap.internalId === internalId) {\n dismissSnapshotsRef.current.delete(key);\n break;\n }\n }\n }, SNAPSHOT_TTL_MS);\n });\n\n // ─── Add ────────────────────────────────────────────────────────\n\n const addNotification = useEvent(\n (options: OverlayNotificationOptions, ownerId?: string): Key => {\n idCounter.current += 1;\n const internalId = `notif-${idCounter.current}-${Date.now()}`;\n const now = Date.now();\n const id = options.id ?? internalId;\n\n // If the user explicitly removed this notification from the persistent\n // list, completely ignore it — no overlay, no persistent storage.\n if (options.id != null && persistent.isFullyDismissedId(options.id)) {\n return id;\n }\n\n // If this persistent id was previously dismissed to the persistent list,\n // skip the overlay and update the persistent item directly.\n if (\n options.persistent &&\n options.id != null &&\n persistent.hasDismissedPersistentId(options.id)\n ) {\n persistent.addPersistentItem({\n id,\n theme: options.theme,\n title: options.title,\n description: options.description,\n icon: options.icon,\n actions: options.actions,\n createdAt: now,\n updatedAt: now,\n isRead: false,\n ownerId,\n });\n\n return id;\n }\n\n // Check for existing notification with same id via the ref (synchronous read).\n const existingNotif =\n options.id != null\n ? notificationsRef.current.find(\n (n) => n.id === options.id && !n.isExiting,\n )\n : undefined;\n\n if (existingNotif) {\n // In-place update of an existing notification\n const returnId = existingNotif.id ?? existingNotif.internalId;\n\n const prevTitle = existingNotif.title;\n const prevDescription = existingNotif.description;\n\n // Timer reset on string title/description change\n const titleChanged =\n typeof options.title === 'string' &&\n typeof prevTitle === 'string' &&\n options.title !== prevTitle;\n const descriptionChanged =\n typeof options.description === 'string' &&\n typeof prevDescription === 'string' &&\n options.description !== prevDescription;\n\n if (titleChanged || descriptionChanged) {\n const duration = getDuration(options);\n\n if (duration != null && duration > 0) {\n timersRef.current?.startNotificationTimer(\n existingNotif.internalId,\n existingNotif.id ?? existingNotif.internalId,\n duration,\n );\n }\n }\n\n setNotifications((prev) =>\n prev.map((n) => {\n if (n.internalId === existingNotif.internalId) {\n return {\n ...n,\n ...options,\n internalId: n.internalId,\n createdAt: n.createdAt,\n updatedAt: now,\n ownerId: ownerId ?? n.ownerId,\n };\n }\n return n;\n }),\n );\n\n return returnId;\n }\n\n // New notification — always show immediately, evicting the oldest if at cap.\n // Read from ref (synchronous) to perform side effects OUTSIDE the updater.\n const activeCount = notificationsRef.current.filter(\n (n) => !n.isExiting,\n ).length;\n\n const newNotification: InternalNotification = {\n ...options,\n id,\n internalId,\n createdAt: now,\n updatedAt: now,\n ownerId,\n };\n\n // Evict oldest if at cap (side effects outside updater)\n let evictedInternalId: string | null = null;\n\n if (activeCount >= MAX_NOTIFICATIONS) {\n evictedInternalId = evictOldest();\n }\n\n // Start timer for the new notification\n const duration = getDuration(options);\n\n if (duration != null && duration > 0) {\n timersRef.current?.startNotificationTimer(internalId, id, duration);\n }\n\n setNotifications((prev) => {\n let next = prev;\n\n if (evictedInternalId) {\n next = next.map((n) =>\n n.internalId === evictedInternalId ? { ...n, isExiting: true } : n,\n );\n }\n\n return [...next, newNotification];\n });\n\n return id;\n },\n );\n\n // ─── Update ─────────────────────────────────────────────────────\n\n const updateNotification = useEvent(\n (id: Key, options: Partial<OverlayNotificationOptions>) => {\n setNotifications((prev) =>\n prev.map((n) =>\n matchesNotificationId(n, id)\n ? { ...n, ...options, updatedAt: Date.now() }\n : n,\n ),\n );\n },\n );\n\n // ─── Owner Cleanup ──────────────────────────────────────────────\n\n const removeByOwner = useEvent((ownerId: string) => {\n // Clear timers outside the updater (StrictMode-safe).\n const owned = notificationsRef.current.filter(\n (n) => n.ownerId === ownerId && !n.isExiting,\n );\n\n for (const n of owned) {\n timersRef.current?.clearNotificationTimer(n.internalId);\n }\n\n setNotifications((prev) =>\n prev.map((n) => {\n if (n.ownerId === ownerId && !n.isExiting) {\n return { ...n, isExiting: true };\n }\n return n;\n }),\n );\n });\n\n return {\n notifications,\n notificationsRef,\n addNotification,\n removeNotification,\n restoreNotification,\n updateNotification,\n finalizeNotificationRemoval,\n removeByOwner,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-notification-state.js","names":["Key","useRef","useState","useEvent","DismissReason","InternalNotification","OverlayNotificationOptions","PersistentNotificationItem","OverlayTimers","DEFAULT_NOTIFICATION_DURATION","DEFAULT_PERSISTENT_NOTIFICATION_DURATION","MAX_NOTIFICATIONS","MAX_DISMISS_SNAPSHOTS","SNAPSHOT_TTL_MS","PersistentCallbacks","addPersistentItem","item","removePersistentItem","id","removePersistentItemSilently","hasDismissedPersistentId","isFullyDismissedId","saveDismissedPersistentId","undoFullyDismissedId","NotificationState","notifications","notificationsRef","ReturnType","addNotification","options","ownerId","removeNotification","reason","restoreNotification","updateNotification","Partial","finalizeNotificationRemoval","internalId","removeByOwner","getDuration","notif","persistent","duration","undefined","matchesNotificationId","String","findNotification","list","find","n","useNotificationState","timersRef","setNotifications","current","idCounter","dismissSnapshotsRef","Map","evictOldest","active","filter","isExiting","length","oldest","clearNotificationTimer","theme","title","description","icon","actions","createdAt","updatedAt","isRead","set","lastDismissReason","size","keys","next","value","delete","prev","map","idStr","snapshot","get","persistentId","startNotificationTimer","stillInState","restored","setTimeout","key","snap","Date","now","existingNotif","returnId","prevTitle","prevDescription","titleChanged","descriptionChanged","activeCount","newNotification","evictedInternalId","owned"],"sources":["../../../../src/components/overlays/Notifications/use-notification-state.ts"],"sourcesContent":["import { Key, useRef, useState } from 'react';\n\nimport { useEvent } from '../../../_internal';\n\nimport type {\n DismissReason,\n InternalNotification,\n OverlayNotificationOptions,\n PersistentNotificationItem,\n} from './types';\nimport type { OverlayTimers } from './use-overlay-timers';\n\n// ─── Constants ───────────────────────────────────────────────────────\n\nconst DEFAULT_NOTIFICATION_DURATION = 3000;\nconst DEFAULT_PERSISTENT_NOTIFICATION_DURATION = 5000;\nconst MAX_NOTIFICATIONS = 5;\nconst MAX_DISMISS_SNAPSHOTS = 50;\nconst SNAPSHOT_TTL_MS = 5 * 60 * 1000;\n\n// ─── Types ───────────────────────────────────────────────────────────\n\nexport interface PersistentCallbacks {\n addPersistentItem: (item: PersistentNotificationItem) => void;\n removePersistentItem: (id: Key) => void;\n removePersistentItemSilently: (id: Key) => void;\n hasDismissedPersistentId: (id: Key) => boolean;\n isFullyDismissedId: (id: Key) => boolean;\n saveDismissedPersistentId: (id: Key) => void;\n undoFullyDismissedId: (id: Key) => void;\n}\n\nexport interface NotificationState {\n notifications: InternalNotification[];\n notificationsRef: ReturnType<typeof useRef<InternalNotification[]>>;\n addNotification: (\n options: OverlayNotificationOptions,\n ownerId?: string,\n ) => Key;\n removeNotification: (id: Key, reason?: DismissReason) => void;\n restoreNotification: (id: Key) => void;\n updateNotification: (\n id: Key,\n options: Partial<OverlayNotificationOptions>,\n ) => void;\n finalizeNotificationRemoval: (internalId: string) => void;\n removeByOwner: (ownerId: string) => void;\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────\n\nfunction getDuration(\n notif: OverlayNotificationOptions & { persistent?: boolean },\n): number | null {\n if (notif.duration === null) return null;\n if (notif.duration !== undefined) return notif.duration;\n return notif.persistent\n ? DEFAULT_PERSISTENT_NOTIFICATION_DURATION\n : DEFAULT_NOTIFICATION_DURATION;\n}\n\nfunction matchesNotificationId(item: InternalNotification, id: Key): boolean {\n return item.id === id || item.internalId === String(id);\n}\n\nfunction findNotification(\n list: InternalNotification[],\n id: Key,\n): InternalNotification | undefined {\n return list.find((n) => matchesNotificationId(n, id));\n}\n\n// ─── Hook ────────────────────────────────────────────────────────────\n\n/**\n * @param timersRef - Ref to the shared OverlayTimers instance. Accessed only\n * inside callbacks (never during render), so it is guaranteed to be populated.\n */\nexport function useNotificationState(\n timersRef: ReturnType<typeof useRef<OverlayTimers>>,\n persistent: PersistentCallbacks,\n): NotificationState {\n const [notifications, setNotifications] = useState<InternalNotification[]>(\n [],\n );\n const notificationsRef = useRef(notifications);\n notificationsRef.current = notifications;\n\n const idCounter = useRef(0);\n\n // Snapshots of dismissed notifications, keyed by notification id (string).\n // Saved at dismiss time so restoreNotification can re-add the notification\n // even after finalizeNotificationRemoval has removed it from state.\n const dismissSnapshotsRef = useRef<Map<string, InternalNotification>>(\n new Map(),\n );\n\n // ─── Evict Helper ──────────────────────────────────────────────\n\n /**\n * Evict the oldest active notification to make room for a new one.\n * Clears its timer and moves it to the persistent list if applicable.\n * Must be called OUTSIDE setState updaters (StrictMode-safe).\n */\n const evictOldest = useEvent((): string | null => {\n const active = notificationsRef.current.filter((n) => !n.isExiting);\n\n if (active.length === 0) return null;\n\n // Oldest by createdAt (active list preserves insertion order)\n const oldest = active[0];\n\n timersRef.current?.clearNotificationTimer(oldest.internalId);\n\n // Eviction counts as a timeout dismissal — move to persistent list if applicable\n if (oldest.persistent) {\n persistent.addPersistentItem({\n id: oldest.id ?? oldest.internalId,\n theme: oldest.theme,\n title: oldest.title,\n description: oldest.description,\n icon: oldest.icon,\n actions: oldest.actions,\n createdAt: oldest.createdAt,\n updatedAt: oldest.updatedAt,\n isRead: false,\n ownerId: oldest.ownerId,\n });\n }\n\n return oldest.internalId;\n });\n\n // ─── Remove ─────────────────────────────────────────────────────\n\n const removeNotification = useEvent(\n (id: Key, reason: DismissReason = 'api') => {\n // Read from ref (synchronous) to perform side effects OUTSIDE the updater.\n // This prevents double-fire in StrictMode and avoids calling setState\n // (addPersistentItem) inside another setState updater.\n const notif = findNotification(notificationsRef.current, id);\n\n if (!notif || notif.isExiting) return;\n\n timersRef.current?.clearNotificationTimer(notif.internalId);\n\n // Snapshot the notification for potential restore after finalization.\n dismissSnapshotsRef.current.set(String(notif.id ?? notif.internalId), {\n ...notif,\n lastDismissReason: reason,\n });\n\n // Prevent unbounded growth of dismiss snapshots.\n while (dismissSnapshotsRef.current.size > MAX_DISMISS_SNAPSHOTS) {\n const oldest = dismissSnapshotsRef.current.keys().next().value;\n\n if (oldest != null) {\n dismissSnapshotsRef.current.delete(oldest);\n } else {\n break;\n }\n }\n\n if (notif.persistent) {\n if (reason === 'close' || reason === 'timeout') {\n // Dismiss button, Escape, or auto-dismiss timeout — move to persistent list.\n // If the same id is triggered again, it skips the overlay and updates the\n // persistent list directly.\n persistent.addPersistentItem({\n id: notif.id ?? notif.internalId,\n theme: notif.theme,\n title: notif.title,\n description: notif.description,\n icon: notif.icon,\n actions: notif.actions,\n createdAt: notif.createdAt,\n updatedAt: notif.updatedAt,\n isRead: true,\n ownerId: notif.ownerId,\n });\n } else if (reason === 'action') {\n // User clicked a regular action (not dismiss) — fully dismiss the\n // notification so it never reappears (overlay or persistent list).\n persistent.saveDismissedPersistentId(notif.id ?? notif.internalId);\n persistent.removePersistentItem(notif.id ?? notif.internalId);\n }\n // reason === 'api' — programmatic cleanup (e.g. component unmount).\n // No persistence, no full-dismiss tracking.\n }\n\n setNotifications((prev) =>\n prev.map((n) =>\n matchesNotificationId(n, id)\n ? { ...n, isExiting: true, lastDismissReason: reason }\n : n,\n ),\n );\n },\n );\n\n // ─── Restore ──────────────────────────────────────────────────\n\n const restoreNotification = useEvent((id: Key) => {\n const idStr = String(id);\n const snapshot = dismissSnapshotsRef.current.get(idStr);\n\n if (!snapshot) return;\n\n dismissSnapshotsRef.current.delete(idStr);\n\n // Undo persistent side effects based on how the notification was dismissed.\n if (snapshot.persistent && snapshot.lastDismissReason) {\n const persistentId = snapshot.id ?? snapshot.internalId;\n\n if (\n snapshot.lastDismissReason === 'close' ||\n snapshot.lastDismissReason === 'timeout'\n ) {\n persistent.removePersistentItemSilently(persistentId);\n } else if (snapshot.lastDismissReason === 'action') {\n persistent.undoFullyDismissedId(persistentId);\n }\n }\n\n // Restart the auto-dismiss timer.\n const duration = getDuration(snapshot);\n\n if (duration != null && duration > 0) {\n timersRef.current?.startNotificationTimer(\n snapshot.internalId,\n snapshot.id ?? snapshot.internalId,\n duration,\n );\n }\n\n const stillInState = findNotification(notificationsRef.current, id);\n\n if (stillInState) {\n // Exit animation hasn't completed yet — cancel it.\n setNotifications((prev) =>\n prev.map((n) =>\n matchesNotificationId(n, id)\n ? { ...n, isExiting: false, lastDismissReason: undefined }\n : n,\n ),\n );\n } else {\n // Notification was already finalized (removed from state) — re-add it.\n const restored: InternalNotification = {\n ...snapshot,\n isExiting: false,\n lastDismissReason: undefined,\n };\n\n setNotifications((prev) => [...prev, restored]);\n }\n });\n\n // ─── Finalize ──────────────────────────────────────────────────\n\n const finalizeNotificationRemoval = useEvent((internalId: string) => {\n setNotifications((prev) => prev.filter((n) => n.internalId !== internalId));\n\n // Deferred cleanup of the dismiss snapshot. Kept briefly so async action\n // callbacks can still call restoreNotification after the exit animation.\n setTimeout(() => {\n for (const [key, snap] of dismissSnapshotsRef.current) {\n if (snap.internalId === internalId) {\n dismissSnapshotsRef.current.delete(key);\n break;\n }\n }\n }, SNAPSHOT_TTL_MS);\n });\n\n // ─── Add ────────────────────────────────────────────────────────\n\n const addNotification = useEvent(\n (options: OverlayNotificationOptions, ownerId?: string): Key => {\n idCounter.current += 1;\n const internalId = `notif-${idCounter.current}-${Date.now()}`;\n const now = Date.now();\n const id = options.id ?? internalId;\n\n // If the user explicitly removed this notification from the persistent\n // list, completely ignore it — no overlay, no persistent storage.\n if (options.id != null && persistent.isFullyDismissedId(options.id)) {\n return id;\n }\n\n // If this persistent id was previously dismissed to the persistent list,\n // skip the overlay and update the persistent item directly.\n if (\n options.persistent &&\n options.id != null &&\n persistent.hasDismissedPersistentId(options.id)\n ) {\n persistent.addPersistentItem({\n id,\n theme: options.theme,\n title: options.title,\n description: options.description,\n icon: options.icon,\n actions: options.actions,\n createdAt: now,\n updatedAt: now,\n isRead: false,\n ownerId,\n });\n\n return id;\n }\n\n // Check for existing notification with same id via the ref (synchronous read).\n const existingNotif =\n options.id != null\n ? notificationsRef.current.find(\n (n) => n.id === options.id && !n.isExiting,\n )\n : undefined;\n\n if (existingNotif) {\n // In-place update of an existing notification\n const returnId = existingNotif.id ?? existingNotif.internalId;\n\n const prevTitle = existingNotif.title;\n const prevDescription = existingNotif.description;\n\n // Timer reset on string title/description change\n const titleChanged =\n typeof options.title === 'string' &&\n typeof prevTitle === 'string' &&\n options.title !== prevTitle;\n const descriptionChanged =\n typeof options.description === 'string' &&\n typeof prevDescription === 'string' &&\n options.description !== prevDescription;\n\n if (titleChanged || descriptionChanged) {\n const duration = getDuration(options);\n\n if (duration != null && duration > 0) {\n timersRef.current?.startNotificationTimer(\n existingNotif.internalId,\n existingNotif.id ?? existingNotif.internalId,\n duration,\n );\n }\n }\n\n setNotifications((prev) =>\n prev.map((n) => {\n if (n.internalId === existingNotif.internalId) {\n return {\n ...n,\n ...options,\n internalId: n.internalId,\n createdAt: n.createdAt,\n updatedAt: now,\n ownerId: ownerId ?? n.ownerId,\n };\n }\n return n;\n }),\n );\n\n return returnId;\n }\n\n // New notification — always show immediately, evicting the oldest if at cap.\n // Read from ref (synchronous) to perform side effects OUTSIDE the updater.\n const activeCount = notificationsRef.current.filter(\n (n) => !n.isExiting,\n ).length;\n\n const newNotification: InternalNotification = {\n ...options,\n id,\n internalId,\n createdAt: now,\n updatedAt: now,\n ownerId,\n };\n\n // Evict oldest if at cap (side effects outside updater)\n let evictedInternalId: string | null = null;\n\n if (activeCount >= MAX_NOTIFICATIONS) {\n evictedInternalId = evictOldest();\n }\n\n // Start timer for the new notification\n const duration = getDuration(options);\n\n if (duration != null && duration > 0) {\n timersRef.current?.startNotificationTimer(internalId, id, duration);\n }\n\n setNotifications((prev) => {\n let next = prev;\n\n if (evictedInternalId) {\n next = next.map((n) =>\n n.internalId === evictedInternalId ? { ...n, isExiting: true } : n,\n );\n }\n\n return [...next, newNotification];\n });\n\n return id;\n },\n );\n\n // ─── Update ─────────────────────────────────────────────────────\n\n const updateNotification = useEvent(\n (id: Key, options: Partial<OverlayNotificationOptions>) => {\n setNotifications((prev) =>\n prev.map((n) =>\n matchesNotificationId(n, id)\n ? { ...n, ...options, updatedAt: Date.now() }\n : n,\n ),\n );\n },\n );\n\n // ─── Owner Cleanup ──────────────────────────────────────────────\n\n const removeByOwner = useEvent((ownerId: string) => {\n // Clear timers outside the updater (StrictMode-safe).\n const owned = notificationsRef.current.filter(\n (n) => n.ownerId === ownerId && !n.isExiting,\n );\n\n for (const n of owned) {\n timersRef.current?.clearNotificationTimer(n.internalId);\n }\n\n setNotifications((prev) =>\n prev.map((n) => {\n if (n.ownerId === ownerId && !n.isExiting) {\n return { ...n, isExiting: true };\n }\n return n;\n }),\n );\n });\n\n return {\n notifications,\n notificationsRef,\n addNotification,\n removeNotification,\n restoreNotification,\n updateNotification,\n finalizeNotificationRemoval,\n removeByOwner,\n };\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.182.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.183.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { useWarn } from "../../../_internal/hooks/use-warn.js";
4
4
  import { useNotificationContext } from "./NotificationContext.js";
@@ -87,15 +87,15 @@ function useNotifications() {
87
87
  }
88
88
  };
89
89
  });
90
- const notify = useEvent((options) => {
90
+ const notify = useEvent((options_0) => {
91
91
  if (!isMountedRef.current) return {
92
- id: options.id ?? "",
92
+ id: options_0.id ?? "",
93
93
  dismiss: () => {}
94
94
  };
95
- lastOptionsRef.current = options;
96
- if (isStoredMode(options)) return createStoredHandle(options);
95
+ lastOptionsRef.current = options_0;
96
+ if (isStoredMode(options_0)) return createStoredHandle(options_0);
97
97
  const notificationId = addNotification({
98
- ...options,
98
+ ...options_0,
99
99
  mode: "overlay"
100
100
  }, ownerIdRef.current);
101
101
  return {
@@ -105,20 +105,20 @@ function useNotifications() {
105
105
  }
106
106
  };
107
107
  });
108
- const record = useEvent((options) => {
108
+ const record = useEvent((options_1) => {
109
109
  if (!isMountedRef.current) return {
110
- id: options.id ?? "",
110
+ id: options_1.id ?? "",
111
111
  dismiss: () => {}
112
112
  };
113
113
  lastOptionsRef.current = {
114
- ...options,
114
+ ...options_1,
115
115
  mode: "stored"
116
116
  };
117
- return createStoredHandle(options);
117
+ return createStoredHandle(options_1);
118
118
  });
119
- const dismiss = useEvent((id) => {
119
+ const dismiss = useEvent((id_0) => {
120
120
  if (!isMountedRef.current) return;
121
- removeNotification(id, "api");
121
+ removeNotification(id_0, "api");
122
122
  });
123
123
  useEffect(() => {
124
124
  isMountedRef.current = true;
@@ -1 +1 @@
1
- {"version":3,"file":"use-notifications.js","names":[],"sources":["../../../../src/components/overlays/Notifications/use-notifications.ts"],"sourcesContent":["import { Key, useEffect, useRef } from 'react';\n\nimport { useEvent } from '../../../_internal';\nimport { useWarn } from '../../../_internal/hooks/use-warn';\n\nimport { useNotificationContext } from './NotificationContext';\n\nimport type {\n NotificationHandle,\n NotificationOptions,\n NotificationsApi,\n OverlayNotificationOptions,\n PersistentNotificationItem,\n StoredNotificationOptions,\n} from './types';\n\nlet ownerIdCounter = 0;\n\nfunction generateOwnerId(): string {\n ownerIdCounter += 1;\n return `notif-owner-${ownerIdCounter}-${Date.now()}`;\n}\n\nfunction isStoredMode(\n options: NotificationOptions,\n): options is StoredNotificationOptions {\n return options.mode === 'stored';\n}\n\n/**\n * Hook to display and manage notifications.\n *\n * Each hook instance acts as an owner scope:\n * - `notify()` created from this instance attaches ownership metadata.\n * - On unmount, all attached visible overlay notifications are dismissed.\n * - On unmount, all attached persistent records are also removed.\n * - `notify()`/`dismiss()` calls from stale closures after unmount are no-ops.\n *\n * @example\n * ```tsx\n * const { notify, record, dismiss } = useNotifications();\n *\n * notify({\n * id: 'deploy:123',\n * theme: 'success',\n * title: 'Deployment completed',\n * description: 'Version 1.4.2 is live.',\n * actions: (\n * <>\n * <Notification.Action onPress={() => openLogs()}>View logs</Notification.Action>\n * <Notification.Action onPress={() => openDeployment()}>Open</Notification.Action>\n * </>\n * ),\n * });\n *\n * // Store directly to persistent list (no overlay)\n * record({\n * id: 'server:alert-1',\n * theme: 'warning',\n * title: 'Server alert',\n * });\n * ```\n */\nexport function useNotifications(): NotificationsApi {\n const {\n addNotification,\n removeNotification,\n addPersistentItem,\n removePersistentItem,\n removeByOwner,\n removePersistentItemsByOwner,\n } = useNotificationContext();\n\n const ownerIdRef = useRef<string>(generateOwnerId());\n const isMountedRef = useRef(true);\n const cleanupTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Track current options for validation\n const lastOptionsRef = useRef<NotificationOptions | null>(null);\n\n // ─── Validation Warnings ──────────────────────────────────────────\n\n useWarn(\n lastOptionsRef.current &&\n 'persistent' in lastOptionsRef.current &&\n lastOptionsRef.current.persistent === true &&\n lastOptionsRef.current.id == null,\n {\n once: false,\n key: ['Notification', 'persistent-without-id'],\n args: [\n 'Notification: `persistent: true` requires an explicit `id` for reliable dedupe/upsert.',\n ],\n },\n );\n\n useWarn(\n lastOptionsRef.current?.mode === 'stored' &&\n lastOptionsRef.current.id == null,\n {\n once: false,\n key: ['Notification', 'stored-without-id'],\n args: [\n 'Notification: `mode: \"stored\"` should have an explicit `id` for reliable upsert.',\n ],\n },\n );\n\n // ─── Helpers ─────────────────────────────────────────────────────\n\n const storedIdCounter = useRef(0);\n\n const createStoredHandle = useEvent(\n (options: Omit<StoredNotificationOptions, 'mode'>): NotificationHandle => {\n storedIdCounter.current += 1;\n const now = Date.now();\n const id = options.id ?? `stored-${storedIdCounter.current}-${now}`;\n const createdAt = options.createdAt ?? now;\n\n const persistentItem: PersistentNotificationItem = {\n id,\n theme: options.theme,\n title: options.title,\n description: options.description,\n icon: options.icon,\n actions: options.actions ?? undefined,\n createdAt,\n updatedAt: createdAt,\n ownerId: ownerIdRef.current,\n };\n\n addPersistentItem(persistentItem);\n\n return {\n id,\n dismiss: () => {\n removePersistentItem(id);\n },\n };\n },\n );\n\n // ─── API ──────────────────────────────────────────────────────────\n\n const notify = useEvent(\n (options: NotificationOptions): NotificationHandle => {\n // Stale closure guard\n if (!isMountedRef.current) {\n return {\n id: options.id ?? '',\n dismiss: () => {},\n };\n }\n\n lastOptionsRef.current = options;\n\n if (isStoredMode(options)) {\n return createStoredHandle(options);\n }\n\n // Overlay mode\n const overlayOptions: OverlayNotificationOptions = {\n ...options,\n mode: 'overlay',\n };\n\n const notificationId = addNotification(\n overlayOptions,\n ownerIdRef.current,\n );\n\n return {\n id: notificationId,\n dismiss: () => {\n if (isMountedRef.current) {\n removeNotification(notificationId, 'api');\n }\n },\n };\n },\n );\n\n // `record()` is intentionally kept as a separate method from `notify()` to make\n // the API more explicit: `record()` always stores directly to the persistent list\n // (no overlay), while `notify()` defaults to overlay mode. Having both avoids\n // the caller needing to remember to pass `mode: 'stored'` every time.\n const record = useEvent(\n (options: Omit<StoredNotificationOptions, 'mode'>): NotificationHandle => {\n // Stale closure guard\n if (!isMountedRef.current) {\n return {\n id: options.id ?? '',\n dismiss: () => {},\n };\n }\n\n lastOptionsRef.current = { ...options, mode: 'stored' };\n\n return createStoredHandle(options);\n },\n );\n\n const dismiss = useEvent((id: Key) => {\n if (!isMountedRef.current) return;\n\n removeNotification(id, 'api');\n });\n\n // ─── Ownership Cleanup ────────────────────────────────────────────\n\n useEffect(() => {\n isMountedRef.current = true;\n\n // Cancel any pending cleanup (Strict Mode re-mount)\n if (cleanupTimerRef.current) {\n clearTimeout(cleanupTimerRef.current);\n cleanupTimerRef.current = null;\n }\n\n return () => {\n isMountedRef.current = false;\n\n // Deferred cleanup — cancelled if owner re-mounts within same tick\n // (Strict Mode / Suspense safe)\n cleanupTimerRef.current = setTimeout(() => {\n removeByOwner(ownerIdRef.current);\n removePersistentItemsByOwner(ownerIdRef.current);\n }, 0);\n };\n }, [removeByOwner, removePersistentItemsByOwner]);\n\n return { notify, record, dismiss };\n}\n"],"mappings":";;;;;;;AAgBA,IAAI,iBAAiB;AAErB,SAAS,kBAA0B;AACjC,mBAAkB;AAClB,QAAO,eAAe,eAAe,GAAG,KAAK,KAAK;;AAGpD,SAAS,aACP,SACsC;AACtC,QAAO,QAAQ,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqC1B,SAAgB,mBAAqC;CACnD,MAAM,EACJ,iBACA,oBACA,mBACA,sBACA,eACA,iCACE,wBAAwB;CAE5B,MAAM,aAAa,OAAe,iBAAiB,CAAC;CACpD,MAAM,eAAe,OAAO,KAAK;CACjC,MAAM,kBAAkB,OAA6C,KAAK;CAG1E,MAAM,iBAAiB,OAAmC,KAAK;AAI/D,SACE,eAAe,WACb,gBAAgB,eAAe,WAC/B,eAAe,QAAQ,eAAe,QACtC,eAAe,QAAQ,MAAM,MAC/B;EACE,MAAM;EACN,KAAK,CAAC,gBAAgB,wBAAwB;EAC9C,MAAM,CACJ,yFACD;EACF,CACF;AAED,SACE,eAAe,SAAS,SAAS,YAC/B,eAAe,QAAQ,MAAM,MAC/B;EACE,MAAM;EACN,KAAK,CAAC,gBAAgB,oBAAoB;EAC1C,MAAM,CACJ,qFACD;EACF,CACF;CAID,MAAM,kBAAkB,OAAO,EAAE;CAEjC,MAAM,qBAAqB,UACxB,YAAyE;AACxE,kBAAgB,WAAW;EAC3B,MAAM,MAAM,KAAK,KAAK;EACtB,MAAM,KAAK,QAAQ,MAAM,UAAU,gBAAgB,QAAQ,GAAG;EAC9D,MAAM,YAAY,QAAQ,aAAa;AAcvC,oBAZmD;GACjD;GACA,OAAO,QAAQ;GACf,OAAO,QAAQ;GACf,aAAa,QAAQ;GACrB,MAAM,QAAQ;GACd,SAAS,QAAQ,WAAW;GAC5B;GACA,WAAW;GACX,SAAS,WAAW;GACrB,CAEgC;AAEjC,SAAO;GACL;GACA,eAAe;AACb,yBAAqB,GAAG;;GAE3B;GAEJ;CAID,MAAM,SAAS,UACZ,YAAqD;AAEpD,MAAI,CAAC,aAAa,QAChB,QAAO;GACL,IAAI,QAAQ,MAAM;GAClB,eAAe;GAChB;AAGH,iBAAe,UAAU;AAEzB,MAAI,aAAa,QAAQ,CACvB,QAAO,mBAAmB,QAAQ;EASpC,MAAM,iBAAiB,gBAL4B;GACjD,GAAG;GACH,MAAM;GACP,EAIC,WAAW,QACZ;AAED,SAAO;GACL,IAAI;GACJ,eAAe;AACb,QAAI,aAAa,QACf,oBAAmB,gBAAgB,MAAM;;GAG9C;GAEJ;CAMD,MAAM,SAAS,UACZ,YAAyE;AAExE,MAAI,CAAC,aAAa,QAChB,QAAO;GACL,IAAI,QAAQ,MAAM;GAClB,eAAe;GAChB;AAGH,iBAAe,UAAU;GAAE,GAAG;GAAS,MAAM;GAAU;AAEvD,SAAO,mBAAmB,QAAQ;GAErC;CAED,MAAM,UAAU,UAAU,OAAY;AACpC,MAAI,CAAC,aAAa,QAAS;AAE3B,qBAAmB,IAAI,MAAM;GAC7B;AAIF,iBAAgB;AACd,eAAa,UAAU;AAGvB,MAAI,gBAAgB,SAAS;AAC3B,gBAAa,gBAAgB,QAAQ;AACrC,mBAAgB,UAAU;;AAG5B,eAAa;AACX,gBAAa,UAAU;AAIvB,mBAAgB,UAAU,iBAAiB;AACzC,kBAAc,WAAW,QAAQ;AACjC,iCAA6B,WAAW,QAAQ;MAC/C,EAAE;;IAEN,CAAC,eAAe,6BAA6B,CAAC;AAEjD,QAAO;EAAE;EAAQ;EAAQ;EAAS"}
1
+ {"version":3,"file":"use-notifications.js","names":["Key","useEffect","useRef","useEvent","useWarn","useNotificationContext","NotificationHandle","NotificationOptions","NotificationsApi","OverlayNotificationOptions","PersistentNotificationItem","StoredNotificationOptions","ownerIdCounter","generateOwnerId","Date","now","isStoredMode","options","mode","useNotifications","addNotification","removeNotification","addPersistentItem","removePersistentItem","removeByOwner","removePersistentItemsByOwner","ownerIdRef","isMountedRef","cleanupTimerRef","ReturnType","setTimeout","lastOptionsRef","current","persistent","id","once","key","args","storedIdCounter","createStoredHandle","Omit","createdAt","persistentItem","theme","title","description","icon","actions","undefined","updatedAt","ownerId","dismiss","notify","overlayOptions","notificationId","record","clearTimeout"],"sources":["../../../../src/components/overlays/Notifications/use-notifications.ts"],"sourcesContent":["import { Key, useEffect, useRef } from 'react';\n\nimport { useEvent } from '../../../_internal';\nimport { useWarn } from '../../../_internal/hooks/use-warn';\n\nimport { useNotificationContext } from './NotificationContext';\n\nimport type {\n NotificationHandle,\n NotificationOptions,\n NotificationsApi,\n OverlayNotificationOptions,\n PersistentNotificationItem,\n StoredNotificationOptions,\n} from './types';\n\nlet ownerIdCounter = 0;\n\nfunction generateOwnerId(): string {\n ownerIdCounter += 1;\n return `notif-owner-${ownerIdCounter}-${Date.now()}`;\n}\n\nfunction isStoredMode(\n options: NotificationOptions,\n): options is StoredNotificationOptions {\n return options.mode === 'stored';\n}\n\n/**\n * Hook to display and manage notifications.\n *\n * Each hook instance acts as an owner scope:\n * - `notify()` created from this instance attaches ownership metadata.\n * - On unmount, all attached visible overlay notifications are dismissed.\n * - On unmount, all attached persistent records are also removed.\n * - `notify()`/`dismiss()` calls from stale closures after unmount are no-ops.\n *\n * @example\n * ```tsx\n * const { notify, record, dismiss } = useNotifications();\n *\n * notify({\n * id: 'deploy:123',\n * theme: 'success',\n * title: 'Deployment completed',\n * description: 'Version 1.4.2 is live.',\n * actions: (\n * <>\n * <Notification.Action onPress={() => openLogs()}>View logs</Notification.Action>\n * <Notification.Action onPress={() => openDeployment()}>Open</Notification.Action>\n * </>\n * ),\n * });\n *\n * // Store directly to persistent list (no overlay)\n * record({\n * id: 'server:alert-1',\n * theme: 'warning',\n * title: 'Server alert',\n * });\n * ```\n */\nexport function useNotifications(): NotificationsApi {\n const {\n addNotification,\n removeNotification,\n addPersistentItem,\n removePersistentItem,\n removeByOwner,\n removePersistentItemsByOwner,\n } = useNotificationContext();\n\n const ownerIdRef = useRef<string>(generateOwnerId());\n const isMountedRef = useRef(true);\n const cleanupTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Track current options for validation\n const lastOptionsRef = useRef<NotificationOptions | null>(null);\n\n // ─── Validation Warnings ──────────────────────────────────────────\n\n useWarn(\n lastOptionsRef.current &&\n 'persistent' in lastOptionsRef.current &&\n lastOptionsRef.current.persistent === true &&\n lastOptionsRef.current.id == null,\n {\n once: false,\n key: ['Notification', 'persistent-without-id'],\n args: [\n 'Notification: `persistent: true` requires an explicit `id` for reliable dedupe/upsert.',\n ],\n },\n );\n\n useWarn(\n lastOptionsRef.current?.mode === 'stored' &&\n lastOptionsRef.current.id == null,\n {\n once: false,\n key: ['Notification', 'stored-without-id'],\n args: [\n 'Notification: `mode: \"stored\"` should have an explicit `id` for reliable upsert.',\n ],\n },\n );\n\n // ─── Helpers ─────────────────────────────────────────────────────\n\n const storedIdCounter = useRef(0);\n\n const createStoredHandle = useEvent(\n (options: Omit<StoredNotificationOptions, 'mode'>): NotificationHandle => {\n storedIdCounter.current += 1;\n const now = Date.now();\n const id = options.id ?? `stored-${storedIdCounter.current}-${now}`;\n const createdAt = options.createdAt ?? now;\n\n const persistentItem: PersistentNotificationItem = {\n id,\n theme: options.theme,\n title: options.title,\n description: options.description,\n icon: options.icon,\n actions: options.actions ?? undefined,\n createdAt,\n updatedAt: createdAt,\n ownerId: ownerIdRef.current,\n };\n\n addPersistentItem(persistentItem);\n\n return {\n id,\n dismiss: () => {\n removePersistentItem(id);\n },\n };\n },\n );\n\n // ─── API ──────────────────────────────────────────────────────────\n\n const notify = useEvent(\n (options: NotificationOptions): NotificationHandle => {\n // Stale closure guard\n if (!isMountedRef.current) {\n return {\n id: options.id ?? '',\n dismiss: () => {},\n };\n }\n\n lastOptionsRef.current = options;\n\n if (isStoredMode(options)) {\n return createStoredHandle(options);\n }\n\n // Overlay mode\n const overlayOptions: OverlayNotificationOptions = {\n ...options,\n mode: 'overlay',\n };\n\n const notificationId = addNotification(\n overlayOptions,\n ownerIdRef.current,\n );\n\n return {\n id: notificationId,\n dismiss: () => {\n if (isMountedRef.current) {\n removeNotification(notificationId, 'api');\n }\n },\n };\n },\n );\n\n // `record()` is intentionally kept as a separate method from `notify()` to make\n // the API more explicit: `record()` always stores directly to the persistent list\n // (no overlay), while `notify()` defaults to overlay mode. Having both avoids\n // the caller needing to remember to pass `mode: 'stored'` every time.\n const record = useEvent(\n (options: Omit<StoredNotificationOptions, 'mode'>): NotificationHandle => {\n // Stale closure guard\n if (!isMountedRef.current) {\n return {\n id: options.id ?? '',\n dismiss: () => {},\n };\n }\n\n lastOptionsRef.current = { ...options, mode: 'stored' };\n\n return createStoredHandle(options);\n },\n );\n\n const dismiss = useEvent((id: Key) => {\n if (!isMountedRef.current) return;\n\n removeNotification(id, 'api');\n });\n\n // ─── Ownership Cleanup ────────────────────────────────────────────\n\n useEffect(() => {\n isMountedRef.current = true;\n\n // Cancel any pending cleanup (Strict Mode re-mount)\n if (cleanupTimerRef.current) {\n clearTimeout(cleanupTimerRef.current);\n cleanupTimerRef.current = null;\n }\n\n return () => {\n isMountedRef.current = false;\n\n // Deferred cleanup — cancelled if owner re-mounts within same tick\n // (Strict Mode / Suspense safe)\n cleanupTimerRef.current = setTimeout(() => {\n removeByOwner(ownerIdRef.current);\n removePersistentItemsByOwner(ownerIdRef.current);\n }, 0);\n };\n }, [removeByOwner, removePersistentItemsByOwner]);\n\n return { notify, record, dismiss };\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.182.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.183.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { useEffect, useRef } from "react";
4
4
 
@@ -83,18 +83,18 @@ function useOverlayTimers(deps) {
83
83
  const toastManager = useRef(null);
84
84
  const notifManager = useRef(null);
85
85
  if (!toastManager.current) toastManager.current = createTimerManager(toastTimersMap, pausedMap, isPausedRef, (id) => removeToast(id), (internalId) => toastsRef.current?.find((t) => t.internalId === internalId));
86
- if (!notifManager.current) notifManager.current = createTimerManager(notificationTimersMap, pausedMap, isPausedRef, (id) => removeNotification(id, "timeout"), (internalId) => notificationsRef.current?.find((n) => n.internalId === internalId));
87
- const startToastTimer = useEvent((internalId, id, duration) => {
88
- toastManager.current.start(internalId, id, duration);
86
+ if (!notifManager.current) notifManager.current = createTimerManager(notificationTimersMap, pausedMap, isPausedRef, (id_0) => removeNotification(id_0, "timeout"), (internalId_0) => notificationsRef.current?.find((n) => n.internalId === internalId_0));
87
+ const startToastTimer = useEvent((internalId_1, id_1, duration) => {
88
+ toastManager.current.start(internalId_1, id_1, duration);
89
89
  });
90
- const clearToastTimer = useEvent((internalId) => {
91
- toastManager.current.clear(internalId);
90
+ const clearToastTimer = useEvent((internalId_2) => {
91
+ toastManager.current.clear(internalId_2);
92
92
  });
93
- const startNotificationTimer = useEvent((internalId, id, duration) => {
94
- notifManager.current.start(internalId, id, duration);
93
+ const startNotificationTimer = useEvent((internalId_3, id_2, duration_0) => {
94
+ notifManager.current.start(internalId_3, id_2, duration_0);
95
95
  });
96
- const clearNotificationTimer = useEvent((internalId) => {
97
- notifManager.current.clear(internalId);
96
+ const clearNotificationTimer = useEvent((internalId_4) => {
97
+ notifManager.current.clear(internalId_4);
98
98
  });
99
99
  const handlePauseChange = useEvent((paused) => {
100
100
  if (paused === isPausedRef.current) return;
@@ -1 +1 @@
1
- {"version":3,"file":"use-overlay-timers.js","names":[],"sources":["../../../../src/components/overlays/Notifications/use-overlay-timers.ts"],"sourcesContent":["import { Key, useEffect, useRef } from 'react';\n\nimport { useEvent } from '../../../_internal';\n\nimport type { InternalToast } from '../Toast/types';\nimport type { DismissReason, InternalNotification } from './types';\n\n// ─── Types ───────────────────────────────────────────────────────────\n\nexport interface OverlayTimers {\n /** Start a toast auto-dismiss timer */\n startToastTimer: (internalId: string, id: Key, duration: number) => void;\n /** Clear a toast timer */\n clearToastTimer: (internalId: string) => void;\n /** Start a notification auto-dismiss timer */\n startNotificationTimer: (\n internalId: string,\n id: Key,\n duration: number,\n ) => void;\n /** Clear a notification timer */\n clearNotificationTimer: (internalId: string) => void;\n /** Handle pause/resume of all timers (e.g. on hover/focus) */\n handlePauseChange: (paused: boolean) => void;\n}\n\nexport interface OverlayTimersDeps {\n /** Ref to current toasts (for resume lookup) */\n toastsRef: ReturnType<typeof useRef<InternalToast[]>>;\n /** Ref to current notifications (for resume lookup) */\n notificationsRef: ReturnType<typeof useRef<InternalNotification[]>>;\n /** Remove a toast by id */\n removeToast: (id: Key) => void;\n /** Remove a notification by id with reason (also invokes onDismiss callback) */\n removeNotification: (id: Key, reason: DismissReason) => void;\n}\n\n// ─── Timer Manager Factory ───────────────────────────────────────────\n\ninterface TimerManager {\n start: (internalId: string, id: Key, duration: number) => void;\n clear: (internalId: string) => void;\n pauseAll: () => void;\n resumeAll: () => void;\n clearAll: () => void;\n}\n\n/**\n * Creates a start/clear/pause/resume pair for a single timer category.\n * Eliminates duplication between toast and notification timer logic.\n */\nfunction createTimerManager(\n timersMap: Map<string, ReturnType<typeof setTimeout>>,\n pausedMap: Map<string, { remaining: number; startedAt: number }>,\n isPausedRef: ReturnType<typeof useRef<boolean>>,\n onTimeout: (id: Key) => void,\n findItem: (\n internalId: string,\n ) => { id?: Key; internalId: string; isExiting?: boolean } | undefined,\n): TimerManager {\n const clear = (internalId: string) => {\n const timer = timersMap.get(internalId);\n\n if (timer) {\n clearTimeout(timer);\n timersMap.delete(internalId);\n }\n\n pausedMap.delete(internalId);\n };\n\n const start = (internalId: string, id: Key, duration: number) => {\n clear(internalId);\n\n pausedMap.set(internalId, {\n remaining: duration,\n startedAt: Date.now(),\n });\n\n if (isPausedRef.current) {\n return;\n }\n\n const timer = setTimeout(() => {\n onTimeout(id);\n }, duration);\n\n timersMap.set(internalId, timer);\n };\n\n const pauseAll = () => {\n timersMap.forEach((timer, internalId) => {\n clearTimeout(timer);\n timersMap.delete(internalId);\n\n const info = pausedMap.get(internalId);\n\n if (info) {\n const elapsed = Date.now() - info.startedAt;\n pausedMap.set(internalId, {\n remaining: Math.max(0, info.remaining - elapsed),\n startedAt: Date.now(),\n });\n }\n });\n };\n\n const resumeAll = () => {\n pausedMap.forEach((info, internalId) => {\n const item = findItem(internalId);\n\n if (info.remaining <= 0) {\n pausedMap.delete(internalId);\n\n if (item && !item.isExiting) {\n onTimeout(item.id ?? item.internalId);\n }\n\n return;\n }\n\n if (item && !item.isExiting) {\n const timer = setTimeout(() => {\n onTimeout(item.id ?? item.internalId);\n }, info.remaining);\n\n timersMap.set(internalId, timer);\n pausedMap.set(internalId, {\n remaining: info.remaining,\n startedAt: Date.now(),\n });\n }\n });\n };\n\n const clearAll = () => {\n timersMap.forEach((timer) => clearTimeout(timer));\n timersMap.clear();\n };\n\n return { start, clear, pauseAll, resumeAll, clearAll };\n}\n\n// ─── Hook ────────────────────────────────────────────────────────────\n\nexport function useOverlayTimers(deps: OverlayTimersDeps): OverlayTimers {\n const { toastsRef, notificationsRef, removeToast, removeNotification } = deps;\n\n const toastTimersMap = useRef(\n new Map<string, ReturnType<typeof setTimeout>>(),\n ).current;\n const notificationTimersMap = useRef(\n new Map<string, ReturnType<typeof setTimeout>>(),\n ).current;\n const isPausedRef = useRef(false);\n\n // Shared paused-timers map. Toast and notification internalIds use distinct prefixes\n // ('toast-' and 'notif-') so they coexist safely in a single map.\n const pausedMap = useRef(\n new Map<string, { remaining: number; startedAt: number }>(),\n ).current;\n\n const toastManager = useRef<TimerManager | null>(null);\n const notifManager = useRef<TimerManager | null>(null);\n\n // Lazily create managers — deps are stable (useEvent / refs), so this runs once.\n if (!toastManager.current) {\n toastManager.current = createTimerManager(\n toastTimersMap,\n pausedMap,\n isPausedRef,\n (id) => removeToast(id),\n (internalId) =>\n toastsRef.current?.find((t) => t.internalId === internalId),\n );\n }\n\n if (!notifManager.current) {\n notifManager.current = createTimerManager(\n notificationTimersMap,\n pausedMap,\n isPausedRef,\n (id) => removeNotification(id, 'timeout'),\n (internalId) =>\n notificationsRef.current?.find((n) => n.internalId === internalId),\n );\n }\n\n // ─── Stable callbacks ──────────────────────────────────────────────\n\n const startToastTimer = useEvent(\n (internalId: string, id: Key, duration: number) => {\n toastManager.current!.start(internalId, id, duration);\n },\n );\n\n const clearToastTimer = useEvent((internalId: string) => {\n toastManager.current!.clear(internalId);\n });\n\n const startNotificationTimer = useEvent(\n (internalId: string, id: Key, duration: number) => {\n notifManager.current!.start(internalId, id, duration);\n },\n );\n\n const clearNotificationTimer = useEvent((internalId: string) => {\n notifManager.current!.clear(internalId);\n });\n\n // ─── Pause / Resume ─────────────────────────────────────────────\n\n const handlePauseChange = useEvent((paused: boolean) => {\n if (paused === isPausedRef.current) return;\n\n isPausedRef.current = paused;\n\n if (paused) {\n toastManager.current!.pauseAll();\n notifManager.current!.pauseAll();\n } else {\n toastManager.current!.resumeAll();\n notifManager.current!.resumeAll();\n }\n });\n\n // ─── Cleanup on unmount ─────────────────────────────────────────\n\n useEffect(() => {\n return () => {\n toastManager.current!.clearAll();\n notifManager.current!.clearAll();\n pausedMap.clear();\n };\n }, []);\n\n return {\n startToastTimer,\n clearToastTimer,\n startNotificationTimer,\n clearNotificationTimer,\n handlePauseChange,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-overlay-timers.js","names":["Key","useEffect","useRef","useEvent","InternalToast","DismissReason","InternalNotification","OverlayTimers","startToastTimer","internalId","id","duration","clearToastTimer","startNotificationTimer","clearNotificationTimer","handlePauseChange","paused","OverlayTimersDeps","toastsRef","ReturnType","notificationsRef","removeToast","removeNotification","reason","TimerManager","start","clear","pauseAll","resumeAll","clearAll","createTimerManager","timersMap","Map","setTimeout","pausedMap","remaining","startedAt","isPausedRef","onTimeout","findItem","isExiting","timer","get","clearTimeout","delete","set","Date","now","current","forEach","info","elapsed","Math","max","item","useOverlayTimers","deps","toastTimersMap","notificationTimersMap","toastManager","notifManager","find","t","n"],"sources":["../../../../src/components/overlays/Notifications/use-overlay-timers.ts"],"sourcesContent":["import { Key, useEffect, useRef } from 'react';\n\nimport { useEvent } from '../../../_internal';\n\nimport type { InternalToast } from '../Toast/types';\nimport type { DismissReason, InternalNotification } from './types';\n\n// ─── Types ───────────────────────────────────────────────────────────\n\nexport interface OverlayTimers {\n /** Start a toast auto-dismiss timer */\n startToastTimer: (internalId: string, id: Key, duration: number) => void;\n /** Clear a toast timer */\n clearToastTimer: (internalId: string) => void;\n /** Start a notification auto-dismiss timer */\n startNotificationTimer: (\n internalId: string,\n id: Key,\n duration: number,\n ) => void;\n /** Clear a notification timer */\n clearNotificationTimer: (internalId: string) => void;\n /** Handle pause/resume of all timers (e.g. on hover/focus) */\n handlePauseChange: (paused: boolean) => void;\n}\n\nexport interface OverlayTimersDeps {\n /** Ref to current toasts (for resume lookup) */\n toastsRef: ReturnType<typeof useRef<InternalToast[]>>;\n /** Ref to current notifications (for resume lookup) */\n notificationsRef: ReturnType<typeof useRef<InternalNotification[]>>;\n /** Remove a toast by id */\n removeToast: (id: Key) => void;\n /** Remove a notification by id with reason (also invokes onDismiss callback) */\n removeNotification: (id: Key, reason: DismissReason) => void;\n}\n\n// ─── Timer Manager Factory ───────────────────────────────────────────\n\ninterface TimerManager {\n start: (internalId: string, id: Key, duration: number) => void;\n clear: (internalId: string) => void;\n pauseAll: () => void;\n resumeAll: () => void;\n clearAll: () => void;\n}\n\n/**\n * Creates a start/clear/pause/resume pair for a single timer category.\n * Eliminates duplication between toast and notification timer logic.\n */\nfunction createTimerManager(\n timersMap: Map<string, ReturnType<typeof setTimeout>>,\n pausedMap: Map<string, { remaining: number; startedAt: number }>,\n isPausedRef: ReturnType<typeof useRef<boolean>>,\n onTimeout: (id: Key) => void,\n findItem: (\n internalId: string,\n ) => { id?: Key; internalId: string; isExiting?: boolean } | undefined,\n): TimerManager {\n const clear = (internalId: string) => {\n const timer = timersMap.get(internalId);\n\n if (timer) {\n clearTimeout(timer);\n timersMap.delete(internalId);\n }\n\n pausedMap.delete(internalId);\n };\n\n const start = (internalId: string, id: Key, duration: number) => {\n clear(internalId);\n\n pausedMap.set(internalId, {\n remaining: duration,\n startedAt: Date.now(),\n });\n\n if (isPausedRef.current) {\n return;\n }\n\n const timer = setTimeout(() => {\n onTimeout(id);\n }, duration);\n\n timersMap.set(internalId, timer);\n };\n\n const pauseAll = () => {\n timersMap.forEach((timer, internalId) => {\n clearTimeout(timer);\n timersMap.delete(internalId);\n\n const info = pausedMap.get(internalId);\n\n if (info) {\n const elapsed = Date.now() - info.startedAt;\n pausedMap.set(internalId, {\n remaining: Math.max(0, info.remaining - elapsed),\n startedAt: Date.now(),\n });\n }\n });\n };\n\n const resumeAll = () => {\n pausedMap.forEach((info, internalId) => {\n const item = findItem(internalId);\n\n if (info.remaining <= 0) {\n pausedMap.delete(internalId);\n\n if (item && !item.isExiting) {\n onTimeout(item.id ?? item.internalId);\n }\n\n return;\n }\n\n if (item && !item.isExiting) {\n const timer = setTimeout(() => {\n onTimeout(item.id ?? item.internalId);\n }, info.remaining);\n\n timersMap.set(internalId, timer);\n pausedMap.set(internalId, {\n remaining: info.remaining,\n startedAt: Date.now(),\n });\n }\n });\n };\n\n const clearAll = () => {\n timersMap.forEach((timer) => clearTimeout(timer));\n timersMap.clear();\n };\n\n return { start, clear, pauseAll, resumeAll, clearAll };\n}\n\n// ─── Hook ────────────────────────────────────────────────────────────\n\nexport function useOverlayTimers(deps: OverlayTimersDeps): OverlayTimers {\n const { toastsRef, notificationsRef, removeToast, removeNotification } = deps;\n\n const toastTimersMap = useRef(\n new Map<string, ReturnType<typeof setTimeout>>(),\n ).current;\n const notificationTimersMap = useRef(\n new Map<string, ReturnType<typeof setTimeout>>(),\n ).current;\n const isPausedRef = useRef(false);\n\n // Shared paused-timers map. Toast and notification internalIds use distinct prefixes\n // ('toast-' and 'notif-') so they coexist safely in a single map.\n const pausedMap = useRef(\n new Map<string, { remaining: number; startedAt: number }>(),\n ).current;\n\n const toastManager = useRef<TimerManager | null>(null);\n const notifManager = useRef<TimerManager | null>(null);\n\n // Lazily create managers — deps are stable (useEvent / refs), so this runs once.\n if (!toastManager.current) {\n toastManager.current = createTimerManager(\n toastTimersMap,\n pausedMap,\n isPausedRef,\n (id) => removeToast(id),\n (internalId) =>\n toastsRef.current?.find((t) => t.internalId === internalId),\n );\n }\n\n if (!notifManager.current) {\n notifManager.current = createTimerManager(\n notificationTimersMap,\n pausedMap,\n isPausedRef,\n (id) => removeNotification(id, 'timeout'),\n (internalId) =>\n notificationsRef.current?.find((n) => n.internalId === internalId),\n );\n }\n\n // ─── Stable callbacks ──────────────────────────────────────────────\n\n const startToastTimer = useEvent(\n (internalId: string, id: Key, duration: number) => {\n toastManager.current!.start(internalId, id, duration);\n },\n );\n\n const clearToastTimer = useEvent((internalId: string) => {\n toastManager.current!.clear(internalId);\n });\n\n const startNotificationTimer = useEvent(\n (internalId: string, id: Key, duration: number) => {\n notifManager.current!.start(internalId, id, duration);\n },\n );\n\n const clearNotificationTimer = useEvent((internalId: string) => {\n notifManager.current!.clear(internalId);\n });\n\n // ─── Pause / Resume ─────────────────────────────────────────────\n\n const handlePauseChange = useEvent((paused: boolean) => {\n if (paused === isPausedRef.current) return;\n\n isPausedRef.current = paused;\n\n if (paused) {\n toastManager.current!.pauseAll();\n notifManager.current!.pauseAll();\n } else {\n toastManager.current!.resumeAll();\n notifManager.current!.resumeAll();\n }\n });\n\n // ─── Cleanup on unmount ─────────────────────────────────────────\n\n useEffect(() => {\n return () => {\n toastManager.current!.clearAll();\n notifManager.current!.clearAll();\n pausedMap.clear();\n };\n }, []);\n\n return {\n startToastTimer,\n clearToastTimer,\n startNotificationTimer,\n clearNotificationTimer,\n handlePauseChange,\n };\n}\n"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.182.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.183.0 | Cube Dev Team */
2
2
  import { usePersistentNotificationsContext } from "./NotificationContext.js";
3
+ import { c } from "react-compiler-runtime";
3
4
  import { useMemo } from "react";
4
5
 
5
6
  //#region src/components/overlays/Notifications/use-persistent-notifications.ts
@@ -49,11 +50,29 @@ function usePersistentNotifications() {
49
50
  * ```
50
51
  */
51
52
  function useNotificationsCount() {
53
+ const $ = c(5);
52
54
  const { persistentItems } = usePersistentNotificationsContext();
53
- return useMemo(() => ({
54
- total: persistentItems.length,
55
- unread: persistentItems.filter((i) => !i.isRead).length
56
- }), [persistentItems]);
55
+ const t0 = persistentItems.length;
56
+ let t1;
57
+ if ($[0] !== persistentItems) {
58
+ t1 = persistentItems.filter(_temp);
59
+ $[0] = persistentItems;
60
+ $[1] = t1;
61
+ } else t1 = $[1];
62
+ let t2;
63
+ if ($[2] !== persistentItems.length || $[3] !== t1.length) {
64
+ t2 = {
65
+ total: t0,
66
+ unread: t1.length
67
+ };
68
+ $[2] = persistentItems.length;
69
+ $[3] = t1.length;
70
+ $[4] = t2;
71
+ } else t2 = $[4];
72
+ return t2;
73
+ }
74
+ function _temp(i) {
75
+ return !i.isRead;
57
76
  }
58
77
 
59
78
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"use-persistent-notifications.js","names":[],"sources":["../../../../src/components/overlays/Notifications/use-persistent-notifications.ts"],"sourcesContent":["import { Key, useMemo } from 'react';\n\nimport { usePersistentNotificationsContext } from './NotificationContext';\n\nimport type { PersistentNotificationItem } from './types';\n\n/**\n * Hook to access the persistent notifications list.\n *\n * Items are ordered newest first (by `createdAt`, descending).\n *\n * @example\n * ```tsx\n * const { items, count, remove, clear } = usePersistentNotifications();\n *\n * return (\n * <div>\n * <span>Notifications ({count})</span>\n * {items.map(item => (\n * <div key={item.id}>\n * {item.title}\n * <button onClick={() => remove(item.id)}>Remove</button>\n * </div>\n * ))}\n * <button onClick={clear}>Clear all</button>\n * </div>\n * );\n * ```\n */\nexport function usePersistentNotifications(): {\n items: PersistentNotificationItem[];\n count: number;\n remove: (id: Key) => void;\n clear: () => void;\n markAllAsRead: () => void;\n} {\n const {\n persistentItems,\n removePersistentItem,\n clearPersistentItems,\n markAllAsRead,\n } = usePersistentNotificationsContext();\n\n return useMemo(\n () => ({\n items: persistentItems,\n count: persistentItems.length,\n remove: removePersistentItem,\n clear: clearPersistentItems,\n markAllAsRead,\n }),\n [persistentItems],\n );\n}\n\n/**\n * Hook to get total and unread counts for persistent notifications.\n *\n * - `total` — number of items in the persistent list.\n * - `unread` — items that haven't been seen in `PersistentNotificationsList` yet.\n *\n * @example\n * ```tsx\n * const { total, unread } = useNotificationsCount();\n * return <Badge count={unread} />;\n * ```\n */\nexport function useNotificationsCount(): { total: number; unread: number } {\n const { persistentItems } = usePersistentNotificationsContext();\n\n return useMemo(\n () => ({\n total: persistentItems.length,\n unread: persistentItems.filter((i) => !i.isRead).length,\n }),\n [persistentItems],\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,SAAgB,6BAMd;CACA,MAAM,EACJ,iBACA,sBACA,sBACA,kBACE,mCAAmC;AAEvC,QAAO,eACE;EACL,OAAO;EACP,OAAO,gBAAgB;EACvB,QAAQ;EACR,OAAO;EACP;EACD,GACD,CAAC,gBAAgB,CAClB;;;;;;;;;;;;;;AAeH,SAAgB,wBAA2D;CACzE,MAAM,EAAE,oBAAoB,mCAAmC;AAE/D,QAAO,eACE;EACL,OAAO,gBAAgB;EACvB,QAAQ,gBAAgB,QAAQ,MAAM,CAAC,EAAE,OAAO,CAAC;EAClD,GACD,CAAC,gBAAgB,CAClB"}
1
+ {"version":3,"file":"use-persistent-notifications.js","names":["Key","useMemo","usePersistentNotificationsContext","PersistentNotificationItem","usePersistentNotifications","items","count","remove","id","clear","markAllAsRead","persistentItems","removePersistentItem","clearPersistentItems","length","useNotificationsCount","$","_c","t0","t1","filter","_temp","t2","total","unread","i","isRead"],"sources":["../../../../src/components/overlays/Notifications/use-persistent-notifications.ts"],"sourcesContent":["import { Key, useMemo } from 'react';\n\nimport { usePersistentNotificationsContext } from './NotificationContext';\n\nimport type { PersistentNotificationItem } from './types';\n\n/**\n * Hook to access the persistent notifications list.\n *\n * Items are ordered newest first (by `createdAt`, descending).\n *\n * @example\n * ```tsx\n * const { items, count, remove, clear } = usePersistentNotifications();\n *\n * return (\n * <div>\n * <span>Notifications ({count})</span>\n * {items.map(item => (\n * <div key={item.id}>\n * {item.title}\n * <button onClick={() => remove(item.id)}>Remove</button>\n * </div>\n * ))}\n * <button onClick={clear}>Clear all</button>\n * </div>\n * );\n * ```\n */\nexport function usePersistentNotifications(): {\n items: PersistentNotificationItem[];\n count: number;\n remove: (id: Key) => void;\n clear: () => void;\n markAllAsRead: () => void;\n} {\n const {\n persistentItems,\n removePersistentItem,\n clearPersistentItems,\n markAllAsRead,\n } = usePersistentNotificationsContext();\n\n return useMemo(\n () => ({\n items: persistentItems,\n count: persistentItems.length,\n remove: removePersistentItem,\n clear: clearPersistentItems,\n markAllAsRead,\n }),\n [persistentItems],\n );\n}\n\n/**\n * Hook to get total and unread counts for persistent notifications.\n *\n * - `total` — number of items in the persistent list.\n * - `unread` — items that haven't been seen in `PersistentNotificationsList` yet.\n *\n * @example\n * ```tsx\n * const { total, unread } = useNotificationsCount();\n * return <Badge count={unread} />;\n * ```\n */\nexport function useNotificationsCount(): { total: number; unread: number } {\n const { persistentItems } = usePersistentNotificationsContext();\n\n return useMemo(\n () => ({\n total: persistentItems.length,\n unread: persistentItems.filter((i) => !i.isRead).length,\n }),\n [persistentItems],\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,SAAgBI,6BAMd;CACA,MAAM,EACJO,iBACAC,sBACAC,sBACAH,kBACER,mCAAmC;AAEvC,QAAOD,eACE;EACLI,OAAOM;EACPL,OAAOK,gBAAgBG;EACvBP,QAAQK;EACRH,OAAOI;EACPH;EACD,GACD,CAACC,gBACH,CAAC;;;;;;;;;;;;;;AAeH,SAAOI,wBAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CACL,MAAA,EAAAN,oBAA4BT,mCAAmC;CAIpD,MAAAgB,KAAAP,gBAAeG;CAAO,IAAAK;AAAA,KAAAH,EAAA,OAAAL,iBAAA;AACrBQ,OAAAR,gBAAeS,OAAQC,MAAiB;AAAAL,IAAA,KAAAL;AAAAK,IAAA,KAAAG;OAAAA,MAAAH,EAAA;CAAA,IAAAM;AAAA,KAAAN,EAAA,OAAAL,gBAAAG,UAAAE,EAAA,OAAAG,GAAAL,QAAA;AAF3CQ,OAAA;GAAAC,OACEL;GAAsBM,QACrBL,GAAwCL;GACjD;AAAAE,IAAA,KAAAL,gBAAAG;AAAAE,IAAA,KAAAG,GAAAL;AAAAE,IAAA,KAAAM;OAAAA,MAAAN,EAAA;AAAA,QAHMM;;AAJJ,SAAAD,MAAAI,GAAA;AAAA,QAMqC,CAACA,EAACC"}